aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-03-15 08:12:25 +0000
committerTobias Burnus <burnus@net-b.de>2007-03-15 08:12:25 +0000
commite90b45fee71a78e072eabb296b36e1f1ff7d6a67 (patch)
treeae133bd8911b630f65909e29d1ba78aa9b8d3e6a
parent7eac6f81591ab7181f3877b847ca21e83aa146b2 (diff)
Merged Rev. 122210-122935 from the trunk.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/fortran-experiments@122946 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog40
-rw-r--r--MAINTAINERS9
-rw-r--r--Makefile.def15
-rw-r--r--Makefile.in2660
-rw-r--r--Makefile.tpl6
-rw-r--r--boehm-gc/ChangeLog16
-rw-r--r--boehm-gc/Makefile.am5
-rw-r--r--boehm-gc/Makefile.in5
-rw-r--r--boehm-gc/dbg_mlc.c41
-rw-r--r--boehm-gc/finalize.c63
-rw-r--r--boehm-gc/include/gc.h18
-rw-r--r--config/ChangeLog13
-rw-r--r--config/acx.m46
-rw-r--r--config/mt-spu2
-rwxr-xr-xconfigure180
-rw-r--r--configure.ac12
-rw-r--r--contrib/ChangeLog4
-rwxr-xr-xcontrib/test_installed26
-rw-r--r--fixincludes/ChangeLog16
-rw-r--r--fixincludes/Makefile.in4
-rw-r--r--fixincludes/mkheaders.in36
-rw-r--r--gcc/ChangeLog2149
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in287
-rw-r--r--gcc/ada/ChangeLog380
-rw-r--r--gcc/ada/Make-lang.in30
-rw-r--r--gcc/ada/cuintp.c22
-rw-r--r--gcc/ada/decl.c19
-rw-r--r--gcc/ada/gnat-style.texi13
-rw-r--r--gcc/ada/gnat_rm.texi6
-rw-r--r--gcc/ada/gnat_ugn.texi11
-rw-r--r--gcc/ada/trans.c30
-rw-r--r--gcc/ada/utils.c50
-rw-r--r--gcc/ada/utils2.c148
-rw-r--r--gcc/builtins.c303
-rw-r--r--gcc/builtins.def36
-rw-r--r--gcc/c-common.c458
-rw-r--r--gcc/c-common.h16
-rw-r--r--gcc/c-cppbuiltin.c8
-rw-r--r--gcc/c-decl.c174
-rw-r--r--gcc/c-format.c18
-rw-r--r--gcc/c-incpath.c25
-rw-r--r--gcc/c-opts.c15
-rw-r--r--gcc/c-parser.c5
-rw-r--r--gcc/c-pretty-print.c4
-rw-r--r--gcc/c-tree.h1
-rw-r--r--gcc/c-typeck.c75
-rw-r--r--gcc/c.opt10
-rw-r--r--gcc/calls.c13
-rw-r--r--gcc/cfglayout.c56
-rw-r--r--gcc/cfgloop.c3
-rw-r--r--gcc/cfgloop.h3
-rw-r--r--gcc/cgraphunit.c7
-rw-r--r--gcc/combine.c47
-rw-r--r--gcc/common.opt8
-rw-r--r--gcc/config.gcc12
-rw-r--r--gcc/config.in12
-rw-r--r--gcc/config/alpha/alpha.c36
-rw-r--r--gcc/config/alpha/osf.h4
-rw-r--r--gcc/config/arm/arm-protos.h3
-rw-r--r--gcc/config/arm/arm.c74
-rw-r--r--gcc/config/arm/arm.h12
-rw-r--r--gcc/config/arm/libunwind.S72
-rw-r--r--gcc/config/arm/unwind-arm.c98
-rw-r--r--gcc/config/avr/avr.c6
-rw-r--r--gcc/config/avr/avr.h14
-rw-r--r--gcc/config/avr/t-avr6
-rw-r--r--gcc/config/bfin/bfin.c415
-rw-r--r--gcc/config/bfin/bfin.h50
-rw-r--r--gcc/config/bfin/bfin.md579
-rw-r--r--gcc/config/bfin/lib1funcs.asm47
-rw-r--r--gcc/config/bfin/libgcc-bfin.ver285
-rw-r--r--gcc/config/bfin/linux.h49
-rw-r--r--gcc/config/bfin/t-bfin-elf3
-rw-r--r--gcc/config/bfin/t-bfin-linux34
-rw-r--r--gcc/config/bfin/t-bfin-uclinux43
-rw-r--r--gcc/config/bfin/uclinux.h22
-rw-r--r--gcc/config/darwin-c.c40
-rw-r--r--gcc/config/darwin-crt3.c5
-rw-r--r--gcc/config/darwin-protos.h1
-rw-r--r--gcc/config/darwin.c9
-rw-r--r--gcc/config/darwin.h23
-rw-r--r--gcc/config/darwin.opt4
-rw-r--r--gcc/config/dfp-bit.c2
-rw-r--r--gcc/config/frv/frv.h28
-rw-r--r--gcc/config/i386/att.h2
-rw-r--r--gcc/config/i386/darwin.h6
-rw-r--r--gcc/config/i386/driver-i386.c149
-rw-r--r--gcc/config/i386/i386-protos.h1
-rw-r--r--gcc/config/i386/i386.c789
-rw-r--r--gcc/config/i386/i386.h281
-rw-r--r--gcc/config/i386/i386.md396
-rw-r--r--gcc/config/i386/i386.opt8
-rw-r--r--gcc/config/i386/predicates.md17
-rw-r--r--gcc/config/i386/sol2.h2
-rw-r--r--gcc/config/i386/sse.md12
-rw-r--r--gcc/config/ia64/hpux.h11
-rw-r--r--gcc/config/ia64/ia64.c62
-rw-r--r--gcc/config/ia64/sysv4.h2
-rw-r--r--gcc/config/linux.h1
-rw-r--r--gcc/config/m32c/t-m32c2
-rw-r--r--gcc/config/m68k/m68k-protos.h16
-rw-r--r--gcc/config/m68k/m68k.c1871
-rw-r--r--gcc/config/m68k/m68k.h228
-rw-r--r--gcc/config/m68k/m68k.md230
-rw-r--r--gcc/config/m68k/predicates.md8
-rw-r--r--gcc/config/m68k/print-sysroot-suffix.sh82
-rw-r--r--gcc/config/m68k/t-uclinux7
-rw-r--r--gcc/config/m68k/uclinux.h6
-rw-r--r--gcc/config/mips/mips-dspr2.md626
-rw-r--r--gcc/config/mips/mips.c272
-rw-r--r--gcc/config/mips/mips.h4
-rw-r--r--gcc/config/mips/mips.md57
-rw-r--r--gcc/config/mips/mips.opt4
-rw-r--r--gcc/config/pa/pa.c15
-rw-r--r--gcc/config/pa/pa.md72
-rw-r--r--gcc/config/pa/predicates.md5
-rw-r--r--gcc/config/rs6000/altivec.md105
-rw-r--r--gcc/config/rs6000/darwin-fallback.c22
-rw-r--r--gcc/config/rs6000/darwin.h11
-rw-r--r--gcc/config/rs6000/dfp.md316
-rw-r--r--gcc/config/rs6000/linux-unwind.h11
-rw-r--r--gcc/config/rs6000/linux64.h2
-rw-r--r--gcc/config/rs6000/lynx.h3
-rw-r--r--gcc/config/rs6000/rs6000.c233
-rw-r--r--gcc/config/rs6000/rs6000.md3
-rw-r--r--gcc/config/rs6000/sysv4.h10
-rw-r--r--gcc/config/rs6000/vxworks.h2
-rw-r--r--gcc/config/rs6000/xcoff.h3
-rw-r--r--gcc/config/s390/s390.c54
-rw-r--r--gcc/config/sh/sh.c2
-rw-r--r--gcc/config/sparc/sparc.c14
-rw-r--r--gcc/config/spu/constraints.md4
-rw-r--r--gcc/config/spu/predicates.md12
-rw-r--r--gcc/config/spu/spu-builtins.def3
-rw-r--r--gcc/config/spu/spu-builtins.md68
-rw-r--r--gcc/config/spu/spu-modes.def4
-rw-r--r--gcc/config/spu/spu-protos.h2
-rw-r--r--gcc/config/spu/spu.c268
-rw-r--r--gcc/config/spu/spu.h16
-rw-r--r--gcc/config/spu/spu.md109
-rw-r--r--gcc/config/spu/spu_internals.h3
-rw-r--r--gcc/config/t-vxworks14
-rw-r--r--gcc/config/vxworks-dummy.h31
-rw-r--r--gcc/config/vxworks.c71
-rw-r--r--gcc/config/vxworks.h39
-rwxr-xr-xgcc/configure165
-rw-r--r--gcc/configure.ac62
-rw-r--r--gcc/convert.c6
-rw-r--r--gcc/cp/ChangeLog413
-rw-r--r--gcc/cp/Make-lang.in7
-rw-r--r--gcc/cp/call.c271
-rw-r--r--gcc/cp/class.c13
-rw-r--r--gcc/cp/cp-gimplify.c43
-rw-r--r--gcc/cp/cp-lang.c14
-rw-r--r--gcc/cp/cp-objcp-common.c15
-rw-r--r--gcc/cp/cp-tree.def70
-rw-r--r--gcc/cp/cp-tree.h128
-rw-r--r--gcc/cp/cxx-pretty-print.c132
-rw-r--r--gcc/cp/decl.c55
-rw-r--r--gcc/cp/decl2.c60
-rw-r--r--gcc/cp/error.c102
-rw-r--r--gcc/cp/except.c2
-rw-r--r--gcc/cp/g++spec.c17
-rw-r--r--gcc/cp/init.c2
-rw-r--r--gcc/cp/mangle.c15
-rw-r--r--gcc/cp/method.c32
-rw-r--r--gcc/cp/name-lookup.c12
-rw-r--r--gcc/cp/operators.def3
-rw-r--r--gcc/cp/parser.c414
-rw-r--r--gcc/cp/pt.c2526
-rw-r--r--gcc/cp/repo.c10
-rw-r--r--gcc/cp/rtti.c18
-rw-r--r--gcc/cp/semantics.c57
-rw-r--r--gcc/cp/tree.c42
-rw-r--r--gcc/cp/typeck.c207
-rw-r--r--gcc/cp/typeck2.c26
-rw-r--r--gcc/cppdefault.c15
-rw-r--r--gcc/cppdefault.h8
-rw-r--r--gcc/cse.c67
-rw-r--r--gcc/doc/cpp.texi27
-rw-r--r--gcc/doc/cppinternals.texi3
-rw-r--r--gcc/doc/extend.texi191
-rw-r--r--gcc/doc/gcc.texi9
-rw-r--r--gcc/doc/gccint.texi9
-rw-r--r--gcc/doc/include/gcc-common.texi16
-rw-r--r--gcc/doc/install.texi39
-rw-r--r--gcc/doc/invoke.texi243
-rw-r--r--gcc/doc/loop.texi30
-rw-r--r--gcc/doc/passes.texi2
-rw-r--r--gcc/doc/tm.texi38
-rw-r--r--gcc/doc/tree-ssa.texi33
-rw-r--r--gcc/double-int.c2
-rw-r--r--gcc/double-int.h1
-rw-r--r--gcc/dwarf2out.c92
-rw-r--r--gcc/emit-rtl.c56
-rw-r--r--gcc/errors.h8
-rw-r--r--gcc/expr.c32
-rw-r--r--gcc/expr.h6
-rw-r--r--gcc/final.c29
-rw-r--r--gcc/flags.h5
-rw-r--r--gcc/fold-const.c216
-rw-r--r--gcc/fortran/ChangeLog229
-rw-r--r--gcc/fortran/Make-lang.in22
-rw-r--r--gcc/fortran/check.c8
-rw-r--r--gcc/fortran/decl.c10
-rw-r--r--gcc/fortran/expr.c3
-rw-r--r--gcc/fortran/gfortran.texi65
-rw-r--r--gcc/fortran/gfortranspec.c4
-rw-r--r--gcc/fortran/intrinsic.c4
-rw-r--r--gcc/fortran/intrinsic.texi1163
-rw-r--r--gcc/fortran/iresolve.c4
-rw-r--r--gcc/fortran/match.c4
-rw-r--r--gcc/fortran/module.c46
-rw-r--r--gcc/fortran/options.c27
-rw-r--r--gcc/fortran/parse.c14
-rw-r--r--gcc/fortran/primary.c10
-rw-r--r--gcc/fortran/resolve.c33
-rw-r--r--gcc/fortran/trans-array.c7
-rw-r--r--gcc/fortran/trans-expr.c30
-rw-r--r--gcc/fortran/trans-intrinsic.c46
-rw-r--r--gcc/function.c52
-rw-r--r--gcc/function.h4
-rw-r--r--gcc/fwprop.c3
-rw-r--r--gcc/gcc.c185
-rw-r--r--gcc/gccspec.c5
-rw-r--r--gcc/gthr-vxworks.h16
-rw-r--r--gcc/ipa-inline.c9
-rw-r--r--gcc/ipa-type-escape.c460
-rw-r--r--gcc/java/ChangeLog9
-rw-r--r--gcc/java/Make-lang.in21
-rw-r--r--gcc/java/gcj.texi3
-rw-r--r--gcc/lambda-code.c9
-rw-r--r--gcc/loop-iv.c231
-rw-r--r--gcc/loop-unroll.c42
-rw-r--r--gcc/lower-subreg.c49
-rw-r--r--gcc/mode-switching.c6
-rw-r--r--gcc/objc/ChangeLog4
-rw-r--r--gcc/objc/Make-lang.in5
-rw-r--r--gcc/objcp/ChangeLog4
-rw-r--r--gcc/objcp/Make-lang.in5
-rw-r--r--gcc/omega.c5583
-rw-r--r--gcc/omega.h340
-rw-r--r--gcc/opth-gen.awk1
-rw-r--r--gcc/opts.c18
-rw-r--r--gcc/output.h25
-rw-r--r--gcc/params.def38
-rw-r--r--gcc/passes.c3
-rw-r--r--gcc/po/ChangeLog8
-rw-r--r--gcc/po/gcc.pot12960
-rw-r--r--gcc/po/sr.po28674
-rw-r--r--gcc/predict.c128
-rw-r--r--gcc/predict.def47
-rw-r--r--gcc/recog.c45
-rw-r--r--gcc/reg-stack.c40
-rw-r--r--gcc/reload.c51
-rw-r--r--gcc/reload1.c48
-rw-r--r--gcc/rtl.def12
-rw-r--r--gcc/rtl.h19
-rw-r--r--gcc/rtlanal.c56
-rw-r--r--gcc/stmt.c11
-rw-r--r--gcc/target-def.h12
-rw-r--r--gcc/target.h26
-rw-r--r--gcc/targhooks.c19
-rw-r--r--gcc/targhooks.h2
-rw-r--r--gcc/testsuite/ChangeLog691
-rw-r--r--gcc/testsuite/ada/acats/tests/c9/c96004a.ada2
-rw-r--r--gcc/testsuite/ada/acats/tests/c9/c96007a.ada2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-bind.C476
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C39
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-function.C96
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C50
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C294
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic1.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic10.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic11.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic12.C42
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic13.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic14.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic15.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic16.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic17.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic18.C47
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic19.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic2.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic20.C47
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic21.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic22.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic23.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic24.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic25.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic26.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic27.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic28.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic29.C35
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic3.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic30.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic31.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic32.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic33.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic34.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic35.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic36.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic37.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic38.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic39.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic4.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic40.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic41.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic42.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic43.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic44.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic45.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic46.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic47.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic48.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic49.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic5.C38
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic50.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic51.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic52.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic53.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic54.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic55.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic56.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic57.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic58.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic59.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic6.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic60.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic61.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic62.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic63.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic64.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic65.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic66.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic67.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic68.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic69.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic7.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic70.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic71.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic72.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic73.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic74.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic75.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic8.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic9.C38
-rw-r--r--gcc/testsuite/g++.dg/debug/pr30898.C13
-rw-r--r--gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C47
-rw-r--r--gcc/testsuite/g++.dg/eh/simd-5.C44
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield3.C12
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield4.C19
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield5.C17
-rw-r--r--gcc/testsuite/g++.dg/expr/bitfield6.C11
-rw-r--r--gcc/testsuite/g++.dg/ext/bitfield1.C22
-rw-r--r--gcc/testsuite/g++.dg/ext/offsetof1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/class1.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/noPLT.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/vla1.C2
-rw-r--r--gcc/testsuite/g++.dg/inherit/covariant16.C17
-rw-r--r--gcc/testsuite/g++.dg/inherit/thunk7.C55
-rw-r--r--gcc/testsuite/g++.dg/init/ctor8.C4
-rw-r--r--gcc/testsuite/g++.dg/opt/switch4.C1
-rw-r--r--gcc/testsuite/g++.dg/other/darwin-minversion-1.C10
-rw-r--r--gcc/testsuite/g++.dg/other/default6.C18
-rw-r--r--gcc/testsuite/g++.dg/parse/else-2.C11
-rw-r--r--gcc/testsuite/g++.dg/parse/else.C13
-rw-r--r--gcc/testsuite/g++.dg/parse/template23.C10
-rw-r--r--gcc/testsuite/g++.dg/special/conpr-1.C2
-rw-r--r--gcc/testsuite/g++.dg/special/conpr-2.C3
-rw-r--r--gcc/testsuite/g++.dg/special/conpr-3.C2
-rw-r--r--gcc/testsuite/g++.dg/special/conpr-4.C2
-rw-r--r--gcc/testsuite/g++.dg/special/ecos.exp10
-rw-r--r--gcc/testsuite/g++.dg/special/initp1.C3
-rw-r--r--gcc/testsuite/g++.dg/special/initpri1.C62
-rw-r--r--gcc/testsuite/g++.dg/special/initpri2.C39
-rw-r--r--gcc/testsuite/g++.dg/template/arg5.C9
-rw-r--r--gcc/testsuite/g++.dg/template/array18.C13
-rw-r--r--gcc/testsuite/g++.dg/template/complit2.C17
-rw-r--r--gcc/testsuite/g++.dg/template/typedef2.C3
-rw-r--r--gcc/testsuite/g++.dg/warn/Wconversion2.C4
-rw-r--r--gcc/testsuite/g++.dg/warn/Wlogical-op-1.C47
-rw-r--r--gcc/testsuite/g++.dg/warn/Wvla-1.C7
-rw-r--r--gcc/testsuite/g++.dg/warn/Wvla-2.C7
-rw-r--r--gcc/testsuite/g++.dg/warn/Wvla-3.C7
-rw-r--r--gcc/testsuite/g++.dg/warn/changes-meaning.C11
-rw-r--r--gcc/testsuite/g++.dg/warn/do-empty.C15
-rw-r--r--gcc/testsuite/g++.dg/warn/ignored_typedef.C22
-rw-r--r--gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C12
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/template31.C1
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/981006-1.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c20
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr31034.c14
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c7
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c7
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x13
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr30778.c34
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr31072.c10
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/strcmp-1.x16
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/strncmp-1.x16
-rw-r--r--gcc/testsuite/gcc.dg/20001116-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/20020103-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/20020426-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/20040813-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wlogical-op-1.c47
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-11.c17
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-12.c16
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-13.c18
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-14.c15
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-15.c15
-rw-r--r--gcc/testsuite/gcc.dg/builtins-55.c12
-rw-r--r--gcc/testsuite/gcc.dg/builtins-config.h2
-rw-r--r--gcc/testsuite/gcc.dg/c90-vla-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/c99-vla-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/do-empty.c15
-rw-r--r--gcc/testsuite/gcc.dg/fold-eqcmplx-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/if-empty-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/initpri1.c62
-rw-r--r--gcc/testsuite/gcc.dg/initpri2.c39
-rw-r--r--gcc/testsuite/gcc.dg/inline-18.c28
-rw-r--r--gcc/testsuite/gcc.dg/inline-19.c28
-rw-r--r--gcc/testsuite/gcc.dg/inline-20.c64
-rw-r--r--gcc/testsuite/gcc.dg/inline-21.c4
-rw-r--r--gcc/testsuite/gcc.dg/intmax_t-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c12
-rw-r--r--gcc/testsuite/gcc.dg/no-strict-overflow-5.c20
-rw-r--r--gcc/testsuite/gcc.dg/no-strict-overflow-6.c21
-rw-r--r--gcc/testsuite/gcc.dg/pr23165.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr28243.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr30643.c26
-rw-r--r--gcc/testsuite/gcc.dg/pr30744-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr30904.c18
-rw-r--r--gcc/testsuite/gcc.dg/pr30951.c36
-rw-r--r--gcc/testsuite/gcc.dg/pr31127.c15
-rw-r--r--gcc/testsuite/gcc.dg/ssp-1.c21
-rw-r--r--gcc/testsuite/gcc.dg/ssp-2.c26
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-10.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-9.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/pic-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/struct-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-attr-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-convert-1.c47
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-convert-2.c42
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-convert-3.c4
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-convert-4.c37
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c122
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-integral-1.c56
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-logb-1.c180
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-math-2.c26
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c33
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-modf-1.c163
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c66
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr30364-1.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr30364-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr30364-3.c20
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr31115.c22
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20070302-1.c44
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loop-26.c29
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c17
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr23777.c19
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c18
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-10.c1523
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp33.c9
-rw-r--r--gcc/testsuite/gcc.dg/var-expand1.c25
-rw-r--r--gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c39
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr30843.c25
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr30858.c15
-rwxr-xr-xgcc/testsuite/gcc.dg/vect/vect-106.c73
-rw-r--r--gcc/testsuite/gcc.dg/visibility-11.c1
-rw-r--r--gcc/testsuite/gcc.dg/vxworks/initpri1.c19
-rw-r--r--gcc/testsuite/gcc.dg/vxworks/initpri2.c15
-rw-r--r--gcc/testsuite/gcc.dg/vxworks/vxworks.exp36
-rw-r--r--gcc/testsuite/gcc.dg/wvla-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-2.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-3.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-4.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-5.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-6.c5
-rw-r--r--gcc/testsuite/gcc.dg/wvla-7.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/20000807-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/20000904-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/20011119-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/990213-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/990214-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/compress-float-387-pic.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pic-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr21518.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr23098.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr23943.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr30848.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr30970.c15
-rw-r--r--gcc/testsuite/gcc.target/m68k/crash1.c42
-rw-r--r--gcc/testsuite/gcc.target/m68k/m68k.exp41
-rw-r--r--gcc/testsuite/gcc.target/mips/dspr2-MULT.c21
-rw-r--r--gcc/testsuite/gcc.target/mips/dspr2-MULTU.c21
-rw-r--r--gcc/testsuite/gcc.target/mips/mips32-dsp-run.c1001
-rw-r--r--gcc/testsuite/gcc.target/mips/mips32-dsp.c198
-rw-r--r--gcc/testsuite/gcc.target/mips/mips32-dspr2-type.c12
-rw-r--r--gcc/testsuite/gcc.target/mips/mips32-dspr2.c541
-rw-r--r--gcc/testsuite/gcc.target/powerpc/spe-unwind-1.c116
-rw-r--r--gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c2
-rw-r--r--gcc/testsuite/gcc.test-framework/README2
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-outexists-exp-F.c2
-rw-r--r--gcc/testsuite/gcc.test-framework/dg-outexistsnot-exp-P.c2
-rw-r--r--gcc/testsuite/gfortran.dg/alloc_comp_basics_4.f906
-rw-r--r--gcc/testsuite/gfortran.dg/c_by_val.c53
-rw-r--r--gcc/testsuite/gfortran.dg/c_by_val_1.f24
-rw-r--r--gcc/testsuite/gfortran.dg/c_by_val_4.f17
-rw-r--r--gcc/testsuite/gfortran.dg/continuation_7.f9022
-rw-r--r--gcc/testsuite/gfortran.dg/entry_9.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_zero_precision.f9055
-rw-r--r--gcc/testsuite/gfortran.dg/integer_exponentiation_1.f906
-rw-r--r--gcc/testsuite/gfortran.dg/interface_11.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/logical_3.f9010
-rw-r--r--gcc/testsuite/gfortran.dg/module_implicit_conversion.f909
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_26.f9048
-rw-r--r--gcc/testsuite/gfortran.dg/parameter_array_section_2.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/size_dim.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/size_optional_dim_1.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/unformatted_recl_1.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/use_4.f9033
-rw-r--r--gcc/testsuite/gfortran.dg/use_5.f9049
-rw-r--r--gcc/testsuite/gfortran.dg/use_6.f9045
-rw-r--r--gcc/testsuite/gfortran.dg/use_7.f9049
-rw-r--r--gcc/testsuite/gfortran.dg/used_dummy_types_7.f904
-rw-r--r--gcc/testsuite/gfortran.dg/zero_sized_3.f9020
-rw-r--r--gcc/testsuite/lib/g++.exp2
-rw-r--r--gcc/testsuite/lib/obj-c++.exp2
-rw-r--r--gcc/testsuite/lib/target-supports.exp40
-rw-r--r--gcc/testsuite/lib/wrapper.exp11
-rw-r--r--gcc/timevar.def1
-rw-r--r--gcc/tlink.c26
-rw-r--r--gcc/toplev.c64
-rw-r--r--gcc/toplev.h7
-rw-r--r--gcc/tree-cfg.c4
-rw-r--r--gcc/tree-complex.c8
-rw-r--r--gcc/tree-data-ref.c924
-rw-r--r--gcc/tree-data-ref.h12
-rw-r--r--gcc/tree-eh.c32
-rw-r--r--gcc/tree-flow.h24
-rw-r--r--gcc/tree-if-conv.c7
-rw-r--r--gcc/tree-inline.c22
-rw-r--r--gcc/tree-loop-linear.c22
-rw-r--r--gcc/tree-mudflap.c31
-rw-r--r--gcc/tree-nested.c10
-rw-r--r--gcc/tree-nrv.c8
-rw-r--r--gcc/tree-outof-ssa.c8
-rw-r--r--gcc/tree-pass.h8
-rw-r--r--gcc/tree-profile.c24
-rw-r--r--gcc/tree-scalar-evolution.c21
-rw-r--r--gcc/tree-sra.c17
-rw-r--r--gcc/tree-ssa-address.c18
-rw-r--r--gcc/tree-ssa-ccp.c3
-rw-r--r--gcc/tree-ssa-coalesce.c2
-rw-r--r--gcc/tree-ssa-dom.c15
-rw-r--r--gcc/tree-ssa-dse.c26
-rw-r--r--gcc/tree-ssa-forwprop.c29
-rw-r--r--gcc/tree-ssa-loop-im.c16
-rw-r--r--gcc/tree-ssa-loop-niter.c1035
-rw-r--r--gcc/tree-ssa-loop-prefetch.c45
-rw-r--r--gcc/tree-ssa-loop.c37
-rw-r--r--gcc/tree-ssa-math-opts.c11
-rw-r--r--gcc/tree-ssa-operands.c87
-rw-r--r--gcc/tree-ssa-propagate.c2
-rw-r--r--gcc/tree-ssa-structalias.c156
-rw-r--r--gcc/tree-ssa-threadedge.c13
-rw-r--r--gcc/tree-tailcall.c26
-rw-r--r--gcc/tree-vect-patterns.c5
-rw-r--r--gcc/tree-vect-transform.c172
-rw-r--r--gcc/tree-vectorizer.c63
-rw-r--r--gcc/tree-vectorizer.h8
-rw-r--r--gcc/tree-vrp.c1128
-rw-r--r--gcc/tree.c148
-rw-r--r--gcc/tree.h100
-rw-r--r--gcc/treelang/ChangeLog10
-rw-r--r--gcc/treelang/Make-lang.in18
-rw-r--r--gcc/treelang/treelang.texi9
-rw-r--r--gcc/varasm.c234
-rw-r--r--gcc/varpool.c3
-rw-r--r--gnattools/ChangeLog4
-rw-r--r--gnattools/Makefile.in2
-rw-r--r--include/ChangeLog4
-rw-r--r--include/ansidecl.h16
-rw-r--r--libada/ChangeLog4
-rw-r--r--libada/Makefile.in2
-rw-r--r--libcpp/ChangeLog4
-rw-r--r--libcpp/Makefile.in1
-rw-r--r--libcpp/po/ChangeLog4
-rw-r--r--libcpp/po/cpplib.pot216
-rw-r--r--libdecnumber/ChangeLog12
-rw-r--r--libdecnumber/Makefile.in3
-rw-r--r--libdecnumber/decContext.c9
-rw-r--r--libdecnumber/decContext.h9
-rw-r--r--libdecnumber/decDPD.h9
-rw-r--r--libdecnumber/decLibrary.c9
-rw-r--r--libdecnumber/decNumber.c9
-rw-r--r--libdecnumber/decNumber.h9
-rw-r--r--libdecnumber/decNumberLocal.h9
-rw-r--r--libdecnumber/decRound.c9
-rw-r--r--libdecnumber/decRound.h9
-rw-r--r--libdecnumber/decUtility.c9
-rw-r--r--libdecnumber/decUtility.h9
-rw-r--r--libdecnumber/decimal128.c9
-rw-r--r--libdecnumber/decimal128.h9
-rw-r--r--libdecnumber/decimal32.c9
-rw-r--r--libdecnumber/decimal32.h9
-rw-r--r--libdecnumber/decimal64.c9
-rw-r--r--libdecnumber/decimal64.h9
-rw-r--r--libffi/ChangeLog66
-rw-r--r--libffi/Makefile.am7
-rw-r--r--libffi/Makefile.in15
-rw-r--r--libffi/include/ffi.h.in26
-rw-r--r--libffi/src/alpha/ffi.c11
-rw-r--r--libffi/src/closures.c513
-rw-r--r--libffi/src/cris/ffi.c12
-rw-r--r--libffi/src/dlmalloc.c5099
-rw-r--r--libffi/src/frv/ffi.c17
-rw-r--r--libffi/src/ia64/ffi.c13
-rw-r--r--libffi/src/java_raw_api.c37
-rw-r--r--libffi/src/mips/ffi.c15
-rw-r--r--libffi/src/pa/ffi.c9
-rw-r--r--libffi/src/powerpc/ffi.c32
-rw-r--r--libffi/src/powerpc/ffi_darwin.c17
-rw-r--r--libffi/src/prep_cif.c15
-rw-r--r--libffi/src/raw_api.c40
-rw-r--r--libffi/src/s390/ffi.c17
-rw-r--r--libffi/src/sh/ffi.c15
-rw-r--r--libffi/src/sh64/ffi.c18
-rw-r--r--libffi/src/sparc/ffi.c13
-rw-r--r--libffi/src/x86/ffi.c26
-rw-r--r--libffi/src/x86/ffi64.c13
-rw-r--r--libgcc/ChangeLog13
-rw-r--r--libgcc/Makefile.in8
-rw-r--r--libgcc/config.host5
-rw-r--r--libgfortran/ChangeLog105
-rw-r--r--libgfortran/Makefile.am5
-rw-r--r--libgfortran/Makefile.in5
-rw-r--r--libgfortran/generated/pow_c10_i16.c10
-rw-r--r--libgfortran/generated/pow_c10_i4.c10
-rw-r--r--libgfortran/generated/pow_c10_i8.c10
-rw-r--r--libgfortran/generated/pow_c16_i16.c10
-rw-r--r--libgfortran/generated/pow_c16_i4.c10
-rw-r--r--libgfortran/generated/pow_c16_i8.c10
-rw-r--r--libgfortran/generated/pow_c4_i16.c10
-rw-r--r--libgfortran/generated/pow_c4_i4.c10
-rw-r--r--libgfortran/generated/pow_c4_i8.c10
-rw-r--r--libgfortran/generated/pow_c8_i16.c10
-rw-r--r--libgfortran/generated/pow_c8_i4.c10
-rw-r--r--libgfortran/generated/pow_c8_i8.c10
-rw-r--r--libgfortran/generated/pow_i16_i16.c8
-rw-r--r--libgfortran/generated/pow_i16_i4.c8
-rw-r--r--libgfortran/generated/pow_i16_i8.c8
-rw-r--r--libgfortran/generated/pow_i4_i16.c8
-rw-r--r--libgfortran/generated/pow_i4_i4.c8
-rw-r--r--libgfortran/generated/pow_i4_i8.c8
-rw-r--r--libgfortran/generated/pow_i8_i16.c8
-rw-r--r--libgfortran/generated/pow_i8_i4.c8
-rw-r--r--libgfortran/generated/pow_i8_i8.c8
-rw-r--r--libgfortran/generated/pow_r10_i16.c10
-rw-r--r--libgfortran/generated/pow_r10_i4.c10
-rw-r--r--libgfortran/generated/pow_r10_i8.c10
-rw-r--r--libgfortran/generated/pow_r16_i16.c10
-rw-r--r--libgfortran/generated/pow_r16_i4.c10
-rw-r--r--libgfortran/generated/pow_r16_i8.c10
-rw-r--r--libgfortran/generated/pow_r4_i16.c10
-rw-r--r--libgfortran/generated/pow_r4_i4.c10
-rw-r--r--libgfortran/generated/pow_r4_i8.c10
-rw-r--r--libgfortran/generated/pow_r8_i16.c10
-rw-r--r--libgfortran/generated/pow_r8_i4.c10
-rw-r--r--libgfortran/generated/pow_r8_i8.c10
-rw-r--r--libgfortran/intrinsics/pack_generic.c6
-rw-r--r--libgfortran/intrinsics/signal.c4
-rw-r--r--libgfortran/io/list_read.c4
-rw-r--r--libgfortran/io/open.c2
-rw-r--r--libgfortran/io/transfer.c9
-rw-r--r--libgfortran/io/unix.c6
-rw-r--r--libgfortran/io/write.c2
-rw-r--r--libgfortran/m4/all.m44
-rw-r--r--libgfortran/m4/any.m44
-rw-r--r--libgfortran/m4/count.m44
-rw-r--r--libgfortran/m4/cshift1.m442
-rw-r--r--libgfortran/m4/eoshift1.m448
-rw-r--r--libgfortran/m4/eoshift3.m448
-rw-r--r--libgfortran/m4/exponent.m412
-rw-r--r--libgfortran/m4/fraction.m414
-rw-r--r--libgfortran/m4/in_pack.m417
-rw-r--r--libgfortran/m4/in_unpack.m49
-rw-r--r--libgfortran/m4/matmul.m484
-rw-r--r--libgfortran/m4/matmull.m417
-rw-r--r--libgfortran/m4/nearest.m418
-rw-r--r--libgfortran/m4/pow.m424
-rw-r--r--libgfortran/m4/product.m42
-rw-r--r--libgfortran/m4/reshape.m446
-rw-r--r--libgfortran/m4/rrspacing.m424
-rw-r--r--libgfortran/m4/set_exponent.m414
-rw-r--r--libgfortran/m4/shape.m414
-rw-r--r--libgfortran/m4/spacing.m420
-rw-r--r--libgfortran/m4/transpose.m420
-rw-r--r--libgomp/ChangeLog6
-rw-r--r--libgomp/Makefile.am13
-rw-r--r--libgomp/Makefile.in14
-rw-r--r--libiberty/ChangeLog19
-rw-r--r--libiberty/Makefile.in39
-rwxr-xr-xlibiberty/configure20
-rw-r--r--libiberty/configure.ac17
-rw-r--r--libiberty/testsuite/Makefile.in3
-rw-r--r--libjava/ChangeLog377
-rw-r--r--libjava/Makefile.am22
-rw-r--r--libjava/Makefile.in90
-rw-r--r--libjava/boehm.cc25
-rw-r--r--libjava/classpath/ChangeLog37
-rw-r--r--libjava/classpath/ChangeLog.gcj46
-rw-r--r--libjava/classpath/INSTALL5
-rw-r--r--libjava/classpath/Makefile.in3
-rwxr-xr-xlibjava/classpath/configure86
-rw-r--r--libjava/classpath/configure.ac30
-rw-r--r--libjava/classpath/doc/Makefile.am8
-rw-r--r--libjava/classpath/doc/Makefile.in87
-rw-r--r--libjava/classpath/doc/api/Makefile.in3
-rw-r--r--libjava/classpath/examples/Makefile.in3
-rw-r--r--libjava/classpath/external/Makefile.in3
-rw-r--r--libjava/classpath/external/jsr166/Makefile.in3
-rw-r--r--libjava/classpath/external/relaxngDatatype/Makefile.in3
-rw-r--r--libjava/classpath/external/sax/Makefile.in3
-rw-r--r--libjava/classpath/external/w3c_dom/Makefile.in3
-rw-r--r--libjava/classpath/gnu/classpath/Configuration.java.in6
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java56
-rw-r--r--libjava/classpath/gnu/java/util/ZoneInfo.java1160
-rw-r--r--libjava/classpath/gnu/xml/dom/ls/DomLSParser.java16
-rw-r--r--libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java51
-rw-r--r--libjava/classpath/include/Makefile.in3
-rw-r--r--libjava/classpath/include/config.h.in3
-rw-r--r--libjava/classpath/java/util/Date.java9
-rw-r--r--libjava/classpath/java/util/SimpleTimeZone.java120
-rw-r--r--libjava/classpath/java/util/TimeZone.java323
-rw-r--r--libjava/classpath/lib/Makefile.in3
-rw-r--r--libjava/classpath/lib/gnu/classpath/jdwp/exception/AbsentInformationException.classbin0 -> 474 bytes
-rw-r--r--libjava/classpath/lib/gnu/java/util/ZoneInfo.classbin0 -> 15456 bytes
-rw-r--r--libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.classbin0 -> 1270 bytes
-rw-r--r--libjava/classpath/lib/java/lang/VMProcess.classbin0 -> 1926 bytes
-rw-r--r--libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.classbin0 -> 567 bytes
-rw-r--r--libjava/classpath/lib/sun/reflect/annotation/AnnotationInvocationHandler.classbin7471 -> 8487 bytes
-rw-r--r--libjava/classpath/native/Makefile.in3
-rw-r--r--libjava/classpath/native/fdlibm/Makefile.in3
-rw-r--r--libjava/classpath/native/jawt/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/classpath/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/gconf-peer/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/gtk-peer/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/java-io/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/java-lang/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/java-net/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/java-nio/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/java-util/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/midi-alsa/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/midi-dssi/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/native-lib/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/qt-peer/Makefile.in3
-rw-r--r--libjava/classpath/native/jni/xmlj/Makefile.in3
-rw-r--r--libjava/classpath/native/plugin/Makefile.in3
-rw-r--r--libjava/classpath/resource/META-INF/services/org.w3c.dom.DOMImplementationSourceList1
-rw-r--r--libjava/classpath/resource/Makefile.in3
-rw-r--r--libjava/classpath/resource/com/sun/tools/javac/messages.properties42
-rw-r--r--libjava/classpath/resource/sun/rmi/rmic/messages.properties38
-rw-r--r--libjava/classpath/scripts/Makefile.in3
-rwxr-xr-xlibjava/classpath/tools/Makefile.am26
-rw-r--r--libjava/classpath/tools/Makefile.in25
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ClassDoc.classbin0 -> 1087 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ConstructorDoc.classbin0 -> 215 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/Doc.classbin0 -> 741 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/DocErrorReporter.classbin0 -> 219 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/Doclet.classbin0 -> 750 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ExecutableMemberDoc.classbin0 -> 504 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/FieldDoc.classbin0 -> 405 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/MemberDoc.classbin0 -> 184 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/MethodDoc.classbin0 -> 290 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/PackageDoc.classbin0 -> 351 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ParamTag.classbin0 -> 214 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/Parameter.classbin0 -> 261 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ProgramElementDoc.classbin0 -> 508 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/RootDoc.classbin0 -> 504 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/SeeTag.classbin0 -> 413 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/SerialFieldTag.classbin0 -> 363 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/SourcePosition.classbin0 -> 239 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/Tag.classbin0 -> 294 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/ThrowsTag.classbin0 -> 267 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/Type.classbin0 -> 382 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/javadoc/TypeVariable.classbin0 -> 250 bytes
-rw-r--r--libjava/classpath/tools/classes/com/sun/tools/doclets/Taglet.classbin0 -> 419 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$1.classbin0 -> 1182 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$2.classbin0 -> 1182 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$3.classbin0 -> 1182 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$4.classbin0 -> 1182 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$5.classbin0 -> 977 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$6.classbin0 -> 915 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$7.classbin0 -> 915 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$8.classbin0 -> 915 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$9.classbin0 -> 915 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain.classbin0 -> 2981 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.classbin928 -> 928 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.classbin1106 -> 1106 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.classbin1111 -> 1111 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.classbin994 -> 994 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.classbin1056 -> 1056 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.classbin926 -> 926 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.classbin1004 -> 1004 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.classbin924 -> 924 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.classbin928 -> 960 bytes
-rw-r--r--libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.classbin10324 -> 10514 bytes
-rw-r--r--libjava/classpath/tools/classes/sun/rmi/rmic/Main.classbin0 -> 985 bytes
-rw-r--r--libjava/classpath/tools/classes/sun/rmi/rmic/Messages.classbin0 -> 1109 bytes
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ClassDoc.java322
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ConstructorDoc.java57
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/Doc.java265
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/DocErrorReporter.java77
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/Doclet.java99
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ExecutableMemberDoc.java138
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/FieldDoc.java113
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/MemberDoc.java60
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/MethodDoc.java80
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/PackageDoc.java109
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ParamTag.java66
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/Parameter.java88
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ProgramElementDoc.java170
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/RootDoc.java112
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/SeeTag.java109
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/SerialFieldTag.java102
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/SourcePosition.java68
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/Tag.java107
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/ThrowsTag.java76
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/Type.java120
-rw-r--r--libjava/classpath/tools/com/sun/javadoc/TypeVariable.java73
-rw-r--r--libjava/classpath/tools/com/sun/tools/doclets/Taglet.java63
-rw-r--r--libjava/classpath/tools/com/sun/tools/javac/Main.java155
-rw-r--r--libjava/classpath/tools/com/sun/tools/javac/Messages.java67
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/javah/GcjhMain.java152
-rw-r--r--libjava/classpath/tools/gnu/classpath/tools/javah/Main.java21
-rw-r--r--libjava/classpath/tools/sun/rmi/rmic/Main.java60
-rw-r--r--libjava/classpath/tools/sun/rmi/rmic/Messages.java67
-rwxr-xr-xlibjava/configure6
-rw-r--r--libjava/configure.ac2
-rw-r--r--libjava/defineclass.cc7
-rw-r--r--libjava/gcj/Makefile.in15
-rw-r--r--libjava/gcj/javaprims.h5
-rw-r--r--libjava/gnu/awt/xlib/XEventLoop.h2
-rw-r--r--libjava/gnu/classpath/Configuration.h2
-rw-r--r--libjava/gnu/classpath/Configuration.java7
-rw-r--r--libjava/gnu/classpath/jdwp/exception/AbsentInformationException.h35
-rw-r--r--libjava/gnu/classpath/jdwp/natVMMethod.cc97
-rw-r--r--libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc4
-rw-r--r--libjava/gnu/classpath/natConfiguration.cc6
-rw-r--r--libjava/gnu/gcj/tools/gcj_dbtool/Main.java2
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GThreadMutex.h2
-rw-r--r--libjava/gnu/java/rmi/server/ConnectionRunnerPool$ConnectionRunner.h2
-rw-r--r--libjava/gnu/java/rmi/server/UnicastConnectionManager.h2
-rw-r--r--libjava/gnu/java/util/ZoneInfo.h70
-rw-r--r--libjava/headers.txt2
-rw-r--r--libjava/include/Makefile.in15
-rw-r--r--libjava/include/execution.h49
-rw-r--r--libjava/include/java-interp.h6
-rw-r--r--libjava/include/jvm.h6
-rw-r--r--libjava/include/win32-threads.h1
-rw-r--r--libjava/interpret.cc49
-rw-r--r--libjava/java/lang/Character$UnicodeBlock$NameType.h29
-rw-r--r--libjava/java/lang/Character$UnicodeBlock.h6
-rw-r--r--libjava/java/lang/Character.h26
-rw-r--r--libjava/java/lang/Character.java448
-rw-r--r--libjava/java/lang/Class.h18
-rw-r--r--libjava/java/lang/EcosProcess.h2
-rw-r--r--libjava/java/lang/EcosProcess.java7
-rw-r--r--libjava/java/lang/PosixProcess.h3
-rw-r--r--libjava/java/lang/PosixProcess.java8
-rw-r--r--libjava/java/lang/SecurityManager.h2
-rw-r--r--libjava/java/lang/String$CaseInsensitiveComparator.h1
-rw-r--r--libjava/java/lang/String.h13
-rw-r--r--libjava/java/lang/String.java120
-rw-r--r--libjava/java/lang/StringBuffer.h13
-rw-r--r--libjava/java/lang/StringBuffer.java116
-rw-r--r--libjava/java/lang/StringBuilder.h4
-rw-r--r--libjava/java/lang/StringBuilder.java63
-rw-r--r--libjava/java/lang/System$EnvironmentMap.h3
-rw-r--r--libjava/java/lang/System.java47
-rw-r--r--libjava/java/lang/Thread.h2
-rw-r--r--libjava/java/lang/VMCompiler.java9
-rw-r--r--libjava/java/lang/VMProcess.h24
-rw-r--r--libjava/java/lang/VMProcess.java (renamed from libjava/java/lang/ProcessBuilder.java)92
-rw-r--r--libjava/java/lang/Win32Process$EOFInputStream.h23
-rw-r--r--libjava/java/lang/Win32Process.h4
-rw-r--r--libjava/java/lang/Win32Process.java23
-rw-r--r--libjava/java/lang/natClass.cc61
-rw-r--r--libjava/java/lang/natPosixProcess.cc58
-rw-r--r--libjava/java/lang/natRuntime.cc4
-rw-r--r--libjava/java/lang/natString.cc21
-rw-r--r--libjava/java/lang/natVMProcess.cc34
-rw-r--r--libjava/java/lang/natWin32Process.cc29
-rw-r--r--libjava/java/lang/reflect/Method.h8
-rw-r--r--libjava/java/lang/reflect/Method.java18
-rw-r--r--libjava/java/lang/reflect/natVMProxy.cc50
-rw-r--r--libjava/java/security/VMSecureRandom$Spinner.h4
-rw-r--r--libjava/java/util/TimeZone.h9
-rw-r--r--libjava/java/util/VMTimeZone.h3
-rw-r--r--libjava/java/util/VMTimeZone.java560
-rw-r--r--libjava/java/util/concurrent/ConcurrentHashMap$HashEntry.h2
-rw-r--r--libjava/java/util/concurrent/ConcurrentHashMap$Segment.h4
-rw-r--r--libjava/java/util/concurrent/ConcurrentLinkedQueue$Node.h4
-rw-r--r--libjava/java/util/concurrent/ConcurrentLinkedQueue.h4
-rw-r--r--libjava/java/util/concurrent/ConcurrentSkipListMap$Index.h2
-rw-r--r--libjava/java/util/concurrent/ConcurrentSkipListMap$Node.h4
-rw-r--r--libjava/java/util/concurrent/ConcurrentSkipListMap.h2
-rw-r--r--libjava/java/util/concurrent/Exchanger$Node.h2
-rw-r--r--libjava/java/util/concurrent/Exchanger.h2
-rw-r--r--libjava/java/util/concurrent/FutureTask$Sync.h2
-rw-r--r--libjava/java/util/concurrent/LinkedBlockingQueue$Node.h2
-rw-r--r--libjava/java/util/concurrent/ScheduledThreadPoolExecutor.h4
-rw-r--r--libjava/java/util/concurrent/SynchronousQueue$TransferQueue$QNode.h6
-rw-r--r--libjava/java/util/concurrent/SynchronousQueue$TransferQueue.h6
-rw-r--r--libjava/java/util/concurrent/SynchronousQueue$TransferStack$SNode.h6
-rw-r--r--libjava/java/util/concurrent/SynchronousQueue$TransferStack.h2
-rw-r--r--libjava/java/util/concurrent/SynchronousQueue.h2
-rw-r--r--libjava/java/util/concurrent/ThreadPoolExecutor$Worker.h2
-rw-r--r--libjava/java/util/concurrent/ThreadPoolExecutor.h16
-rw-r--r--libjava/java/util/concurrent/atomic/AtomicBoolean.h2
-rw-r--r--libjava/java/util/concurrent/atomic/AtomicInteger.h2
-rw-r--r--libjava/java/util/concurrent/atomic/AtomicLong.h2
-rw-r--r--libjava/java/util/concurrent/atomic/AtomicReference.h2
-rw-r--r--libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.h8
-rw-r--r--libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.h6
-rw-r--r--libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.h8
-rw-r--r--libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer.h6
-rw-r--r--libjava/java/util/logging/ErrorManager.h2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicSpinnerUI$2.h2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicSpinnerUI$4.h2
-rw-r--r--libjava/jni.cc3
-rw-r--r--libjava/jvmti.cc28
-rw-r--r--libjava/libgcj_bc.c1
-rw-r--r--libjava/link.cc35
-rw-r--r--libjava/nogc.cc11
-rw-r--r--libjava/posix.cc4
-rwxr-xr-xlibjava/scripts/makemake.tcl18
-rw-r--r--libjava/sources.am20
-rw-r--r--libjava/sun/reflect/annotation/AnnotationInvocationHandler.h8
-rw-r--r--libjava/sun/reflect/annotation/AnnotationInvocationHandler.java441
-rw-r--r--libjava/testsuite/Makefile.in15
-rw-r--r--libjava/testsuite/libjava.jar/TestClosureGC.jarbin0 -> 3997 bytes
-rw-r--r--libjava/testsuite/libjava.jar/TestClosureGC.java116
-rw-r--r--libjava/testsuite/libjava.jar/TestClosureGC.out1
-rw-r--r--libjava/testsuite/libjava.jar/TestClosureGC.xfail1
-rw-r--r--libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc3
-rw-r--r--libmudflap/ChangeLog9
-rw-r--r--libmudflap/Makefile.am5
-rw-r--r--libmudflap/Makefile.in5
-rw-r--r--libmudflap/testsuite/libmudflap.cth/pass59-frag.c4
-rw-r--r--libobjc/ChangeLog4
-rw-r--r--libobjc/Makefile.in5
-rw-r--r--libssp/ChangeLog5
-rw-r--r--libssp/Makefile.am5
-rw-r--r--libssp/Makefile.in10
-rw-r--r--libstdc++-v3/ChangeLog853
-rw-r--r--libstdc++-v3/Makefile.am4
-rw-r--r--libstdc++-v3/Makefile.in9
-rw-r--r--libstdc++-v3/acinclude.m417
-rw-r--r--libstdc++-v3/config/io/basic_file_stdio.h3
-rw-r--r--libstdc++-v3/config/locale/darwin/ctype_members.cc27
-rw-r--r--libstdc++-v3/config/locale/generic/ctype_members.cc26
-rw-r--r--libstdc++-v3/config/locale/generic/time_members.cc4
-rw-r--r--libstdc++-v3/config/locale/gnu/c++locale_internal.h4
-rw-r--r--libstdc++-v3/config/locale/gnu/ctype_members.cc31
-rwxr-xr-xlibstdc++-v3/configure20728
-rw-r--r--libstdc++-v3/configure.host2
-rw-r--r--libstdc++-v3/crossconfig.m436
-rw-r--r--libstdc++-v3/docs/html/configopts.html8
-rw-r--r--libstdc++-v3/include/Makefile.am53
-rw-r--r--libstdc++-v3/include/Makefile.in88
-rw-r--r--libstdc++-v3/include/bits/c++config35
-rw-r--r--libstdc++-v3/include/bits/char_traits.h11
-rw-r--r--libstdc++-v3/include/bits/ios_base.h4
-rw-r--r--libstdc++-v3/include/bits/istream.tcc31
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h30
-rw-r--r--libstdc++-v3/include/bits/localefwd.h1
-rw-r--r--libstdc++-v3/include/bits/ostream.tcc27
-rw-r--r--libstdc++-v3/include/bits/sstream.tcc5
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h50
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h68
-rw-r--r--libstdc++-v3/include/bits/stl_memory.h367
-rw-r--r--libstdc++-v3/include/bits/stl_numeric.h4
-rw-r--r--libstdc++-v3/include/bits/stl_tempbuf.h4
-rw-r--r--libstdc++-v3/include/bits/stl_tree.h3
-rw-r--r--libstdc++-v3/include/c_compatibility/assert.h14
-rw-r--r--libstdc++-v3/include/c_compatibility/complex.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/ctype.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/errno.h18
-rw-r--r--libstdc++-v3/include/c_compatibility/fenv.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/float.h18
-rw-r--r--libstdc++-v3/include/c_compatibility/inttypes.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/iso646.h18
-rw-r--r--libstdc++-v3/include/c_compatibility/limits.h18
-rw-r--r--libstdc++-v3/include/c_compatibility/locale.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/math.h21
-rw-r--r--libstdc++-v3/include/c_compatibility/setjmp.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/signal.h21
-rw-r--r--libstdc++-v3/include/c_compatibility/stdarg.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/stdbool.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/stddef.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/stdint.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/stdio.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/stdlib.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/string.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/tgmath.h39
-rw-r--r--libstdc++-v3/include/c_compatibility/time.h20
-rw-r--r--libstdc++-v3/include/c_compatibility/wchar.h21
-rw-r--r--libstdc++-v3/include/c_compatibility/wctype.h20
-rw-r--r--libstdc++-v3/include/c_global/cassert49
-rw-r--r--libstdc++-v3/include/c_global/ccomplex (renamed from libstdc++-v3/include/tr1/ref_wrap_iterate.h)28
-rw-r--r--libstdc++-v3/include/c_global/cctype90
-rw-r--r--libstdc++-v3/include/c_global/cerrno57
-rw-r--r--libstdc++-v3/include/c_global/cfenv46
-rw-r--r--libstdc++-v3/include/c_global/cfloat56
-rw-r--r--libstdc++-v3/include/c_global/cinttypes46
-rw-r--r--libstdc++-v3/include/c_global/ciso64638
-rw-r--r--libstdc++-v3/include/c_global/climits56
-rw-r--r--libstdc++-v3/include/c_global/clocale65
-rw-r--r--libstdc++-v3/include/c_global/cmath603
-rw-r--r--libstdc++-v3/include/c_global/cmath.tcc59
-rw-r--r--libstdc++-v3/include/c_global/csetjmp68
-rw-r--r--libstdc++-v3/include/c_global/csignal64
-rw-r--r--libstdc++-v3/include/c_global/cstdarg68
-rw-r--r--libstdc++-v3/include/c_global/cstdbool46
-rw-r--r--libstdc++-v3/include/c_global/cstddef60
-rw-r--r--libstdc++-v3/include/c_global/cstdint46
-rw-r--r--libstdc++-v3/include/c_global/cstdio194
-rw-r--r--libstdc++-v3/include/c_global/cstdlib231
-rw-r--r--libstdc++-v3/include/c_global/cstring130
-rw-r--r--libstdc++-v3/include/c_global/ctgmath46
-rw-r--r--libstdc++-v3/include/c_global/ctime86
-rw-r--r--libstdc++-v3/include/c_global/cwchar284
-rw-r--r--libstdc++-v3/include/c_global/cwctype116
-rw-r--r--libstdc++-v3/include/debug/functions.h2
-rw-r--r--libstdc++-v3/include/ext/functional4
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp15
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp2
-rw-r--r--libstdc++-v3/include/ext/pb_ds/exception.hpp3
-rw-r--r--libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp3
-rw-r--r--libstdc++-v3/include/ext/rope5
-rw-r--r--libstdc++-v3/include/ext/stdio_sync_filebuf.h3
-rw-r--r--libstdc++-v3/include/ext/type_traits.h7
-rw-r--r--libstdc++-v3/include/std/algorithm13
-rw-r--r--libstdc++-v3/include/std/array46
-rw-r--r--libstdc++-v3/include/std/bitset33
-rw-r--r--libstdc++-v3/include/std/c++0x_warning.h41
-rw-r--r--libstdc++-v3/include/std/complex14
-rw-r--r--libstdc++-v3/include/std/deque12
-rw-r--r--libstdc++-v3/include/std/fstream16
-rw-r--r--libstdc++-v3/include/std/functional16
-rw-r--r--libstdc++-v3/include/std/iomanip69
-rw-r--r--libstdc++-v3/include/std/ios12
-rw-r--r--libstdc++-v3/include/std/iosfwd13
-rw-r--r--libstdc++-v3/include/std/iostream8
-rw-r--r--libstdc++-v3/include/std/istream13
-rw-r--r--libstdc++-v3/include/std/iterator8
-rw-r--r--libstdc++-v3/include/std/limits8
-rw-r--r--libstdc++-v3/include/std/list14
-rw-r--r--libstdc++-v3/include/std/locale8
-rw-r--r--libstdc++-v3/include/std/map8
-rw-r--r--libstdc++-v3/include/std/memory343
-rw-r--r--libstdc++-v3/include/std/numeric11
-rw-r--r--libstdc++-v3/include/std/ostream12
-rw-r--r--libstdc++-v3/include/std/queue21
-rw-r--r--libstdc++-v3/include/std/random46
-rw-r--r--libstdc++-v3/include/std/regex46
-rw-r--r--libstdc++-v3/include/std/set8
-rw-r--r--libstdc++-v3/include/std/sstream8
-rw-r--r--libstdc++-v3/include/std/stack15
-rw-r--r--libstdc++-v3/include/std/stdexcept8
-rw-r--r--libstdc++-v3/include/std/streambuf8
-rw-r--r--libstdc++-v3/include/std/string8
-rw-r--r--libstdc++-v3/include/std/tuple46
-rw-r--r--libstdc++-v3/include/std/type_traits46
-rw-r--r--libstdc++-v3/include/std/unordered_map46
-rw-r--r--libstdc++-v3/include/std/unordered_set46
-rw-r--r--libstdc++-v3/include/std/utility14
-rw-r--r--libstdc++-v3/include/std/valarray13
-rw-r--r--libstdc++-v3/include/std/vector12
-rw-r--r--libstdc++-v3/include/tr1/array11
-rw-r--r--libstdc++-v3/include/tr1/bind_iterate.h78
-rw-r--r--libstdc++-v3/include/tr1/bind_repeat.h192
-rw-r--r--libstdc++-v3/include/tr1/boost_shared_ptr.h2
-rw-r--r--libstdc++-v3/include/tr1/ccomplex (renamed from libstdc++-v3/include/tr1/ref_fwd.h)34
-rw-r--r--libstdc++-v3/include/tr1/cctype2
-rw-r--r--libstdc++-v3/include/tr1/cfenv2
-rw-r--r--libstdc++-v3/include/tr1/cinttypes2
-rw-r--r--libstdc++-v3/include/tr1/cmath6
-rw-r--r--libstdc++-v3/include/tr1/common.h2
-rw-r--r--libstdc++-v3/include/tr1/complex10
-rw-r--r--libstdc++-v3/include/tr1/complex.h (renamed from libstdc++-v3/include/tr1/mu_iterate.h)33
-rw-r--r--libstdc++-v3/include/tr1/cstdint2
-rw-r--r--libstdc++-v3/include/tr1/cstdio2
-rw-r--r--libstdc++-v3/include/tr1/cstdlib2
-rw-r--r--libstdc++-v3/include/tr1/cwchar2
-rw-r--r--libstdc++-v3/include/tr1/cwctype2
-rw-r--r--libstdc++-v3/include/tr1/functional1233
-rw-r--r--libstdc++-v3/include/tr1/functional_hash.h2
-rw-r--r--libstdc++-v3/include/tr1/functional_iterate.h922
-rw-r--r--libstdc++-v3/include/tr1/hashtable42
-rw-r--r--libstdc++-v3/include/tr1/hashtable_policy.h4
-rw-r--r--libstdc++-v3/include/tr1/math.h112
-rw-r--r--libstdc++-v3/include/tr1/memory18
-rw-r--r--libstdc++-v3/include/tr1/random22
-rw-r--r--libstdc++-v3/include/tr1/random.tcc217
-rw-r--r--libstdc++-v3/include/tr1/regex2429
-rw-r--r--libstdc++-v3/include/tr1/repeat.h677
-rw-r--r--libstdc++-v3/include/tr1/stdlib.h12
-rw-r--r--libstdc++-v3/include/tr1/tuple491
-rw-r--r--libstdc++-v3/include/tr1/tuple_defs.h114
-rw-r--r--libstdc++-v3/include/tr1/tuple_iterate.h172
-rw-r--r--libstdc++-v3/include/tr1/type_traits2
-rw-r--r--libstdc++-v3/include/tr1/type_traits_fwd.h2
-rw-r--r--libstdc++-v3/include/tr1/unordered_map118
-rw-r--r--libstdc++-v3/include/tr1/unordered_set118
-rw-r--r--libstdc++-v3/include/tr1/utility4
-rw-r--r--libstdc++-v3/libmath/Makefile.in4
-rw-r--r--libstdc++-v3/libsupc++/Makefile.in4
-rw-r--r--libstdc++-v3/po/Makefile.in4
-rw-r--r--libstdc++-v3/src/Makefile.in4
-rw-r--r--libstdc++-v3/src/ctype.cc31
-rw-r--r--libstdc++-v3/src/debug.cc3
-rw-r--r--libstdc++-v3/src/iostream-inst.cc4
-rw-r--r--libstdc++-v3/src/localename.cc4
-rw-r--r--libstdc++-v3/testsuite/17_intro/headers/c++200x/all.cc115
-rw-r--r--libstdc++-v3/testsuite/17_intro/headers/c++200x/all_multiple_inclusion.cc209
-rw-r--r--libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc67
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc58
-rw-r--r--libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc2
-rw-r--r--libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc28
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc5
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc5
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc3
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/4.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/5.cc4
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/hash/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc27
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc6
-rw-r--r--libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc33
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation.cc24
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc32
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc4
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc32
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc35
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc28
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc52
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc52
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc31
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc6
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/10.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/7.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc3
-rw-r--r--libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc26
-rw-r--r--libstdc++-v3/testsuite/Makefile.in4
-rw-r--r--libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc9
-rw-r--r--libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc9
-rw-r--r--libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc5
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp18
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp135
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc3
-rw-r--r--libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc3
-rw-r--r--libstdc++-v3/testsuite/thread/pthread1.cc8
-rw-r--r--libstdc++-v3/testsuite/thread/pthread2.cc7
-rw-r--r--libstdc++-v3/testsuite/thread/pthread3.cc7
-rw-r--r--libstdc++-v3/testsuite/thread/pthread4.cc7
-rw-r--r--libstdc++-v3/testsuite/thread/pthread5.cc8
-rw-r--r--libstdc++-v3/testsuite/thread/pthread6.cc7
-rw-r--r--libstdc++-v3/testsuite/thread/pthread7-rope.cc6
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc7
-rw-r--r--libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc7
-rw-r--r--libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc3
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc4
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc131
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc11
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc131
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc13
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc130
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc10
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc130
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc10
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc44
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc44
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc44
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc44
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc47
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc47
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc58
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc37
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc37
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc37
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc37
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_extended.cc43
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc39
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc37
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc49
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc49
-rw-r--r--libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc42
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc (renamed from libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc (renamed from libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc (renamed from libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc (renamed from libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc (renamed from libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types.cc)0
-rw-r--r--libstdc++-v3/testsuite/tr1/headers.cc5
-rw-r--r--libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp4
-rw-r--r--libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp8
-rw-r--r--libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp6
-rw-r--r--libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc1
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi_check.cc3
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_hooks.cc10
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_hooks.h10
-rw-r--r--maintainer-scripts/ChangeLog4
-rwxr-xr-xmaintainer-scripts/update_version_svn2
-rw-r--r--zlib/ChangeLog.gcj5
-rw-r--r--zlib/Makefile.am6
-rw-r--r--zlib/Makefile.in6
1454 files changed, 103432 insertions, 39579 deletions
diff --git a/ChangeLog b/ChangeLog
index e1c3ba09832..f892ab34bcb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,40 @@
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.def (fixincludes): Remove unneeded "missing" lines.
+ * Makefile.in: Regenerate
+
+2007-03-07 Andreas Schwab <schwab@suse.de>
+
+ * configure: Regenerate.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * configure.ac: Add "--with-pdfdir" configure option,
+ which defines pdfdir variable.
+ * Makefile.def (target=fixincludes): Add install-pdf to
+ missing targets.
+ (recursive_targets): Add install-pdf target.
+ (flags_to_pass): Add pdfdir.
+ * Makefile.tpl: Add pdfdir handling, add do-install-pdf
+ target.
+ * configure: Regenerate
+ * Makefile.in: Regenerate
+
+2007-02-28 Eric Christopher <echristo@apple.com>
+
+ Revert:
+ 2006-12-07 Mike Stump <mrs@apple.com>
+
+ * Makefile.def (dependencies): Add dependency for
+ install-target-libssp and install-target-libgomp on
+ install-gcc.
+ * Makefile.in: Regenerate.
+
+2007-02-27 Matt Kraai <kraai@ftbfs.org>
+
+ * configure: Regenerate.
+ * configure.ac: Move statements after variable declarations.
+
2007-02-19 Kaz Kojima <kkojima@gcc.gnu.org>
* MAINTAINERS: Add myself as sh maintainer.
@@ -142,7 +179,7 @@
* configure.in: Try to link to functions only in mpfr 2.2.x
to improve robustness of configure tests.
* configure: Regenerate.
-
+
2007-01-09 Uros Bizjak <ubizjak@gmail.com>
* MAINTAINERS: Add myself as i386 maintainer.
@@ -259,7 +296,6 @@
2006-12-11 Alan Modra <amodra@bigpond.net.au>
* configure.in: Handle spu makefile frag.
- * config/mt-spu: New file.
* Makefile.tpl (MAINT): Define
(MAINTAINER_MODE_FALSE, MAINTAINER_MODE_TRUE): Define.
* configure: Regenerate.
diff --git a/MAINTAINERS b/MAINTAINERS
index 72ba0aa3d1b..7c2fc086c91 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -97,7 +97,6 @@ xtensa port Bob Wilson bob.wilson@acm.org
darwin port Dale Johannesen dalej@apple.com
darwin port Mike Stump mrs@apple.com
-darwin port Stan Shebs shebs@apple.com
darwin port Eric Christopher echristo@apple.com
DJGPP DJ Delorie dj@delorie.com
freebsd Loren J. Rittle ljrittle@acm.org
@@ -137,9 +136,6 @@ java Per Bothner per@bothner.com
java Andrew Haley aph@redhat.com
java Tom Tromey tromey@redhat.com
mercury Fergus Henderson fjh@cs.mu.oz.au
-objective-c Stan Shebs shebs@apple.com
-objective-c Ovidiu Predescu ovidiu@cup.hp.com
-objective-c/c++ Ziemowit Laski zlaski@apple.com
objective-c/c++ Mike Stump mrs@apple.com
treelang Tim Josling tej@melbpc.org.au
treelang James A. Morrison phython@gcc.gnu.org
@@ -237,7 +233,7 @@ outside of the parts of the compiler they maintain.
Write After Approval (last name alphabetical order)
Mark G. Adams mark.g.adams@sympatico.ca
-Matt Austern austern@apple.com
+Matt Austern austern@google.com
David Ayers d.ayers@inode.at
Giovanni Bajo giovannibajo@gcc.gnu.org
Scott Bambrough scottb@netwinder.org
@@ -346,7 +342,6 @@ Adam Nemet anemet@caviumnetworks.com
Dan Nicolaescu dann@ics.uci.edu
Dorit Nuzman dorit@il.ibm.com
David O'Brien obrien@FreeBSD.org
-Turly O'Connor turly@apple.com
Carlos O'Donell carlos@codesourcery.com
Jeffrey D. Oldham oldham@codesourcery.com
Andrea Ornstein andrea.ornstein@st.com
@@ -365,10 +360,8 @@ Erven Rohou erven.rohou@st.com
Gavin Romig-Koch gavin@redhat.com
Ira Rosen irar@il.ibm.com
Maciej W. Rozycki macro@linux-mips.org
-Ira Ruben ira@apple.com
Douglas Rupp rupp@gnat.com
Matthew Sachs msachs@apple.com
-Alex Samuel samuel@codesourcery.com
Svein Seldal svein@dev.seldal.com
Thiemo Seufer ths@networkno.de
Mark Shinwell shinwell@codesourcery.com
diff --git a/Makefile.def b/Makefile.def
index 33d4464d274..986b1eda0ee 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -51,12 +51,7 @@ host_modules= { module= fileutils; };
host_modules= { module= findutils; };
host_modules= { module= find; };
host_modules= { module= fixincludes;
- missing= info;
- missing= dvi;
- missing= pdf;
- missing= TAGS;
- missing= install-info;
- missing= installcheck; };
+ missing= TAGS; };
host_modules= { module= flex; no_check_cross= true; };
host_modules= { module= gas; bootstrap=true; };
host_modules= { module= gcc; bootstrap=true;
@@ -166,6 +161,9 @@ recursive_targets = { make_target= TAGS;
recursive_targets = { make_target= install-info;
depend=configure;
depend=info; };
+recursive_targets = { make_target= install-pdf;
+ depend=configure;
+ depend=pdf; };
recursive_targets = { make_target= install-html;
depend=configure;
depend=html; };
@@ -189,6 +187,7 @@ flags_to_pass = { flag= includedir ; };
flags_to_pass = { flag= datarootdir ; };
flags_to_pass = { flag= docdir ; };
flags_to_pass = { flag= infodir ; };
+flags_to_pass = { flag= pdfdir ; };
flags_to_pass = { flag= htmldir ; };
flags_to_pass = { flag= libdir ; };
flags_to_pass = { flag= libexecdir ; };
@@ -484,10 +483,6 @@ dependencies = { module=all-target-libobjc; on=all-target-libiberty; };
dependencies = { module=all-target-libobjc; on=all-target-boehm-gc; };
dependencies = { module=all-target-libstdc++-v3; on=all-target-libiberty; };
-// Target libraries installed under gcc need to be installed before gcc
-dependencies = { module=install-target-libssp; on=install-gcc; };
-dependencies = { module=install-target-libgomp; on=install-gcc; };
-
// Target modules in the 'src' repository.
lang_env_dependencies = { module=examples; };
lang_env_dependencies = { module=libtermcap; };
diff --git a/Makefile.in b/Makefile.in
index 23e647678d6..4c6625e1372 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -58,6 +58,7 @@ oldincludedir = @oldincludedir@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
+pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@
man1dir = $(mandir)/man1
@@ -441,6 +442,7 @@ BASE_FLAGS_TO_PASS = \
"datarootdir=$(datarootdir)" \
"docdir=$(docdir)" \
"infodir=$(infodir)" \
+ "pdfdir=$(pdfdir)" \
"htmldir=$(htmldir)" \
"libdir=$(libdir)" \
"libexecdir=$(libexecdir)" \
@@ -1484,6 +1486,112 @@ install-info-target: maybe-install-info-target-rda
install-info-target: maybe-install-info-target-libada
install-info-target: maybe-install-info-target-libgomp
+.PHONY: do-install-pdf
+do-install-pdf:
+ @: $(MAKE); $(unstage)
+ @r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(MAKE) $(RECURSE_FLAGS_TO_PASS) install-pdf-host \
+ install-pdf-target
+
+
+.PHONY: install-pdf-host
+
+install-pdf-host: maybe-install-pdf-ash
+install-pdf-host: maybe-install-pdf-autoconf
+install-pdf-host: maybe-install-pdf-automake
+install-pdf-host: maybe-install-pdf-bash
+install-pdf-host: maybe-install-pdf-bfd
+install-pdf-host: maybe-install-pdf-opcodes
+install-pdf-host: maybe-install-pdf-binutils
+install-pdf-host: maybe-install-pdf-bison
+install-pdf-host: maybe-install-pdf-byacc
+install-pdf-host: maybe-install-pdf-bzip2
+install-pdf-host: maybe-install-pdf-dejagnu
+install-pdf-host: maybe-install-pdf-diff
+install-pdf-host: maybe-install-pdf-dosutils
+install-pdf-host: maybe-install-pdf-etc
+install-pdf-host: maybe-install-pdf-fastjar
+install-pdf-host: maybe-install-pdf-fileutils
+install-pdf-host: maybe-install-pdf-findutils
+install-pdf-host: maybe-install-pdf-find
+install-pdf-host: maybe-install-pdf-fixincludes
+install-pdf-host: maybe-install-pdf-flex
+install-pdf-host: maybe-install-pdf-gas
+install-pdf-host: maybe-install-pdf-gcc
+install-pdf-host: maybe-install-pdf-gawk
+install-pdf-host: maybe-install-pdf-gettext
+install-pdf-host: maybe-install-pdf-gmp
+install-pdf-host: maybe-install-pdf-mpfr
+install-pdf-host: maybe-install-pdf-gnuserv
+install-pdf-host: maybe-install-pdf-gprof
+install-pdf-host: maybe-install-pdf-gzip
+install-pdf-host: maybe-install-pdf-hello
+install-pdf-host: maybe-install-pdf-indent
+install-pdf-host: maybe-install-pdf-intl
+install-pdf-host: maybe-install-pdf-tcl
+install-pdf-host: maybe-install-pdf-itcl
+install-pdf-host: maybe-install-pdf-ld
+install-pdf-host: maybe-install-pdf-libcpp
+install-pdf-host: maybe-install-pdf-libdecnumber
+install-pdf-host: maybe-install-pdf-libgui
+install-pdf-host: maybe-install-pdf-libiberty
+install-pdf-host: maybe-install-pdf-libtool
+install-pdf-host: maybe-install-pdf-m4
+install-pdf-host: maybe-install-pdf-make
+install-pdf-host: maybe-install-pdf-mmalloc
+install-pdf-host: maybe-install-pdf-patch
+install-pdf-host: maybe-install-pdf-perl
+install-pdf-host: maybe-install-pdf-prms
+install-pdf-host: maybe-install-pdf-rcs
+install-pdf-host: maybe-install-pdf-readline
+install-pdf-host: maybe-install-pdf-release
+install-pdf-host: maybe-install-pdf-recode
+install-pdf-host: maybe-install-pdf-sed
+install-pdf-host: maybe-install-pdf-send-pr
+install-pdf-host: maybe-install-pdf-shellutils
+install-pdf-host: maybe-install-pdf-sid
+install-pdf-host: maybe-install-pdf-sim
+install-pdf-host: maybe-install-pdf-tar
+install-pdf-host: maybe-install-pdf-texinfo
+install-pdf-host: maybe-install-pdf-textutils
+install-pdf-host: maybe-install-pdf-time
+install-pdf-host: maybe-install-pdf-uudecode
+install-pdf-host: maybe-install-pdf-wdiff
+install-pdf-host: maybe-install-pdf-zip
+install-pdf-host: maybe-install-pdf-zlib
+install-pdf-host: maybe-install-pdf-gdb
+install-pdf-host: maybe-install-pdf-expect
+install-pdf-host: maybe-install-pdf-guile
+install-pdf-host: maybe-install-pdf-tk
+install-pdf-host: maybe-install-pdf-libtermcap
+install-pdf-host: maybe-install-pdf-utils
+install-pdf-host: maybe-install-pdf-gnattools
+
+.PHONY: install-pdf-target
+
+install-pdf-target: maybe-install-pdf-target-libstdc++-v3
+install-pdf-target: maybe-install-pdf-target-libmudflap
+install-pdf-target: maybe-install-pdf-target-libssp
+install-pdf-target: maybe-install-pdf-target-newlib
+install-pdf-target: maybe-install-pdf-target-libgcc
+install-pdf-target: maybe-install-pdf-target-libgfortran
+install-pdf-target: maybe-install-pdf-target-libobjc
+install-pdf-target: maybe-install-pdf-target-libtermcap
+install-pdf-target: maybe-install-pdf-target-winsup
+install-pdf-target: maybe-install-pdf-target-libgloss
+install-pdf-target: maybe-install-pdf-target-libiberty
+install-pdf-target: maybe-install-pdf-target-gperf
+install-pdf-target: maybe-install-pdf-target-examples
+install-pdf-target: maybe-install-pdf-target-libffi
+install-pdf-target: maybe-install-pdf-target-libjava
+install-pdf-target: maybe-install-pdf-target-zlib
+install-pdf-target: maybe-install-pdf-target-boehm-gc
+install-pdf-target: maybe-install-pdf-target-qthreads
+install-pdf-target: maybe-install-pdf-target-rda
+install-pdf-target: maybe-install-pdf-target-libada
+install-pdf-target: maybe-install-pdf-target-libgomp
+
.PHONY: do-install-html
do-install-html:
@: $(MAKE); $(unstage)
@@ -2123,7 +2231,8 @@ maintainer-clean-target: maybe-maintainer-clean-target-libgomp
# Here are the targets which correspond to the do-X targets.
-.PHONY: info installcheck dvi pdf html install-info install-html
+.PHONY: info installcheck dvi pdf html
+.PHONY: install-info install-pdf install-html
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
@@ -2142,6 +2251,8 @@ install-info: do-install-info dir.info
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
else true ; fi
+install-pdf: do-install-pdf
+
install-html: do-install-html
local-clean:
@@ -3178,6 +3289,33 @@ install-info-ash: \
@endif ash
+.PHONY: maybe-install-pdf-ash install-pdf-ash
+maybe-install-pdf-ash:
+@if ash
+maybe-install-pdf-ash: install-pdf-ash
+
+install-pdf-ash: \
+ configure-ash \
+ pdf-ash
+ @: $(MAKE); $(unstage)
+ @[ -f ./ash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in ash" ; \
+ (cd $(HOST_SUBDIR)/ash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif ash
+
.PHONY: maybe-install-html-ash install-html-ash
maybe-install-html-ash:
@if ash
@@ -3575,6 +3713,33 @@ install-info-autoconf: \
@endif autoconf
+.PHONY: maybe-install-pdf-autoconf install-pdf-autoconf
+maybe-install-pdf-autoconf:
+@if autoconf
+maybe-install-pdf-autoconf: install-pdf-autoconf
+
+install-pdf-autoconf: \
+ configure-autoconf \
+ pdf-autoconf
+ @: $(MAKE); $(unstage)
+ @[ -f ./autoconf/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in autoconf" ; \
+ (cd $(HOST_SUBDIR)/autoconf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif autoconf
+
.PHONY: maybe-install-html-autoconf install-html-autoconf
maybe-install-html-autoconf:
@if autoconf
@@ -3972,6 +4137,33 @@ install-info-automake: \
@endif automake
+.PHONY: maybe-install-pdf-automake install-pdf-automake
+maybe-install-pdf-automake:
+@if automake
+maybe-install-pdf-automake: install-pdf-automake
+
+install-pdf-automake: \
+ configure-automake \
+ pdf-automake
+ @: $(MAKE); $(unstage)
+ @[ -f ./automake/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in automake" ; \
+ (cd $(HOST_SUBDIR)/automake && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif automake
+
.PHONY: maybe-install-html-automake install-html-automake
maybe-install-html-automake:
@if automake
@@ -4369,6 +4561,33 @@ install-info-bash: \
@endif bash
+.PHONY: maybe-install-pdf-bash install-pdf-bash
+maybe-install-pdf-bash:
+@if bash
+maybe-install-pdf-bash: install-pdf-bash
+
+install-pdf-bash: \
+ configure-bash \
+ pdf-bash
+ @: $(MAKE); $(unstage)
+ @[ -f ./bash/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bash" ; \
+ (cd $(HOST_SUBDIR)/bash && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bash
+
.PHONY: maybe-install-html-bash install-html-bash
maybe-install-html-bash:
@if bash
@@ -5137,6 +5356,32 @@ install-info-bfd: \
@endif bfd
+.PHONY: maybe-install-pdf-bfd install-pdf-bfd
+maybe-install-pdf-bfd:
+@if bfd
+maybe-install-pdf-bfd: install-pdf-bfd
+
+install-pdf-bfd: \
+ configure-bfd \
+ pdf-bfd
+ @[ -f ./bfd/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bfd" ; \
+ (cd $(HOST_SUBDIR)/bfd && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bfd
+
.PHONY: maybe-install-html-bfd install-html-bfd
maybe-install-html-bfd:
@if bfd
@@ -5899,6 +6144,32 @@ install-info-opcodes: \
@endif opcodes
+.PHONY: maybe-install-pdf-opcodes install-pdf-opcodes
+maybe-install-pdf-opcodes:
+@if opcodes
+maybe-install-pdf-opcodes: install-pdf-opcodes
+
+install-pdf-opcodes: \
+ configure-opcodes \
+ pdf-opcodes
+ @[ -f ./opcodes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in opcodes" ; \
+ (cd $(HOST_SUBDIR)/opcodes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif opcodes
+
.PHONY: maybe-install-html-opcodes install-html-opcodes
maybe-install-html-opcodes:
@if opcodes
@@ -6661,6 +6932,32 @@ install-info-binutils: \
@endif binutils
+.PHONY: maybe-install-pdf-binutils install-pdf-binutils
+maybe-install-pdf-binutils:
+@if binutils
+maybe-install-pdf-binutils: install-pdf-binutils
+
+install-pdf-binutils: \
+ configure-binutils \
+ pdf-binutils
+ @[ -f ./binutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in binutils" ; \
+ (cd $(HOST_SUBDIR)/binutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif binutils
+
.PHONY: maybe-install-html-binutils install-html-binutils
maybe-install-html-binutils:
@if binutils
@@ -7055,6 +7352,33 @@ install-info-bison: \
@endif bison
+.PHONY: maybe-install-pdf-bison install-pdf-bison
+maybe-install-pdf-bison:
+@if bison
+maybe-install-pdf-bison: install-pdf-bison
+
+install-pdf-bison: \
+ configure-bison \
+ pdf-bison
+ @: $(MAKE); $(unstage)
+ @[ -f ./bison/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bison" ; \
+ (cd $(HOST_SUBDIR)/bison && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bison
+
.PHONY: maybe-install-html-bison install-html-bison
maybe-install-html-bison:
@if bison
@@ -7455,6 +7779,33 @@ install-info-byacc: \
@endif byacc
+.PHONY: maybe-install-pdf-byacc install-pdf-byacc
+maybe-install-pdf-byacc:
+@if byacc
+maybe-install-pdf-byacc: install-pdf-byacc
+
+install-pdf-byacc: \
+ configure-byacc \
+ pdf-byacc
+ @: $(MAKE); $(unstage)
+ @[ -f ./byacc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in byacc" ; \
+ (cd $(HOST_SUBDIR)/byacc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif byacc
+
.PHONY: maybe-install-html-byacc install-html-byacc
maybe-install-html-byacc:
@if byacc
@@ -7852,6 +8203,33 @@ install-info-bzip2: \
@endif bzip2
+.PHONY: maybe-install-pdf-bzip2 install-pdf-bzip2
+maybe-install-pdf-bzip2:
+@if bzip2
+maybe-install-pdf-bzip2: install-pdf-bzip2
+
+install-pdf-bzip2: \
+ configure-bzip2 \
+ pdf-bzip2
+ @: $(MAKE); $(unstage)
+ @[ -f ./bzip2/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in bzip2" ; \
+ (cd $(HOST_SUBDIR)/bzip2 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif bzip2
+
.PHONY: maybe-install-html-bzip2 install-html-bzip2
maybe-install-html-bzip2:
@if bzip2
@@ -8249,6 +8627,33 @@ install-info-dejagnu: \
@endif dejagnu
+.PHONY: maybe-install-pdf-dejagnu install-pdf-dejagnu
+maybe-install-pdf-dejagnu:
+@if dejagnu
+maybe-install-pdf-dejagnu: install-pdf-dejagnu
+
+install-pdf-dejagnu: \
+ configure-dejagnu \
+ pdf-dejagnu
+ @: $(MAKE); $(unstage)
+ @[ -f ./dejagnu/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in dejagnu" ; \
+ (cd $(HOST_SUBDIR)/dejagnu && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif dejagnu
+
.PHONY: maybe-install-html-dejagnu install-html-dejagnu
maybe-install-html-dejagnu:
@if dejagnu
@@ -8646,6 +9051,33 @@ install-info-diff: \
@endif diff
+.PHONY: maybe-install-pdf-diff install-pdf-diff
+maybe-install-pdf-diff:
+@if diff
+maybe-install-pdf-diff: install-pdf-diff
+
+install-pdf-diff: \
+ configure-diff \
+ pdf-diff
+ @: $(MAKE); $(unstage)
+ @[ -f ./diff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in diff" ; \
+ (cd $(HOST_SUBDIR)/diff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif diff
+
.PHONY: maybe-install-html-diff install-html-diff
maybe-install-html-diff:
@if diff
@@ -9037,6 +9469,33 @@ install-info-dosutils: \
@endif dosutils
+.PHONY: maybe-install-pdf-dosutils install-pdf-dosutils
+maybe-install-pdf-dosutils:
+@if dosutils
+maybe-install-pdf-dosutils: install-pdf-dosutils
+
+install-pdf-dosutils: \
+ configure-dosutils \
+ pdf-dosutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./dosutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in dosutils" ; \
+ (cd $(HOST_SUBDIR)/dosutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif dosutils
+
.PHONY: maybe-install-html-dosutils install-html-dosutils
maybe-install-html-dosutils:
@if dosutils
@@ -9434,6 +9893,33 @@ install-info-etc: \
@endif etc
+.PHONY: maybe-install-pdf-etc install-pdf-etc
+maybe-install-pdf-etc:
+@if etc
+maybe-install-pdf-etc: install-pdf-etc
+
+install-pdf-etc: \
+ configure-etc \
+ pdf-etc
+ @: $(MAKE); $(unstage)
+ @[ -f ./etc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in etc" ; \
+ (cd $(HOST_SUBDIR)/etc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif etc
+
.PHONY: maybe-install-html-etc install-html-etc
maybe-install-html-etc:
@if etc
@@ -9834,6 +10320,33 @@ install-info-fastjar: \
@endif fastjar
+.PHONY: maybe-install-pdf-fastjar install-pdf-fastjar
+maybe-install-pdf-fastjar:
+@if fastjar
+maybe-install-pdf-fastjar: install-pdf-fastjar
+
+install-pdf-fastjar: \
+ configure-fastjar \
+ pdf-fastjar
+ @: $(MAKE); $(unstage)
+ @[ -f ./fastjar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fastjar" ; \
+ (cd $(HOST_SUBDIR)/fastjar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif fastjar
+
.PHONY: maybe-install-html-fastjar install-html-fastjar
maybe-install-html-fastjar:
@if fastjar
@@ -10231,6 +10744,33 @@ install-info-fileutils: \
@endif fileutils
+.PHONY: maybe-install-pdf-fileutils install-pdf-fileutils
+maybe-install-pdf-fileutils:
+@if fileutils
+maybe-install-pdf-fileutils: install-pdf-fileutils
+
+install-pdf-fileutils: \
+ configure-fileutils \
+ pdf-fileutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./fileutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fileutils" ; \
+ (cd $(HOST_SUBDIR)/fileutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif fileutils
+
.PHONY: maybe-install-html-fileutils install-html-fileutils
maybe-install-html-fileutils:
@if fileutils
@@ -10628,6 +11168,33 @@ install-info-findutils: \
@endif findutils
+.PHONY: maybe-install-pdf-findutils install-pdf-findutils
+maybe-install-pdf-findutils:
+@if findutils
+maybe-install-pdf-findutils: install-pdf-findutils
+
+install-pdf-findutils: \
+ configure-findutils \
+ pdf-findutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./findutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in findutils" ; \
+ (cd $(HOST_SUBDIR)/findutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif findutils
+
.PHONY: maybe-install-html-findutils install-html-findutils
maybe-install-html-findutils:
@if findutils
@@ -11025,6 +11592,33 @@ install-info-find: \
@endif find
+.PHONY: maybe-install-pdf-find install-pdf-find
+maybe-install-pdf-find:
+@if find
+maybe-install-pdf-find: install-pdf-find
+
+install-pdf-find: \
+ configure-find \
+ pdf-find
+ @: $(MAKE); $(unstage)
+ @[ -f ./find/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in find" ; \
+ (cd $(HOST_SUBDIR)/find && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif find
+
.PHONY: maybe-install-html-find install-html-find
maybe-install-html-find:
@if find
@@ -11270,8 +11864,24 @@ maybe-info-fixincludes:
@if fixincludes
maybe-info-fixincludes: info-fixincludes
-# fixincludes doesn't support info.
-info-fixincludes:
+info-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing info in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ info) \
+ || exit 1
@endif fixincludes
@@ -11280,8 +11890,24 @@ maybe-dvi-fixincludes:
@if fixincludes
maybe-dvi-fixincludes: dvi-fixincludes
-# fixincludes doesn't support dvi.
-dvi-fixincludes:
+dvi-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing dvi in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ dvi) \
+ || exit 1
@endif fixincludes
@@ -11290,8 +11916,24 @@ maybe-pdf-fixincludes:
@if fixincludes
maybe-pdf-fixincludes: pdf-fixincludes
-# fixincludes doesn't support pdf.
-pdf-fixincludes:
+pdf-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing pdf in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ pdf) \
+ || exit 1
@endif fixincludes
@@ -11336,8 +11978,52 @@ maybe-install-info-fixincludes:
@if fixincludes
maybe-install-info-fixincludes: install-info-fixincludes
-# fixincludes doesn't support install-info.
-install-info-fixincludes:
+install-info-fixincludes: \
+ configure-fixincludes \
+ info-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-info in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-info) \
+ || exit 1
+
+@endif fixincludes
+
+.PHONY: maybe-install-pdf-fixincludes install-pdf-fixincludes
+maybe-install-pdf-fixincludes:
+@if fixincludes
+maybe-install-pdf-fixincludes: install-pdf-fixincludes
+
+install-pdf-fixincludes: \
+ configure-fixincludes \
+ pdf-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
@endif fixincludes
@@ -11373,8 +12059,24 @@ maybe-installcheck-fixincludes:
@if fixincludes
maybe-installcheck-fixincludes: installcheck-fixincludes
-# fixincludes doesn't support installcheck.
-installcheck-fixincludes:
+installcheck-fixincludes: \
+ configure-fixincludes
+ @: $(MAKE); $(unstage)
+ @[ -f ./fixincludes/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing installcheck in fixincludes" ; \
+ (cd $(HOST_SUBDIR)/fixincludes && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ installcheck) \
+ || exit 1
@endif fixincludes
@@ -11725,6 +12427,33 @@ install-info-flex: \
@endif flex
+.PHONY: maybe-install-pdf-flex install-pdf-flex
+maybe-install-pdf-flex:
+@if flex
+maybe-install-pdf-flex: install-pdf-flex
+
+install-pdf-flex: \
+ configure-flex \
+ pdf-flex
+ @: $(MAKE); $(unstage)
+ @[ -f ./flex/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in flex" ; \
+ (cd $(HOST_SUBDIR)/flex && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif flex
+
.PHONY: maybe-install-html-flex install-html-flex
maybe-install-html-flex:
@if flex
@@ -12493,6 +13222,32 @@ install-info-gas: \
@endif gas
+.PHONY: maybe-install-pdf-gas install-pdf-gas
+maybe-install-pdf-gas:
+@if gas
+maybe-install-pdf-gas: install-pdf-gas
+
+install-pdf-gas: \
+ configure-gas \
+ pdf-gas
+ @[ -f ./gas/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gas" ; \
+ (cd $(HOST_SUBDIR)/gas && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gas
+
.PHONY: maybe-install-html-gas install-html-gas
maybe-install-html-gas:
@if gas
@@ -13255,6 +14010,32 @@ install-info-gcc: \
@endif gcc
+.PHONY: maybe-install-pdf-gcc install-pdf-gcc
+maybe-install-pdf-gcc:
+@if gcc
+maybe-install-pdf-gcc: install-pdf-gcc
+
+install-pdf-gcc: \
+ configure-gcc \
+ pdf-gcc
+ @[ -f ./gcc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gcc" ; \
+ (cd $(HOST_SUBDIR)/gcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gcc
+
.PHONY: maybe-install-html-gcc install-html-gcc
maybe-install-html-gcc:
@if gcc
@@ -13646,6 +14427,33 @@ install-info-gawk: \
@endif gawk
+.PHONY: maybe-install-pdf-gawk install-pdf-gawk
+maybe-install-pdf-gawk:
+@if gawk
+maybe-install-pdf-gawk: install-pdf-gawk
+
+install-pdf-gawk: \
+ configure-gawk \
+ pdf-gawk
+ @: $(MAKE); $(unstage)
+ @[ -f ./gawk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gawk" ; \
+ (cd $(HOST_SUBDIR)/gawk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gawk
+
.PHONY: maybe-install-html-gawk install-html-gawk
maybe-install-html-gawk:
@if gawk
@@ -14043,6 +14851,33 @@ install-info-gettext: \
@endif gettext
+.PHONY: maybe-install-pdf-gettext install-pdf-gettext
+maybe-install-pdf-gettext:
+@if gettext
+maybe-install-pdf-gettext: install-pdf-gettext
+
+install-pdf-gettext: \
+ configure-gettext \
+ pdf-gettext
+ @: $(MAKE); $(unstage)
+ @[ -f ./gettext/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gettext" ; \
+ (cd $(HOST_SUBDIR)/gettext && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gettext
+
.PHONY: maybe-install-html-gettext install-html-gettext
maybe-install-html-gettext:
@if gettext
@@ -14805,6 +15640,32 @@ install-info-gmp: \
@endif gmp
+.PHONY: maybe-install-pdf-gmp install-pdf-gmp
+maybe-install-pdf-gmp:
+@if gmp
+maybe-install-pdf-gmp: install-pdf-gmp
+
+install-pdf-gmp: \
+ configure-gmp \
+ pdf-gmp
+ @[ -f ./gmp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gmp" ; \
+ (cd $(HOST_SUBDIR)/gmp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gmp
+
.PHONY: maybe-install-html-gmp install-html-gmp
maybe-install-html-gmp:
@if gmp
@@ -15561,6 +16422,32 @@ install-info-mpfr: \
@endif mpfr
+.PHONY: maybe-install-pdf-mpfr install-pdf-mpfr
+maybe-install-pdf-mpfr:
+@if mpfr
+maybe-install-pdf-mpfr: install-pdf-mpfr
+
+install-pdf-mpfr: \
+ configure-mpfr \
+ pdf-mpfr
+ @[ -f ./mpfr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in mpfr" ; \
+ (cd $(HOST_SUBDIR)/mpfr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif mpfr
+
.PHONY: maybe-install-html-mpfr install-html-mpfr
maybe-install-html-mpfr:
@if mpfr
@@ -15952,6 +16839,33 @@ install-info-gnuserv: \
@endif gnuserv
+.PHONY: maybe-install-pdf-gnuserv install-pdf-gnuserv
+maybe-install-pdf-gnuserv:
+@if gnuserv
+maybe-install-pdf-gnuserv: install-pdf-gnuserv
+
+install-pdf-gnuserv: \
+ configure-gnuserv \
+ pdf-gnuserv
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnuserv/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gnuserv" ; \
+ (cd $(HOST_SUBDIR)/gnuserv && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gnuserv
+
.PHONY: maybe-install-html-gnuserv install-html-gnuserv
maybe-install-html-gnuserv:
@if gnuserv
@@ -16349,6 +17263,33 @@ install-info-gprof: \
@endif gprof
+.PHONY: maybe-install-pdf-gprof install-pdf-gprof
+maybe-install-pdf-gprof:
+@if gprof
+maybe-install-pdf-gprof: install-pdf-gprof
+
+install-pdf-gprof: \
+ configure-gprof \
+ pdf-gprof
+ @: $(MAKE); $(unstage)
+ @[ -f ./gprof/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gprof" ; \
+ (cd $(HOST_SUBDIR)/gprof && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gprof
+
.PHONY: maybe-install-html-gprof install-html-gprof
maybe-install-html-gprof:
@if gprof
@@ -16746,6 +17687,33 @@ install-info-gzip: \
@endif gzip
+.PHONY: maybe-install-pdf-gzip install-pdf-gzip
+maybe-install-pdf-gzip:
+@if gzip
+maybe-install-pdf-gzip: install-pdf-gzip
+
+install-pdf-gzip: \
+ configure-gzip \
+ pdf-gzip
+ @: $(MAKE); $(unstage)
+ @[ -f ./gzip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gzip" ; \
+ (cd $(HOST_SUBDIR)/gzip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gzip
+
.PHONY: maybe-install-html-gzip install-html-gzip
maybe-install-html-gzip:
@if gzip
@@ -17143,6 +18111,33 @@ install-info-hello: \
@endif hello
+.PHONY: maybe-install-pdf-hello install-pdf-hello
+maybe-install-pdf-hello:
+@if hello
+maybe-install-pdf-hello: install-pdf-hello
+
+install-pdf-hello: \
+ configure-hello \
+ pdf-hello
+ @: $(MAKE); $(unstage)
+ @[ -f ./hello/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in hello" ; \
+ (cd $(HOST_SUBDIR)/hello && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif hello
+
.PHONY: maybe-install-html-hello install-html-hello
maybe-install-html-hello:
@if hello
@@ -17540,6 +18535,33 @@ install-info-indent: \
@endif indent
+.PHONY: maybe-install-pdf-indent install-pdf-indent
+maybe-install-pdf-indent:
+@if indent
+maybe-install-pdf-indent: install-pdf-indent
+
+install-pdf-indent: \
+ configure-indent \
+ pdf-indent
+ @: $(MAKE); $(unstage)
+ @[ -f ./indent/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in indent" ; \
+ (cd $(HOST_SUBDIR)/indent && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif indent
+
.PHONY: maybe-install-html-indent install-html-indent
maybe-install-html-indent:
@if indent
@@ -18308,6 +19330,32 @@ install-info-intl: \
@endif intl
+.PHONY: maybe-install-pdf-intl install-pdf-intl
+maybe-install-pdf-intl:
+@if intl
+maybe-install-pdf-intl: install-pdf-intl
+
+install-pdf-intl: \
+ configure-intl \
+ pdf-intl
+ @[ -f ./intl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in intl" ; \
+ (cd $(HOST_SUBDIR)/intl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif intl
+
.PHONY: maybe-install-html-intl install-html-intl
maybe-install-html-intl:
@if intl
@@ -18699,6 +19747,33 @@ install-info-tcl: \
@endif tcl
+.PHONY: maybe-install-pdf-tcl install-pdf-tcl
+maybe-install-pdf-tcl:
+@if tcl
+maybe-install-pdf-tcl: install-pdf-tcl
+
+install-pdf-tcl: \
+ configure-tcl \
+ pdf-tcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./tcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tcl" ; \
+ (cd $(HOST_SUBDIR)/tcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tcl
+
.PHONY: maybe-install-html-tcl install-html-tcl
maybe-install-html-tcl:
@if tcl
@@ -19081,6 +20156,33 @@ install-info-itcl: \
@endif itcl
+.PHONY: maybe-install-pdf-itcl install-pdf-itcl
+maybe-install-pdf-itcl:
+@if itcl
+maybe-install-pdf-itcl: install-pdf-itcl
+
+install-pdf-itcl: \
+ configure-itcl \
+ pdf-itcl
+ @: $(MAKE); $(unstage)
+ @[ -f ./itcl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in itcl" ; \
+ (cd $(HOST_SUBDIR)/itcl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif itcl
+
.PHONY: maybe-install-html-itcl install-html-itcl
maybe-install-html-itcl:
@if itcl
@@ -19849,6 +20951,32 @@ install-info-ld: \
@endif ld
+.PHONY: maybe-install-pdf-ld install-pdf-ld
+maybe-install-pdf-ld:
+@if ld
+maybe-install-pdf-ld: install-pdf-ld
+
+install-pdf-ld: \
+ configure-ld \
+ pdf-ld
+ @[ -f ./ld/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in ld" ; \
+ (cd $(HOST_SUBDIR)/ld && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif ld
+
.PHONY: maybe-install-html-ld install-html-ld
maybe-install-html-ld:
@if ld
@@ -20611,6 +21739,32 @@ install-info-libcpp: \
@endif libcpp
+.PHONY: maybe-install-pdf-libcpp install-pdf-libcpp
+maybe-install-pdf-libcpp:
+@if libcpp
+maybe-install-pdf-libcpp: install-pdf-libcpp
+
+install-pdf-libcpp: \
+ configure-libcpp \
+ pdf-libcpp
+ @[ -f ./libcpp/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libcpp" ; \
+ (cd $(HOST_SUBDIR)/libcpp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libcpp
+
.PHONY: maybe-install-html-libcpp install-html-libcpp
maybe-install-html-libcpp:
@if libcpp
@@ -21373,6 +22527,32 @@ install-info-libdecnumber: \
@endif libdecnumber
+.PHONY: maybe-install-pdf-libdecnumber install-pdf-libdecnumber
+maybe-install-pdf-libdecnumber:
+@if libdecnumber
+maybe-install-pdf-libdecnumber: install-pdf-libdecnumber
+
+install-pdf-libdecnumber: \
+ configure-libdecnumber \
+ pdf-libdecnumber
+ @[ -f ./libdecnumber/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libdecnumber" ; \
+ (cd $(HOST_SUBDIR)/libdecnumber && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libdecnumber
+
.PHONY: maybe-install-html-libdecnumber install-html-libdecnumber
maybe-install-html-libdecnumber:
@if libdecnumber
@@ -21764,6 +22944,33 @@ install-info-libgui: \
@endif libgui
+.PHONY: maybe-install-pdf-libgui install-pdf-libgui
+maybe-install-pdf-libgui:
+@if libgui
+maybe-install-pdf-libgui: install-pdf-libgui
+
+install-pdf-libgui: \
+ configure-libgui \
+ pdf-libgui
+ @: $(MAKE); $(unstage)
+ @[ -f ./libgui/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libgui" ; \
+ (cd $(HOST_SUBDIR)/libgui && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libgui
+
.PHONY: maybe-install-html-libgui install-html-libgui
maybe-install-html-libgui:
@if libgui
@@ -22532,6 +23739,32 @@ install-info-libiberty: \
@endif libiberty
+.PHONY: maybe-install-pdf-libiberty install-pdf-libiberty
+maybe-install-pdf-libiberty:
+@if libiberty
+maybe-install-pdf-libiberty: install-pdf-libiberty
+
+install-pdf-libiberty: \
+ configure-libiberty \
+ pdf-libiberty
+ @[ -f ./libiberty/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libiberty" ; \
+ (cd $(HOST_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libiberty
+
.PHONY: maybe-install-html-libiberty install-html-libiberty
maybe-install-html-libiberty:
@if libiberty
@@ -22923,6 +24156,33 @@ install-info-libtool: \
@endif libtool
+.PHONY: maybe-install-pdf-libtool install-pdf-libtool
+maybe-install-pdf-libtool:
+@if libtool
+maybe-install-pdf-libtool: install-pdf-libtool
+
+install-pdf-libtool: \
+ configure-libtool \
+ pdf-libtool
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtool/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libtool" ; \
+ (cd $(HOST_SUBDIR)/libtool && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libtool
+
.PHONY: maybe-install-html-libtool install-html-libtool
maybe-install-html-libtool:
@if libtool
@@ -23320,6 +24580,33 @@ install-info-m4: \
@endif m4
+.PHONY: maybe-install-pdf-m4 install-pdf-m4
+maybe-install-pdf-m4:
+@if m4
+maybe-install-pdf-m4: install-pdf-m4
+
+install-pdf-m4: \
+ configure-m4 \
+ pdf-m4
+ @: $(MAKE); $(unstage)
+ @[ -f ./m4/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in m4" ; \
+ (cd $(HOST_SUBDIR)/m4 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif m4
+
.PHONY: maybe-install-html-m4 install-html-m4
maybe-install-html-m4:
@if m4
@@ -23717,6 +25004,33 @@ install-info-make: \
@endif make
+.PHONY: maybe-install-pdf-make install-pdf-make
+maybe-install-pdf-make:
+@if make
+maybe-install-pdf-make: install-pdf-make
+
+install-pdf-make: \
+ configure-make \
+ pdf-make
+ @: $(MAKE); $(unstage)
+ @[ -f ./make/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in make" ; \
+ (cd $(HOST_SUBDIR)/make && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif make
+
.PHONY: maybe-install-html-make install-html-make
maybe-install-html-make:
@if make
@@ -24108,6 +25422,33 @@ install-info-mmalloc: \
@endif mmalloc
+.PHONY: maybe-install-pdf-mmalloc install-pdf-mmalloc
+maybe-install-pdf-mmalloc:
+@if mmalloc
+maybe-install-pdf-mmalloc: install-pdf-mmalloc
+
+install-pdf-mmalloc: \
+ configure-mmalloc \
+ pdf-mmalloc
+ @: $(MAKE); $(unstage)
+ @[ -f ./mmalloc/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in mmalloc" ; \
+ (cd $(HOST_SUBDIR)/mmalloc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif mmalloc
+
.PHONY: maybe-install-html-mmalloc install-html-mmalloc
maybe-install-html-mmalloc:
@if mmalloc
@@ -24505,6 +25846,33 @@ install-info-patch: \
@endif patch
+.PHONY: maybe-install-pdf-patch install-pdf-patch
+maybe-install-pdf-patch:
+@if patch
+maybe-install-pdf-patch: install-pdf-patch
+
+install-pdf-patch: \
+ configure-patch \
+ pdf-patch
+ @: $(MAKE); $(unstage)
+ @[ -f ./patch/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in patch" ; \
+ (cd $(HOST_SUBDIR)/patch && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif patch
+
.PHONY: maybe-install-html-patch install-html-patch
maybe-install-html-patch:
@if patch
@@ -24902,6 +26270,33 @@ install-info-perl: \
@endif perl
+.PHONY: maybe-install-pdf-perl install-pdf-perl
+maybe-install-pdf-perl:
+@if perl
+maybe-install-pdf-perl: install-pdf-perl
+
+install-pdf-perl: \
+ configure-perl \
+ pdf-perl
+ @: $(MAKE); $(unstage)
+ @[ -f ./perl/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in perl" ; \
+ (cd $(HOST_SUBDIR)/perl && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif perl
+
.PHONY: maybe-install-html-perl install-html-perl
maybe-install-html-perl:
@if perl
@@ -25299,6 +26694,33 @@ install-info-prms: \
@endif prms
+.PHONY: maybe-install-pdf-prms install-pdf-prms
+maybe-install-pdf-prms:
+@if prms
+maybe-install-pdf-prms: install-pdf-prms
+
+install-pdf-prms: \
+ configure-prms \
+ pdf-prms
+ @: $(MAKE); $(unstage)
+ @[ -f ./prms/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in prms" ; \
+ (cd $(HOST_SUBDIR)/prms && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif prms
+
.PHONY: maybe-install-html-prms install-html-prms
maybe-install-html-prms:
@if prms
@@ -25696,6 +27118,33 @@ install-info-rcs: \
@endif rcs
+.PHONY: maybe-install-pdf-rcs install-pdf-rcs
+maybe-install-pdf-rcs:
+@if rcs
+maybe-install-pdf-rcs: install-pdf-rcs
+
+install-pdf-rcs: \
+ configure-rcs \
+ pdf-rcs
+ @: $(MAKE); $(unstage)
+ @[ -f ./rcs/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in rcs" ; \
+ (cd $(HOST_SUBDIR)/rcs && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif rcs
+
.PHONY: maybe-install-html-rcs install-html-rcs
maybe-install-html-rcs:
@if rcs
@@ -26093,6 +27542,33 @@ install-info-readline: \
@endif readline
+.PHONY: maybe-install-pdf-readline install-pdf-readline
+maybe-install-pdf-readline:
+@if readline
+maybe-install-pdf-readline: install-pdf-readline
+
+install-pdf-readline: \
+ configure-readline \
+ pdf-readline
+ @: $(MAKE); $(unstage)
+ @[ -f ./readline/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in readline" ; \
+ (cd $(HOST_SUBDIR)/readline && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif readline
+
.PHONY: maybe-install-html-readline install-html-readline
maybe-install-html-readline:
@if readline
@@ -26478,6 +27954,33 @@ install-info-release: \
@endif release
+.PHONY: maybe-install-pdf-release install-pdf-release
+maybe-install-pdf-release:
+@if release
+maybe-install-pdf-release: install-pdf-release
+
+install-pdf-release: \
+ configure-release \
+ pdf-release
+ @: $(MAKE); $(unstage)
+ @[ -f ./release/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in release" ; \
+ (cd $(HOST_SUBDIR)/release && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif release
+
.PHONY: maybe-install-html-release install-html-release
maybe-install-html-release:
@if release
@@ -26875,6 +28378,33 @@ install-info-recode: \
@endif recode
+.PHONY: maybe-install-pdf-recode install-pdf-recode
+maybe-install-pdf-recode:
+@if recode
+maybe-install-pdf-recode: install-pdf-recode
+
+install-pdf-recode: \
+ configure-recode \
+ pdf-recode
+ @: $(MAKE); $(unstage)
+ @[ -f ./recode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in recode" ; \
+ (cd $(HOST_SUBDIR)/recode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif recode
+
.PHONY: maybe-install-html-recode install-html-recode
maybe-install-html-recode:
@if recode
@@ -27272,6 +28802,33 @@ install-info-sed: \
@endif sed
+.PHONY: maybe-install-pdf-sed install-pdf-sed
+maybe-install-pdf-sed:
+@if sed
+maybe-install-pdf-sed: install-pdf-sed
+
+install-pdf-sed: \
+ configure-sed \
+ pdf-sed
+ @: $(MAKE); $(unstage)
+ @[ -f ./sed/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sed" ; \
+ (cd $(HOST_SUBDIR)/sed && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sed
+
.PHONY: maybe-install-html-sed install-html-sed
maybe-install-html-sed:
@if sed
@@ -27669,6 +29226,33 @@ install-info-send-pr: \
@endif send-pr
+.PHONY: maybe-install-pdf-send-pr install-pdf-send-pr
+maybe-install-pdf-send-pr:
+@if send-pr
+maybe-install-pdf-send-pr: install-pdf-send-pr
+
+install-pdf-send-pr: \
+ configure-send-pr \
+ pdf-send-pr
+ @: $(MAKE); $(unstage)
+ @[ -f ./send-pr/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in send-pr" ; \
+ (cd $(HOST_SUBDIR)/send-pr && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif send-pr
+
.PHONY: maybe-install-html-send-pr install-html-send-pr
maybe-install-html-send-pr:
@if send-pr
@@ -28066,6 +29650,33 @@ install-info-shellutils: \
@endif shellutils
+.PHONY: maybe-install-pdf-shellutils install-pdf-shellutils
+maybe-install-pdf-shellutils:
+@if shellutils
+maybe-install-pdf-shellutils: install-pdf-shellutils
+
+install-pdf-shellutils: \
+ configure-shellutils \
+ pdf-shellutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./shellutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in shellutils" ; \
+ (cd $(HOST_SUBDIR)/shellutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif shellutils
+
.PHONY: maybe-install-html-shellutils install-html-shellutils
maybe-install-html-shellutils:
@if shellutils
@@ -28463,6 +30074,33 @@ install-info-sid: \
@endif sid
+.PHONY: maybe-install-pdf-sid install-pdf-sid
+maybe-install-pdf-sid:
+@if sid
+maybe-install-pdf-sid: install-pdf-sid
+
+install-pdf-sid: \
+ configure-sid \
+ pdf-sid
+ @: $(MAKE); $(unstage)
+ @[ -f ./sid/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sid" ; \
+ (cd $(HOST_SUBDIR)/sid && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sid
+
.PHONY: maybe-install-html-sid install-html-sid
maybe-install-html-sid:
@if sid
@@ -28860,6 +30498,33 @@ install-info-sim: \
@endif sim
+.PHONY: maybe-install-pdf-sim install-pdf-sim
+maybe-install-pdf-sim:
+@if sim
+maybe-install-pdf-sim: install-pdf-sim
+
+install-pdf-sim: \
+ configure-sim \
+ pdf-sim
+ @: $(MAKE); $(unstage)
+ @[ -f ./sim/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in sim" ; \
+ (cd $(HOST_SUBDIR)/sim && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif sim
+
.PHONY: maybe-install-html-sim install-html-sim
maybe-install-html-sim:
@if sim
@@ -29257,6 +30922,33 @@ install-info-tar: \
@endif tar
+.PHONY: maybe-install-pdf-tar install-pdf-tar
+maybe-install-pdf-tar:
+@if tar
+maybe-install-pdf-tar: install-pdf-tar
+
+install-pdf-tar: \
+ configure-tar \
+ pdf-tar
+ @: $(MAKE); $(unstage)
+ @[ -f ./tar/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tar" ; \
+ (cd $(HOST_SUBDIR)/tar && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tar
+
.PHONY: maybe-install-html-tar install-html-tar
maybe-install-html-tar:
@if tar
@@ -29648,6 +31340,33 @@ install-info-texinfo: \
@endif texinfo
+.PHONY: maybe-install-pdf-texinfo install-pdf-texinfo
+maybe-install-pdf-texinfo:
+@if texinfo
+maybe-install-pdf-texinfo: install-pdf-texinfo
+
+install-pdf-texinfo: \
+ configure-texinfo \
+ pdf-texinfo
+ @: $(MAKE); $(unstage)
+ @[ -f ./texinfo/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in texinfo" ; \
+ (cd $(HOST_SUBDIR)/texinfo && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif texinfo
+
.PHONY: maybe-install-html-texinfo install-html-texinfo
maybe-install-html-texinfo:
@if texinfo
@@ -30045,6 +31764,33 @@ install-info-textutils: \
@endif textutils
+.PHONY: maybe-install-pdf-textutils install-pdf-textutils
+maybe-install-pdf-textutils:
+@if textutils
+maybe-install-pdf-textutils: install-pdf-textutils
+
+install-pdf-textutils: \
+ configure-textutils \
+ pdf-textutils
+ @: $(MAKE); $(unstage)
+ @[ -f ./textutils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in textutils" ; \
+ (cd $(HOST_SUBDIR)/textutils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif textutils
+
.PHONY: maybe-install-html-textutils install-html-textutils
maybe-install-html-textutils:
@if textutils
@@ -30442,6 +32188,33 @@ install-info-time: \
@endif time
+.PHONY: maybe-install-pdf-time install-pdf-time
+maybe-install-pdf-time:
+@if time
+maybe-install-pdf-time: install-pdf-time
+
+install-pdf-time: \
+ configure-time \
+ pdf-time
+ @: $(MAKE); $(unstage)
+ @[ -f ./time/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in time" ; \
+ (cd $(HOST_SUBDIR)/time && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif time
+
.PHONY: maybe-install-html-time install-html-time
maybe-install-html-time:
@if time
@@ -30839,6 +32612,33 @@ install-info-uudecode: \
@endif uudecode
+.PHONY: maybe-install-pdf-uudecode install-pdf-uudecode
+maybe-install-pdf-uudecode:
+@if uudecode
+maybe-install-pdf-uudecode: install-pdf-uudecode
+
+install-pdf-uudecode: \
+ configure-uudecode \
+ pdf-uudecode
+ @: $(MAKE); $(unstage)
+ @[ -f ./uudecode/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in uudecode" ; \
+ (cd $(HOST_SUBDIR)/uudecode && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif uudecode
+
.PHONY: maybe-install-html-uudecode install-html-uudecode
maybe-install-html-uudecode:
@if uudecode
@@ -31236,6 +33036,33 @@ install-info-wdiff: \
@endif wdiff
+.PHONY: maybe-install-pdf-wdiff install-pdf-wdiff
+maybe-install-pdf-wdiff:
+@if wdiff
+maybe-install-pdf-wdiff: install-pdf-wdiff
+
+install-pdf-wdiff: \
+ configure-wdiff \
+ pdf-wdiff
+ @: $(MAKE); $(unstage)
+ @[ -f ./wdiff/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in wdiff" ; \
+ (cd $(HOST_SUBDIR)/wdiff && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif wdiff
+
.PHONY: maybe-install-html-wdiff install-html-wdiff
maybe-install-html-wdiff:
@if wdiff
@@ -31636,6 +33463,33 @@ install-info-zip: \
@endif zip
+.PHONY: maybe-install-pdf-zip install-pdf-zip
+maybe-install-pdf-zip:
+@if zip
+maybe-install-pdf-zip: install-pdf-zip
+
+install-pdf-zip: \
+ configure-zip \
+ pdf-zip
+ @: $(MAKE); $(unstage)
+ @[ -f ./zip/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in zip" ; \
+ (cd $(HOST_SUBDIR)/zip && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif zip
+
.PHONY: maybe-install-html-zip install-html-zip
maybe-install-html-zip:
@if zip
@@ -32392,6 +34246,32 @@ install-info-zlib: \
@endif zlib
+.PHONY: maybe-install-pdf-zlib install-pdf-zlib
+maybe-install-pdf-zlib:
+@if zlib
+maybe-install-pdf-zlib: install-pdf-zlib
+
+install-pdf-zlib: \
+ configure-zlib \
+ pdf-zlib
+ @[ -f ./zlib/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in zlib" ; \
+ (cd $(HOST_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif zlib
+
.PHONY: maybe-install-html-zlib install-html-zlib
maybe-install-html-zlib:
@if zlib
@@ -32783,6 +34663,33 @@ install-info-gdb: \
@endif gdb
+.PHONY: maybe-install-pdf-gdb install-pdf-gdb
+maybe-install-pdf-gdb:
+@if gdb
+maybe-install-pdf-gdb: install-pdf-gdb
+
+install-pdf-gdb: \
+ configure-gdb \
+ pdf-gdb
+ @: $(MAKE); $(unstage)
+ @[ -f ./gdb/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gdb" ; \
+ (cd $(HOST_SUBDIR)/gdb && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gdb
+
.PHONY: maybe-install-html-gdb install-html-gdb
maybe-install-html-gdb:
@if gdb
@@ -33180,6 +35087,33 @@ install-info-expect: \
@endif expect
+.PHONY: maybe-install-pdf-expect install-pdf-expect
+maybe-install-pdf-expect:
+@if expect
+maybe-install-pdf-expect: install-pdf-expect
+
+install-pdf-expect: \
+ configure-expect \
+ pdf-expect
+ @: $(MAKE); $(unstage)
+ @[ -f ./expect/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in expect" ; \
+ (cd $(HOST_SUBDIR)/expect && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif expect
+
.PHONY: maybe-install-html-expect install-html-expect
maybe-install-html-expect:
@if expect
@@ -33577,6 +35511,33 @@ install-info-guile: \
@endif guile
+.PHONY: maybe-install-pdf-guile install-pdf-guile
+maybe-install-pdf-guile:
+@if guile
+maybe-install-pdf-guile: install-pdf-guile
+
+install-pdf-guile: \
+ configure-guile \
+ pdf-guile
+ @: $(MAKE); $(unstage)
+ @[ -f ./guile/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in guile" ; \
+ (cd $(HOST_SUBDIR)/guile && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif guile
+
.PHONY: maybe-install-html-guile install-html-guile
maybe-install-html-guile:
@if guile
@@ -33974,6 +35935,33 @@ install-info-tk: \
@endif tk
+.PHONY: maybe-install-pdf-tk install-pdf-tk
+maybe-install-pdf-tk:
+@if tk
+maybe-install-pdf-tk: install-pdf-tk
+
+install-pdf-tk: \
+ configure-tk \
+ pdf-tk
+ @: $(MAKE); $(unstage)
+ @[ -f ./tk/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in tk" ; \
+ (cd $(HOST_SUBDIR)/tk && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif tk
+
.PHONY: maybe-install-html-tk install-html-tk
maybe-install-html-tk:
@if tk
@@ -34365,6 +36353,33 @@ install-info-libtermcap: \
@endif libtermcap
+.PHONY: maybe-install-pdf-libtermcap install-pdf-libtermcap
+maybe-install-pdf-libtermcap:
+@if libtermcap
+maybe-install-pdf-libtermcap: install-pdf-libtermcap
+
+install-pdf-libtermcap: \
+ configure-libtermcap \
+ pdf-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f ./libtermcap/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in libtermcap" ; \
+ (cd $(HOST_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif libtermcap
+
.PHONY: maybe-install-html-libtermcap install-html-libtermcap
maybe-install-html-libtermcap:
@if libtermcap
@@ -34696,6 +36711,33 @@ install-info-utils: \
@endif utils
+.PHONY: maybe-install-pdf-utils install-pdf-utils
+maybe-install-pdf-utils:
+@if utils
+maybe-install-pdf-utils: install-pdf-utils
+
+install-pdf-utils: \
+ configure-utils \
+ pdf-utils
+ @: $(MAKE); $(unstage)
+ @[ -f ./utils/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in utils" ; \
+ (cd $(HOST_SUBDIR)/utils && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif utils
+
.PHONY: maybe-install-html-utils install-html-utils
maybe-install-html-utils:
@if utils
@@ -35093,6 +37135,33 @@ install-info-gnattools: \
@endif gnattools
+.PHONY: maybe-install-pdf-gnattools install-pdf-gnattools
+maybe-install-pdf-gnattools:
+@if gnattools
+maybe-install-pdf-gnattools: install-pdf-gnattools
+
+install-pdf-gnattools: \
+ configure-gnattools \
+ pdf-gnattools
+ @: $(MAKE); $(unstage)
+ @[ -f ./gnattools/Makefile ] || exit 0; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(HOST_EXPORTS) \
+ for flag in $(EXTRA_HOST_FLAGS) ; do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ echo "Doing install-pdf in gnattools" ; \
+ (cd $(HOST_SUBDIR)/gnattools && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif gnattools
+
.PHONY: maybe-install-html-gnattools install-html-gnattools
maybe-install-html-gnattools:
@if gnattools
@@ -35512,6 +37581,33 @@ install-info-target-libstdc++-v3: \
@endif target-libstdc++-v3
+.PHONY: maybe-install-pdf-target-libstdc++-v3 install-pdf-target-libstdc++-v3
+maybe-install-pdf-target-libstdc++-v3:
+@if target-libstdc++-v3
+maybe-install-pdf-target-libstdc++-v3: install-pdf-target-libstdc++-v3
+
+install-pdf-target-libstdc++-v3: \
+ configure-target-libstdc++-v3 \
+ pdf-target-libstdc++-v3
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libstdc++-v3" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libstdc++-v3
+
.PHONY: maybe-install-html-target-libstdc++-v3 install-html-target-libstdc++-v3
maybe-install-html-target-libstdc++-v3:
@if target-libstdc++-v3
@@ -35926,6 +38022,33 @@ install-info-target-libmudflap: \
@endif target-libmudflap
+.PHONY: maybe-install-pdf-target-libmudflap install-pdf-target-libmudflap
+maybe-install-pdf-target-libmudflap:
+@if target-libmudflap
+maybe-install-pdf-target-libmudflap: install-pdf-target-libmudflap
+
+install-pdf-target-libmudflap: \
+ configure-target-libmudflap \
+ pdf-target-libmudflap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libmudflap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libmudflap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libmudflap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libmudflap
+
.PHONY: maybe-install-html-target-libmudflap install-html-target-libmudflap
maybe-install-html-target-libmudflap:
@if target-libmudflap
@@ -36340,6 +38463,33 @@ install-info-target-libssp: \
@endif target-libssp
+.PHONY: maybe-install-pdf-target-libssp install-pdf-target-libssp
+maybe-install-pdf-target-libssp:
+@if target-libssp
+maybe-install-pdf-target-libssp: install-pdf-target-libssp
+
+install-pdf-target-libssp: \
+ configure-target-libssp \
+ pdf-target-libssp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libssp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libssp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libssp
+
.PHONY: maybe-install-html-target-libssp install-html-target-libssp
maybe-install-html-target-libssp:
@if target-libssp
@@ -36754,6 +38904,33 @@ install-info-target-newlib: \
@endif target-newlib
+.PHONY: maybe-install-pdf-target-newlib install-pdf-target-newlib
+maybe-install-pdf-target-newlib:
+@if target-newlib
+maybe-install-pdf-target-newlib: install-pdf-target-newlib
+
+install-pdf-target-newlib: \
+ configure-target-newlib \
+ pdf-target-newlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/newlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-newlib
+
.PHONY: maybe-install-html-target-newlib install-html-target-newlib
maybe-install-html-target-newlib:
@if target-newlib
@@ -37612,6 +39789,33 @@ install-info-target-libgcc: \
@endif target-libgcc
+.PHONY: maybe-install-pdf-target-libgcc install-pdf-target-libgcc
+maybe-install-pdf-target-libgcc:
+@if target-libgcc
+maybe-install-pdf-target-libgcc: install-pdf-target-libgcc
+
+install-pdf-target-libgcc: \
+ configure-target-libgcc \
+ pdf-target-libgcc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgcc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgcc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgcc
+
.PHONY: maybe-install-html-target-libgcc install-html-target-libgcc
maybe-install-html-target-libgcc:
@if target-libgcc
@@ -38026,6 +40230,33 @@ install-info-target-libgfortran: \
@endif target-libgfortran
+.PHONY: maybe-install-pdf-target-libgfortran install-pdf-target-libgfortran
+maybe-install-pdf-target-libgfortran:
+@if target-libgfortran
+maybe-install-pdf-target-libgfortran: install-pdf-target-libgfortran
+
+install-pdf-target-libgfortran: \
+ configure-target-libgfortran \
+ pdf-target-libgfortran
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgfortran" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgfortran && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgfortran
+
.PHONY: maybe-install-html-target-libgfortran install-html-target-libgfortran
maybe-install-html-target-libgfortran:
@if target-libgfortran
@@ -38440,6 +40671,33 @@ install-info-target-libobjc: \
@endif target-libobjc
+.PHONY: maybe-install-pdf-target-libobjc install-pdf-target-libobjc
+maybe-install-pdf-target-libobjc:
+@if target-libobjc
+maybe-install-pdf-target-libobjc: install-pdf-target-libobjc
+
+install-pdf-target-libobjc: \
+ configure-target-libobjc \
+ pdf-target-libobjc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libobjc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libobjc
+
.PHONY: maybe-install-html-target-libobjc install-html-target-libobjc
maybe-install-html-target-libobjc:
@if target-libobjc
@@ -38849,6 +41107,33 @@ install-info-target-libtermcap: \
@endif target-libtermcap
+.PHONY: maybe-install-pdf-target-libtermcap install-pdf-target-libtermcap
+maybe-install-pdf-target-libtermcap:
+@if target-libtermcap
+maybe-install-pdf-target-libtermcap: install-pdf-target-libtermcap
+
+install-pdf-target-libtermcap: \
+ configure-target-libtermcap \
+ pdf-target-libtermcap
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libtermcap" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libtermcap && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libtermcap
+
.PHONY: maybe-install-html-target-libtermcap install-html-target-libtermcap
maybe-install-html-target-libtermcap:
@if target-libtermcap
@@ -39203,6 +41488,33 @@ install-info-target-winsup: \
@endif target-winsup
+.PHONY: maybe-install-pdf-target-winsup install-pdf-target-winsup
+maybe-install-pdf-target-winsup:
+@if target-winsup
+maybe-install-pdf-target-winsup: install-pdf-target-winsup
+
+install-pdf-target-winsup: \
+ configure-target-winsup \
+ pdf-target-winsup
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/winsup" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-winsup
+
.PHONY: maybe-install-html-target-winsup install-html-target-winsup
maybe-install-html-target-winsup:
@if target-winsup
@@ -39612,6 +41924,33 @@ install-info-target-libgloss: \
@endif target-libgloss
+.PHONY: maybe-install-pdf-target-libgloss install-pdf-target-libgloss
+maybe-install-pdf-target-libgloss:
+@if target-libgloss
+maybe-install-pdf-target-libgloss: install-pdf-target-libgloss
+
+install-pdf-target-libgloss: \
+ configure-target-libgloss \
+ pdf-target-libgloss
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgloss" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgloss && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgloss
+
.PHONY: maybe-install-html-target-libgloss install-html-target-libgloss
maybe-install-html-target-libgloss:
@if target-libgloss
@@ -40026,6 +42365,33 @@ install-info-target-libiberty: \
@endif target-libiberty
+.PHONY: maybe-install-pdf-target-libiberty install-pdf-target-libiberty
+maybe-install-pdf-target-libiberty:
+@if target-libiberty
+maybe-install-pdf-target-libiberty: install-pdf-target-libiberty
+
+install-pdf-target-libiberty: \
+ configure-target-libiberty \
+ pdf-target-libiberty
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libiberty/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libiberty" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libiberty
+
.PHONY: maybe-install-html-target-libiberty install-html-target-libiberty
maybe-install-html-target-libiberty:
@if target-libiberty
@@ -40440,6 +42806,33 @@ install-info-target-gperf: \
@endif target-gperf
+.PHONY: maybe-install-pdf-target-gperf install-pdf-target-gperf
+maybe-install-pdf-target-gperf:
+@if target-gperf
+maybe-install-pdf-target-gperf: install-pdf-target-gperf
+
+install-pdf-target-gperf: \
+ configure-target-gperf \
+ pdf-target-gperf
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/gperf/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/gperf" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-gperf
+
.PHONY: maybe-install-html-target-gperf install-html-target-gperf
maybe-install-html-target-gperf:
@if target-gperf
@@ -40844,6 +43237,33 @@ install-info-target-examples: \
@endif target-examples
+.PHONY: maybe-install-pdf-target-examples install-pdf-target-examples
+maybe-install-pdf-target-examples:
+@if target-examples
+maybe-install-pdf-target-examples: install-pdf-target-examples
+
+install-pdf-target-examples: \
+ configure-target-examples \
+ pdf-target-examples
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/examples/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/examples" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/examples && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-examples
+
.PHONY: maybe-install-html-target-examples install-html-target-examples
maybe-install-html-target-examples:
@if target-examples
@@ -41258,6 +43678,33 @@ install-info-target-libffi: \
@endif target-libffi
+.PHONY: maybe-install-pdf-target-libffi install-pdf-target-libffi
+maybe-install-pdf-target-libffi:
+@if target-libffi
+maybe-install-pdf-target-libffi: install-pdf-target-libffi
+
+install-pdf-target-libffi: \
+ configure-target-libffi \
+ pdf-target-libffi
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libffi" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libffi
+
.PHONY: maybe-install-html-target-libffi install-html-target-libffi
maybe-install-html-target-libffi:
@if target-libffi
@@ -41672,6 +44119,33 @@ install-info-target-libjava: \
@endif target-libjava
+.PHONY: maybe-install-pdf-target-libjava install-pdf-target-libjava
+maybe-install-pdf-target-libjava:
+@if target-libjava
+maybe-install-pdf-target-libjava: install-pdf-target-libjava
+
+install-pdf-target-libjava: \
+ configure-target-libjava \
+ pdf-target-libjava
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libjava/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(RAW_CXX_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libjava" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libjava
+
.PHONY: maybe-install-html-target-libjava install-html-target-libjava
maybe-install-html-target-libjava:
@if target-libjava
@@ -42086,6 +44560,33 @@ install-info-target-zlib: \
@endif target-zlib
+.PHONY: maybe-install-pdf-target-zlib install-pdf-target-zlib
+maybe-install-pdf-target-zlib:
+@if target-zlib
+maybe-install-pdf-target-zlib: install-pdf-target-zlib
+
+install-pdf-target-zlib: \
+ configure-target-zlib \
+ pdf-target-zlib
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/zlib" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-zlib
+
.PHONY: maybe-install-html-target-zlib install-html-target-zlib
maybe-install-html-target-zlib:
@if target-zlib
@@ -42500,6 +45001,33 @@ install-info-target-boehm-gc: \
@endif target-boehm-gc
+.PHONY: maybe-install-pdf-target-boehm-gc install-pdf-target-boehm-gc
+maybe-install-pdf-target-boehm-gc:
+@if target-boehm-gc
+maybe-install-pdf-target-boehm-gc: install-pdf-target-boehm-gc
+
+install-pdf-target-boehm-gc: \
+ configure-target-boehm-gc \
+ pdf-target-boehm-gc
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/boehm-gc/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/boehm-gc" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-boehm-gc
+
.PHONY: maybe-install-html-target-boehm-gc install-html-target-boehm-gc
maybe-install-html-target-boehm-gc:
@if target-boehm-gc
@@ -42914,6 +45442,33 @@ install-info-target-qthreads: \
@endif target-qthreads
+.PHONY: maybe-install-pdf-target-qthreads install-pdf-target-qthreads
+maybe-install-pdf-target-qthreads:
+@if target-qthreads
+maybe-install-pdf-target-qthreads: install-pdf-target-qthreads
+
+install-pdf-target-qthreads: \
+ configure-target-qthreads \
+ pdf-target-qthreads
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/qthreads/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/qthreads" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-qthreads
+
.PHONY: maybe-install-html-target-qthreads install-html-target-qthreads
maybe-install-html-target-qthreads:
@if target-qthreads
@@ -43328,6 +45883,33 @@ install-info-target-rda: \
@endif target-rda
+.PHONY: maybe-install-pdf-target-rda install-pdf-target-rda
+maybe-install-pdf-target-rda:
+@if target-rda
+maybe-install-pdf-target-rda: install-pdf-target-rda
+
+install-pdf-target-rda: \
+ configure-target-rda \
+ pdf-target-rda
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/rda" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-rda
+
.PHONY: maybe-install-html-target-rda install-html-target-rda
maybe-install-html-target-rda:
@if target-rda
@@ -43742,6 +46324,33 @@ install-info-target-libada: \
@endif target-libada
+.PHONY: maybe-install-pdf-target-libada install-pdf-target-libada
+maybe-install-pdf-target-libada:
+@if target-libada
+maybe-install-pdf-target-libada: install-pdf-target-libada
+
+install-pdf-target-libada: \
+ configure-target-libada \
+ pdf-target-libada
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libada" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libada && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libada
+
.PHONY: maybe-install-html-target-libada install-html-target-libada
maybe-install-html-target-libada:
@if target-libada
@@ -44156,6 +46765,33 @@ install-info-target-libgomp: \
@endif target-libgomp
+.PHONY: maybe-install-pdf-target-libgomp install-pdf-target-libgomp
+maybe-install-pdf-target-libgomp:
+@if target-libgomp
+maybe-install-pdf-target-libgomp: install-pdf-target-libgomp
+
+install-pdf-target-libgomp: \
+ configure-target-libgomp \
+ pdf-target-libgomp
+ @: $(MAKE); $(unstage)
+ @[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0 ; \
+ r=`${PWD_COMMAND}`; export r; \
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ echo "Doing install-pdf in $(TARGET_SUBDIR)/libgomp" ; \
+ for flag in $(EXTRA_TARGET_FLAGS); do \
+ eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ done; \
+ (cd $(TARGET_SUBDIR)/libgomp && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ "RANLIB=$${RANLIB}" \
+ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
+ install-pdf) \
+ || exit 1
+
+@endif target-libgomp
+
.PHONY: maybe-install-html-target-libgomp install-html-target-libgomp
maybe-install-html-target-libgomp:
@if target-libgomp
@@ -46464,8 +49100,6 @@ configure-target-libobjc: maybe-configure-target-boehm-gc
all-target-libobjc: maybe-all-target-libiberty
all-target-libobjc: maybe-all-target-boehm-gc
all-target-libstdc++-v3: maybe-all-target-libiberty
-install-target-libssp: maybe-install-gcc
-install-target-libgomp: maybe-install-gcc
all-target-libgloss: maybe-configure-target-newlib
all-target-winsup: maybe-all-target-libiberty
all-target-winsup: maybe-all-target-libtermcap
diff --git a/Makefile.tpl b/Makefile.tpl
index a3c5093b1b4..1502ecf264c 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -61,6 +61,7 @@ oldincludedir = @oldincludedir@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
+pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@
man1dir = $(mandir)/man1
@@ -570,7 +571,8 @@ do-[+make_target+]:
# Here are the targets which correspond to the do-X targets.
-.PHONY: info installcheck dvi pdf html install-info install-html
+.PHONY: info installcheck dvi pdf html
+.PHONY: install-info install-pdf install-html
.PHONY: clean distclean mostlyclean maintainer-clean realclean
.PHONY: local-clean local-distclean local-maintainer-clean
info: do-info
@@ -589,6 +591,8 @@ install-info: do-install-info dir.info
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
else true ; fi
+install-pdf: do-install-pdf
+
install-html: do-install-html
local-clean:
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 18bb67af430..89cabf0e88a 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,19 @@
+2007-03-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * include/gc.h (GC_REGISTER_FINALIZER_UNREACHABLE): New.
+ (GC_register_finalizer_unreachable): Declare.
+ (GC_debug_register_finalizer_unreachable): Declare.
+ * finalize.c (GC_unreachable_finalize_mark_proc): New.
+ (GC_register_finalizer_unreachable): New.
+ (GC_finalize): Handle it.
+ * dbg_mlc.c (GC_debug_register_finalizer_unreachable): New.
+ (GC_debug_register_finalizer_no_order): Fix whitespace.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
2007-02-05 Roman Zippel <zippel@linux-m68k.org>
* boehm-gc/include/private/gcconfig.h: use LINUX_STACKBOTTOM so
diff --git a/boehm-gc/Makefile.am b/boehm-gc/Makefile.am
index 66d5cb16afb..c31d67aad50 100644
--- a/boehm-gc/Makefile.am
+++ b/boehm-gc/Makefile.am
@@ -111,7 +111,8 @@ CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
MAKEOVERRIDES=
-# No install-html support yet
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
diff --git a/boehm-gc/Makefile.in b/boehm-gc/Makefile.in
index f7a733dcc5b..8467d2ea0ce 100644
--- a/boehm-gc/Makefile.in
+++ b/boehm-gc/Makefile.in
@@ -764,9 +764,10 @@ uninstall-info: uninstall-info-recursive
.S.lo:
$(LTCOMPILE) -Wp,-P -x assembler-with-cpp -c $<
-# No install-html support yet
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/boehm-gc/dbg_mlc.c b/boehm-gc/dbg_mlc.c
index aacbb7a1b63..061a6a537b7 100644
--- a/boehm-gc/dbg_mlc.c
+++ b/boehm-gc/dbg_mlc.c
@@ -3,6 +3,7 @@
* Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved.
* Copyright (c) 1997 by Silicon Graphics. All rights reserved.
* Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (C) 2007 Free Software Foundation, Inc
*
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
@@ -1118,8 +1119,8 @@ GC_PTR *ocd;
if (0 == base) return;
if ((ptr_t)obj - base != sizeof(oh)) {
GC_err_printf1(
- "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
- obj);
+ "GC_debug_register_finalizer_no_order called with non-base-pointer 0x%lx\n",
+ obj);
}
if (0 == fn) {
GC_register_finalizer_no_order(base, 0, 0, &my_old_fn, &my_old_cd);
@@ -1129,7 +1130,41 @@ GC_PTR *ocd;
&my_old_cd);
}
store_old(obj, my_old_fn, (struct closure *)my_old_cd, ofn, ocd);
- }
+}
+
+# ifdef __STDC__
+ void GC_debug_register_finalizer_unreachable
+ (GC_PTR obj, GC_finalization_proc fn,
+ GC_PTR cd, GC_finalization_proc *ofn,
+ GC_PTR *ocd)
+# else
+ void GC_debug_register_finalizer_unreachable
+ (obj, fn, cd, ofn, ocd)
+ GC_PTR obj;
+ GC_finalization_proc fn;
+ GC_PTR cd;
+ GC_finalization_proc *ofn;
+ GC_PTR *ocd;
+# endif
+{
+ GC_finalization_proc my_old_fn;
+ GC_PTR my_old_cd;
+ ptr_t base = GC_base(obj);
+ if (0 == base) return;
+ if ((ptr_t)obj - base != sizeof(oh)) {
+ GC_err_printf1(
+ "GC_debug_register_finalizer_unreachable called with non-base-pointer 0x%lx\n",
+ obj);
+ }
+ if (0 == fn) {
+ GC_register_finalizer_unreachable(base, 0, 0, &my_old_fn, &my_old_cd);
+ } else {
+ GC_register_finalizer_unreachable(base, GC_debug_invoke_finalizer,
+ GC_make_closure(fn,cd), &my_old_fn,
+ &my_old_cd);
+ }
+ store_old(obj, my_old_fn, (struct closure *)my_old_cd, ofn, ocd);
+}
# ifdef __STDC__
void GC_debug_register_finalizer_ignore_self
diff --git a/boehm-gc/finalize.c b/boehm-gc/finalize.c
index 893f825976f..484d421d1d6 100644
--- a/boehm-gc/finalize.c
+++ b/boehm-gc/finalize.c
@@ -2,6 +2,7 @@
* Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
* Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved.
* Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved.
+ * Copyright (C) 2007 Free Software Foundation, Inc
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
@@ -315,6 +316,14 @@ ptr_t p;
{
}
+/* Possible finalization_marker procedures. Note that mark stack */
+/* overflow is handled by the caller, and is not a disaster. */
+GC_API void GC_unreachable_finalize_mark_proc(p)
+ptr_t p;
+{
+ return GC_normal_finalize_mark_proc(p);
+}
+
/* Register a finalization function. See gc.h for details. */
@@ -511,6 +520,23 @@ finalization_mark_proc * mp;
ocd, GC_null_finalize_mark_proc);
}
+# if defined(__STDC__)
+ void GC_register_finalizer_unreachable(void * obj,
+ GC_finalization_proc fn, void * cd,
+ GC_finalization_proc *ofn, void ** ocd)
+# else
+ void GC_register_finalizer_unreachable(obj, fn, cd, ofn, ocd)
+ GC_PTR obj;
+ GC_finalization_proc fn;
+ GC_PTR cd;
+ GC_finalization_proc * ofn;
+ GC_PTR * ocd;
+# endif
+{
+ GC_register_finalizer_inner(obj, fn, cd, ofn,
+ ocd, GC_unreachable_finalize_mark_proc);
+}
+
#ifndef NO_DEBUGGING
void GC_dump_finalization()
{
@@ -638,9 +664,44 @@ void GC_finalize()
if (curr_fo -> fo_mark_proc == GC_null_finalize_mark_proc) {
GC_MARK_FO(real_ptr, GC_normal_finalize_mark_proc);
}
- GC_set_mark_bit(real_ptr);
+ if (curr_fo -> fo_mark_proc != GC_unreachable_finalize_mark_proc) {
+ GC_set_mark_bit(real_ptr);
+ }
}
}
+
+ /* now revive finalize-when-unreachable objects reachable from
+ other finalizable objects */
+ curr_fo = GC_finalize_now;
+ prev_fo = 0;
+ while (curr_fo != 0) {
+ next_fo = fo_next(curr_fo);
+ if (curr_fo -> fo_mark_proc == GC_unreachable_finalize_mark_proc) {
+ real_ptr = (ptr_t)curr_fo -> fo_hidden_base;
+ if (!GC_is_marked(real_ptr)) {
+ GC_set_mark_bit(real_ptr);
+ } else {
+ if (prev_fo == 0)
+ GC_finalize_now = next_fo;
+ else
+ fo_set_next(prev_fo, next_fo);
+
+ curr_fo -> fo_hidden_base =
+ (word) HIDE_POINTER(curr_fo -> fo_hidden_base);
+ GC_words_finalized -=
+ ALIGNED_WORDS(curr_fo -> fo_object_size)
+ + ALIGNED_WORDS(sizeof(struct finalizable_object));
+
+ i = HASH2(real_ptr, log_fo_table_size);
+ fo_set_next (curr_fo, fo_head[i]);
+ GC_fo_entries++;
+ fo_head[i] = curr_fo;
+ curr_fo = prev_fo;
+ }
+ }
+ prev_fo = curr_fo;
+ curr_fo = next_fo;
+ }
}
/* Remove dangling disappearing links. */
diff --git a/boehm-gc/include/gc.h b/boehm-gc/include/gc.h
index 52ee8056ec4..c6c553d8427 100644
--- a/boehm-gc/include/gc.h
+++ b/boehm-gc/include/gc.h
@@ -3,6 +3,7 @@
* Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved.
* Copyright 1996-1999 by Silicon Graphics. All rights reserved.
* Copyright 1999 by Hewlett-Packard Company. All rights reserved.
+ * Copyright (C) 2007 Free Software Foundation, Inc
*
* THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
* OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
@@ -602,6 +603,8 @@ GC_API GC_PTR GC_debug_realloc_replacement
GC_debug_register_finalizer_ignore_self(p, f, d, of, od)
# define GC_REGISTER_FINALIZER_NO_ORDER(p, f, d, of, od) \
GC_debug_register_finalizer_no_order(p, f, d, of, od)
+# define GC_REGISTER_FINALIZER_UNREACHABLE(p, f, d, of, od) \
+ GC_debug_register_finalizer_unreachable(p, f, d, of, od)
# define GC_MALLOC_STUBBORN(sz) GC_debug_malloc_stubborn(sz, GC_EXTRAS);
# define GC_CHANGE_STUBBORN(p) GC_debug_change_stubborn(p)
# define GC_END_STUBBORN_CHANGE(p) GC_debug_end_stubborn_change(p)
@@ -624,6 +627,8 @@ GC_API GC_PTR GC_debug_realloc_replacement
GC_register_finalizer_ignore_self(p, f, d, of, od)
# define GC_REGISTER_FINALIZER_NO_ORDER(p, f, d, of, od) \
GC_register_finalizer_no_order(p, f, d, of, od)
+# define GC_REGISTER_FINALIZER_UNREACHABLE(p, f, d, of, od) \
+ GC_register_finalizer_unreachable(p, f, d, of, od)
# define GC_MALLOC_STUBBORN(sz) GC_malloc_stubborn(sz)
# define GC_CHANGE_STUBBORN(p) GC_change_stubborn(p)
# define GC_END_STUBBORN_CHANGE(p) GC_end_stubborn_change(p)
@@ -716,6 +721,19 @@ GC_API void GC_debug_register_finalizer_no_order
GC_PROTO((GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
GC_finalization_proc *ofn, GC_PTR *ocd));
+/* This is a special finalizer that is useful when an object's */
+/* finalizer must be run when the object is known to be no */
+/* longer reachable, not even from other finalizable objects. */
+/* This can be used in combination with finalizer_no_order so */
+/* as to release resources that must not be released while an */
+/* object can still be brought back to life by other */
+/* finalizers. */
+GC_API void GC_register_finalizer_unreachable
+ GC_PROTO((GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
+ GC_finalization_proc *ofn, GC_PTR *ocd));
+GC_API void GC_debug_register_finalizer_unreachable
+ GC_PROTO((GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
+ GC_finalization_proc *ofn, GC_PTR *ocd));
/* The following routine may be used to break cycles between */
/* finalizable objects, thus causing cyclic finalizable */
diff --git a/config/ChangeLog b/config/ChangeLog
index fdc2ebf7b00..f0cda7a8b54 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,12 @@
+2007-03-07 Andreas Schwab <schwab@suse.de>
+
+ * acx.m4 (GCC_TARGET_TOOL): Expand backquotes outside
+ AC_MSG_RESULT.
+
+2007-02-27 Alan Modra <amodra@bigpond.net.au>
+
+ * mt-spu (all-ld): Depend on all-binutils.
+
2007-02-18 Alexandre Oliva <aoliva@redhat.com>
* acx.m4 (NCN_STRICT_CHECK_TOOLS): Mark environment variable as
@@ -6,6 +15,10 @@
(NCN_STRICT_CHECK_TARGET_TOOLS): Likewise. Don't override
environment variable with build-time tools.
+2006-12-11 Alan Modra <amodra@bigpond.net.au>
+
+ * mt-spu: New file.
+
2007-02-09 Daniel Jacobowitz <dan@codesourcery.com>
* acx.m4 (ACX_CHECK_INSTALLED_TARGET_TOOL): Avoid AC_PATH_PROG
diff --git a/config/acx.m4 b/config/acx.m4
index d2d227d2de0..a8970759f5c 100644
--- a/config/acx.m4
+++ b/config/acx.m4
@@ -485,7 +485,8 @@ AC_DEFUN([GCC_TARGET_TOOL],
if test "x${build}" != "x${host}" ; then
if expr "x[$]$2" : "x/" > /dev/null; then
# We already found the complete path
- AC_MSG_RESULT(pre-installed in `dirname [$]$2`)
+ ac_dir=`dirname [$]$2`
+ AC_MSG_RESULT(pre-installed in $ac_dir)
else
# Canadian cross, just use what we found
AC_MSG_RESULT(pre-installed)
@@ -508,7 +509,8 @@ else
AC_MSG_RESULT(just compiled)
el])if expr "x[$]$2" : "x/" > /dev/null; then
# We already found the complete path
- AC_MSG_RESULT(pre-installed in `dirname [$]$2`)
+ ac_dir=`dirname [$]$2`
+ AC_MSG_RESULT(pre-installed in $ac_dir)
elif test "x$target" = "x$host"; then
# We can use an host tool
$2='$($3)'
diff --git a/config/mt-spu b/config/mt-spu
index 48364332871..c2dbc66e999 100644
--- a/config/mt-spu
+++ b/config/mt-spu
@@ -1,2 +1,4 @@
# spu ld makefile invokes as-new in maintainer mode.
all-ld: $(MAINT) all-gas
+# spu ld makefile invokes bin2c
+all-ld: all-binutils
diff --git a/configure b/configure
index f5b4778c90d..0554463a231 100755
--- a/configure
+++ b/configure
@@ -272,7 +272,7 @@ PACKAGE_STRING=
PACKAGE_BUGREPORT=
ac_unique_file="move-if-change"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S TOPLEVEL_CONFIGURE_ARGUMENTS build_libsubdir build_subdir host_subdir target_subdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc stage1_languages SYSROOT_CFLAGS_FOR_TARGET RPATH_ENVVAR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs CC_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES OBJCOPY OBJDUMP CFLAGS_FOR_BUILD CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S TOPLEVEL_CONFIGURE_ARGUMENTS build_libsubdir build_subdir host_subdir target_subdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc stage1_languages SYSROOT_CFLAGS_FOR_TARGET RPATH_ENVVAR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs CC_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES OBJCOPY OBJDUMP CFLAGS_FOR_BUILD CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files='serialization_dependencies host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag'
# Initialize some variables set by options.
@@ -961,6 +961,7 @@ Optional Packages:
use given path to find target tools during the build
--with-datarootdir Use datarootdir as the data root directory.
--with-docdir Install documentation in this directory.
+ --with-pdfdir Install pdf in this directory.
--with-htmldir Install html in this directory.
Some influential environment variables:
@@ -4476,9 +4477,11 @@ main ()
#if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0)
choke me
#endif
- mpfr_t n; mpfr_init(n);
- mpfr_t x; mpfr_init(x);
+ mpfr_t n;
+ mpfr_t x;
int t;
+ mpfr_init (n);
+ mpfr_init (x);
mpfr_atan2 (n, n, x, GMP_RNDN);
mpfr_erfc (n, x, GMP_RNDN);
mpfr_subnormalize (x, t, GMP_RNDN);
@@ -10714,8 +10717,9 @@ echo $ECHO_N "checking where to find the target ar... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $AR_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $AR_FOR_TARGET\`" >&6
+ ac_dir=`dirname $AR_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10735,8 +10739,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $AR_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $AR_FOR_TARGET\`" >&6
+ ac_dir=`dirname $AR_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
AR_FOR_TARGET='$(AR)'
@@ -10754,8 +10759,9 @@ echo $ECHO_N "checking where to find the target as... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $AS_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $AS_FOR_TARGET\`" >&6
+ ac_dir=`dirname $AS_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10775,8 +10781,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $AS_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $AS_FOR_TARGET\`" >&6
+ ac_dir=`dirname $AS_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
AS_FOR_TARGET='$(AS)'
@@ -10794,8 +10801,9 @@ echo $ECHO_N "checking where to find the target cc... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $CC_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $CC_FOR_TARGET\`" >&6
+ ac_dir=`dirname $CC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10815,8 +10823,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $CC_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $CC_FOR_TARGET\`" >&6
+ ac_dir=`dirname $CC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
CC_FOR_TARGET='$(CC)'
@@ -10834,8 +10843,9 @@ echo $ECHO_N "checking where to find the target c++... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $CXX_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $CXX_FOR_TARGET\`" >&6
+ ac_dir=`dirname $CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10858,8 +10868,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $CXX_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $CXX_FOR_TARGET\`" >&6
+ ac_dir=`dirname $CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
CXX_FOR_TARGET='$(CXX)'
@@ -10877,8 +10888,9 @@ echo $ECHO_N "checking where to find the target c++ for libstdc++... $ECHO_C" >&
if test "x${build}" != "x${host}" ; then
if expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $RAW_CXX_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $RAW_CXX_FOR_TARGET\`" >&6
+ ac_dir=`dirname $RAW_CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10901,8 +10913,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $RAW_CXX_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $RAW_CXX_FOR_TARGET\`" >&6
+ ac_dir=`dirname $RAW_CXX_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
RAW_CXX_FOR_TARGET='$(CXX)'
@@ -10920,8 +10933,9 @@ echo $ECHO_N "checking where to find the target dlltool... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $DLLTOOL_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $DLLTOOL_FOR_TARGET\`" >&6
+ ac_dir=`dirname $DLLTOOL_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10941,8 +10955,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $DLLTOOL_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $DLLTOOL_FOR_TARGET\`" >&6
+ ac_dir=`dirname $DLLTOOL_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
DLLTOOL_FOR_TARGET='$(DLLTOOL)'
@@ -10960,8 +10975,9 @@ echo $ECHO_N "checking where to find the target gcc... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GCC_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GCC_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GCC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -10981,8 +10997,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GCC_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GCC_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GCC_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GCC_FOR_TARGET='$()'
@@ -11000,8 +11017,9 @@ echo $ECHO_N "checking where to find the target gcj... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GCJ_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GCJ_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GCJ_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11024,8 +11042,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GCJ_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GCJ_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GCJ_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GCJ_FOR_TARGET='$(GCJ)'
@@ -11043,8 +11062,9 @@ echo $ECHO_N "checking where to find the target gfortran... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GFORTRAN_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GFORTRAN_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GFORTRAN_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11067,8 +11087,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $GFORTRAN_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $GFORTRAN_FOR_TARGET\`" >&6
+ ac_dir=`dirname $GFORTRAN_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
GFORTRAN_FOR_TARGET='$(GFORTRAN)'
@@ -11086,8 +11107,9 @@ echo $ECHO_N "checking where to find the target ld... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $LD_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $LD_FOR_TARGET\`" >&6
+ ac_dir=`dirname $LD_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11107,8 +11129,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $LD_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $LD_FOR_TARGET\`" >&6
+ ac_dir=`dirname $LD_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
LD_FOR_TARGET='$(LD)'
@@ -11126,8 +11149,9 @@ echo $ECHO_N "checking where to find the target lipo... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $LIPO_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $LIPO_FOR_TARGET\`" >&6
+ ac_dir=`dirname $LIPO_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11136,8 +11160,9 @@ echo "${ECHO_T}pre-installed" >&6
else
if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $LIPO_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $LIPO_FOR_TARGET\`" >&6
+ ac_dir=`dirname $LIPO_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
LIPO_FOR_TARGET='$(LIPO)'
@@ -11155,8 +11180,9 @@ echo $ECHO_N "checking where to find the target nm... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $NM_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $NM_FOR_TARGET\`" >&6
+ ac_dir=`dirname $NM_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11176,8 +11202,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $NM_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $NM_FOR_TARGET\`" >&6
+ ac_dir=`dirname $NM_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
NM_FOR_TARGET='$(NM)'
@@ -11195,8 +11222,9 @@ echo $ECHO_N "checking where to find the target objdump... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $OBJDUMP_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $OBJDUMP_FOR_TARGET\`" >&6
+ ac_dir=`dirname $OBJDUMP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11216,8 +11244,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $OBJDUMP_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $OBJDUMP_FOR_TARGET\`" >&6
+ ac_dir=`dirname $OBJDUMP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
OBJDUMP_FOR_TARGET='$(OBJDUMP)'
@@ -11235,8 +11264,9 @@ echo $ECHO_N "checking where to find the target ranlib... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $RANLIB_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $RANLIB_FOR_TARGET\`" >&6
+ ac_dir=`dirname $RANLIB_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11256,8 +11286,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $RANLIB_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $RANLIB_FOR_TARGET\`" >&6
+ ac_dir=`dirname $RANLIB_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
RANLIB_FOR_TARGET='$(RANLIB)'
@@ -11275,8 +11306,9 @@ echo $ECHO_N "checking where to find the target strip... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $STRIP_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $STRIP_FOR_TARGET\`" >&6
+ ac_dir=`dirname $STRIP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11296,8 +11328,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $STRIP_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $STRIP_FOR_TARGET\`" >&6
+ ac_dir=`dirname $STRIP_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
STRIP_FOR_TARGET='$(STRIP)'
@@ -11315,8 +11348,9 @@ echo $ECHO_N "checking where to find the target windres... $ECHO_C" >&6
if test "x${build}" != "x${host}" ; then
if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $WINDRES_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $WINDRES_FOR_TARGET\`" >&6
+ ac_dir=`dirname $WINDRES_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
else
# Canadian cross, just use what we found
echo "$as_me:$LINENO: result: pre-installed" >&5
@@ -11336,8 +11370,9 @@ else
echo "${ECHO_T}just compiled" >&6
elif expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then
# We already found the complete path
- echo "$as_me:$LINENO: result: pre-installed in \`dirname $WINDRES_FOR_TARGET\`" >&5
-echo "${ECHO_T}pre-installed in \`dirname $WINDRES_FOR_TARGET\`" >&6
+ ac_dir=`dirname $WINDRES_FOR_TARGET`
+ echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5
+echo "${ECHO_T}pre-installed in $ac_dir" >&6
elif test "x$target" = "x$host"; then
# We can use an host tool
WINDRES_FOR_TARGET='$(WINDRES)'
@@ -11527,6 +11562,15 @@ else
fi;
+# Check whether --with-pdfdir or --without-pdfdir was given.
+if test "${with_pdfdir+set}" = set; then
+ withval="$with_pdfdir"
+ pdfdir="\${prefix}/${withval}"
+else
+ pdfdir="\${docdir}"
+fi;
+
+
# Check whether --with-htmldir or --without-htmldir was given.
if test "${with_htmldir+set}" = set; then
withval="$with_htmldir"
@@ -11539,6 +11583,7 @@ fi;
+
ac_config_files="$ac_config_files Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -12280,6 +12325,7 @@ s,@stage1_checking@,$stage1_checking,;t t
s,@stage2_werror_flag@,$stage2_werror_flag,;t t
s,@datarootdir@,$datarootdir,;t t
s,@docdir@,$docdir,;t t
+s,@pdfdir@,$pdfdir,;t t
s,@htmldir@,$htmldir,;t t
s,@LIBOBJS@,$LIBOBJS,;t t
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
diff --git a/configure.ac b/configure.ac
index 3604ad74594..16ff8d3ddf1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1163,9 +1163,11 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then
#if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0)
choke me
#endif
- mpfr_t n; mpfr_init(n);
- mpfr_t x; mpfr_init(x);
+ mpfr_t n;
+ mpfr_t x;
int t;
+ mpfr_init (n);
+ mpfr_init (x);
mpfr_atan2 (n, n, x, GMP_RNDN);
mpfr_erfc (n, x, GMP_RNDN);
mpfr_subnormalize (x, t, GMP_RNDN);
@@ -2610,6 +2612,11 @@ AC_ARG_WITH(docdir,
[docdir="\${prefix}/${withval}"],
[docdir="\${datarootdir}/doc"])
+AC_ARG_WITH(pdfdir,
+[ --with-pdfdir Install pdf in this directory.],
+[pdfdir="\${prefix}/${withval}"],
+[pdfdir="\${docdir}"])
+
AC_ARG_WITH(htmldir,
[ --with-htmldir Install html in this directory.],
[htmldir="\${prefix}/${withval}"],
@@ -2617,6 +2624,7 @@ AC_ARG_WITH(htmldir,
AC_SUBST(datarootdir)
AC_SUBST(docdir)
+AC_SUBST(pdfdir)
AC_SUBST(htmldir)
AC_OUTPUT(Makefile)
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 53535521c94..272d6341361 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,7 @@
+2007-02-26 Dominique Dhumieres <dominiq@lps.ens.fr>
+
+ * test_installed: Adjust to the move from g77 to gfortran.
+
2007-02-16 Matthias Klose <doko@debian.org>
* texi2pod.pl: Handle @subsubsection, ignore @anchor.
diff --git a/contrib/test_installed b/contrib/test_installed
index 7a363d6872b..e518cbcf79e 100755
--- a/contrib/test_installed
+++ b/contrib/test_installed
@@ -1,6 +1,6 @@
#! /bin/sh
-# (C) 1998, 2000, 2002, 2003 Free Software Foundation
+# (C) 1998, 2000, 2002, 2003, 2007 Free Software Foundation
# Originally by Alexandre Oliva <oliva@dcc.unicamp.br>
# This script is Free Software, and it can be copied, distributed and
@@ -16,12 +16,12 @@
# will be appended to the srcdir.
# You may specify where the binaries to be tested should be picked up
-# from. If you specify --prefix=/some/dir, gcc, g++ and g77 will be
+# from. If you specify --prefix=/some/dir, gcc, g++ and gfortran will be
# looked for at /some/dir/bin. Each one may be overridden by
# specifying --with-gcc=/pathname/to/gcc, --with-g++=/pathname/to/g++
-# and --with-g77=/pathname/to/g77. If you specify --without-gcc,
-# --without-g++ or --without-g77, the test for the specified program
-# will be skipped. By default, gcc, g++ and g77 will be searched in
+# and --with-gfortran=/pathname/to/gfortran. If you specify --without-gcc,
+# --without-g++ or --without-gfortran, the test for the specified program
+# will be skipped. By default, gcc, g++ and gfortran will be searched in
# the PATH.
# An additional argument may specify --tmpdir=/some/dir; by default,
@@ -50,16 +50,16 @@ while true; do
--prefix=*) prefix=`echo "$1" | sed 's/[^=]*=//'`; shift;;
--with-gcc=*) GCC_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
--with-g++=*) GXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
- --with-g77=*) G77_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --with-gfortran=*) GFORTRAN_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
--without-gcc) GCC_UNDER_TEST=no; shift;;
--without-g++) GXX_UNDER_TEST=no; shift;;
- --without-g77) G77_UNDER_TEST=no; shift;;
+ --without-gfortran) GFORTRAN_UNDER_TEST=no; shift;;
--without-objc) OBJC_UNDER_TEST=no; shift;;
--tmpdir=*) tmpdir=`echo "$1" | sed 's/[^=]*=//'`; shift;;
--help) cat <<\EOF
-Runs the testsuite for an installed version of gcc/g++/g77/objc
+Runs the testsuite for an installed version of gcc/g++/gfortran/objc
Copyright (C) 1998 Free Software Foundation
by Alexandre Oliva <oliva@dcc.unicamp.br>
@@ -71,13 +71,13 @@ Supported arguments:
--srcdir=/some/dir same as --with-testsuite=/some/dir/gcc/testsuite
[deduced from shell-script pathname]
---prefix=/some/dir use gcc, g++ and g77 from /some/dir/bin [PATH]
+--prefix=/some/dir use gcc, g++ and gfortran from /some/dir/bin [PATH]
--with-gcc=/some/dir/bin/gcc use specified gcc program [gcc]
--with-g++=/some/dir/bin/g++ use specified g++ program [g++]
---with-g77=/some/dir/bin/g77 use specified g77 program [g77]
+--with-gfortran=/some/dir/bin/gfortran use specified gfortran program [gfortran]
--without-gcc do not run gcc testsuite
--without-g++ do not run g++ testsuite
---without-g77 do not run g77 testsuite
+--without-gfortran do not run gfortran testsuite
--without-objc do not run objc testsuite
--tmpdir=/some/dir create temporaries and leave failed programs
@@ -109,13 +109,13 @@ set CFLAGS ""
set CXXFLAGS ""
set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
set GXX_UNDER_TEST "${GXX_UNDER_TEST-${prefix}${prefix+/bin/}g++}"
-set G77_UNDER_TEST "${G77_UNDER_TEST-${prefix}${prefix+/bin/}g77}"
+set GFORTRAN_UNDER_TEST "${GFORTRAN_UNDER_TEST-${prefix}${prefix+/bin/}gfortran}"
set OBJC_UNDER_TEST "${OBJC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
EOF
test x"${GCC_UNDER_TEST}" = x"no" || runtest --tool gcc ${1+"$@"}
test x"${GXX_UNDER_TEST}" = x"no" || runtest --tool g++ ${1+"$@"}
-test x"${G77_UNDER_TEST}" = x"no" || runtest --tool g77 ${1+"$@"}
+test x"${GFORTRAN_UNDER_TEST}" = x"no" || runtest --tool gfortran ${1+"$@"}
test x"${OBJC_UNDER_TEST}" = x"no" || runtest --tool objc ${1+"$@"}
exit 0
diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog
index 34a63ba36c7..ac647e5fd58 100644
--- a/fixincludes/ChangeLog
+++ b/fixincludes/ChangeLog
@@ -1,3 +1,19 @@
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy "install-info" target.
+
+2007-03-06 Joseph Myers <joseph@codesourcery.com>
+
+ * mkheaders.in: Fix headers for each multilib required.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
+2007-02-27 Joseph Myers <joseph@codesourcery.com>
+
+ * mkheaders.in (incdir): Use include-fixed not include.
+
2007-02-15 Brooks Moses <brooks.moses@codesourcery.com>
* Makefile.in: Added "pdf" target to .PHONY.
diff --git a/fixincludes/Makefile.in b/fixincludes/Makefile.in
index 4e910987541..8e4ffe4cb71 100644
--- a/fixincludes/Makefile.in
+++ b/fixincludes/Makefile.in
@@ -184,11 +184,13 @@ install : all
$(DESTDIR)$(itoolsdir)/fixincl@EXEEXT@
$(INSTALL_SCRIPT) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders
-.PHONY: dvi pdf info html install-html
+.PHONY: dvi pdf info html install-pdf install-info install-html
dvi :
pdf :
info :
html :
+install-pdf :
+install-info :
install-html :
installcheck :
diff --git a/fixincludes/mkheaders.in b/fixincludes/mkheaders.in
index 29f27f15972..b584b68d6af 100644
--- a/fixincludes/mkheaders.in
+++ b/fixincludes/mkheaders.in
@@ -77,30 +77,34 @@ libexecsubdir=${libexecdir}/gcc/${target_noncanonical}/${version}
itoolsdir=${libexecsubdir}/install-tools
itoolsdatadir=${libsubdir}/install-tools
-incdir=${libsubdir}/include
-
-. ${itoolsdatadir}/mkheaders.conf
+incdir=${libsubdir}/include-fixed
+mkinstalldirs="@SHELL@ ${itoolsdir}/mkinstalldirs"
cd ${itoolsdir}
rm -rf ${incdir}/*
-if [ x${STMP_FIXINC} != x ] ; then
+for ml in `cat ${itoolsdatadir}/fixinc_list`; do
+ sysroot_headers_suffix=`echo ${ml} | sed -e 's/;.*$//'`
+ multi_dir=`echo ${ml} | sed -e 's/^[^;]*;//'`
+ subincdir=${incdir}${multi_dir}
+ . ${itoolsdatadir}/mkheaders.conf
+ if [ x${STMP_FIXINC} != x ] ; then
TARGET_MACHINE="${target}" target_canonical="${target}" \
MACRO_LIST="${itoolsdatadir}/macro_list" \
- @SHELL@ ./fixinc.sh ${incdir} \
+ @SHELL@ ./fixinc.sh ${subincdir} \
${isysroot}${SYSTEM_HEADER_DIR} ${OTHER_FIXINCLUDES_DIRS}
- rm -f ${incdir}/syslimits.h
- if [ -f ${incdir}/limits.h ]; then
- mv ${incdir}/limits.h ${incdir}/syslimits.h
+ rm -f ${subincdir}/syslimits.h
+ if [ -f ${subincdir}/limits.h ]; then
+ mv ${subincdir}/limits.h ${subincdir}/syslimits.h
else
- cp ${itoolsdatadir}/gsyslimits.h ${incdir}/syslimits.h
+ cp ${itoolsdatadir}/gsyslimits.h ${subincdir}/syslimits.h
fi
-fi
+ fi
-cp ${itoolsdatadir}/include/* ${incdir}
+ cp ${itoolsdatadir}/include${multi_dir}/limits.h ${subincdir}
-if [ x${STMP_FIXPROTO} != x ] ; then
- mkinstalldirs="@SHELL@ ${itoolsdir}/mkinstalldirs"
- export FIXPROTO_DEFINES mkinstalldirs
- @SHELL@ fixproto ${incdir} ${incdir} ${isysroot}${SYSTEM_HEADER_DIR} || exit 1
-fi
+ if [ x${STMP_FIXPROTO} != x ] ; then
+ export FIXPROTO_DEFINES mkinstalldirs
+ @SHELL@ fixproto ${subincdir} ${subincdir} ${isysroot}${SYSTEM_HEADER_DIR} || exit 1
+ fi
+done
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 37f33bbe79d..56d9d74b62a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,2150 @@
+2007-03-14 Sebastian Pop <sebastian.pop@inria.fr>
+
+ * tree-loop-linear.c (gather_interchange_stats): For multidimensional
+ arrays, multiply the access strides by the size of the sub-array.
+ * testsuite/gcc.dg/tree-ssa/ltrans-5.c: New.
+
+2007-03-14 Uros Bizjak <ubizjak@gmail.com>
+
+ * configure.ac (HAVE_AS_IX86_SAHF): On x86 targets check whether
+ the configured assembler supports the sahf mnemonic.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+
+ * config/i386/i386.md (x86_sahf_1): Depending on HAVE_AS_IX86_SAHF,
+ emit "sahf" or ".byte\t0x9e" as asm template.
+
+2007-03-14 Michael Meissner <michael.meissner@amd.com>
+
+ PR 31018
+ * config/i386/i386.h (X86_TUNE_SHORTEN_X87_SSE): New tuning
+ option to replace hard coded TARGET_xxx in md file.
+ (X86_TUNE_AVOID_VECTOR_DECODE): Ditto.
+ (X86_TUNE_SLOW_IMUL_IMM32_MEM): Ditto.
+ (X86_TUNE_SLOW_IMUL_IMM8): Ditto.
+ (X86_TUNE_MOVE_M1_VIA_OR): Ditto.
+ (X86_TUNE_NOT_UNPAIRABLE): Ditto.
+ (X86_TUNE_NOT_VECTORMODE): Ditto.
+ (TUNE_SHORTEN_X87_SSE): Use new tuning option.
+ (TUNE_AVOID_VECTOR_DECODE): Ditto.
+ (TUNE_SLOW_IMUL_IMM32_MEM): Ditto.
+ (TUNE_SLOW_IMUL_IMM8): Ditto.
+ (TUNE_MOVE_M1_VIA_OR): Ditto.
+ (TUNE_NOT_UNPAIRABLE): Ditto.
+ (TUNE_NOT_VECTORMODE): Ditto.
+
+ * config/i386/i386.c (ix86_tune_features): Fill in new tuning
+ options.
+
+ * config/i386/i386.md (fix_trunc?f?1_sse peephole2): Use new
+ tuning options instead of hard coded TARGET_xxx.
+ (fix ssemode peephole2's): Ditto.
+ (imul peephole2's): Ditto.
+ (movsi_or): Ditto.
+ (movdi_or_rex64): Ditto.
+ (move peephole2): Ditto.
+ (not peephole2's): Ditto.
+
+2007-03-14 Dirk Mueller <dmueller@suse.de>
+
+ * c-common.h (empty_body_warning): Rename to empty_if_body_warning.
+ * c-common.c (empty_if_body_warning): Rephrase diagnostic message.
+ * c-parser.c (c_parser_if_body): Always add an empty statement in case
+ of empty body.
+ * c-parser.c (c_parser_do_statement): Warn about empty body in
+ do/while statement.
+ * c-typeck (c_finish_if_stmt): Call empty_if_body_warning.
+ * doc/invoke.texi (-Wempty-body): Update documentation.
+
+2007-03-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c/21438
+ * c-common.h (warn_for_div_by_zero): Declare.
+ * c-common.c (warn_for_div_by_zero): Define.
+ * c-typeck.c (build_binary_op): Call warn_for_div_zero instead of
+ warning.
+
+2007-03-14 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.in (PREPROCESSOR_DEFINES): Add directory terminators
+ to PREFIX and STANDARD_PREFIX.
+
+2007-03-14 Richard Sandiford <richard@codesourcery.com>
+ Phil Edwards <phil@codesourcery.com>
+
+ * gthr-vxworks.h: Add an extern "C" wrapper for C++.
+ (__gthread_once_t): Remove busy field for RTPs.
+ (__GTHREAD_ONCE_INIT): Update accordingly.
+
+2007-03-14 Richard Sandiford <richard@codesourcery.com>
+
+ * doc/invoke.texi: Document VxWorks options.
+
+2007-03-14 Uros Bizjak <ubizjak@gmail.com>
+
+ * doc/invoke.texi (i386 and x86-64 Options): Clarify -msahf option.
+
+2007-03-13 Seongbae Park <seongbae.park@gmail.com>
+
+ PR tree-optimization/30590
+ * tree-nrv.c (tree_nrv): Check for the partial update of the
+ return value.
+
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ * flags.h (flag_random_seed): Remove declaration, in favor of...
+ * toplev.h (get_random_seed, set_random_seed): ... these.
+ * tree.c (get_file_function_name): Use the former.
+ * opts.c (common_handle_option): Use the latter.
+ * toplev.c
+
+2007-03-13 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR middle-end/31127
+ * cse.c (cse_find_path): Do not bail out if a basic block that
+ we already visited now becomes part of a path that starts at a
+ different basic block. Just disallow this, to make sure we
+ visit each basic block at most once.
+
+2007-03-13 Jan Hubicka <jh@suse.cz>
+
+ * ipa-inline.c (cgraph_maybe_hot_edge_p): Look for hot/cold attributes,
+ when profile esitmate is present, calls with very low frequency are
+ cold.
+
+2007-03-13 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/30730
+ PR tree-optimization/26900
+ * tree-ssa-loop-niter.c: Include gmp.h.
+ (bounds): New type.
+ (mpz_set_double_int, get_type_bounds, mpz_to_double_int,
+ split_to_var_and_offset, determine_value_range,
+ bound_difference_of_offsetted_base, refine_bounds_using_guard,
+ bound_difference, bounds_add, bounds_negate,
+ number_of_iterations_ne_max, dump_affine_iv): New functions.
+ (number_of_iterations_ne, number_of_iterations_lt_to_ne,
+ assert_loop_rolls_lt, assert_loop_rolls_le): Use bounds on the
+ difference of initial and final value of control iv to validate
+ results.
+ (number_of_iterations_cond): Add loop parameter. Determine bounds
+ on the difference of the extremes of the control iv. Add dumps.
+ (expand_simple_operations): Handle phi nodes.
+ (simplify_using_initial_conditions): Do not record used conditions.
+ (number_of_iterations_exit): Pass loop to number_of_iterations_cond.
+ Do not set additional_info.
+ (implies_nonnegative_p, implies_ge_p): Removed.
+ (derive_constant_upper_bound): Do not use parameter `additional'.
+ (record_estimate): Parameter `additional' removed. Parameter
+ `i_bound' added. Do not call derive_constant_upper_bound.
+ (record_nonwrapping_iv): Use derive_constant_upper_bound to
+ bound the number of iterations estimate.
+ (estimate_numbers_of_iterations_loop): Pass the estimate from
+ the number of iterations analysis to record_estimate.
+ * tree.h (multiple_of_p): Declare.
+ * tree-scalar-evolution.c (expression_expensive_p): Removed.
+ (scev_const_prop): Do not check expression_expensive_p.
+ * fold-const.c (multiple_of_p): Exported.
+ * double-int.c (double_int_mask): Exported.
+ * double-int.h (double_int_mask): Declare.
+ * tree-flow.h (struct tree_niter_desc): Removed additional_info
+ field. Added max field.
+
+2007-03-13 David Taylor <taylor@candd.org>
+
+ PR driver/12448:
+ * gcc.c (cpp_unique_options): If -MT or -MQ is seen, don't pass
+ default -MQ.
+
+2007-03-13 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR target/31123
+ * pa.md (vdepi_ior): Don't allow zero length deposit. Likewise for
+ two unamed patterns.
+
+2007-03-13 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.opt (mcx16, msahf): New options.
+ * config/i386/i386.c (x86_cmpxchg16b, x86_sahf): Remove.
+ (ix86_tune_features) [X86_TUNE_USE_SAHF]: Enable for m_GENERIC.
+
+ * config/i386/driver-i386.c (bit_LAHF_LM): New define.
+ (host_detect_local_cpu): Detect cx16 and lahf_lm cpuid bits.
+ Output -mcx16 and -msahf options when corresponding bit is set.
+
+ * doc/invoke.texi (i386 and x86-64 Options): Document -mcx16
+ and -msahf options.
+
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ * configure.ac: Test for assembler tolerance to # 0 "".
+ * configure, config.in: Rebuilt.
+ * final.c (final_scan_insn): Emit it if HAVE_AS_LINE_ZERO.
+
+2007-03-13 Geoffrey Keating <geoffk@apple.com>
+
+ * doc/invoke.texi (Spec Files): Update for '%{,' spec.
+
+ * config/rs6000/darwin-fallback.c: Compile file only on powerpc.
+ (handle_syscall): Handle direct system calls.
+ * config/rs6000/darwin.h (HAS_MD_FALLBACK_FRAME_STATE_FOR): Delete.
+
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * doc/invoke.texi: Fix cpp.info cross-reference.
+ * doc/passes.texi: Fix gcc.info cross-reference.
+
+2007-03-12 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/30835
+ * lambda-code.c (can_convert_to_perfect_nest): Check whether
+ bb_for_stmt is not NULL before accessing it.
+
+2007-03-12 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.c (main): Handle target_sysroot_hdrs_suffix being NULL for
+ some multilibs.
+
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ PR 30635
+ * doc/install.texi: Document --enable-stage1-languages
+
+2007-03-12 Steven Bosscher <steven@gcc.gnu.org>
+
+ * tree-pass.h (pass_into_cfg_layout_mode,
+ pass_outof_cfg_layout_mode): Declare.
+ * cfglayout.c (into_cfg_layout_mode, outof_cfg_layout_mode,
+ pass_into_cfg_layout_mode, pass_outof_cfg_layout_mode): New.
+ * passes.c (pass_into_cfg_layout_mode): Schedule before jump2.
+ (pass_outof_cfg_layout_mode): Schedule after pass_rtl_ifcvt.
+
+2007-03-12 Seongbae Park <seongbae.park@gmail.com>
+
+ * c-decl.c (warn_variable_length_array): New function.
+ Refactored from grokdeclarator to handle warn_vla
+ and handle unnamed array case.
+ (grokdeclarator): Refactored VLA warning case.
+ * c.opt (Wvla): New flag.
+ * doc/invoke.texi (Wvla): New warning.
+
+2007-03-12 Richard Henderson <rth@redhat.com>
+
+ * config/alpha/alpha.c (alpha_elf_section_type_flags): New.
+ (TARGET_SECTION_TYPE_FLAGS): New.
+
+2007-03-12 Richard Henderson <rth@redhat.com>
+
+ * config/darwin.c (machopic_reloc_rw_mask): New.
+ * config/darwin-protos.h (machopic_reloc_rw_mask): Declare.
+ * config/darwin.h (TARGET_ASM_RELOC_RW_MASK): New.
+
+2007-03-12 Mark Mitchell <mark@codesourcery.com>
+
+ * cppdefault.c (cpp_EXEC_PREFIX): New variable.
+ * cppdefault.h (cpp_PREFIX): Document.
+ (cpp_PREFIX_len): Likewise.
+ (cpp_EXEC_PREFIX): New variable.
+ * Makefile.in (PREPROCESSOR_DEFINES): Add STANDARD_EXEC_PREFIX.
+ * c-incpath.c (add_standard_paths): Correct logic for relocating
+ paths within prefix.
+
+2007-03-12 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (fixuns_trunc<mode>hi2): Implement from
+ fixuns_truncsfhi2 and fixuns_truncdfhi2 using SSEMODEF
+ mode macro.
+ (fix_trunc<mode>di_sse): Implement from fix_truncsfdi_sse and
+ fix_truncdfdi_sse using SSEMODEF mode macro.
+ (fix_trunc<mode>si_sse): Implement from fix_truncsfsi_sse and
+ fix_truncdfsi_sse using SSEMODEF mode macro.
+ (fix_trunc?f?i_sse peephole2): Implement using SSEMODEF mode macro.
+ (fix_trunc?f?i_sse K8 peephole2): Fix register constraint.
+
+2007-03-12 Richard Sandiford <richard@codesourcery.com>
+
+ * config.gcc (i[4567]86-wrs-vxworks, i[4567]86-wrs-vxworksae): Add
+ elfos.h to tm_file.
+
+2007-03-12 Olga Golovanevsky <olga@il.ibm.com>
+
+ * tree.h : Add multiple_of_p declaration.
+ * fold-const.c (multiple_of_p): Make multiple_of_p public.
+ * ipa-type-escape.c (results_of_malloc): Redundant.
+ (visited_stmts): New. Visited stmt for walk_use_def_chains.
+ (cast_type): Extended with new members.
+ (check_cast): Returns cast_type.
+ (cast): New structure for data of walk_use_def_chains.
+ (is_malloc_result, is_cast_from_non_pointer_1,
+ is_cast_from_non_pointer,
+ is_array_access_through_pointer_and_index): New functions.
+ (look_for_casts): Returns cast types.
+ (check_call): Returns void.
+ (okay_pointer_operation): Use support of pointer plus index,
+ pointer plus constant and allow all multiplications.
+
+2007-03-11 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/31115
+ * tree-vrp.c (extract_range_from_binary_expr): Make sure
+ the shift count is positive and non-anti-range for RSHIFT_EXPR.
+ A shift count of zero is not special as with *_DIV_EXPR.
+ (vrp_int_const_binop): Handle RSHIFT_EXPR for determining overflow
+ direction.
+
+2007-03-11 Ian Lance Taylor <iant@google.com>
+
+ * tree-vrp.c (vrp_int_const_binop): Handle PLUS_EXPR and
+ the *_DIV_EXPR codes correctly with overflow infinities.
+
+2007-03-11 Ira Rosen <irar@il.ibm.com>
+
+ * tree-data-ref.c (analyze_offset): Add a return value (bool) to
+ indicate success/failure of the analysis. Add negation to subtrahend
+ in case of subtraction. Fail if both operands contain constants.
+ (create_data_ref): Fail if analyze_offset fails.
+
+2007-03-11 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (frndintxf2): Rename to ...
+ (rintxf2): ... this. Remove expander having same name.
+ (rintsf2, rintdf2): Implement using SSEMODEF macro.
+ (roundsf2, rounddf2): Ditto.
+ (lrint<mode>di2, lrint<mode>si2): Implement using SSEMODEI24 macro.
+ (lround<mode>di2, lround<mode>si2): Ditto.
+
+2007-03-11 Steven Bosscher <steven@gcc.gnu.org>
+
+ * lower-subreg.c: Include except.h.
+ (decompose_multiword_subregs): Verify that the only control flow
+ insns we can split are loads to multi-words pseudos.
+ Handle breaking such blocks after splitting, instead of calling
+ find_many_sub_basic_blocks.
+
+ * loop-unroll.c (split_edge_and_insert): Don't set BB_SUPERBLOCK
+ on the new basic block. Add a lengthy comment explaining why we
+ thought this was necessary.
+ * cfglayout.c (cfg_layout_finalize): Don't break superblocks.
+
+2007-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/30924
+ * tree.c (walk_type_fields): Recurse into the element type of
+ ARRAY_TYPEs if there is a pointer set.
+
+2007-03-10 Dirk Mueller <dmueller@suse.de>
+
+ * c-common.c (warn_logical_operator): Fix condition.
+
+2007-03-10 Tobias Schlüter <tobi@gcc.gnu.org>
+
+ * config/i386/darwin.h (DARWIN_MINVERSION_SPEC): Add missing
+ quotation mark.
+ * config/darwin.c (machopic_select_section): Remove superfluous
+ argument in call to categorize_decl_for_section. Remove unused
+ variable shlib.
+
+2007-03-10 Joseph Myers <joseph@codesourcery.com>
+
+ * configure.ac (glibc_header_dir): Set using with_build_sysroot if
+ defined.
+ * configure: Regenerate.
+
+2007-03-10 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/31101
+ * config/i386/i386.md (UNSPEC_C2_FLAG): New constant.
+ (fpremxf4_i387, fprem1xf4_i387): Use UNSPEC_C2_FLAG.
+ (fmodxf3, fmod<mode>3, remainderxf3, remainder<mode>3):
+ Add LABEL_NUSES to emitted label.
+ * config/i386/i386.c (ix86_emit_fp_unordered_jump): Add
+ branch probability value to emitted jump insn.
+ * reg-stack.c (subst_stack_regs_pat)[UNSPEC]: Handle UNSPEC_C2_FLAG.
+ Do not check life information and do not re-arrange input operands
+ for UNSPEC_FSCALE_EXP, UNSPEC_FPREM_U and UNSPEC_FPREM1_U.
+
+2007-03-10 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * config/sh/sh.c (sh_insn_length_adjustment): Adjust for
+ the change of decode_asm_operands.
+
+2007-03-10 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * mode-switching.c (create_pre_exit): Skip blockage insn.
+
+2007-03-09 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-pass.h (TODO_update_smt_usage): Remove.
+ Update all users.
+ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Remove
+ argument SOME.
+ Update all users.
+
+2007-03-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.c (attr_length_call): Revise condition for long pc-relative branch.
+ (output_call): Use "LONG_PIC_SDIFF" instruction sequence for long local
+ calls on the SOM target. Don't use "LONG_PIC_PCREL" call sequence on
+ SOM target.
+
+2007-03-09 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.c: Document %{, in big comment at top.
+ (input_suffix_matches): Remove special handling for .s and
+ .S.
+ (input_spec_matches): New.
+ (handle_braces): Handle %{,.
+ (validate_switches): ',' indicates a value which is not a switch.
+ * config/alpha/osf.h (ASM_FINAL_SPEC): Use %{, rather than %{.
+ to detect assembler input.
+ * config/i386/sol2.h (CPP_SPEC): Likewise.
+ * config/rs6000/sysv4.h (ASM_SPEC): Likewise.
+ * config/rs6000/vxworks.h (ASM_SPEC): Likewise.
+ * config/rs6000/lynx.h (ASM_SPEC): Likewise.
+ * config/rs6000/linux64.h (ASM_SPEC_COMMON): Likewise.
+ * config/i386/darwin.h (DARWIN_MINVERSION_SPEC): Objective-C plus
+ -m64 causes deployment target to default to 10.5.
+ * config/rs6000/darwin.h (DARWIN_MINVERSION_SPEC): Likewise.
+
+2007-03-09 Richard Henderson <rth@redhat.com>
+
+ PR target/26090
+ * target.h (targetm.asm.out.reloc_rw_mask): New.
+ * target-def.h (TARGET_ASM_RELOC_RW_MASK): New.
+ (TARGET_ASM_OUT): Use it.
+ * targhooks.c, targhooks.h (default_reloc_rw_mask): New.
+ * varasm.c (categorize_decl_for_section): Remove shlib argument;
+ use the new reloc_rw_mask target hook instead.
+ (default_section_type_flags_1): Merge into...
+ (default_section_type_flags): ... here.
+ (decl_readonly_section_1): Merge into...
+ (decl_readonly_section): ... here.
+ (default_elf_select_section_1): Merge into...
+ (default_elf_select_section): ... here.
+ (default_unique_section_1): Merge into...
+ (default_unique_section): ... here.
+ (compute_reloc_for_rtx_1, compute_reloc_for_rtx): New.
+ (default_select_rtx_section): Use it.
+ (default_elf_select_rtx_section): Likewise.
+ * output.h: Update to match.
+ * doc/tm.texi (TARGET_ASM_RELOC_RW_MASK): New.
+ * config/alpha/alpha.c (alpha_elf_reloc_rw_mask): New.
+ (TARGET_ASM_RELOC_RW_MASK): New.
+ * config/i386/i386.c (x86_64_elf_select_section): Adjust call
+ to categorize_decl_for_section.
+ (x86_64_elf_unique_section): Likewise.
+ * config/ia64/hpux.h (TARGET_ASM_SELECT_SECTION,
+ TARGET_ASM_UNIQUE_SECTION, TARGET_ASM_SELECT_RTX_SECTION): Remove.
+ (TARGET_ASM_RELOC_RW_MASK): New.
+ * config/ia64/ia64.c (ia64_rwreloc_select_section,
+ ia64_rwreloc_unique_section, ia64_rwreloc_select_rtx_section): Remove.
+ (ia64_hpux_reloc_rw_mask, ia64_reloc_rw_mask): New.
+ (TARGET_RWRELOC): Remove.
+ (ia64_section_type_flags): Adjust call to default_section_type_flags.
+ * config/ia64/sysv4.h (TARGET_ASM_RELOC_RW_MASK): New.
+ * config/rs6000/rs6000.c (rs6000_elf_section_type_flags): Remove.
+ (rs6000_elf_select_section, rs6000_elf_unique_section): Remove.
+ (rs6000_elf_reloc_rw_mask, rs6000_xcoff_reloc_rw_mask): New.
+ (rs6000_xcoff_select_section): Use decl_readonly_section.
+ (rs6000_xcoff_section_type_flags): Use default_section_type_flags.
+ * config/rs6000/sysv4.h (TARGET_ASM_RELOC_RW_MASK): New.
+ (TARGET_ASM_SELECT_SECTION, TARGET_ASM_UNIQUE_SECTION): Remove.
+ (TARGET_SECTION_TYPE_FLAGS): Remove.
+ * config/rs6000/xcoff.h (TARGET_ASM_RELOC_RW_MASK): New.
+
+2007-03-09 Roger Sayle <roger@eyesopen.com>
+
+ * fold-const.c (fold_comparison): Remove compile-time evaluation of
+ complex constant equality/inequality comparisons for here.
+ (fold_binary) <EQ_EXPR>: Simplify complex comparisons that are
+ known at compile-time or can be simplified to a scalar comparison.
+ (fold_relational_const): Move compile-time evaluation of complex
+ constant equality/inequality comparisons to here.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ PR rtl-optimization/30643
+ * cse.c (cse_insn): Recompute dest_hash after insert_regs for
+ dest_addr_elt.
+ (fold_rtx): Recurse, like before 2006-11-03.
+
+2007-03-09 DJ Delorie <dj@redhat.com>
+
+ * config/m32c/t-m32c (m32c-pragma.o): Add TM_H dependency to
+ m32c-pragma.o.
+
+2007-03-09 Aldy Hernandez <aldyh@redhat.com>
+
+ PR tree-optimization/30375
+ * tree-ssa-dse.c (dse_possible_dead_store_p): Do not eliminate if
+ LHS of statements is not the same.
+ * testsuite/gcc.dg/tree-ssa/ssa-dse-10.c: New.
+
+2007-03-09 Chao-ying Fu <fu@mips.com>
+
+ * doc/extend.texi (MIPS DSP Built-in Functions): Document the DSP
+ REV 2.
+ * doc/invoke.texi (-mdspr2): Document new option.
+ * config/mips/mips.md (UNSPEC_ABSQ_S_QB .. UNSPEC_DPSQX_SA_W_PH):
+ New unspec for DSP REV 2.
+ (<u>mulsidi3_32bit_internal): Check if !TARGET_DSPR2, because
+ these instructions are extended in DSP REV 2.
+ (mips-dspr2.md): Include.
+ * config/mips/mips.opt (mdspr2): New option.
+ * config/mips/mips.c (mips_function_type): Add MIPS_V4QI_FTYPE_V4QI,
+ MIPS_SI_FTYPE_SI_SI_SI, MIPS_DI_FTYPE_DI_USI_USI, MIPS_DI_FTYPE_SI_SI,
+ MIPS_DI_FTYPE_USI_USI, MIPS_V2HI_FTYPE_SI_SI_SI.
+ (override_options): Check TARGET_DSPR2 to enable MASK_DSP.
+ (CODE_FOR_mips_mul_ph): Define it to CODE_FOR_mulv2hi3.
+ (dsp_bdesc): Add DSP REV 2 builtins. Remove 32-bit only DSP builtins.
+ (dsp_32only_bdesc): New description table for 32-bit only DSP REV 1
+ and 2 builtins.
+ (bdesc_map): Add one field of unsupported_target_flags.
+ (bdesc_arrays): Update entries to have extra fields. Add
+ dsp_32only_bdesc.
+ (mips_init_builtins): Initialize new function types.
+ Check unsupported_target_fileds to filter out builtins.
+ * config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Define __mips_dspr2 if
+ TARGET_DSPR2.
+ (ASM_SPEC): Pass mdspr2 to the assembler.
+ * config/mips/mips-dspr2.md: New file.
+
+2007-03-09 Sa Liu <saliu@de.ibm.com>
+
+ * config/rs6000/altivec.md: Fix vcond patterns using if_then_else.
+
+2007-03-09 Ian Lance Taylor <iant@google.com>
+
+ * opts.c (common_handle_option): Treat -Wstrict-overflow (with no
+ argument) like -Wstrict-overflow=2.
+ * doc/invoke.texi (Warning Options): Update documentation.
+
+2007-03-09 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/17946
+ * doc/invoke.texi (-Wlogical-op): Document.
+ * common.opt (-Wlogical-op): New.
+ * c-common.h (warn_logical_operator): Declare.
+ * c-common.c (warn_logical_operator): Define.
+ * c-typeck.c (parser_build_binary_op): Call
+ warn_logical_operator.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * rtl.h (gen_rtx_ASM_INPUT): Use "" instead of NULL file name.
+ * final.c (final_scan_insn): Test for non-"" file name.
+
+2007-03-09 Sebastian Pop <sebastian.pop@inria.fr>
+
+ * doc/loop.texi: Document the Omega linear constraints solver.
+ * doc/invoke.texi: Document -fcheck-data-deps, omega-max-vars,
+ omega-max-geqs, omega-max-eqs, omega-max-wild-cards,
+ omega-hash-table-size, omega-max-keys, and
+ omega-eliminate-redundant-constraints.
+ * tree-pass.h (pass_check_data_deps): Declared.
+ * omega.c: New.
+ * omega.h: New.
+ * timevar.def (TV_CHECK_DATA_DEPS): Declared.
+ * tree-ssa-loop.c (check_data_deps, gate_check_data_deps,
+ pass_check_data_deps): New.
+ * tree-data-ref.c (init_data_ref): Remove declaration.
+ (dump_data_dependence_relation): Dump DDR_INNER_LOOP.
+ (analyze_array): Renamed init_array_ref, move up initializations.
+ (init_data_ref): Renamed init_pointer_ref. Moved before its call.
+ Removed arguments that are set to NULL.
+ (analyze_indirect_ref): Correct indentation, correct call to
+ init_pointer_ref.
+ (object_analysis): Call init_array_ref instead of analyze_array.
+ (initialize_data_dependence_relation): Initialize DDR_INNER_LOOP.
+ (access_functions_are_affine_or_constant_p): Use DR_ACCESS_FNS instead
+ of DR_ACCESS_FNS_ADDR.
+ (init_omega_eq_with_af, omega_extract_distance_vectors,
+ omega_setup_subscript, init_omega_for_ddr_1, init_omega_for_ddr,
+ ddr_consistent_p): New.
+ (compute_affine_dependence): Check consistency of ddrs when
+ flag_check_data_deps is passed.
+ (analyze_all_data_dependences): Uncomment.
+ (tree_check_data_deps): New.
+ * tree-data-ref.h: Include omega.h.
+ (DR_ACCESS_FNS_ADDR): Removed.
+ (data_dependence_relation): Add inner_loop.
+ (DDR_INNER_LOOP): New.
+ * common.opt (fcheck-data-deps): New.
+ * tree-flow.h (tree_check_data_deps): Declare.
+ * Makefile.in (TREE_DATA_REF_H): Depend on omega.h.
+ (OBJS-common): Depend on omega.o.
+ (omega.o): Define.
+ * passes.c (pass_check_data_deps): Scheduled.
+ * params.def (PARAM_OMEGA_MAX_VARS, PARAM_OMEGA_MAX_GEQS,
+ PARAM_OMEGA_MAX_EQS, PARAM_OMEGA_MAX_WILD_CARDS,
+ PARAM_OMEGA_HASH_TABLE_SIZE, PARAM_OMEGA_MAX_KEYS,
+ PARAM_VECT_MAX_VERSION_CHECKS,
+ PARAM_OMEGA_ELIMINATE_REDUNDANT_CONSTRAINTS): New.
+
+2007-03-09 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/30904
+ PR middle-end/31058
+ * tree-vrp.c (extract_range_from_binary_expr): Handle RSHIFT_EXPR
+ the same way as *_DIV_EXPR.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * recog.c (decode_asm_operands): No mixed declarations and code.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * rtl.def (ASM_INPUT): Add location.
+ * rtl.h (ASM_INPUT_SOURCE_LOCATION): New.
+ (ASM_INPUT_SOURCE_FILE, ASM_INPUT_SOURCE_LINE): New.
+ (decode_asm_operands): Add loc operand.
+ (gen_rtx_ASM_INPUT, gen_rtx_ASM_INPUT_loc): Define.
+ * stmt.c (expand_asm): Rename to...
+ (expand_asm_loc): ... this. Add locus argument. Pass it on to
+ gen_rtx_ASM_INPUT_loc.
+ (expand_asm_expr): Adjust.
+ * recog.c (decode_asm_operands): Add loc operand.
+ (check_asm_operands, extract_insn): Adjust.
+ * reload1.c (maybe_fix_stack_asms): Likewise.
+ * final.c (asm_insn_count): Likewise.
+ (final_scan_insn): Output # line before and after asm.
+
+2007-03-09 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-ssa-structalias.c (variable_info): Remove
+ finished_solution.
+ (new_var_info): Ditto.
+ (shared_bitmap_info_t): New structure.
+ (shared_bitmap_table): New variable.
+ (shared_bitmap_hash): New function.
+ (shared_bitmap_eq): Ditto
+ (shared_bitmap_lookup): Ditto.
+ (shared_bitmap_add): Ditto.
+ (merge_smts_into): Change to take bitmap directly.
+ (find_what_p_points_to): Rewrite to use shared bitmap hashtable.
+ (init_alias_vars): Init shared bitmap hashtable.
+ (delete_points_to_sets): Delete shared bitmap hashtable.
+ * tree-ssa-operands.c (add_virtual_operand): Partially revert the
+ is_aliased removal as a change that was still necessary was
+ deleted.
+
+2007-03-09 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.h (override_options): Conditionally disable
+ x86_sahf for 64bit targets only.
+
+2007-03-08 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C/31072
+ * c-decl.c (merge_decls): Don't call make_var_volatile.
+ * varasm.c (make_var_volatile): Remove.
+ * output.h (make_var_volatile): Remove.
+
+2007-03-08 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimization/31085
+ * tree-ssa-address.c (create_mem_ref): Fix test of type of base.
+
+2007-03-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.def (lceil, lceilf, lceill, lfloor, lfloorf, lfloorl,
+ llceil, llceilf, llceill, llfloor, llfloorf, llfloorl): Mark with
+ ATTR_CONST_NOTHROW_LIST.
+
+ * fold-const.c (tree_expr_nonnegative_warnv_p): Handle
+ FIX_TRUNC_EXPR.
+
+2007-03-08 Diego Novillo <dnovillo@redhat.com>
+
+ * doc/tree-ssa.texi: Remove documentation for V_MUST_DEF.
+
+2007-03-08 Geoffrey Keating <geoffk@apple.com>
+
+ PR 31013
+ * gccspec.c (lang_specific_driver): Do nothing when NEXT_OBJC_RUNTIME
+ is declared.
+ * config/darwin.h (REAL_LIBGCC_SPEC): When -fgnu-runtime is
+ passed, use shared libgcc.
+
+2007-03-08 Roger Sayle <roger@eyesopen.com>
+
+ * tree-eh.c (do_return_redirection): Call build_gimple_modify_stmt
+ instead of calling build2 with a GIMPLE_MODIFY_STMT.
+ (honor_protect_cleanup_actions, lower_try_finally_switch):
+ Likewise.
+ * tree-if-conv.c (replace_phi_with_cond_gimple_modify_stmt,
+ ifc_temp_var): Likewise.
+ * tree-inline.c (setup_one_parameter): Likewise.
+ * tree-mudflap.c (mf_decl_cache_locals,
+ mf_build_check_statement_for): Likewise.
+ * tree-nested.c (init_tmp_var, save_tmp_var,
+ finalize_nesting_tree_1): Likewise.
+ * tree-outof-ssa.c (insert_copy_on_edge,
+ insert_backedge_copies): Likewise.
+ * tree-profile.c (tree_gen_edge_profiler,
+ tree_gen_ic_profiler): Likewise.
+ * tree-scalar-evolution.c (scev_const_prop): Likewise.
+ * tree-sra.c (sra_build_assignment): Likewise.
+ * tree-ssa-loop-im.c (determine_invariantness_stmt): Likewise.
+ * tree-ssa-math-opts.c (insert_reciprocals,
+ execute_cse_sincos_1): Likewise.
+ * tree-tailcall.c (adjust_accumulator_values,
+ adjust_return_value): Likewise.
+ * tree-vect-patterns.c (vect_pattern_recog_1): Likewise.
+ * tree-vect-transform.c (vect_create_data_ref_ptr,
+ bump_vector_ptr, vect_init_vector, get_initial_def_for_induction,
+ vect_create_epilog_for_reduction, vectorizable_reduction,
+ vectorizable_call, vectorizable_conversion,
+ vectorizable_assignment, vectorizable_operation,
+ vectorizable_type_demotion, vect_gen_widened_results_half,
+ vect_permute_store_chain, vectorizable_store,
+ vect_setup_realignment, vect_permute_load_chain,
+ vectorizable_load, vectorizable_condition,
+ vect_create_cond_for_align_checks): Likewise.
+ * tree-vrp.c (build_assert_expr_for): Likewise.
+
+2007-03-08 Ian Lance Taylor <iant@google.com>
+
+ * tree-vrp.c: Include "intl.h".
+ (usable_range_p): New static function.
+ (compare_values_warnv): Don't test TYPE_OVERFLOW_UNDEFINED for
+ overflowed values, juts set *strict_overflow_p.
+ (compare_values): Only return -2 if one of the operands is not a
+ constant.
+ (compare_ranges): Call usable_range_p.
+ (compare_range_with_value): Likewise.
+ (vrp_evaluate_conditional_warnv): Rename from
+ vrp_evaluate_conditional. Make static. Change all callers.
+ (vrp_evaluate_conditional): New function.
+ (simplify_div_or_mod_using_ranges): Issue warning about reliance
+ on signed overflow.
+ (simplify_abs_using_ranges): Likewise.
+ (simplify_stmt_for_jump_threading): Add within_stmt parameter.
+ * tree-ssa-dom.c (simplify_stmt_for_jump_threading): Add
+ within_stmt parameter.
+ * tree-ssa-propagate.c (fold_predicate_in): Update call to
+ vrp_evaluate_conditional.
+ * tree-ssa-threadedge.c
+ (record_temporary_equivalences_from_stmts_at_dest): Change
+ simplify parameter to take a second tree parameter.
+ (simplify_control_stmt_condition): Likewise.
+ (thread_across_edge): Likewise.
+ * tree-flow.h (vrp_evaluate_conditional): Update declaration.
+ (thread_across_edge): Likewise.
+ * gcc/Makefile.in (tree-vrp.o): Depend upon intl.h.
+
+2007-03-08 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.h (TARGET_SAHF): New define.
+ * config/i386/i386.c (ix86_tune_features) [X86_TUNE_USE_SAHF]:
+ Also enable for m_K8, m_AMDFAM10 and m_CORE2.
+ (x86_sahf): New global variable.
+ (override_options): Add PTA_NO_SAHF to pta_flags enum. Recode
+ pta_flags masks using shifts. Add PTA_NO_SAHF to x86_64 and
+ nocona processor flags. Set x86_sahf when PTA_NO_SAHF is not set
+ in processor flags. Do not unconditionally disable TARGET_USE_SAHF
+ for 64-bit.
+ (ix86_fp_comparison_sahf_cost): Return high value for !TARGET_SAHF.
+ (ix86_expand_fp_compare): Check for TARGET_CMOVE or TARGET_SAHF
+ when expanding fcomi/sahf based tests.
+ (ix86_emit_fp_unordered_jump): Check for TARGET_SAHF when
+ expanding sahf based alternative. Emit sahf based sequence when
+ optimizing for code size.
+ * config/i386/i386.md (x86_sahf_1): Do not disable for
+ TARGET_64BIT, enable for TARGET_SAHF.
+
+2007-03-08 Martin Michlmayr <tbm@cyrius.com>
+
+ * tree-ssa-coalesce.c (fail_abnormal_edge_coalesce): Remove
+ spurious whitespace from error message.
+
+2007-03-08 Volker Reichelt <reichelt@netcologne.de>
+
+ PR c++/30852
+ * c-common.c (fold_offsetof_1): Handle COMPOUND_EXPR.
+
+2007-03-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * c-decl.c (grokdeclarator): Disable warnings for anonymous
+ bitfields.
+ * tree-sra.c (instantiate_element): Propagate disabled warnings
+ from the element itself to the created variable.
+
+2007-03-07 Richard Henderson <rth@redhat.com>
+
+ PR target/30848
+ * reg-stack.c (emit_swap_insn): If a malformed asm was seen,
+ silently fix up the stack in the case of a missing register.
+
+2007-03-07 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/libunwind.S: Add .arch/.object_arch for armv4 builds.
+
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * config/arm/unwind-arm.c (struct wmmxd_regs, struct wmmxc_regs):
+ New.
+ (phase1_vrs): Use them.
+ (DEMAND_SAVE_WMMXD, DEMAND_SAVE_WMMXC): New.
+ (__gnu_Unwind_Save_WMMXD, __gnu_Unwind_Restore_WMMXD,
+ __gnu_Unwind_Save_WMMXC, __gnu_Unwind_Restore_WMMXC): Declare.
+ (restore_non_core_regs): Call __gnu_Unwind_Restore_WMMXD and
+ __gnu_Unwind_Restore_WMMXC if required.
+ (_Unwind_VRS_Pop): Implement iWMMXt support.
+ * config/arm/libunwind.S (gnu_Unwind_Restore_WMMXD,
+ gnu_Unwind_Save_WMMXD, gnu_Unwind_Restore_WMMXC,
+ gnu_Unwind_Save_WMMXC): Define.
+
+2007-03-07 Richard Sandiford <richard@codesourcery.com>
+
+ * config/vxworks.h (vxworks_override_options): Declare.
+ (VXWORKS_OVERRIDE_OPTIONS): Use it.
+ * config/vxworks.c: Include target.h and toplev.h.
+ (vxworks_override_options): New function.
+ * config/t-vxworks (vxworks.o): Depend on $(TARGET_H) and toplev.h.
+
+2007-03-07 Andreas Krebbel <krebbel1@de.ibm.com>
+
+ * config/s390/s390.c (override_options): Don't emit an error when
+ -mstack-size is used without providing -mstack-guard.
+ (s390_emit_prologue): Choose stack_guard value automatically if not
+ provided via command line.
+ * doc/invoke.texi: Adjust description of -mstack-guard and -mstack-size.
+
+2007-03-07 Richard Sandiford <richard@codesourcery.com>
+
+ * config/i386/i386.c (output_set_got): Add a GOT initialization
+ sequence for VxWorks PIC.
+ (legitimate_pic_address_disp_p): Allow UNSPEC_GOT wrappers
+ around labels as well as symbols. Use gotoff_operand instead
+ of local_symbolic_operand.
+ (legitimize_pic_address): Use gotoff_operand instead of
+ local_symbolic_operand. Use @GOT accesses for labels as
+ well as symbols.
+ (ix86_output_addr_diff_elt): Use PC-relative rather than
+ GP-relative offsets for VxWorks PIC.
+ (ix86_expand_move): Pass NULL_RTX to legitimize_pic_address unless
+ no_new_pseudos. Check whether the returned register is op0.
+ * config/i386/i386.md (tablejump): Use PC-relative rather than
+ GP-relative offsets for VxWorks PIC.
+ * config/i386/predicates.md (gotoff_operand): New predicate.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/vxworks.h (VXWORKS_GOTT_BASE, VXWORKS_GOTT_INDEX): Undefine
+ before defining.
+ * config/vxworks-dummy.h: New file.
+ * config/i386/i386.h: Include it.
+
+2007-03-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * dwarf2out.c (is_inlined_entry_point): New
+ (add_high_low_attributes): Emit DW_AT_entry_pc along with
+ DW_AT_ranges if the first subblock is the entry point.
+
+2007-03-06 David Daney <ddaney@avtrex.com>
+
+ * doc/install.texi (mips-*-*): Change recommended binutils
+ version.
+
+2007-03-06 Anatoly Sokolov <aesok@post.ru>
+
+ * config/avr/avr.c (avr_mcu_types): Add support for ATmega325P,
+ ATmega3250P, ATmega329P, ATmega3290P, AT90USB82 and AT90USB162
+ devices.
+ * config/avr/avr.h (LINK_SPEC, CRT_BINUTILS_SPECS): (Ditto.).
+ * config/avr/t-avr (MULTILIB_MATCHES): (Ditto.).
+
+2007-03-06 Jan Hubicka <jh@suse.cz>
+
+ * errors.h (warning, error, fatal, internal_error): Mark as cold.
+ * predict.c (maybe_hot_bb): Cold functions are never hot; hot functions
+ are hot.
+ (probably_cold_bb_p): Cold functions are cold.
+ (probably_never_executed_bb_p): Cold functions are cold.
+ (tree_bb_level_predictions): Predict calls to cold functions as not
+ taken.
+ (compute_function_frequency): Check hot/cold attributes.
+ * function.h (function_frequency): Update comments.
+ * predict.def (PRED_COLD_FUNCTION): Predict cold function.
+ * c-common.c (handle_hot_attribute, handle_cold_attribute): New.
+ (c_common_att): Add cold and hot.
+
+ * doc/extend.texi (hot,cold attributes): Document.
+
+2007-03-06 Andrew Haley <aph@redhat.com>
+
+ * function.c (expand_function_end): Move blockage to just after we
+ emit the label for the naked return from the function.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/i386/att.h (ASM_OUTPUT_ASCII, ASM_OUTPUT_SKIP): Undefine
+ before redefining.
+
+2007-03-06 Jan Hubicka <jh@suse.cz>
+
+ * reg-stack.c (reg_to_stack): Large models don't allow NAN to be
+ loaded for constant large models. Non-large 64bit PIC can do.
+ * i386.h (CASE_VECTOR_MODE): Large PIC cases are 64bit.
+ * cmodel.h: Add LARGE PIC.
+ * i386.md (UNSPEC_PLTOFF): New.
+ (UNSPEC_SET_RIP, UNSPEC_SET_GOT_OFFSET): New; renumber other unspecs as
+ needed.
+ (*call_1_rex64): Disable for large models.
+ (*call_1_rex64_large): New.
+ (*call_value_1_rex64): Disable for large models.
+ (*call_value_1_rex64_large): New.
+ (set_rip_rex4): New.
+ (set_got_offset_rex64): New.
+ * predicates.md (constant_call_address_operand): For large model
+ constant calls are not possible.
+ * i386-protos.h (construct_plt_address): Declare.
+ * i386.c (override_options): Accept large models.
+ (ix86_expand_prologue): Expand large PIC GOT pointer load.
+ (legitimate_constant_p): Add new UNSPECs.
+ (legitimate_pic_operand_p): Likewise.
+ (legitimate_pic_address_disp_p): Disallow local symbols for large PICs.
+ (legitimize_pic_address): Do easy RIP relative way for TLS only for
+ non-large model.
+ (output_pic_addr_const): Add PLTOFF.
+ (ix86_output_addr_diff_elt): Output 64bit tables when needed.
+ (ix86_expand_move): Legitimize pic address when in PIC mode.
+ (construct_plt_address): New function.
+ (ix86_expand_call): Offload the address to register and use GOT pointer
+ for large model.
+ * invoke.texi (mcmodel=large): Update documentation.
+
+2007-03-06 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386.c (x86_use_leave, x86_push_memory,
+ x86_zero_extend_with_and, x86_movx, x86_double_with_add,
+ x86_use_bit_test, x86_unroll_strlen, x86_deep_branch,
+ x86_branch_hints, x86_use_sahf, x86_partial_reg_stall,
+ x86_partial_flag_reg_stall, x86_use_himode_fiop, x86_use_simode_fiop,
+ x86_use_mov0, x86_use_cltd, x86_read_modify_write, x86_read_modify,
+ x86_split_long_moves, x86_promote_QImode, x86_fast_prefix,
+ x86_single_stringop, x86_qimode_math, x86_promote_qi_regs,
+ x86_himode_math, x86_promote_hi_regs, x86_sub_esp_4, x86_sub_esp_8,
+ x86_add_esp_4, x86_add_esp_8, x86_integer_DFmode_moves,
+ x86_partial_reg_dependency, x86_memory_mismatch_stall,
+ x86_prologue_using_move, x86_epilogue_using_move, x86_shift1,
+ x86_sse_partial_reg_dependency, x86_sse_split_regs,
+ x86_sse_unaligned_move_optimal, x86_sse_typeless_stores,
+ x86_sse_load0_by_pxor, x86_use_ffreep, x86_use_incdec,
+ x86_inter_unit_moves, x86_ext_80387_constants, x86_four_jump_limit,
+ x86_schedule, x86_use_bt, x86_pad_returns,
+ x86_use_xchgb): Merge into ...
+ (ix86_tune_features): ... here. New array.
+ (x86_cmove, x86_cmpxchg, x86_cmpxchg8b, x86_xadd,
+ x86_bswap): Merge into ...
+ (ix86_arch_features): ... here. New array.
+ (x86_3dnow_a): Remove.
+ (x86_accumulate_outgoing_args): Make static.
+ (x86_arch_always_fancy_math_387): Make static.
+ (ix86_tune_mask, ix86_arch_mask): Move ...
+ (override_options): ... to local variables here. Apply the
+ appropriate mask to each element of ix86_arch_features and
+ ix86_tune_features. Adjust TARGET_CMOVE and TARGET_USE_SAHF
+ as were done in the old macros.
+ (standard_80387_constant_p): Use TARGET_EXT_80387_CONSTANTS.
+ * config/i386/i386.h (x86_use_leave, x86_push_memory,
+ x86_zero_extend_with_and, x86_use_bit_test, x86_cmove, x86_deep_branch,
+ x86_branch_hints, x86_unroll_strlen, x86_double_with_add,
+ x86_partial_reg_stall, x86_movx, x86_use_himode_fiop,
+ x86_use_simode_fiop, x86_use_mov0, x86_use_cltd, x86_use_xchgb,
+ x86_read_modify_write, x86_read_modify, x86_split_long_moves,
+ x86_promote_QImode, x86_single_stringop, x86_fast_prefix,
+ x86_himode_math, x86_qimode_math, x86_promote_qi_regs,
+ x86_promote_hi_regs, x86_integer_DFmode_moves, x86_add_esp_4,
+ x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8,
+ x86_partial_reg_dependency, x86_memory_mismatch_stall,
+ x86_accumulate_outgoing_args, x86_prologue_using_move,
+ x86_epilogue_using_move, x86_decompose_lea,
+ x86_arch_always_fancy_math_387, x86_shift1,
+ x86_sse_partial_reg_dependency, x86_sse_split_regs,
+ x86_sse_unaligned_move_optimal, x86_sse_typeless_stores,
+ x86_sse_load0_by_pxor, x86_use_ffreep, x86_inter_unit_moves,
+ x86_schedule, x86_use_bt, x86_cmpxchg, x86_cmpxchg8b, x86_xadd,
+ x86_use_incdec, x86_pad_returns, x86_bswap,
+ x86_partial_flag_reg_stall): Remove.
+ (enum ix86_tune_indices): New.
+ (ix86_tune_features): New.
+ (TARGET_USE_LEAVE, TARGET_PUSH_MEMORY, TARGET_ZERO_EXTEND_WITH_AND,
+ TARGET_USE_BIT_TEST, TARGET_UNROLL_STRLEN,
+ TARGET_DEEP_BRANCH_PREDICTION, TARGET_BRANCH_PREDICTION_HINTS,
+ TARGET_DOUBLE_WITH_ADD, TARGET_USE_SAHF, TARGET_MOVX,
+ TARGET_PARTIAL_REG_STALL, TARGET_PARTIAL_FLAG_REG_STALL,
+ TARGET_USE_HIMODE_FIOP, TARGET_USE_SIMODE_FIOP, TARGET_USE_MOV0,
+ TARGET_USE_CLTD, TARGET_USE_XCHGB, TARGET_SPLIT_LONG_MOVES,
+ TARGET_READ_MODIFY_WRITE, TARGET_READ_MODIFY, TARGET_PROMOTE_QImode,
+ TARGET_FAST_PREFIX, TARGET_SINGLE_STRINGOP, TARGET_QIMODE_MATH,
+ TARGET_HIMODE_MATH, TARGET_PROMOTE_QI_REGS, TARGET_PROMOTE_HI_REGS,
+ TARGET_ADD_ESP_4, TARGET_ADD_ESP_8, TARGET_SUB_ESP_4,
+ TARGET_SUB_ESP_8, TARGET_INTEGER_DFMODE_MOVES,
+ TARGET_PARTIAL_REG_DEPENDENCY, TARGET_SSE_PARTIAL_REG_DEPENDENCY,
+ TARGET_SSE_UNALIGNED_MOVE_OPTIMAL, TARGET_SSE_SPLIT_REGS,
+ TARGET_SSE_TYPELESS_STORES, TARGET_SSE_LOAD0_BY_PXOR,
+ TARGET_MEMORY_MISMATCH_STALL, TARGET_PROLOGUE_USING_MOVE,
+ TARGET_EPILOGUE_USING_MOVE, TARGET_SHIFT1, TARGET_USE_FFREEP,
+ TARGET_INTER_UNIT_MOVES, TARGET_FOUR_JUMP_LIMIT, TARGET_SCHEDULE,
+ TARGET_USE_BT, TARGET_USE_INCDEC, TARGET_PAD_RETURNS,
+ TARGET_EXT_80387_CONSTANTS): Use it.
+ (enum ix86_arch_indices): New.
+ (ix86_arch_features): New.
+ (TARGET_CMOVE, TARGET_CMPXCHG, TARGET_CMPXCHG8B, TARGET_XADD,
+ TARGET_BSWAP): Use it.
+ (ix86_tune_mask, ix86_arch_mask): Remove.
+
+2007-03-06 Joseph Myers <joseph@codesourcery.com>
+
+ PR bootstrap/31020
+ * configure.ac (CROSS_SYSTEM_HEADER_DIR, build_system_header_dir):
+ Define using $${sysroot_headers_suffix}.
+ * configure: Regenerate.
+ * cppdefault.c (cpp_include_defaults): Make FIXED_INCLUDE_DIR a
+ multilib-suffixed directory if SYSROOT_HEADERS_SUFFIX_SPEC
+ defined.
+ * doc/invoke.texi (-print-sysroot-headers-suffix): Document.
+ * gcc.c (print_sysroot_headers_suffix): New.
+ (option_map): Include --print-sysroot-headers-suffix.
+ (display_help): Mention -print-sysroot-headers-suffix.
+ (process_command): Handle -print-sysroot-headers-suffix.
+ (do_spec_1): Append multilib directory to include-fixed path if
+ sysroot suffixes in use.
+ (main): Handle -print-sysroot-headers-suffix.
+ * Makefile.in (start.encap): Don't depend on xlimits.h
+ (xlimits.h): Remove.
+ (stmp-int-hdrs): Don't depend on xlimits.h. Inline generation of
+ limits.h for each multilib in fixinc_list.
+ (fixinc_list, s-fixinc_list): New.
+ (stmp-fixinc): Depend on fixinc_list. If not copying headers,
+ generate them for each multilib in fixinc_list.
+ (stmp-fixproto): Use include-fixed. Run fixproto for each
+ multilib in fixinc_list.
+ (mostlyclean): Don't remove xlimits.h.
+ (clean): Remove include-fixed.
+ (real-install-headers-tar, real-install-headers-cpio,
+ real-install-headers-cp): Don't copy include, only include-fixed.
+ (install-mkheaders): Depend on fixinc_list. Don't depend on
+ xlimits.h. Save limits.h files for each multilib in fixinc_list.
+ Always save mkinstalldirs. Preserve ${sysroot_headers_suffix} in
+ SYSTEM_HEADER_DIR setting in mkheaders.conf.
+
+2007-03-06 Jan Hubicka <jh@suse.cz>
+
+ * regstack.c (reg_to_stack): When in 64bit PIC mode, we still can load
+ NANs easilly.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * configure.ac: Allow tm_file to contain build-directory files.
+ * configure: Regenerate.
+ * config.gcc (m68k-*-uclinux*): Add ./sysroot-suffix.h to tm_file.
+ * config/m68k/t-uclinux (sysroot-suffix.h): New target.
+ * config/m68k/print-sysroot-suffix.sh: New file.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k.h (PIC_OFFSET_TABLE_REGNUM): Use the REGNO
+ of pic_offset_table_rtx if reload_completed.
+ (CONDITIONAL_REGISTER_USAGE): Use PIC_REG instead of
+ PIC_OFFSET_TABLE_REGNUM.
+ * config/m68k/m68k.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Always
+ return true.
+ (m68k_save_reg): Use PIC_REG instead of PIC_OFFSET_TABLE_REGNO.
+ (m68k_output_mi_thunk): Rewrite to use RTL. Honor vcall_offset.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k.c (m68k_save_reg): Save the PIC register in
+ functions that call eh_return.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k.c (m68k_save_reg): Save the PIC register in
+ functions that need a constant pool.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ PR target/28181
+ * config/m68k/m68k-protos.h (m68k_secondary_reload_class): Declare.
+ (m68k_preferred_reload_class): Likewise.
+ * config/m68k/m68k.h (HARD_REGNO_MODE_OK): Remove duplicated comment.
+ (SECONDARY_RELOAD_CLASS): Define.
+ (PREFERRED_RELOAD_CLASS): Use m68k_preferred_reload_class.
+ (LIMIT_RELOAD_CLASS): Delete.
+ * config/m68k/m68k.c (m68k_regno_mode_ok): Don't prevent address
+ registers from storing bytes.
+ (m68k_secondary_reload_class): New function.
+ (m68k_preferred_reload_class): Likewise.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k.c (m68k_save_reg): Remove special case for
+ leaf functions.
+ (m68k_expand_prologue): Likewise.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k-protos.h (output_sibcall): Declare.
+ (mips_expand_epilogue): Add a bool parameter.
+ (m68k_legitimize_sibcall_address): Declare.
+ * config/m68k/m68k.c (TARGET_FUNCTION_OK_FOR_SIBCALL): Define.
+ (m68k_expand_epilogue): Add a parameter to select between sibling
+ and normal epilogues. Only generate a return for the latter.
+ (m68k_ok_for_sibcall_p): New function.
+ (m68k_legitimize_sibcall_address, output_sibcall): New functions.
+ * config/m68k/m68k.md (sibcall, *sibcall): New patterns.
+ (sibcall_value, *sibcall_value): Likewise.
+ (*call, *call_value): Require !SIBLING_CALL_P.
+ (epilogue): Update call to m68k_expand_epilogue.
+ (sibcall_epilogue): New pattern.
+ * config/m68k/predicates.md (const_call_operand): Say that this
+ predicate applies to sibling calls too.
+ (sibcall_operand): New predicate.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k.md (movsf_cf_soft): Provide the same non-mov3q
+ alternatives as movsi_cf.
+ (movsf_cf_hard): Add commentary.
+
+2007-03-06 Kazu Hirata <kazu@codesourcery.com>
+ Richard Sandiford <richard@codesourcery.com>
+
+ * config/m68k/m68k-protos.h (m68k_interrupt_function_p): Declare.
+ (m68k_movem_pattern_p, m68k_output_movem): Likewise.
+ (m68k_expand_prologue, m68k_expand_epilogue): Likewise.
+ * config/m68k/m68k.h (EPILOGUE_USES): Define. Treat all registers
+ as being live on exit from an interrupt function.
+ (PRINT_OPERAND_PUNCT_VALID_P): Return true for '?'.
+ * config/m68k/m68k.c (MIN_MOVEM_REGS, MIN_FMOVEM_REGS): New macros.
+ (m68k_frame): Remove reg_rev_mask and fpu_rev_mask.
+ (TARGET_ASM_FUNCTION_PROLOGUE, TARGET_ASM_FUNCTION_EPILOGUE): Delete.
+ (m68k_interrupt_function_p): Globalize.
+ (m68k_compute_frame_layout): Remove reverse mask code.
+ (m68k_emit_movem, m68k_set_frame_related): New functions.
+ (m68k_output_function_prologue): Delete in favor of...
+ (m68k_expand_prologue): ...this new function.
+ (m68k_output_function_epilogue): Delete in favor of...
+ (m68k_expand_epilogue): ...this new function.
+ (m68k_split_offset, m68k_movem_pattern_p, m68k_output_movem): New
+ functions.
+ (print_operand): Handle %?.
+ * config/m68k/m68k.md (UNSPEC_SIN, UNSPEC_COS): Remove excess space.
+ (UNSPEC_GOT, A1_REG, PIC_REG, FP0_REG): New constants.
+ (prologue, epilogue): New patterns.
+ (return): Turn into a define_expand.
+ (*return): New pattern, derived from old "return" pattern. Use rte
+ rather than rts for interrupt functions. Only use rtd if the pop
+ count is nonzero.
+ (*m68k_store_multiple, *m68k_store_multiple_automod): New patterns.
+ (*m68k_load_multiple, *m68k_load_multiple_automod): Likewise.
+ (link, *link, unlink, *unlink, load_got): Likewise.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ PR target/23482
+ PR target/17114
+ * config/m68k/m68k-protos.h (m68k_legitimate_base_reg_p): Declare.
+ (m68k_legitimate_index_reg_p, m68k_legitimate_address_p): Likewise.
+ (m68k_matches_q_p, m68k_matches_u_p): Likewise.
+ * config/m68k/m68k.h (EXTRA_CONSTRAINT): Use m68k_matches_q_p
+ and m68k_matches_u_p.
+ (PCREL_GENERAL_OPERAND_OK, LEGITIMATE_BASE_REG_P): Delete.
+ (INDIRECTABLE_1_ADDRESS_P, GO_IF_NONINDEXED_ADDRESS): Delete.
+ (GO_IF_INDEXABLE_BASE, GO_IF_INDEXING, GO_IF_INDEXED_ADDRESS): Delete.
+ (LEGITIMATE_INDEX_REG_P, LEGITIMATE_INDEX_P): Delete.
+ (GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS): Delete.
+ (REG_STRICT_P): New macro.
+ (LEGITIMATE_PIC_OPERAND_P): Use REG_STRICT_P rather than
+ PCREL_GENERAL_OPERAND_OK.
+ (REG_OK_FOR_BASE_P): Merge definitions. Use REG_STRICT_P and
+ m68k_legitimate_base_reg_p.
+ (REG_MODE_OK_FOR_INDEX_P): Likewise m68k_legitimate_index_reg_p.
+ (GO_IF_LEGITIMATE_ADDRESS): Likewise m68k_legitimate_address_p.
+ (PIC_CASE_VECTOR_ADDRESS): Update comment.
+ * config/m68k/m68k.c (m68k_address): New structure.
+ (m68k_legitimate_base_reg_p, m68k_legitimate_index_reg_p)
+ (m68k_decompose_index, m68k_legitimate_constant_address_p)
+ (m68k_jump_table_ref_p, m68k_decompose_address)
+ (m68k_legitimate_address_p, m68k_legitimate_mem_p, m68k_matches_q_p)
+ (m68k_matches_u_p): New functions.
+ (print_operand_address): Rewrite to use m68k_decompose_index.
+
+2007-03-05 David Taylor <dtaylor@emc.com>
+
+ * gcc.c: Correct copyright date in --version output.
+
+2007-03-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.md: In unamed move patterns, disparge copies between general
+ and floating point registers using '?' modifier. Don't include 'f'
+ constraint for register preferences in DImode, SImode, HImode and
+ QImode patterns. Likewise for 'r' in DFmode and SFmode patterns.
+ Remove constraints for copies between general and floating registers
+ in soft-float DFmode pattern.
+ (movdf): Fail if operand1 is a CONST_DOUBLE and operand0 is a hard
+ floating register.
+ (movsf): Likewise.
+
+2007-03-05 Mike Stump <mrs@apple.com>
+
+ * c-common.c (targetcm): Add.
+ * c-opts.c (c_common_handle_option): Handle language specific
+ target options.
+ * opts.c (handle_option): Verify language for target options, if
+ any are given.
+ * opth-gen.awk: Add CL_LANG_ALL.
+ * target-def.h (TARGET_HANDLE_C_OPTION): Add.
+ (TARGETCM_INITIALIZER): Add.
+ * target.h (struct gcc_targetcm): Add.
+ (targetcm): Add.
+ * targhooks.c (default_handle_c_option): Add.
+ * targhooks.h (default_handle_c_option): Add.
+ * doc/tm.texi (TARGET_HANDLE_C_OPTION): Add.
+
+ * config/darwin.opt (iframework): Add.
+ * config/darwin.h (TARGET_HAS_TARGETCM): Add.
+ * config/darwin-c.c (handle_c_option): Add.
+ (TARGET_HANDLE_C_OPTION): Add.
+ (targetcm): Add.
+ * doc/invoke.texi (Darwin Options): Add -iframework.
+
+2007-03-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint
+ conversion.
+
+2007-03-05 Ian Lance Taylor <iant@google.com>
+
+ * c.opt (fgnu89-inline): New option.
+ * c-opts.c (c_common_post_options): Set default value for
+ flag_gnu89_inline.
+ * c-decl.c (WANT_C99_INLINE_SEMANTICS): Remove.
+ (pop_scope): Check flag_gnu89_inline rather than flag_isoc99 for
+ inline functions.
+ (diagnose_mismatched_decls, merge_decls, start_decl): Likewise.
+ (grokdeclarator, start_function): Likewise.
+ * c-cppbuiltin.c (c_cpp_builtins): Define either
+ __GNUC_GNU_INLINE__ or __GNUC_STDC_INLINE__.
+ * doc/invoke.texi (Option Summary): Mention -fgnu89-inline.
+ (C Dialect Options): Document -fgnu89-inline.
+ * doc/extend.texi (Function Attributes): Explain what the
+ gnu_inline attribute does.
+ * doc/cpp.texi (Common Predefined Macros): Document
+ __GNUC_GNU_INLINE__ and __GNUC_STDC_INLINE__.
+
+2007-03-05 Ian Lance Taylor <iant@google.com>
+
+ PR tree-optimization/31034
+ * tree-vrp.c (extract_range_from_assert): Don't try to handle a
+ half-range if the other side is an overflow infinity.
+
+2007-03-05 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config.gcc (bfin*-uclinux*): Use t-bfin-uclinux.
+ (bfin*-linux-uclibc*): New configuration.
+ * config/linux.h (LINK_GCC_C_SEQUENCE_SPEC): Undefined before
+ defining.
+ * config/bfin/linux.h: New file.
+ * config/bfin/libgcc-bfin.ver: New file.
+ * config/bfin/t-bfin-uclinux: New file.
+ * config/bfin/t-bfin-linux: New file.
+ * config/bfin/uclinux.h (LINUX_TARGET_OS_CPP_BUILTINS): New macro.
+ (TARGET_OS_CPP_BUILTINS): New macro.
+
+2007-03-05 Richard Guenther <rguenther@suse.de>
+
+ * fold-const.c (fold_binary): Remove duplicate folding
+ of comparison of non-null ADDR_EXPR against null.
+
+2007-03-05 Richard Guenther <rguenther@suse.de>
+ Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/26420
+ * tree-vectorizer.c (vectorize_loops): Bail out early if there
+ are no loops in the function. Only print the number of
+ vectorized loops if it is greater than zero or we are supposed
+ to print information about unvectorized loops.
+
+2007-03-05 Revital Eres <eres@il.ibm.com>
+
+ * gcc.dg/var-expand1.c: New test.
+ * loop-unroll.c (analyze_insn_to_expand_var): Add dump info
+ when an accumulator is expanded.
+
+2007-03-04 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR other/30465
+ * c-common.c (convert_and_check): Don't give warnings for
+ conversion if 'expr' already overflowed.
+
+2007-03-04 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/30744
+ * fold-const.c (fold_comparison): Enforce type consistency when
+ transforming ~X op ~Y to Y op X, and ~X op C to X op' ~C.
+
+2007-03-04 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-ssa-address.c (create_mem_ref): Do not put an expression
+ containing a cast to the base of TARGET_MEM_REF.
+
+2007-03-04 Martin Michlmayr <tbm@cyrius.com>
+
+ * tree.c (tree_contains_struct_check_failed): Remove spurious
+ whitespace from error message.
+
+2007-03-04 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/30406
+ * config/rs6000/rs6000.c (rs6000_function_value): Look at bit size
+ instead of precision.
+
+2007-03-04 Roman Zippel <zippel@linux-m68k.org>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * emit-rtl.c (find_auto_inc): New.
+ (try_split): recreate REG_INC notes,
+ Use regular for loops rather than whiles.
+
+2007-03-03 Andreas Schwab <schwab@suse.de>
+
+ * configure.ac (HAVE_AS_REL16): Move test back to correct place.
+ * configure: Regenerate.
+
+2007-03-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.def (ATTR_MATHFN_FPROUNDING): Rely on
+ flag_rounding_math, not flag_unsafe_math_optimizations.
+
+ * c-pretty-print.c (pp_c_direct_abstract_declarator): Use
+ fold_build2.
+ * config/alpha/alpha.c (alpha_fold_builtin_zapnot,
+ alpha_fold_vector_minmax): Likewise.
+ * config/i386/i386.c (ix86_gimplify_va_arg): Likewise.
+ * config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise.
+
+2007-03-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-sra.c (sra_walk_fns) <ldst>: Document new restriction.
+ (sra_walk_modify_expr) <rhs_elt>: Treat the reference as a use
+ if the lhs has side-effects.
+ <lhs_elt>: Treat the reference as a use if the rhs has side-effects.
+
+2007-03-02 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.h (TUNEMASK): Remove define.
+ (ARCHMASK): Remove define.
+ (TARGET_*): Use ix86_tune_mask variable instead of TUNEMASK.
+ Use ix86_arch_mask variable instead of ARCHMASK.
+ * config/i386/i386.c (override_options): Ditto.
+ (standard_80387_constant_p): Ditto.
+
+2007-03-02 Ian Lance Taylor <iant@google.com>
+
+ Used signed infinities in VRP.
+ * tree-vrp.c (uses_overflow_infinity): New static function.
+ (supports_overflow_infinity): New static function.
+ (make_overflow_infinity): New static function.
+ (negative_overflow_infinity): New static function.
+ (positive_overflow_infinity): New static function.
+ (is_negative_overflow_infinity): New static function.
+ (is_positive_overflow_infinity): New static function.
+ (is_overflow_infinity): New static function.
+ (overflow_infinity_range_p): New static function.
+ (compare_values_warnv): New function split out of compare_values.
+ (compare_value): Call it.
+ (set_value_range_to_nonnegative): Add overflow_infinity
+ parameter. Change caller.
+ (vrp_expr_computes_nonnegative): Add strict_overflow_p parameter.
+ Change callers.
+ (vrp_expr_computes_nonzero): Likewise.
+ (compare_ranges, compare_range_with_value): Likewise.
+ (compare_name_with_value, compare_names): Likewise.
+ (vrp_evaluate_conditional): Likewise.
+ (set_value_range): Handle infinity
+ (vrp_operand_equal_p, operand_less_p): Likewise.
+ (extract_range_from_assert): Likewise.
+ (vrp_int_const_binop): Likewise.
+ (extract_range_from_binary_expr): Likewise.
+ (extract_range_from_unary_expr): Likewise.
+ (extract_range_from_comparison): Likewise.
+ (extract_range_from_expr): Likewise.
+ (dump_value_range): Likewise.
+ (vrp_visit_cond_stmt, vrp_visit_phi_node): Likewise.
+ (test_for_singularity): Likewise.
+ (vrp_int_const_binop): Remove inline qualifier.
+ (adjust_range_with_scev): Add comment.
+ * tree-flow.h (vrp_evaluate_conditional): Update declaration.
+
+2007-03-02 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-ssa-structalias.c (could_have_pointers): Tidy.
+ (get_constraint_for): Likewise.
+ (do_structure_copy): Likewise.
+ (find_func_aliases): Fix references to MODIFY_EXPR.
+ (intra_create_variable_infos): Tidy.
+ * tree-ssa-operands.c (add_virtual_operand): Add argument
+ IS_CALL_SITE.
+ When adding members of alias sets, if IS_CALL_SITE is true and
+ the symbol is not call-clobbered, skip it.
+ Adjust all callers.
+
+2007-03-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/alpha/alpha.c (alpha_gp_save_rtx): Insert the insns at the
+ entry by means of emit_insn_at_entry.
+
+2007-03-02 Richard Henderson <rth@redhat.com>
+
+ * expr.h (promoted_input_arg): Remove decl.
+ * function.c (promoted_input_arg): Merge into ...
+ * combine.c (setup_incoming_promotions): ... only caller.
+ Rearrange to avoid double loop.
+
+2007-03-02 Ben Elliston <bje@au.ibm.com>
+ Peter Bergner <bergner@vnet.ibm.com>
+ Janis Johnson <janis187@us.ibm.com>
+
+ * config/rs6000/dfp.md: New file.
+ * config/rs6000/rs6000.md: Include dfp.md.
+ (add<mode>3_internal1): Disable for DECIMAL_FLOAT_MODE_P operands.
+ * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Handle DDmode
+ and TDmode decimal float modes in FP registers.
+ (num_insns_constant): Likewise.
+ (rs6000_legitimate_offset_address_p): Likewise.
+ (rs6000_legitimize_address): Likewise.
+ (rs6000_legitimize_reload_address): Likewise.
+ (rs6000_legitimate_address): Likewise.
+ (rs6000_emit_move): Likewise.
+ (function_arg_boundary): Likewise.
+ (function_arg_advance): Likewise.
+ (rs6000_darwin64_record_arg_recurse): Likewise.
+ (function_arg): Likewise.
+ (rs6000_gimplify_va_arg): Likewise.
+ (rs6000_split_multireg_move): Likewise.
+ (rs6000_output_function_epilogue): Likewise.
+ (rs6000_output_function_epilogue): Likewise.
+ (rs6000_register_move_cost): Likewise.
+ (rs6000_function_value): Likewise.
+ (rs6000_libcall_value): Likewise.
+
+2007-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * config/t-vxworks (LIMITS_H_TEST): Define to true for VxWorks.
+
+2007-03-02 Richard Sandiford <richard@codesourcery.com>
+
+ * config/t-vxworks (LIBGCC2_INCLUDES): Pass -nostdinc.
+ Use $MULTIDIR to choose between the kernel and RTP headers,
+ and use $WIND_BASE and $WIND_USR to locate them.
+
+2007-03-02 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (override_options): Put initialization of
+ ix86_tune_mask and ix86_arch_mask to the correct place.
+
+2007-03-02 Uros Bizjak <ubizjak@gmail.com>
+ Michael Meissner <michael.meissner@amd.com>
+
+ PR target/31019
+ * config/i386/i386.h (TUNEMASK): Redefine to use ix86_tune_mask.
+ (ARCHMASK): Define.
+ (TARGET_CMOVE): Use ARCHMASK.
+ (TARGET_CMPXCHG): Ditto.
+ (TARGET_CMPXCHG8B): Ditto.
+ (TARGET_XADD): Ditto.
+ (TARGET_BSWAP): Ditto.
+ * config/i386/i386.c (ix86_tune_mask): New global variable.
+ (ix86_arch_mask): Ditto.
+ (override_options): Initialize ix86_tune_mask and
+ ix86_arch_mask. Use ARCHMASK to clear MASK_NO_FANCY_MATH_387 in
+ target_flags.
+
+2007-03-02 Ben Elliston <bje@au.ibm.com>
+
+ PR 30992
+ * config/dfp-bit.c (DFP_TO_INT): Initialise qval with "1.".
+
+2007-03-02 Joseph Myers <joseph@codesourcery.com>
+
+ * target.h (init_dwarf_reg_sizes_extra): New target hook.
+ * target-def.h (TARGET_INIT_DWARF_REG_SIZES_EXTRA): New default.
+ * doc/tm.texi (TARGET_INIT_DWARF_REG_SIZES_EXTRA): Document.
+ * dwarf2out.c (expand_builtin_init_dwarf_reg_sizes): Call this
+ hook.
+ * config/rs6000/rs6000.c (TARGET_INIT_DWARF_REG_SIZES_EXTRA,
+ rs6000_init_dwarf_reg_sizes_extra): New.
+ * config/rs6000/linux-unwind.h (ppc_fallback_frame_state): Support
+ SPE register high parts.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add install-pdf target as
+ copied from automake v1.10 rules.
+ * configure.ac: Add install-pdf to target list.
+ * configure: Regenerate.
+
+2007-03-01 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/arm.c (arm_legitimate_index_p): Limit iWMMXt addressing
+ modes to LDRD for DImode.
+ (output_move_double): Fixup out of range ldrd/strd.
+ (vfp_secondary_reload_class): Rename...
+ (coproc_secondary_reload_class): ... to this. Add wb argument.
+ * config/arm/arm.h (SECONDARY_OUTPUT_RELOAD_CLASS): Use
+ coproc_secondary_reload_class for CLASS_IWMMXT.
+ (SECONDARY_INPUT_RELOAD_CLASS): Ditto.
+ * arm-protos.h (coproc_secondary_reload_class): Update prototype.
+
+2007-03-01 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-ssa-loop-prefetch.c (determine_unroll_factor): Bound the unroll
+ factor by the estimated number of iterations.
+ (loop_prefetch_arrays): Do not prefetch in loops that iterate less than
+ prefetch latency.
+
+ * config/i386/driver-i386.c (describe_cache, detect_caches_amd,
+ decode_caches_intel, detect_caches_intel): New functions.
+ (host_detect_local_cpu): Use detect_caches_amd and
+ detect_caches_intel.
+
+2007-03-01 Richard Henderson <rth@redhat.com>
+
+ * expr.c (emit_move_complex_push): Export.
+ (emit_move_complex_parts): Split out from ...
+ (emit_move_complex): ... here.
+ * expr.h (emit_move_complex_push, emit_move_complex_parts): Declare.
+ * config/i386/i386.md (movcdi): New.
+
+2007-03-01 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_modes_tieable_p): Fix typo, use also
+ size of mode1 to check for tieable modes in MMX case.
+
+2007-03-01 Richard Sandiford <richard@codesourcery.com>
+
+ * Makefile.in (rtlanal.o): Depend on tree.h.
+ * rtl.h (offset_within_section_p, split_const): Declare.
+ * rtlanal.c: Include tree.h.
+ (offset_within_block_p): New function, taken from
+ mips_offset_within_object_p.
+ (split_const): New function, taken from mips_split_const.
+ * config/m68k/m68k-protos.h (m68k_illegitimate_symbolic_constant_p):
+ Declare.
+ * config/m68k/m68k.h (M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P): Define.
+ (CONSTANT_ADDRESS_P): Only accept legitimate constants.
+ (LEGITIMATE_CONSTANT_P): Check m68k_illegitimate_symbolic_constant_p.
+ * config/m68k/m68k.c (TARGET_CANNOT_FORCE_CONST_MEM): Define.
+ (m68k_illegitimate_symbolic_constant_p): New function.
+ * config/m68k/m68k.md (movsi): Remove misleading predicates.
+ If M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P and the source is a
+ symbolic constant that might be outside the symbol's section,
+ move the symbol first and then add the offset.
+ * config/m68k/uclinux.h (M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P):
+ Override.
+ * config/mips/mips.c (mips_split_const): Delete.
+ (mips_offset_within_object_p): Delete.
+ (mips_symbolic_constant_p): Use offset_within_section_p and
+ split_const instead of mips_offset_within_object_p and
+ mips_split_const.
+ (mips_cannot_force_const_mem, mips_const_insns, mips_unspec_address)
+ (mips_legitimize_const_move, print_operand_reloc)
+ (mips_dangerous_for_la25_p): Use split_const instead of
+ mips_split_const.
+
+2007-02-28 Eric Christopher <echristo@apple.com>
+
+ * Makefile.in (install-include-dir): Don't rm -rf include.
+
+2007-02-28 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/30364
+ * fold-const.c (fold_binary): Do not associate expressions
+ with more than one variable for integer types that do not wrap.
+
+2007-02-28 Sandra Loosemore <sandra@codesourcery.com>
+
+ * builtins.c (fold_builtin_call_list, fold_builtin_call_valist):
+ Delete, and replace with...
+ (fold_builtin_call_array): This. Update callers to use it.
+ * fold-const.c (fold_build_call_list): Delete, and replace with...
+ (fold_build_call_array): This.
+ (fold_build_call_list_initializer): Delete, and replace with...
+ (fold_build_call_array_initializer): This.
+ * tree.h: Update declarations to reflect above changes.
+
+ * c-typeck.c (build_function_call): Store converted arguments
+ in a stack-allocated array instead of building a list.
+ (convert_arguments): Store arguments in the array passed in as an
+ argument, and return the actual number of arguments.
+ * c-format.c: (check_function_format): Pass arguments in an
+ array instead of a list.
+ * c-common.c (check_function_nonnull): Likewise.
+ (check_function_sentinel): Likewise.
+ (check_function_arguments): Likewise.
+ * c-common.h: Update declarations to reflect above changes.
+
+2007-02-28 Jan Hubicka <jh@suse.cz>
+
+ * predict.def (PRED_TREE_EARLY_RETURN, PRED_CONST_RETURN,
+ PRED_NEGATIVE_RETURN): Update outcomes.
+
+2007-02-28 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * calls.c (emit_library_call_value_1): Handle partial registers
+ correctly when building up CALL_INSN_FUNCTION_USAGE.
+
+2007-02-27 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa/predicates.md (move_src_operand): Allow zero for mode.
+ * pa/pa.md: Fix constraints for zero CONST_DOUBLE in 64-bit DFmode
+ move pattern.
+
+2007-02-27 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/30970
+ * config/i386/sse.md (*mov<mode>_internal, *movv4sf_internal,
+ *movv2df_internal): Enable pattern only for valid operand
+ combinations.
+ * config/i386/i386.c (ix86_modes_tieable_p): For SSE registers,
+ tie only 128bit modes. For MMX registers, tie only 64bit modes.
+
+2007-02-27 Mike Stump <mrs@apple.com>
+
+ * config/darwin-crt3.c: Avoid compilation when compiling for a
+ kext multilib.
+
+2007-02-27 Joseph Myers <joseph@codesourcery.com>
+
+ * Makefile.in (PREPROCESSOR_DEFINES, test-protoize-simple): Define
+ FIXED_INCLUDE_DIR.
+ (stmp-int-hdrs, stmp-fixinc, install-headers): Use include-fixed
+ for fixed headers and limits.h.
+ (install-include-dir, install-headers-tar, install-headers-cpio,
+ install-headers-cp, real-install-headers-tar,
+ real-install-headers-cpio, real-install-headers-cp): Handle
+ include-fixed as well as include.
+ (install-mkheaders): Don't install files that go only in include
+ not include-fixed.
+ * cppdefault.c (cpp_include_defaults): Separate FIXED_INCLUDE_DIR
+ from GCC_INCLUDE_DIR.
+ * gcc.c (process_command): Remove special -BstageN/ handling.
+ (do_spec_1): Add include-fixed directories.
+
+2007-02-27 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/t-bfin-elf (LIB1ASMFUNCS): Add _umulsi3_highpart and
+ _smulsi3_highpart.
+ * config/bfin/lib1funcs.asm (___umulsi3_highpart, ___smulsi3_highpart):
+ New functions.
+ * config/bfin/bfin.md (smulsi3_highpart, umulsi3_highpart): New
+ patterns.
+
+2007-02-27 Mark Mitchell <mark@codesourcery.com>
+
+ * c-common.c (get_priority): Add check for
+ SUPPORTS_INIT_PRIORITY.
+
+2007-02-27 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin.md (doloop_end): FAIL if counter reg isn't SImode.
+
+ * config/bfin/bfin.c: Include "cfglayout.h".
+ (MAX_LSETUP_DISTANCE): New macro.
+ (struct loop_info): New members incoming, incoming_src and
+ incoming_dest. Delete member predecessor.
+ (length_for_loop): New function.
+ (bfin_optimize_loop): Handle more different loop structures.
+ (bfin_discover_loop): Rework detection of predecessor blocks by
+ examining incoming edges.
+ (bfin_discover_loops, bfin_free_loops): New functions, broken out of
+ bfin_reorg_loops.
+ (bfin_reorder_loops): New function.
+ (bfin_reorg_loops): Use these three new functions.
+
+ * config/bfin/bfin.h (enum reg_class, REG_CLASS_NAMES,
+ REG_CLASS_CONTENTS): Add D0REGS through D7REGS.
+ (CONSTRAINT_LEN): Add entry for 'q'.
+ (REG_CLASS_FROM_CONSTRAINT): Renamed from REG_CLASS_FROM_LETTER.
+ Add 'q' constraints.
+ (REGNO_REG_CLASS): For R0 through R7, return corresponding regclass.
+ (CLASS_LIKELY_SPILLED_P): True for R0, R1 and R2.
+
+ * config/bfin/bfin.md (add_with_carry): New pattern.
+ (s_or_u, su_optab, su_modifier): New code macros/attrs.
+ (<su_optab>hisi_ll, <su_optab>hisi_lh, <su_optab>hisi_hl,
+ <su_optab>hisi_hh): Renamed from mulhisi_xx patterns; macroized to
+ support unsigned multiplies too. Removed incorrect commutativity from
+ operand 1 constraint where appropriate.
+ (usmulhisi_ull, usmulhisi_ulh, usmulhisi_uhl, usmulhisi_uhh): New
+ patterns.
+ (<su_optab>hisi_ll_lh, <su_optab>hisi_ll_hl, <su_optab>hisi_ll_hh,
+ <su_optab>hisi_lh_hl, <su_optab>hisi_lh_hh, <su_optab>hisi_hl_hh):
+ New patterns.
+ (usmulhisi_ll_lul, usmulhisi_ll_luh, usmulhisi_ll_hul,
+ usmulhisi_ll_huh, usmulhisi_lh_lul, usmulhisi_lh_luh, usmulhisi_lh_hul,
+ usmulhisi_lh_huh, usmulhisi_hl_lul, usmulhisi_hl_luh, usmulhisi_hl_hul,
+ usmulhisi_hl_huh, usmulhisi_hh_lul, usmulhisi_hh_luh, usmulhisi_hh_hul,
+ usmulhisi_hh_huh): New patterns.
+
+ * config/bfin/bfin.md (ssashiftv2hi3, ssashifthi3, lshiftv2hi3,
+ lshifthi3): Fix output template to use half reg for operand 2.
+
+ * config/bfin/bfin.c (bfin_output_mi_thunk): Use R3 as scratch reg
+ instead of R2.
+
+ * config/bfin/bfin.md (rotl16, rotlsi3, rotrsi3): New patterns.
+
+2007-02-27 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in (TEXI_GCCINSTALL_FILES): Add gcc-common.texi.
+
+2007-02-27 Jan Hubicka <jh@suse.cz>
+
+ * predict.c (last_basic_block_p): Remove.
+ (tree_estimate_probability): Update return heuristic for commonized
+ return blocks.
+
+2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in (TEXI_GCCINSTALL_FILES): Add gcc-vers.texi dependency.
+
+2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * doc/include/gcc-common.texi (versionsubtitle): New macro.
+ * doc/cpp.texi: Standardize title page.
+ * doc/cppinternals.texi: Likewise.
+ * doc/gcc.texi: Standardize title page, remove version number
+ from copyright page.
+ * doc/gccint.texi: Likewise.
+ * doc/install.texi: Standardize title page, add table of
+ contents.
+
+2007-02-26 Jan Hubicka <jh@suse.cz>
+
+ * predict.def: Set outcomes according to more recent results.
+ (PRED_LOOP_CONDITION, PRED_LOOP_PRECONDITIONING, PRED_LOOP_HEADER):
+ Remove dead predictors.
+ * predict.c (return_prediction): Fix pasto.
+
+2007-02-27 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * loop-iv.c (simplify_using_initial_values): Fix oversight in previous
+ change; avoid a memory leak when returning early.
+
+2007-02-26 Mark Mitchell <mark@codesourcery.com>
+
+ * c-decl.c (static_ctors): Move to c-common.c.
+ (static_dtors): Likewise.
+ (finish_function): Use c_record_cdtor_fn.
+ (build_cdtor): Move to c-common.c.
+ (c_write_global_declarations): Use c_build_cdtor_fns.
+ * c-common.h (static_ctors): Declare.
+ (static_dtors): Likewise.
+ (c_record_cdtor_fn): Likewise.
+ (c_build_cdtor_fns): Likewise.
+ * c-common.c (static_ctors): New variable.
+ (static_dtors): Likewise.
+ (c_record_cdtor_fn): New function.
+ (build_cdtor): Move from c-decl.c
+ (c_build_cdtor_fns): New function.
+
+ * output.h (assemble_addr_to_section): Declare.
+ (get_cdtor_priority_section): Likewise.
+ * varasm.c (assemble_addr_to_section): New function.
+ (get_cdtor_priority_section): Likewise.
+ (default_named_section_asm_out_destructor): Use them.
+ (destor_dtor_section_asm_out_destructor): Likewise.
+ (default_named_section_asm_out_constructor): Likewise.
+ (default_ctor_section_asm_out_constructor): Likewise.
+ * config.gcc (*-*-vxworks*): Include vxworks.o.
+ * config/t-vxworks (vxworks.o): New target.
+ * config/vxworks.h (ALWAYS_NUMBER_CTORS_SECTIONS): Remove.
+ (TARGET_ASM_CONSTRUCTOR): Define.
+ (TARGET_ASM_DESTRUCTOR): Likewise.
+ (vxworks_asm_out_constructor): Declare.
+ (vxworks_asm_out_destructor): Likewise.
+
+ * c-common.c (get_priority): Check that we have not just an
+ INTEGER_CST, but an integer constant with integeral type.
+
+2007-02-25 Uros Bizjak <ubizjak@gmail.com>
+
+ PR tree-optimization/30938
+ * tree-vect-transform.c (vectorizable_call): Fix off-by-one error:
+ use &dt[nargs-1] instead of &dt[nargs] in the call to
+ vect_is_simple_use().
+
+2007-02-25 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * reload.c (find_reloads_address_1): Handle PLUS expressions resulting
+ from register elimination as PRE_MODIFY / POST_MODIFY increments.
+ Do not attempt to handle MEM inside auto-inc expressions.
+ * reload1.c (eliminate_regs_1): Do not attempt to handle elimination
+ of a register modified by an auto-inc expression. However, do handle
+ elimination of a register used as PRE_MODIFY / POST_MODIFY increment.
+ (elimination_effects): Prohibit elimination of a register modified
+ by an auto-inc expression. Disable register elimination rules whose
+ target register is modified by an auto-inc expression with variable
+ increment.
+
+2007-02-25 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * tree-ssa-loop-niter.c (compute_estimated_nb_iterations): Fix
+ off-by-one error.
+ (array_at_struct_end_p): New function.
+ (idx_infer_loop_bounds): Use it.
+ (estimate_numbers_of_iterations_loop): Export.
+ * predict.c (predict_loops): Use estimated_loop_iterations_int.
+ Do not use PRED_LOOP_EXIT on exits predicted by # of iterations.
+ (tree_estimate_probability): Call record_loop_exits.
+ * tree-data-ref.c (get_number_of_iters_for_loop): Replaced by ...
+ (estimated_loop_iterations, estimated_loop_iterations_int,
+ estimated_loop_iterations_tree): New functions.
+ (analyze_siv_subscript_cst_affine,
+ compute_overlap_steps_for_affine_1_2,
+ analyze_subscript_affine_affine): Use estimated_loop_iterations_int.
+ (analyze_miv_subscript): Use estimated_loop_iterations_tree.
+ * predict.def (PRED_LOOP_ITERATIONS): Update comment.
+ (PRED_LOOP_ITERATIONS_GUESSED): New.
+ * cfgloop.c (record_loop_exits): Do nothing if there are no loops.
+ * cfgloop.h (estimate_numbers_of_iterations_loop,
+ estimated_loop_iterations_int): Declare.
+
+2007-02-25 Mark Mitchell <mark@codesourcery.com>
+
+ * doc/extend.texi: Document optional priority argument to
+ constructors and destructors.
+ * tree.c (init_priority_for_decl): Adjust GTY markers.
+ (init_ttree): Use priority-info hash functions for
+ init_priority_for_decl.
+ (tree_map_eq): Rename to ...
+ (tree_map_base_eq): ... this.
+ (tree_map_marked_p): Rename to ...
+ (tree_map_base_marked_p): ... this.
+ (tree_map_base_hash): New function.
+ (decl_init_priority_lookup): Rework.
+ (decl_fini_priority_lookup): New function.
+ (decl_priority_info): New function.
+ (decl_init_priority_insert): Use it.
+ (decl_fini_priority_insert): Likewise.
+ (decl_restrict_base_lookup): Adjust for refactoring of tree_map
+ hierarchy.
+ (decl_restrict_base_insert): Likewise.
+ (decl_debug_expr_insert): Likewise.
+ (decl_value_expr_lookup): Likewise.
+ (decl_value_expr_insert): Likewise.
+ * tree.h (priority_type): New type.
+ (decl_init_priority_lookup): Use priority_type.
+ (decl_fini_priority_lookup): New function.
+ (decl_init_priority_insert): Use priority_type.
+ (decl_fini_priority_insert): New function.
+ (DECL_HAS_INIT_PRIORITY): Tweak comments.
+ (DECL_INIT_PRIORITY): Likewise.
+ (SET_DECL_INIT_PRIORITY): Add comment.
+ (DECL_FINI_PRIORITY): New macro.
+ (SET_DECL_FINI_PRIORITY): Likewise.
+ (DEFAULT_INIT_PRIORITY): Document.
+ (MAX_INIT_PRIORITY): Likewise.
+ (MAX_RESERVED_INIT_PRIORITY): Likewise.
+ (tree_map_base): New type.
+ (tree_map_base_eq): New function.
+ (tree_map_base_hash): Likewise.
+ (tree_map_base_marked_p): Likewise.
+ (tree_map): Inherit from tree_map_base.
+ (tree_map_eq): Make it a macro.
+ (tree_map_marked_p): Likewise.
+ (tree_int_map): Inherit from tree_map_base.
+ (tree_int_map_eq): Make it a macro.
+ (tree_int_map_hash): Likewise.
+ (tree_int_map_marked_p): Likewise.
+ (tree_priority_map): New type.
+ (tree_priority_map_eq): New macro.
+ (tree_priority_map_hash): Likewise.
+ (tree_priority_map_marked_p): Likewise.
+ * varasm.c (emults_decl): Adjust for refactoring of tree_map
+ hierarchy.
+ (emutls_common_1): Likewise.
+ * lambda-code.c (replace_uses_equiv_to_x_with_y): Likewise.
+ * tree-ssa-structalias.c (heapvar_lookup): Adjust for refactoring
+ of tree_map hierarchy.
+ * tree-cfg.c (move_stmt_r): Likewise.
+ (new_label_mapper): Likewise.
+ * c-tree.h (c_expand_body): Move to ...
+ * c-common.h (c_expand_body): ... here.
+ * c-decl.c (c_expand_body): Move to ...
+ * c-common.c (c_expand_body): ... here.
+ (c_common_attribute_table): Allow 1 argument for the constructor
+ and destructor attributes.
+ (get_priority): New function.
+ (handle_constructor_attribute): Set DECL_INIT_PRIORITY.
+ (handle_destructor_attribute): Set DECL_FINI_PRIORITY.
+
+2007-02-24 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/30509
+ * tree-inline.c (copy_bb): Produce exact copy of EH info when copying for inlining.
+
+2007-02-24 Uros Bizjak <ubizjak@gmail.com>
+ Jan Hubicka <jh@suse.cz>
+
+ PR target/30778
+ * i386.c (counter_mode): New function.
+ (expand_set_or_movmem_via_loop): Use it.
+ (expand_movmem_epilogue): Likewise; fix pasto.
+ (ix86_expand_movmem): Do emit guard even for constant counts.
+ (ix86_expand_setmem): Likewise.
+
+2007-02-25 Nick Clifton <nickc@redhat.com>
+
+ * config/frv/frv.h (ASM_OUTPUT_CASE_LABEL): Delete.
+ (JUMP_TABLES_IN_TEXT_SECTION): Define.
+
+2007-02-24 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/30770
+ * config/i386/i386.md (expand_movmem_epilogue): Fix typo, mask
+ count argument with 0x10, not with 0x16.
+ (expand_setmem_epilogue): Ditto.
+
+2007-02-24 Mike Stump <mrs@apple.com>
+
+ * config/i386/i386.c (output_pic_addr_const): Stubify optimized
+ symbols.
+
+2007-02-24 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/30951
+ * fold-const.c (fold_binary): Fold x +- CST op x for
+ EQ_EXPR and NE_EXPR.
+
+2007-02-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.md (muldi3): Force subregs to registers in 64-bit expander.
+
+2007-02-24 Jan Hubicka <jh@suse.cz>
+
+ * cgraphunit.c (decide_is_function_needed): Honor
+ -fkeep-inline-functions.
+
+2007-02-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (fold_builtin_modf): New.
+ (fold_builtin_2): Use it.
+
+2007-02-24 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * loop-iv.c (implies_p): Detect additional cases where A implies B.
+ (determine_max_iter): Take additional LOOP arg; all callers changed.
+ Lose broken logic dealing with PLUS. Try to limit the upper bound by
+ one using simplifications.
+ (simplify_using_initial_values): Return if the expression becomes
+ invalid due to altered regs.
+
+2007-02-23 DJ Delorie <dj@redhat.com>
+
+ * doc/tm.h (BIGGEST_ALIGNMENT): Clarify the purpose of this macro.
+
+2007-02-23 Mike Stump <mrs@apple.com>
+
+ * tlink.c (scan_linker_output): Parse linker messages from
+ darwin9's linker better.
+
+2007-02-23 Steve Ellcey <sje@cup.hp.com>
+
+ PR debug/29614
+ * varpool.c (varpool_assemble_pending_decls): Set
+ varpool_last_needed_node to null.
+
+2007-02-23 DJ Delorie <dj@redhat.com>
+
+ * config/i386/i386.c (ix86_data_alignment): Don't specify an
+ alignment bigger than the object file can handle.
+
+2007-02-23 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/30825
+ * config/i386/i386.md (*movdi_1_rex64, zero_extendsidi2_32,
+ zero_extendsidi2_rex64): Penalize MMX register<->memory moves.
+ (*movsf_1): Penalize MMX moves.
+
+2007-02-23 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin.md (doloop_end): Fail for loops that can iterate
+ 2^32-1 or more times unless flag_unsafe_loop_optimizations.
+
+ * loop-iv.c (determine_max_iter): Moved in front of its sole user.
+
+2007-02-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (fold_builtin_logb, fold_builtin_significand): New.
+ (fold_builtin_1): Use them.
+ * fold-const.c (tree_expr_nonnegative_warnv_p): Handle
+ BUILT_IN_SIGNIFICAND.
+
+2007-02-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/i386/i386.c (bdesc_1arg): Initialize
+ IX86_BUILTIN_MOVSHDUP and IX86_BUILTIN_MOVSLDUP with
+ "__builtin_ia32_movshdup" and "__builtin_ia32_movsldup".
+ (ix86_init_mmx_sse_builtins): Remove IX86_BUILTIN_MOVSHDUP
+ and IX86_BUILTIN_MOVSLDUP.
+
+2007-02-22 Paolo Bonzini <bonzini@gnu.org>
+
+ PR rtl-optimization/30841
+ * fwprop.c (propagate_rtx_1): Accept a VOIDmode replacement address.
+
+2007-02-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * builtins.c (fold_builtin_frexp): New.
+ (fold_builtin_2): Use it.
+
+2007-02-22 Mark Mitchell <mark@codesourcery.com>
+
+ * doc/invoke.texi (Spec Files): Document getenv spec function.
+
+ * gcc.c (getenv_spec_function): New function.
+ (static_spec_functions): Add it.
+ * config/vxworks.h (VXWORKS_TARGET_DIR): Remove.
+ (VXWORKS_ADDITIONAL_CPP_SPEC): Use getenv to find the VxWorks
+ header files.
+
+2007-02-22 Michael Matz <matz@suse.de
+
+ PR c++/29433
+ * dwarf2out.c (add_AT_string): Call ggc_strdup once per string.
+ (type_tag): Use lang_hooks.dwarf_name instead of DECL_NAME.
+
+2007-02-22 Ian Lance Taylor <iant@google.com>
+
+ PR debug/30898
+ * dwarf2out.c (concatn_mem_loc_descriptor): New static function.
+ (mem_loc_descriptor): Call it.
+
+2007-02-22 Zdenek Dvorak <dvorakz@suse.cz>
+ Ira Rosen <irar@il.ibm.com>
+
+ * tree-data-ref.c (ptr_ptr_may_alias_p): Take alias sets into account.
+
+2007-02-22 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/30843
+ * tree-vect-transform.c (vect_transform_loop): Remove strided scalar
+ stores only after all the group is vectorized.
+
+2007-02-22 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/30858
+ * tree-vectorizer.c (vect_is_simple_reduction): Check that the stmts
+ in the reduction cycle have a single use in the loop.
+ * tree-vectorizer.h (relevant): Add documentation.
+
+2007-02-20 Mike Stump <mrs@apple.com>
+
+ * configure.ac (powerpc*-*-darwin*): #include <sys/cdefs.h>.
+ * configure: Regenerate.
+
+2007-02-21 Trevor Smigiel <trevor_smigiel@playstation.sony.com>
+
+ Change the defaults of some parameters and options.
+ * config/spu/spu-protos.h (spu_optimization_options): Declare.
+ * config/spu/spu.c (spu_optimization_options): Add.
+ (spu_override_options): Change params in spu_optimization_options.
+ * config/spu/spu.h (OPTIMIZATION_OPTIONS): Define.
+
+ Register 127 is only 16 byte aligned when used as a frame pointer.
+ * config/spu/spu-protos.h (spu_init_expanders): Declare.
+ * config/spu/spu.c (spu_expand_prologue): Set REGNO_POINTER_ALIGN for
+ HARD_FRAME_POINTER_REGNUM.
+ (spu_legitimate_address): Use regno_aligned_for_reload.
+ (regno_aligned_for_load): HARD_FRAME_POINTER_REGNUM is only 16 byte
+ aligned when frame_pointer_needed is true.
+ (spu_init_expanders): New. Set alignment of HARD_FRAME_POINTER_REGNUM
+ to 8 bits.
+ * config/spu/spu.h (INIT_EXPANDERS): Define.
+
+ Make sure shift and rotate instructions have valid immediate operands.
+ * config/spu/predicates.md (spu_shift_operand): Remove.
+ * config/spu/spu.c (print_operand): Add [efghEFGH] modifiers.
+ * config/spu/constraints.md (W, O): Extend range.
+ * config/spu/spu.md (umask, nmask): Define.
+ (ashl<mode>3, ashldi3, ashlti3_imm, shlqbybi_ti, shlqbi_ti, shlqby_ti,
+ lshr<mode>3, rotm_<mode>, lshr<mode>3_imm, rotqmbybi_<mode>,
+ rotqmbi_<mode>, rotqmby_<mode>, ashr<mode>3, rotma_<mode>,
+ rotl<mode>3, rotlti3, rotqbybi_ti, rotqby_ti, rotqbi_ti): Use
+ spu_nonmem_operand instead of spu_shift_operands. Use new modifiers.
+ (lshr<mode>3_reg): Fix rtl description.
+
+ Make sure mulhisi immediate operands are valid.
+ * config/spu/predicates.md (imm_K_operand): Add.
+ * config/spu/spu.md (mulhisi3_imm, umulhisi3_imm): Use imm_K_operand.
+
+ Generate constants using fsmbi and andi.
+ * config/spu/spu.c (enum immediate_class): Add IC_FSMBI2.
+ (print_operand, spu_split_immediate, classify_immediate,
+ fsmbi_const_p): Handle IC_FSMBI2.
+
+ Correctly handle a CONST_VECTOR containing symbols.
+ * config/spu/spu.c (print_operand): Handle HIGH correctly.
+ (spu_split_immediate): Split CONST_VECTORs with -mlarge-mem.
+ (immediate_load_p): Allow symbols that use 2 instructions to create.
+ (classify_immediate, spu_builtin_splats): Don't accept a CONST_VECTOR
+ with symbols when flag_pic is set.
+ (const_vector_immediate_p): New.
+ (logical_immediate_p, iohl_immediate_p, arith_immediate_p): Don't
+ accept a CONST_VECTOR with symbols.
+ (spu_legitimate_constant_p): Use const_vector_immediate_p. Don't
+ accept a CONST_VECTOR with symbols when flag_pic is set. Handle HIGH
+ correctly.
+ * config/spu/spu.md (high, low): Delete.
+ (low_<mode>): Define.
+
+ Remove INTRmode and INTR_REGNUM, which didn't work.
+ * config/spu/spu.c (spu_conditional_register_usage): Remove reference
+ of INTR_REGNUM.
+ * config/spu/spu-builtins.md (spu_idisable, spu_ienable, set_intr,
+ set_intr_pic, set_intr_cc, set_intr_cc_pic, set_intr_return, unnamed
+ peephole2 pattern): Don't use INTR or 131.
+ (movintrcc): Delete.
+ * config/spu/spu.h (FIRST_PSEUDO_REGISTER, FIXED_REGISTERS,
+ CALL_USED_REGISTERS, REGISTER_NAMES, INTR_REGNUM): Remove INTR_REGNUM.
+ * config/spu/spu.md (UNSPEC_IDISABLE, UNSPEC_IENABLE): Remove.
+ (UNSPEC_SET_INTR): Add.
+ * config/spu/spu-modes.def (INTR): Remove.
+
+ More accurate warnings about run-time relocations.
+ * config/spu/spu.c (reloc_diagnostic): Test in_section.
+
+ Correctly warn about immediate arguments to specific intrinsics.
+ * config/spu/spu.c (spu_check_builtin_parm): Handle CONST_VECTORs.
+ (spu_expand_builtin_1): Call spu_check_builtin_parm before checking
+ the instruction predicate.
+
+ Fix tree check errors with latest update.
+ * config/spu/spu.c (expand_builtin_args, spu_expand_builtin_1): Use
+ CALL_EXPR_ARG.
+ (spu_expand_builtin): Use CALL_EXPR_FN.
+
+ Add missing specific intrinsics.
+ * config/spu/spu-builtins.def: Add si_bisled, si_bisledd and
+ si_bislede.
+ * config/spu/spu_internals.h: Ditto.
+
+ Fix incorrect operand modifiers.
+ * config/spu/spu-builtins.md (spu_mpy, spu_mpyu): Remove use of %H.
+ * config/spu/spu.md (xor<mode>3): Change %S to %J.
+
+ Optimize one case of zero_extend of a vec_select.
+ * config/spu/spu.md (_vec_extractv8hi_ze): Add.
+
+ Accept any immediate for hbr.
+ * config/spu/spu.md (hbr): Change s constraints to i.
+
2007-02-21 Paul Brook <paul@codesourcery.com>
* config/arm/arm.c (thumb2_final_prescan_insn): Don't incrememnt
@@ -109,7 +2256,7 @@
intrinsics.
2007-02-20 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
- DJ Delorie <dj@redhat.com>
+ DJ Delorie <dj@redhat.com>
PR other/30824
* diagnostic.c (diagnostic_count_diagnostic): Move -Werror logic to...
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 32876391e07..2b8e8e1388e 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20070221
+20070314
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index b68510663e4..dc9d84624f8 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -752,9 +752,9 @@ SCHED_INT_H = sched-int.h $(INSN_ATTR_H) $(BASIC_BLOCK_H) $(RTL_H)
INTEGRATE_H = integrate.h $(VARRAY_H)
CFGLAYOUT_H = cfglayout.h $(BASIC_BLOCK_H)
CFGLOOP_H = cfgloop.h $(BASIC_BLOCK_H) $(RTL_H) vecprim.h
-IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H)
-IPA_REFERENCE_H = ipa-reference.h bitmap.h $(TREE_H)
-IPA_TYPE_ESCAPE_H = ipa-type-escape.h $(TREE_H)
+IPA_UTILS_H = ipa-utils.h $(TREE_H) $(CGRAPH_H)
+IPA_REFERENCE_H = ipa-reference.h bitmap.h $(TREE_H)
+IPA_TYPE_ESCAPE_H = ipa-type-escape.h $(TREE_H)
CGRAPH_H = cgraph.h $(TREE_H)
DF_H = df.h bitmap.h $(BASIC_BLOCK_H) alloc-pool.h
DDG_H = ddg.h sbitmap.h $(DF_H)
@@ -785,7 +785,7 @@ DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H) options.h
C_PRETTY_PRINT_H = c-pretty-print.h $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H)
SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h $(PARAMS_H)
LAMBDA_H = lambda.h $(TREE_H) vec.h $(GGC_H)
-TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H)
+TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H) omega.h
VARRAY_H = varray.h $(MACHMODE_H) $(SYSTEM_H) coretypes.h $(TM_H)
TREE_INLINE_H = tree-inline.h $(VARRAY_H) $(SPLAY_TREE_H)
REAL_H = real.h $(MACHMODE_H)
@@ -1028,6 +1028,7 @@ OBJS-common = \
lower-subreg.o \
mode-switching.o \
modulo-sched.o \
+ omega.o \
omp-low.o \
optabs.o \
options.o \
@@ -1418,7 +1419,7 @@ all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \
libgcc-support lang.all.cross doc @GENINSRC@ srcextra
# This is what must be made before installing GCC and converting libraries.
start.encap: native xgcc$(exeext) cpp$(exeext) specs \
- libgcc-support xlimits.h lang.start.encap @GENINSRC@ srcextra
+ libgcc-support lang.start.encap @GENINSRC@ srcextra
# These can't be made until after GCC can run.
rest.encap: $(STMP_FIXPROTO) lang.rest.encap
# This is what is made with the host's compiler
@@ -1542,14 +1543,6 @@ cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) cc1-checksum.o \
$(BACKEND) $(LIBS)
-# Build the version of limits.h that we will install.
-xlimits.h: glimits.h limitx.h limity.h
- if $(LIMITS_H_TEST) ; then \
- cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
- else \
- cat $(srcdir)/glimits.h > tmp-xlimits.h; \
- fi
- mv tmp-xlimits.h xlimits.h
#
# Build libgcc.a.
@@ -1880,7 +1873,7 @@ s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk
options.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/optc-gen.awk
$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/optc-gen.awk \
- -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+ -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
options.h: s-options-h ; @true
s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opth-gen.awk
@@ -1976,13 +1969,13 @@ tree-into-ssa.o : tree-into-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_GIMPLE_H) $(TREE_INLINE_H) $(VARRAY_H) vecprim.h
tree-ssa-ter.o : tree-ssa-ter.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
- $(TREE_SSA_LIVE_H) bitmap.h
+ $(TREE_SSA_LIVE_H) bitmap.h
tree-ssa-coalesce.o : tree-ssa-coalesce.c $(TREE_FLOW_H) $(CONFIG_H) \
$(SYSTEM_H) $(TREE_H) $(DIAGNOSTIC_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
- $(TREE_SSA_LIVE_H) bitmap.h $(FLAGS_H) $(HASHTAB_H) toplev.h
+ $(TREE_SSA_LIVE_H) bitmap.h $(FLAGS_H) $(HASHTAB_H) toplev.h
tree-outof-ssa.o : tree-outof-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
- tree-pass.h $(TREE_SSA_LIVE_H) $(BASIC_BLOCK_H) bitmap.h $(GGC_H) toplev.h
+ tree-pass.h $(TREE_SSA_LIVE_H) $(BASIC_BLOCK_H) bitmap.h $(GGC_H) toplev.h
tree-ssa-dse.o : tree-ssa-dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \
$(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) domwalk.h $(FLAGS_H) \
@@ -2035,7 +2028,7 @@ domwalk.o : domwalk.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(BASIC_BLOCK_H) $(TREE_FLOW_H) domwalk.h $(GGC_H)
tree-ssa-live.o : tree-ssa-live.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \
- $(TREE_SSA_LIVE_H) bitmap.h toplev.h
+ $(TREE_SSA_LIVE_H) bitmap.h toplev.h
tree-ssa-copyrename.o : tree-ssa-copyrename.c $(TREE_FLOW_H) $(CONFIG_H) \
$(SYSTEM_H) $(TREE_H) $(DIAGNOSTIC_H) $(FUNCTION_H) $(TIMEVAR_H) tree-pass.h \
$(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_SSA_LIVE_H) $(BASIC_BLOCK_H) \
@@ -2052,7 +2045,7 @@ tree-vn.o : tree-vn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) \
tree-vrp.o : tree-vrp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) $(DIAGNOSTIC_H) $(GGC_H) \
$(BASIC_BLOCK_H) tree-ssa-propagate.h $(FLAGS_H) $(TREE_DUMP_H) \
- $(CFGLOOP_H) $(SCEV_H) tree-chrec.h $(TIMEVAR_H) toplev.h
+ $(CFGLOOP_H) $(SCEV_H) tree-chrec.h $(TIMEVAR_H) toplev.h intl.h
tree-cfg.o : tree-cfg.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) $(FLAGS_H) output.h \
$(DIAGNOSTIC_H) $(FUNCTION_H) $(TIMEVAR_H) $(TM_H) coretypes.h \
@@ -2093,7 +2086,7 @@ tree-dfa.o : tree-dfa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
$(TREE_INLINE_H) $(HASHTAB_H) pointer-set.h $(FLAGS_H) $(FUNCTION_H) \
$(TIMEVAR_H) convert.h $(TM_H) coretypes.h langhooks.h $(TREE_DUMP_H) \
tree-pass.h $(PARAMS_H) $(CGRAPH_H) $(BASIC_BLOCK_H) hard-reg-set.h \
- $(TREE_GIMPLE_H)
+ $(TREE_GIMPLE_H)
tree-ssa-operands.o : tree-ssa-operands.c $(TREE_FLOW_H) $(CONFIG_H) \
$(SYSTEM_H) $(TREE_H) $(GGC_H) $(DIAGNOSTIC_H) errors.h $(TREE_INLINE_H) \
$(FLAGS_H) $(FUNCTION_H) $(TM_H) $(TIMEVAR_H) tree-pass.h toplev.h \
@@ -2199,6 +2192,8 @@ omp-low.o : omp-low.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
tree-browser.o : tree-browser.c tree-browser.def $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(TREE_INLINE_H) $(DIAGNOSTIC_H) $(HASHTAB_H) \
$(TM_H) coretypes.h
+omega.o : omega.c omega.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ errors.h $(GGC_H) $(TREE_H) diagnostic.h varray.h tree-pass.h
tree-chrec.o: tree-chrec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(GGC_H) $(TREE_H) $(REAL_H) $(SCEV_H) tree-pass.h $(PARAMS_H) \
$(DIAGNOSTIC_H) $(CFGLOOP_H) $(TREE_FLOW_H)
@@ -2314,7 +2309,7 @@ print-rtl.o : print-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(BCONFIG_H) $(REAL_H)
rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
$(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) $(REAL_H) \
- $(FLAGS_H) $(REGS_H) output.h $(TARGET_H) $(FUNCTION_H)
+ $(FLAGS_H) $(REGS_H) output.h $(TARGET_H) $(FUNCTION_H) $(TREE_H)
varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(RTL_H) $(FLAGS_H) $(FUNCTION_H) $(EXPR_H) hard-reg-set.h $(REGS_H) \
@@ -2423,17 +2418,17 @@ cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \
$(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \
$(TREE_FLOW_H) tree-pass.h $(C_COMMON_H) debug.h $(DIAGNOSTIC_H) \
- $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h
+ $(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h
cgraphbuild.o : cgraphbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(CGRAPH_H) intl.h pointer-set.h $(TREE_GIMPLE_H) \
- $(TREE_FLOW_H) tree-pass.h
+ $(TREE_FLOW_H) tree-pass.h
varpool.o : varpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \
$(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \
$(TREE_FLOW_H) tree-pass.h $(C_COMMON_H) debug.h $(DIAGNOSTIC_H) \
$(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h \
gt-varpool.h
-ipa.o : ipa.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(CGRAPH_H)
+ipa.o : ipa.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(CGRAPH_H)
ipa-prop.o : ipa-prop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
langhooks.h $(GGC_H) $(TARGET_H) $(CGRAPH_H) ipa-prop.h \
$(TREE_FLOW_H) $(TM_H) tree-pass.h $(FLAGS_H) $(TREE_H)
@@ -2447,22 +2442,22 @@ ipa-inline.o : ipa-inline.c gt-ipa-inline.h $(CONFIG_H) $(SYSTEM_H) coretypes.h
ipa-utils.o : ipa-utils.c $(IPA_UTILS_H) $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \
pointer-set.h $(GGC_H) $(C_COMMON_H) $(TREE_GIMPLE_H) \
- $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)
+ $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)
ipa-reference.o : ipa-reference.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \
pointer-set.h $(GGC_H) $(IPA_REFERENCE_H) $(IPA_UTILS_H) $(C_COMMON_H) \
$(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h \
- $(DIAGNOSTIC_H) $(FUNCTION_H)
+ $(DIAGNOSTIC_H) $(FUNCTION_H)
ipa-pure-const.o : ipa-pure-const.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \
pointer-set.h $(GGC_H) $(IPA_UTILS_H) $(C_COMMON_H) $(TARGET_H) \
- $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)
+ $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)
ipa-type-escape.o : ipa-type-escape.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) $(TREE_INLINE_H) langhooks.h \
pointer-set.h $(GGC_H) $(IPA_TYPE_ESCAPE_H) $(IPA_UTILS_H) $(C_COMMON_H) \
$(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h \
- $(DIAGNOSTIC_H) $(FUNCTION_H)
+ $(DIAGNOSTIC_H) $(FUNCTION_H)
coverage.o : coverage.c $(GCOV_IO_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(TREE_H) $(FLAGS_H) output.h $(REGS_H) $(EXPR_H) \
@@ -2534,7 +2529,7 @@ df-problems.o : df-problems.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
df-scan.o : df-scan.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
insn-config.h $(RECOG_H) $(FUNCTION_H) $(REGS_H) alloc-pool.h \
hard-reg-set.h $(BASIC_BLOCK_H) $(DF_H) bitmap.h sbitmap.h $(TM_P_H) \
- $(FLAGS_H) $(TARGET_H) $(TARGET_DEF_H) $(TREE_H) output.h tree-pass.h
+ $(FLAGS_H) $(TARGET_H) $(TARGET_DEF_H) $(TREE_H) output.h tree-pass.h
var-tracking.o : var-tracking.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(RTL_H) $(TREE_H) hard-reg-set.h insn-config.h reload.h $(FLAGS_H) \
$(BASIC_BLOCK_H) output.h sbitmap.h alloc-pool.h $(FIBHEAP_H) $(HASHTAB_H) \
@@ -2875,7 +2870,7 @@ insn-recog.o : insn-recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
# The "; @true" construct forces Make to recheck the timestamp on the
# target file.
-simple_generated_h = insn-attr.h insn-codes.h insn-config.h insn-flags.h
+simple_generated_h = insn-attr.h insn-codes.h insn-config.h insn-flags.h
simple_generated_c = insn-attrtab.c insn-automata.c insn-emit.c \
insn-extract.c insn-opinit.c insn-output.c \
@@ -3207,13 +3202,15 @@ intl.o: intl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h Makefile
PREPROCESSOR_DEFINES = \
-DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
+ -DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \
-DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
-DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
-DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
-DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
-DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
-DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
- -DPREFIX=\"$(prefix)\" \
+ -DPREFIX=\"$(prefix)/\" \
+ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \
@TARGET_SYSTEM_ROOT_DEFINE@
cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
@@ -3269,6 +3266,7 @@ test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
./protoize -N -B ./ -x getopt.h -c "-B./ -Wall -Wwrite-strings \
$(GCC_CFLAGS) $(INCLUDES) \
-DGCC_INCLUDE_DIR=0 \
+ -DFIXED_INCLUDE_DIR=0 \
-DGPLUSPLUS_INCLUDE_DIR=0 \
-DCROSS_INCLUDE_DIR=0 \
-DTOOL_INCLUDE_DIR=0 \
@@ -3281,6 +3279,7 @@ test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
./unprotoize -N -x getopt.h -c "-B./ -Wall -Wwrite-strings \
$(GCC_CFLAGS) $(INCLUDES) \
-DGCC_INCLUDE_DIR=0 \
+ -DFIXED_INCLUDE_DIR=0 \
-DGPLUSPLUS_INCLUDE_DIR=0 \
-DCROSS_INCLUDE_DIR=0 \
-DTOOL_INCLUDE_DIR=0 \
@@ -3317,18 +3316,19 @@ GCOV_DUMP_OBJS = gcov-dump.o version.o errors.o
gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) $(LIBS) -o $@
#
-# Build the include directory. The stamp files are stmp-* rather than
+# Build the include directories. The stamp files are stmp-* rather than
# s-* so that mostlyclean does not force the include directory to
# be rebuilt.
-# Build the include directory
-stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) xlimits.h $(UNWIND_H)
+# Build the include directories.
+stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) $(UNWIND_H)
# Copy in the headers provided with gcc.
# The sed command gets just the last file name component;
# this is necessary because VPATH could add a dirname.
# Using basename would be simpler, but some systems don't have it.
# The touch command is here to workaround an AIX/Linux NFS bug.
-if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi
+ -if [ -d include-fixed ] ; then true; else mkdir include-fixed; chmod a+rx include-fixed; fi
for file in .. $(USER_H); do \
if [ X$$file != X.. ]; then \
realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
@@ -3338,15 +3338,27 @@ stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) xlimits.h $(UNWIND_H)
chmod a+r include/$$realfile; \
fi; \
done
- rm -f include/limits.h
- cp xlimits.h include/limits.h
rm -f include/unwind.h
cp $(UNWIND_H) include/unwind.h
- chmod a+r include/limits.h
+ set -e; for ml in `cat fixinc_list`; do \
+ sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
+ multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+ fix_dir=include-fixed$${multi_dir}; \
+ if $(LIMITS_H_TEST) ; then \
+ cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
+ else \
+ cat $(srcdir)/glimits.h > tmp-xlimits.h; \
+ fi; \
+ $(mkinstalldirs) $${fix_dir}; \
+ chmod a+rx $${fix_dir} || true; \
+ rm -f $${fix_dir}/limits.h; \
+ mv tmp-xlimits.h $${fix_dir}/limits.h; \
+ chmod a+r $${fix_dir}/limits.h; \
+ done
# Install the README
- rm -f include/README
- cp $(srcdir)/../fixincludes/README-fixinc include/README
- chmod a+r include/README
+ rm -f include-fixed/README
+ cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README
+ chmod a+r include-fixed/README
$(STAMP) $@
.PHONY: install-gcc-tooldir
@@ -3354,7 +3366,7 @@ install-gcc-tooldir:
$(mkinstalldirs) $(DESTDIR)$(gcc_tooldir)
macro_list: s-macro_list; @true
-s-macro_list : $(GCC_PASSES)
+s-macro_list : $(GCC_PASSES)
echo | $(GCC_FOR_TARGET) -E -dM - | \
sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
-e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
@@ -3362,6 +3374,28 @@ s-macro_list : $(GCC_PASSES)
$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
$(STAMP) s-macro_list
+fixinc_list: s-fixinc_list; @true
+s-fixinc_list : $(GCC_PASSES)
+# Build up a list of multilib directories and corresponding sysroot
+# suffixes, in form sysroot;multilib.
+ if $(GCC_FOR_TARGET) -print-sysroot-headers-suffix > /dev/null 2>&1; then \
+ set -e; for ml in `$(GCC_FOR_TARGET) -print-multi-lib`; do \
+ multi_dir=`echo $${ml} | sed -e 's/;.*$$//'`; \
+ flags=`echo $${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+ sfx=`$(GCC_FOR_TARGET) $${flags} -print-sysroot-headers-suffix`; \
+ if [ "$${multi_dir}" = "." ]; \
+ then multi_dir=""; \
+ else \
+ multi_dir=/$${multi_dir}; \
+ fi; \
+ echo "$${sfx};$${multi_dir}"; \
+ done; \
+ else \
+ echo ";"; \
+ fi > tmp-fixinc_list
+ $(SHELL) $(srcdir)/../move-if-change tmp-fixinc_list fixinc_list
+ $(STAMP) s-fixinc_list
+
# The line below is supposed to avoid accidentally matching the
# built-in suffix rule `.o:' to build fixincl out of fixincl.o. You'd
# expect fixincl to be newer than fixincl.o, such that this situation
@@ -3379,37 +3413,44 @@ s-macro_list : $(GCC_PASSES)
# Build fixed copies of system files.
# Abort if no system headers available, unless building a crosscompiler.
# FIXME: abort unless building --without-headers would be more accurate and less ugly
-stmp-fixinc: gsyslimits.h macro_list \
+stmp-fixinc: gsyslimits.h macro_list fixinc_list \
$(build_objdir)/fixincludes/fixincl \
$(build_objdir)/fixincludes/fixinc.sh
- @if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
- echo The directory that should contain system headers does not exist: >&2 ; \
- echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
- tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
- if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
- then sleep 1; else exit 1; fi; \
- fi
- rm -rf include; mkdir include
- -chmod a+rx include
+ rm -rf include-fixed; mkdir include-fixed
+ -chmod a+rx include-fixed
if [ -d ../prev-gcc ]; then \
cd ../prev-gcc && \
$(MAKE) real-$(INSTALL_HEADERS_DIR) DESTDIR=`pwd`/../gcc/ \
libsubdir=. ; \
else \
- (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
- SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \
- export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
- cd $(build_objdir)/fixincludes && \
- $(SHELL) ./fixinc.sh ../../gcc/include \
- $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
- rm -f include/syslimits.h; \
- if [ -f include/limits.h ]; then \
- mv include/limits.h include/syslimits.h; \
- else \
- cp $(srcdir)/gsyslimits.h include/syslimits.h; \
- fi; \
+ set -e; for ml in `cat fixinc_list`; do \
+ sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
+ multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+ fix_dir=include-fixed$${multi_dir}; \
+ if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
+ echo The directory that should contain system headers does not exist: >&2 ; \
+ echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
+ tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
+ if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
+ then sleep 1; else exit 1; fi; \
+ fi; \
+ $(mkinstalldirs) $${fix_dir}; \
+ chmod a+rx $${fix_dir} || true; \
+ (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
+ SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \
+ export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
+ cd $(build_objdir)/fixincludes && \
+ $(SHELL) ./fixinc.sh ../../gcc/$${fix_dir} \
+ $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
+ rm -f $${fix_dir}/syslimits.h; \
+ if [ -f $${fix_dir}/limits.h ]; then \
+ mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \
+ else \
+ cp $(srcdir)/gsyslimits.h $${fix_dir}/syslimits.h; \
+ fi; \
+ chmod a+r $${fix_dir}/syslimits.h; \
+ done; \
fi
- chmod a+r include/syslimits.h
$(STAMP) stmp-fixinc
# Files related to the fixproto script.
@@ -3476,21 +3517,26 @@ fixhdr.ready: build/fix-header$(build_exeext)
# stmp-int-hdrs is to make sure fixincludes has already finished.
# The if statement is so that we don't run fixproto a second time
-# if it has already been run on the files in `include'.
-stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
- if [ -f include/fixed ] ; then true; \
- else \
- : This line works around a 'make' bug in BSDI 1.1.; \
- FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
- FIX_HEADER="build/fix-header$(build_exeext)"; export FIX_HEADER; \
- mkinstalldirs="$(mkinstalldirs)"; \
- export mkinstalldirs; \
- if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
- $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
- if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
- else true; fi; \
- $(STAMP) include/fixed; \
- fi
+# if it has already been run on the files in `include-fixed'.
+stmp-fixproto: fixhdr.ready fixproto fixinc_list stmp-int-hdrs
+ set -e; for ml in `cat fixinc_list`; do \
+ sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
+ multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+ fix_dir=include-fixed$${multi_dir}; \
+ if [ -f $${fix_dir}/fixed ] ; then true; \
+ else \
+ : This line works around a 'make' bug in BSDI 1.1.; \
+ FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
+ FIX_HEADER="build/fix-header$(build_exeext)"; export FIX_HEADER; \
+ mkinstalldirs="$(mkinstalldirs)"; \
+ export mkinstalldirs; \
+ if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
+ $(SHELL) ${srcdir}/fixproto $${fix_dir} $${fix_dir} $(SYSTEM_HEADER_DIR); \
+ if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
+ else true; fi; \
+ $(STAMP) $${fix_dir}/fixed; \
+ fi; \
+ done
$(STAMP) stmp-fixproto
# We can't run fixproto (it's being built for a different host), but we still
@@ -3530,7 +3576,8 @@ TEXI_GCCINT_FILES = gccint.texi gcc-common.texi gcc-vers.texi \
sourcebuild.texi gty.texi libgcc.texi cfg.texi tree-ssa.texi \
loop.texi
-TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi
+TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi \
+ gcc-common.texi gcc-vers.texi
TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi
@@ -3592,8 +3639,10 @@ doc/%.dvi: %.texi
doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES)
$(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
-pdf:: doc/gcc.pdf doc/gccint.pdf doc/gccinstall.pdf doc/cpp.pdf \
- doc/cppinternals.pdf lang.pdf
+PDFFILES = doc/gcc.pdf doc/gccint.pdf doc/gccinstall.pdf doc/cpp.pdf \
+ doc/cppinternals.pdf
+
+pdf:: $(PDFFILES) lang.pdf
doc/%.pdf: %.texi
$(TEXI2PDF) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
@@ -3689,8 +3738,6 @@ mostlyclean: lang.mostlyclean
# Delete build programs
-rm -f build/*
-rm -f mddeps.mk
-# Delete the temp files made in the course of building libgcc.a.
- -rm -f xlimits.h
# Delete other built files.
-rm -f xsys-protos.hT
-rm -f specs.h gencheck.h options.c options.h
@@ -3731,8 +3778,8 @@ clean: mostlyclean lang.clean
-rm -f cs-*
-rm -f doc/*.dvi
-rm -f doc/*.pdf
-# Delete the include directory.
- -rm -rf include
+# Delete the include directories.
+ -rm -rf include include-fixed
# Delete files used by the "multilib" facility (including libgcc subdirs).
-rm -f multilib.h tmpmultilib*
-if [ "x$(MULTILIB_DIRNAMES)" != x ] ; then \
@@ -3890,8 +3937,20 @@ $(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
else true; fi; \
else true; fi;
+pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-pdf: $(PDFFILES) lang.install-pdf
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
+ @list='$(PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
+ done
+
html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-
+
install-html: $(HTMLS_BUILD)
@$(NORMAL_INSTALL)
test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
@@ -3943,23 +4002,24 @@ install-headers: $(INSTALL_HEADERS_DIR)
# Fix symlinks to absolute paths in the installed include directory to
# point to the installed directory, not the build directory.
# Don't need to use LN_S here since we really do need ln -s and no substitutes.
- -files=`cd $(DESTDIR)$(libsubdir)/include; find . -type l -print 2>/dev/null`; \
+ -files=`cd $(DESTDIR)$(libsubdir)/include-fixed; find . -type l -print 2>/dev/null`; \
if [ $$? -eq 0 ]; then \
- dir=`cd include; ${PWD_COMMAND}`; \
+ dir=`cd include-fixed; ${PWD_COMMAND}`; \
for i in $$files; do \
- dest=`ls -ld $(DESTDIR)$(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
+ dest=`ls -ld $(DESTDIR)$(libsubdir)/include-fixed/$$i | sed -n 's/.*-> //p'`; \
if expr "$$dest" : "$$dir.*" > /dev/null; then \
- rm -f $(DESTDIR)$(libsubdir)/include/$$i; \
- ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(DESTDIR)$(libsubdir)/include/$$i; \
+ rm -f $(DESTDIR)$(libsubdir)/include-fixed/$$i; \
+ ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(DESTDIR)$(libsubdir)/include-fixed/$$i; \
fi; \
done; \
fi
# Create or recreate the gcc private include file directory.
install-include-dir: installdirs
- -rm -rf $(DESTDIR)$(libsubdir)/include
- mkdir $(DESTDIR)$(libsubdir)/include
- -chmod a+rx $(DESTDIR)$(libsubdir)/include
+ $(mkinstalldirs) $(DESTDIR)$(libsubdir)/include
+ -rm -rf $(DESTDIR)$(libsubdir)/include-fixed
+ mkdir $(DESTDIR)$(libsubdir)/include-fixed
+ -chmod a+rx $(DESTDIR)$(libsubdir)/include-fixed
# Create or recreate the install-tools include file directory.
itoolsdir = $(libexecsubdir)/install-tools
@@ -3976,6 +4036,8 @@ install-headers-tar: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
# output of `cd', but some shells lose on redirection within `()'s
(cd `${PWD_COMMAND}`/include ; \
tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include; tar xpf - )
+ (cd `${PWD_COMMAND}`/include-fixed ; \
+ tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - )
# /bin/sh on some systems returns the status of the first tar,
# and that can lose with GNU tar which always writes a full block.
# So use `exit 0' to ignore its exit status.
@@ -3985,44 +4047,47 @@ install-headers-cpio: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
# See discussion about the use of `pwd` above
cd `${PWD_COMMAND}`/include ; \
find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include
+ cd `${PWD_COMMAND}`/include-fixed ; \
+ find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed
# Install the include directory using cp.
install-headers-cp: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
cp -p -r include $(DESTDIR)$(libsubdir)
+ cp -p -r include-fixed $(DESTDIR)$(libsubdir)
# Targets without dependencies, for use in prev-gcc during bootstrap.
real-install-headers-tar:
- (cd `${PWD_COMMAND}`/include ; \
- tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include; tar xpf - )
+ (cd `${PWD_COMMAND}`/include-fixed ; \
+ tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include-fixed; tar xpf - )
real-install-headers-cpio:
- cd `${PWD_COMMAND}`/include ; \
- find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include
+ cd `${PWD_COMMAND}`/include-fixed ; \
+ find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include-fixed
real-install-headers-cp:
- cp -p -r include $(DESTDIR)$(libsubdir)
+ cp -p -r include-fixed $(DESTDIR)$(libsubdir)
# Install supporting files for fixincludes to be run later.
install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-itoolsdirs \
- macro_list xlimits.h
- for file in $(USER_H); do \
- realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
- $(INSTALL_DATA) $$file \
- $(DESTDIR)$(itoolsdatadir)/include/$$realfile ; \
- done
- $(INSTALL_DATA) xlimits.h $(DESTDIR)$(itoolsdatadir)/include/limits.h
- $(INSTALL_DATA) $(UNWIND_H) $(DESTDIR)$(itoolsdatadir)/include/unwind.h
+ macro_list fixinc_list
$(INSTALL_DATA) $(srcdir)/gsyslimits.h \
$(DESTDIR)$(itoolsdatadir)/gsyslimits.h
$(INSTALL_DATA) macro_list $(DESTDIR)$(itoolsdatadir)/macro_list
- if [ x$(STMP_FIXPROTO) != x ] ; then \
- $(INSTALL_SCRIPT) $(mkinstalldirs) \
+ $(INSTALL_DATA) fixinc_list $(DESTDIR)$(itoolsdatadir)/fixinc_list
+ set -e; for ml in `cat fixinc_list`; do \
+ multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
+ $(mkinstalldirs) $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}; \
+ $(INSTALL_DATA) include-fixed$${multidir}/limits.h $(DESTDIR)$(itoolsdatadir)/include$${multi_dir}/limits.h; \
+ done
+ $(INSTALL_SCRIPT) $(srcdir)/../mkinstalldirs \
$(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
+ if [ x$(STMP_FIXPROTO) != x ] ; then \
$(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
$(INSTALL_PROGRAM) build/fix-header$(build_exeext) \
$(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
else :; fi
- echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
+ sysroot_headers_suffix='$${sysroot_headers_suffix}'; \
+ echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \
>> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6b7cc450e38..8fe5c3cfb51 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,46 @@
+2007-03-09 Roger Sayle <roger@eyesopen.com>
+
+ * cuintp.c (UI_To_gnu): Use fold_buildN calls instead of calling
+ fold with the result of buildN.
+ * decl.c (gnat_to_gnu_entity): Likewise.
+ * trans.c (Attribute_to_gnu, gnat_to_gnu, emit_check): Likewise.
+ * utils.c (finish_record_type, merge_sizes, max_size, convert):
+ Likewise.
+ * utils2.c (gnat_truthvalue_conversion, compare_arrays,
+ nonbinary_modular_operation, build_binary_op, build_unary_op,
+ build_cond_expr): Likewise.
+
+ * utils.c (convert): Use fold_build1 when casting values to void.
+ * utils2.c (gnat_truthvalue_conversion): Use build_int_cst and
+ fold_convert instead of convert when appropriate.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+
+2007-02-28 Andreas Schwab <schwab@suse.de>
+
+ * Make-lang.in (doc/gnat_ugn_unw.texi): Depend on
+ $(gcc_docdir)/include/gcc-common.texi and gcc-vers.texi.
+ (doc/gnat-style.info): Likewise.
+
+2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gnat-style.texi: Standardize title page.
+ * gnat_rm.texi: Likewise.
+ * gnat_ugn.texi: Likewise.
+
+2007-02-25 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (annotate_value): Adjust for refactoring of tree_map
+ hierarchy.
+
+2007-02-24 Mark Mitchell <mark@codesourcery.com>
+
+ * decl.c (annotate_value): Adjust for refactoring of tree_map
+ hierarchy.
+
2007-02-21 Ed Schonberg <schonberg@adacore.com>
PR ada/18819
@@ -7,7 +50,7 @@
constraints several discriminants of the parent type.
2007-02-16 Eric Botcazou <ebotcazou@adacore.com>
- Sandra Loosemore <sandra@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
* trans.c (call_to_gnu): Use build_call_list instead of build3 to
build the call expression.
@@ -68,9 +111,9 @@
2006-12-05 Aldy Hernandez <aldyh@redhat.com>
- Merge from gimple-tuples-branch.
-
+ Merge from gimple-tuples-branch:
2006-11-02 Aldy Hernandez <aldyh@redhat.com>
+
* ada-tree.h (lang_tree_node): Handle gimple tuples.
* trans.c (gnat_gimplify_expr): Replace MODIFY_EXPR with
GIMPLE_MODIFY_STMT.
@@ -120,7 +163,7 @@
Bob Duff <duff@adacore.com>
Ed Schonberg <schonberg@adacore.com>
- * sem_res.adb (Resolve_Unary_Op): Add warning for use of unary minus
+ * sem_res.adb (Resolve_Unary_Op): Add warning for use of unary minus
with multiplying operator.
(Expected_Type_Is_Any_Real): New function to determine from the Parent
pointer whether the context expects "any real type".
@@ -201,7 +244,7 @@
* a-calari.ads, a-calari.adb, a-calfor.ads, a-calfor.adb,
a-catizo.ads, a-catizo.adb: New files.
- * impunit.adb: Add new Ada 2005 entries
+ * impunit.adb: Add new Ada 2005 entries
* sysdep.c: Add external variable __gnat_invalid_tz_offset.
Rename all occurences of "__gnat_localtime_r" to
@@ -657,10 +700,10 @@
determining progenitor interfaces in Tags.
(Inherit_CPP_DT): New subprogram.
- * exp_disp.adb (Expand_Interface_Thunk): Suppress checks during the
+ * exp_disp.adb (Expand_Interface_Thunk): Suppress checks during the
analysis of the thunk code.
- (Expand_Interface_Conversion): Handle run-time conversion of
- access to class wide types.
+ (Expand_Interface_Conversion): Handle run-time conversion of
+ access to class wide types.
(Expand_Dispatching_Call): When generating the profile for the
subprogram itype for a dispatching operation, properly terminate the
formal parameters chaind list (set the Next_Entity of the last formal
@@ -713,11 +756,11 @@
* treepr.adb: Use new subtype N_Membership_Test
- * checks.ads, checks.adb: Add definition for Validity_Check
- (Range_Or_Validity_Checks_Suppressed): New function
- (Ensure_Valid): Test Validity_Check suppressed
- (Insert_Valid_Check): Test Validity_Check suppressed
- (Insert_Valid_Check): Preserve Do_Range_Check flag
+ * checks.ads, checks.adb: Add definition for Validity_Check
+ (Range_Or_Validity_Checks_Suppressed): New function
+ (Ensure_Valid): Test Validity_Check suppressed
+ (Insert_Valid_Check): Test Validity_Check suppressed
+ (Insert_Valid_Check): Preserve Do_Range_Check flag
(Validity_Check_Range): New procedure
(Expr_Known_Valid): Result of membership test is always valid
(Selected_Range_Checks): Range checks cannot be applied to discriminants
@@ -810,7 +853,7 @@
* gnat1drv.adb:
Implement new -gnatl=xxx switch to output listing to file
- * opt.ads: (Warn_On_Questionable_Missing_Paren): New switch
+ * opt.ads: (Warn_On_Questionable_Missing_Paren): New switch
(Commands_To_Stdout): New flag
Implement new -gnatl=xxx switch to output listing to file
New switch Dump_Source_Text
@@ -883,11 +926,11 @@
Thomas Quinot <quinot@adacore.com>
Javier Miranda <miranda@adacore.com>
Robert Dewar <dewar@adacore.com>
-
- * exp_attr.adb:
- (Expand_Access_To_Protected_Op): If the context indicates that an access
- to a local operation may be transfered outside of the object, create an
- access to the wrapper operation that must be used in an external call.
+
+ * exp_attr.adb:
+ (Expand_Access_To_Protected_Op): If the context indicates that an access
+ to a local operation may be transfered outside of the object, create an
+ access to the wrapper operation that must be used in an external call.
(Expand_N_Attribute_Reference, case Attribute_Valid): For the AAMP
target, pass the Valid attribute applied to a floating-point prefix on
to the back end without expansion.
@@ -923,14 +966,14 @@
Ed Schonberg <schonberg@adacore.com>
Gary Dismukes <dismukes@adacore.com>
- * exp_ch3.ads, exp_ch3.adb (Expand_N_Object_Declaration): Do not
+ * exp_ch3.ads, exp_ch3.adb (Expand_N_Object_Declaration): Do not
register in the final list objects containing class-wide interfaces;
otherwise we incorrectly register the tag of the interface in the final
list.
- (Make_Controlling_Function_Wrappers): Add missing barrier to do not
- generate the wrapper if the parent primitive is abstract. This is
- required to report the correct error message.
- (Expand_N_Subtype_Indication): Do validity checks on range
+ (Make_Controlling_Function_Wrappers): Add missing barrier to do not
+ generate the wrapper if the parent primitive is abstract. This is
+ required to report the correct error message.
+ (Expand_N_Subtype_Indication): Do validity checks on range
(Clean_Task_Names): If an initialization procedure includes a call to
initialize a task (sub)component, indicate that the procedure will use
the secondary stack.
@@ -985,10 +1028,10 @@
Bob Duff <duff@adacore.com>
Gary Dismukes <dismukes@adacore.com>
Robert Dewar <dewar@adacore.com>
-
- * exp_ch4.adb (Expand_N_Type_Conversion): Handle missing interface type
+
+ * exp_ch4.adb (Expand_N_Type_Conversion): Handle missing interface type
conversion.
- (Expand_N_In): Do validity checks on range
+ (Expand_N_In): Do validity checks on range
(Expand_Selected_Component): Use updated for of Denotes_Discriminant.
(Expand_N_Allocator): For "new T", if the object is constrained by
discriminant defaults, allocate the right amount of memory, rather than
@@ -1016,7 +1059,7 @@
* exp_ch5.ads (Expand_N_Extended_Return_Statement): New procedure.
- * exp_ch5.adb (Expand_N_Loop_Statement): Do validity checks on range
+ * exp_ch5.adb (Expand_N_Loop_Statement): Do validity checks on range
(Expand_N_Assignment_Statement): Call
Make_Build_In_Place_Call_In_Assignment if the right-hand side is a
build-in-place function call. Currently, this can happen only for
@@ -1130,9 +1173,9 @@
controlled status since with HIE runtimes class wide types are not
potentially controlled anymore.
-2006-10-31 Ed Schonberg <schonberg@adacore.com>
+2006-10-31 Ed Schonberg <schonberg@adacore.com>
- * exp_ch9.adb (Update_Prival_Types): Simplify code for entity
+ * exp_ch9.adb (Update_Prival_Types): Simplify code for entity
references that are private components of the protected object.
(Build_Barrier_Function): Set flag Is_Entry_Barrier_Function
(Update_Prival_Subtypes): Add explicit Process argument to Traverse_Proc
@@ -1151,8 +1194,8 @@
2006-10-31 Thomas Quinot <quinot@adacore.com>
Pablo Oliveira <oliveira@adacore.com>
-
- * exp_dist.adb (Get_Subprogram_Ids): This function will no more assign
+
+ * exp_dist.adb (Get_Subprogram_Ids): This function will no more assign
subprogram Ids, even if they are not yet assigned.
(Build_Subprogram_Id): It is now this function that will take care of
calling Assign_Subprogram_Ids if necessary.
@@ -1192,7 +1235,7 @@
* s-wchcnv.adb: Minor reformatting
2006-10-31 Javier Miranda <miranda@adacore.com>
-
+
* exp_intr.adb (Expand_Dispatching_Constructor_Call): Add missing
run-time membership test to ensure that the constructed object
implements the target abstract interface.
@@ -1242,7 +1285,7 @@
type of the function containing a return statement, because the
Return_Type field was removed. We now use the Return_Applies_To field.
- * exp_util.ads, exp_util.adb: Use new subtype N_Membership_Test
+ * exp_util.ads, exp_util.adb: Use new subtype N_Membership_Test
(Build_Task_Image_Decl): If procedure is not called from an
initialization procedure, indicate that function that builds task name
uses the sec. stack. Otherwise the enclosing initialization procedure
@@ -1303,7 +1346,7 @@
* xref_lib.adb: Add pragma Warnings (Off) to avoid new warnings
- * sem_warn.ads, sem_warn.adb (Set_Warning_Switch): Add processing for
+ * sem_warn.ads, sem_warn.adb (Set_Warning_Switch): Add processing for
-gnatwq/Q.
(Warn_On_Useless_Assignment): Suppress warning if enclosing inner
exception handler.
@@ -1316,7 +1359,7 @@
(Output_Obsolescent_Entity_Warnings): New procedure
(Check_Code_Statement): New procedure
- * einfo.ads, einfo.adb (Has_Static_Discriminants): New flag
+ * einfo.ads, einfo.adb (Has_Static_Discriminants): New flag
Change name Is_Ada_2005 to Is_Ada_2005_Only
(Last_Assignment): New field for useless assignment warning
@@ -1347,8 +1390,8 @@
* par.adb (P_Interface_Type_Definition): Addition of one formal to
report an error if the reserved word abstract has been previously found.
(SS_End_Type): Add E_Return for new extended_return_statement syntax.
-
- * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Improve message for
+
+ * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Improve message for
parenthesized range attribute usage
(P_Expression_No_Right_Paren): Add missing comment about error recovery.
@@ -1392,11 +1435,11 @@
(Resolve_Extension_Aggregate): Minor fix to bad error message (started
with space can upper case letter).
- * sem_ch3.ads, sem_ch3.adb (Create_Constrained_Components): Set
+ * sem_ch3.ads, sem_ch3.adb (Create_Constrained_Components): Set
Has_Static_Discriminants flag
- (Record_Type_Declaration): Diagnose an attempt to declare an interface
- type with discriminants.
- (Process_Range_Expr_In_Decl): Do validity checks on range
+ (Record_Type_Declaration): Diagnose an attempt to declare an interface
+ type with discriminants.
+ (Process_Range_Expr_In_Decl): Do validity checks on range
(Build_Discriminant_Constraints): Use updated form of
Denotes_Discriminant.
(Process_Subtype): If the subtype is a private subtype whose full view
@@ -1503,7 +1546,7 @@
Darwin, where one of these two switches is compulsory to link.
2006-10-31 Vincent Celier <celier@adacore.com>
-
+
* gnatls.adb: Take into account GPR_PROJECT_PATH, when it is defined,
instead of ADA_PROJECT_PATH, for the project path.
(Gnatls): When displaying the project path directories, use host dir
@@ -1544,15 +1587,15 @@
2006-10-31 Robert Dewar <dewar@adacore.com>
- * layout.adb (Layout_Record_Type): Deal with non-static subtypes of
- variant records
- (Layout_Variant_Record): Retrieve the discriminants from the entity
+ * layout.adb (Layout_Record_Type): Deal with non-static subtypes of
+ variant records
+ (Layout_Variant_Record): Retrieve the discriminants from the entity
rather than from the type definition, because in the case of a full
type for a private type we need to take the discriminants from the
partial view.
- (Layout_Component_List): When applying the Max operator to variants with
- a nonstatic size, check whether either operand is static and scale that
- operand from bits to storage units before applying Max.
+ (Layout_Component_List): When applying the Max operator to variants with
+ a nonstatic size, check whether either operand is static and scale that
+ operand from bits to storage units before applying Max.
(Layout_Type): In VMS, if a C-convention access type has no explicit
size clause (and does not inherit one in the case of a derived type),
then the size is reset to 32 from 64.
@@ -1575,7 +1618,7 @@
(LIBGNAT_TARGET_PAIRS for Windows): Avoid the use of the specific
a-calend-mingw.adb version.
- * Makefile.rtl: Added s-dsaser.
+ * Makefile.rtl: Added s-dsaser.
Add object entries for Ada.Calendar.[Arithmetic/Formatting/Time_Zones]
(GNATRTL_TASKING_OBJS): Add Ada.Dispatching and
Ada.Dispatching.Round_Robin.
@@ -1658,7 +1701,7 @@
2006-10-31 Robert Dewar <dewar@adacore.com>
Javier Miranda <miranda@adacore.com>
-
+
* par-ch3.adb (P_Range_Or_Subtype_Mark): Check for bad parentheses
(P_Type_Declaration): Remove barrier against the reserved word "limited"
after "abstract" to give support to the new syntax of AARM 3.4 (2/2).
@@ -1727,13 +1770,13 @@
* raise.h: (__gnat_set_globals): Change profile.
2006-10-31 Arnaud Charlet <charlet@adacore.com>
-
- * rtsfind.adb: Remove s-polint from comment as it exists no more.
- * rtsfind.ads:
- Move entity RE_Get_Active_Partition_Id to package System.DSA_Services.
- Move all the entities in obsolete package System.PolyORB_Interface to
- System.Partition_Interface.
+ * rtsfind.adb: Remove s-polint from comment as it exists no more.
+
+ * rtsfind.ads:
+ Move entity RE_Get_Active_Partition_Id to package System.DSA_Services.
+ Move all the entities in obsolete package System.PolyORB_Interface to
+ System.Partition_Interface.
(RE_Storage_Size): New function in System.Tasking.
(RE_Get_Ceiling): New entity.
(RE_Set_Ceiling): New entity.
@@ -1806,8 +1849,8 @@
2006-10-31 Ed Schonberg <schonberg@adacore.com>
Hristian Kirtchev <kirtchev@adacore.com>
-
- * sem_ch12.ads, sem_ch12.adb (Save_References): If node is an operator
+
+ * sem_ch12.ads, sem_ch12.adb (Save_References): If node is an operator
that has been constant-folded, preserve information of original tree,
for ASIS uses.
(Analyze_Formal_Derived_Type): Set the limited present flag of the newly
@@ -1942,7 +1985,7 @@
2006-10-31 Ed Schonberg <schonberg@adacore.com>
Hristian Kirtchev <kirtchev@adacore.com>
Bob Duff <duff@adacore.com>
-
+
* sem_ch6.ads, sem_ch6.adb (Analyze_Subprogram_Declaration): A null
procedure cannot be a protected operation (it is a basic_declaration,
not a subprogram_declaration).
@@ -2020,7 +2063,7 @@
Hristian Kirtchev <kirtchev@adacore.com>
Javier Miranda <miranda@adacore.com>
Ed Schonberg <schonberg@adacore.com>
-
+
* sem_ch8.adb: Minor error msg rewording
(Undefined): When checking for misspellings, invert arguments (to get
expected and found set right)
@@ -2130,8 +2173,8 @@
2006-10-31 Robert Dewar <dewar@adacore.com>
Hristian Kirtchev <kirtchev@adacore.com>
Ed Schonberg <schonberg@adacore.com>
-
- * sem_util.ads, sem_util.adb (Enter_Name): Exclude -gnatwh warning
+
+ * sem_util.ads, sem_util.adb (Enter_Name): Exclude -gnatwh warning
messages for entities in packages which are not used.
(Collect_Synchronized_Interfaces): New procedure.
(Overrides_Synchronized_Primitive): New function.
@@ -2233,7 +2276,7 @@
Generic_associations now carry the Box_Present flag, to indicate a
default for an actual in a partially parametrized formal package.
- * snames.h, snames.ads, snames.adb: Add definition for Validity_Check
+ * snames.h, snames.ads, snames.adb: Add definition for Validity_Check
(Preset_Names): Add entries for Priority_Specific_Dispatching pragma
and for the new predefined dispatching policies: EDF_Across_Priorities,
Non_Preemptive_Within_Priorities, and Round_Robin_Within_Priorities.
@@ -2346,7 +2389,7 @@
* a-crbtgo.adb: Added reference to book from which algorithms were
adapted.
- * a-crbtgk.ads, a-crbtgk.adb (Generic_Insert_Post): pass flag to
+ * a-crbtgk.ads, a-crbtgk.adb (Generic_Insert_Post): pass flag to
indicate which child.
(Generic_Conditional_Insert): changed parameter name from "Success" to
"Inserted".
@@ -2414,11 +2457,11 @@
* debug.adb: Update flags documentation
- * gnat_ugn.texi: Add documentation for new -gnatwq switch
- Clean up documentation for several other warning switches
- Clarify how task stack size can be specified with various
- versions of Windows.
- Add note that -gnatVo includes ranges including loops
+ * gnat_ugn.texi: Add documentation for new -gnatwq switch
+ Clean up documentation for several other warning switches
+ Clarify how task stack size can be specified with various
+ versions of Windows.
+ Add note that -gnatVo includes ranges including loops
Add documentation for -gnatL switch
Add note on elaboration warning for initializing variables
Add documentation for new -gnatwt warning switch
@@ -2452,7 +2495,7 @@
Add comments on layout of subprogram local variables in the
presence of nested subprograms.
- * ug_words: Resync.
+ * ug_words: Resync.
* elists.ads: Minor reformatting
Node returns Node_Or_Entity_Id (doc change only)
@@ -2463,12 +2506,12 @@
* sem.ads: Add details on the handling of the scope stack.
- * usage.adb: Update documentation.
+ * usage.adb: Update documentation.
* validsw.ads, validsw.adb:
Add definition of Validity_Check_Components and implement -gnatVe/E
- * vms_data.ads: Add missing VMS qualifiers.
+ * vms_data.ads: Add missing VMS qualifiers.
* s-addope.ads: Add documentation on overflow and divide by zero
@@ -2728,7 +2771,7 @@
not been able to get a constant upper bound from TYPE_SIZE_UNIT.
2006-06-20 James A. Morrison <phython@gcc.gnu.org>
- Eric Botcazou <ebotcazou@adacore.com>
+ Eric Botcazou <ebotcazou@adacore.com>
PR ada/18692
* Make-lang.in: Add check-gnat to lang_checks. Rename existing
@@ -2736,7 +2779,7 @@
2006-06-17 Karl Berry <karl@gnu.org>
- * gnat-style.texi (@dircategory): Use "Software development"
+ * gnat-style.texi (@dircategory): Use "Software development"
instead of "Programming", following the Free Software Directory.
2006-06-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
@@ -2746,9 +2789,9 @@
2006-06-06 Laurent GUERBY <laurent@guerby.net>
- PR ada/27769
- mlib-utl.adb: Use Program_Name.
-
+ PR ada/27769
+ mlib-utl.adb: Use Program_Name.
+
2006-05-28 Kazu Hirata <kazu@codesourcery.com>
* decl.c, env.c, gigi.h, init.c, initialize.c, raise-gcc.c,
@@ -2793,7 +2836,7 @@
* utils.c (create_var_decl): Use have_global_bss_p when deciding
whether to make the decl common.
-2006-02-20 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
+2006-02-20 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
* Make-lang.in (Ada): Remove.
(.PHONY): Remove Ada
@@ -3293,9 +3336,9 @@
Add exception reason code PE_Implicit_Return
Add new exception reason code (Null Exception_Id)
- * clean.adb (Initialize): Get the target parameters before checking
- if target is OpenVMS. Move the OpenVMS specific code here from package
- body elaboration code.
+ * clean.adb (Initialize): Get the target parameters before checking
+ if target is OpenVMS. Move the OpenVMS specific code here from package
+ body elaboration code.
2006-02-13 Thomas Quinot <quinot@adacore.com>
Vincent Celier <celier@adacore.com>
@@ -4064,7 +4107,6 @@
2006-02-13 Javier Miranda <miranda@adacore.com>
PR ada/23973
-
* par-ch3.adb (P_Derived_Type_Def_Or_Private_Ext_Decl): Reorganize the
code to improve the error message reported when the program has
declarations of abstract interface types and it is not compiled with
@@ -4191,17 +4233,17 @@
the rules of 3.10.2(32/2).
Diagnose use of current instance with an illegal attribute.
- * sem_util.ads, sem_util.adb (Enclosing_Generic_Body): Change formal
- to a Node_Id.
- (Enclosing_Generic_Unit): New function to return a node's innermost
- enclosing generic declaration node.
- (Compile_Time_Constraint_Error): Remove '!' in warning messages.
- (Type_Access_Level): The accessibility level of anonymous acccess types
- associated with discriminants is that of the current instance of the
- type, and that's deeper than the type itself (AARM 3.10.2 (12.3.21)).
- (Compile_Time_Constraint_Error): Handle case of conditional expression.
- (Kill_Current_Values_For_Entity): New function
- (Enter_Name): Change formal type to Entity_Id
+ * sem_util.ads, sem_util.adb (Enclosing_Generic_Body): Change formal
+ to a Node_Id.
+ (Enclosing_Generic_Unit): New function to return a node's innermost
+ enclosing generic declaration node.
+ (Compile_Time_Constraint_Error): Remove '!' in warning messages.
+ (Type_Access_Level): The accessibility level of anonymous acccess types
+ associated with discriminants is that of the current instance of the
+ type, and that's deeper than the type itself (AARM 3.10.2 (12.3.21)).
+ (Compile_Time_Constraint_Error): Handle case of conditional expression.
+ (Kill_Current_Values_For_Entity): New function
+ (Enter_Name): Change formal type to Entity_Id
2006-02-13 Hristian Kirtchev <kirtchev@adacore.com>
Ed Schonberg <schonberg@adacore.com>
@@ -4631,7 +4673,7 @@
Quentin Ochem <ochem@adacore.com>
Florian Villoing <villoing@adacore.com>
- * a-taster.ads, a-taster.adb: New files.
+ * a-taster.ads, a-taster.adb: New files.
* a-elchha.adb (Last_Chance_Handler): Change the task termination soft
link to the version that does nothing. This way the task termination
@@ -4839,7 +4881,7 @@
dealing with dispatching selects and abort, 'Callable, 'Terminated only
for concurrent types.
- * exp_sel.ads, exp_sel.adb: New files.
+ * exp_sel.ads, exp_sel.adb: New files.
* exp_ch9.adb (Build_Protected_Entry, Expand_N_Protected_Body,
Expand_N_Protected_Type_Declaration, Make_Initialize_Protection): Handle
@@ -5206,7 +5248,7 @@
2005-12-09 Robert Dewar <dewar@adacore.com>
* i-c.adb, i-cexten.ads, i-cobol.adb, i-cobol.ads, i-cpoint.ads,
- i-cpp.adb, i-cpp.ads, i-cstrea.ads, i-cstrin.adb, i-cstrin.ads,
+ i-cpp.adb, i-cpp.ads, i-cstrea.ads, i-cstrin.adb, i-cstrin.ads,
inline.adb, interfac.ads, i-os2err.ads, i-os2lib.ads, i-os2syn.ads,
i-os2thr.ads, itypes.adb, itypes.adb, itypes.ads, krunch.ads,
krunch.adb, lib.adb, lib.ads, lib-list.adb, lib-load.adb,
@@ -5266,7 +5308,7 @@
2005-12-05 Paolo Bonzini <bonzini@gnu.org>
- * Makefile.in (gnatlib): Fix regex, using \. instead of . when
+ * Makefile.in (gnatlib): Fix regex, using \. instead of . when
a period is meant.
2005-12-02 Richard Guenther <rguenther@suse.de>
@@ -5280,7 +5322,7 @@
2005-11-23 Laurent GUERBY <laurent@guerby.net>
- * mlib-prj.adb (Build_Library): Initialize Delete.
+ * mlib-prj.adb (Build_Library): Initialize Delete.
2005-11-21 Joel Sherrill <joel.sherrill@oarcorp.com>
@@ -5298,8 +5340,8 @@
2005-11-18 Laurent GUERBY <laurent@guerby.net>
- PR ada/24857
- * Makefile.in: Use s-auxdec-empty for RTEMS.
+ PR ada/24857
+ * Makefile.in: Use s-auxdec-empty for RTEMS.
2005-11-17 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
@@ -5313,15 +5355,15 @@
PR ada/24857
* s-auxdec-empty.ads, s-auxdec-empty.adb: New files.
-
+
2005-11-16 Richard Guenther <rguenther@suse.de>
* Makefile.in: Add EH_MECHANISM=-gcc to s390(x) linux.
2005-11-16 Joel Sherrill <joel.sherrill@oarcorp.com>
- PR ada/24855
- * raise-gcc.c: Add missing stdarg.h include.
+ PR ada/24855
+ * raise-gcc.c: Add missing stdarg.h include.
2005-11-16 Richard Guenther <rguenther@suse.de>
@@ -5389,7 +5431,6 @@
Ed Schonberg <schonberg@adacore.com>
PR ada/18434
-
* types.ads: Include All_Checks in Suppress_Array
* checks.adb (Check_Needed): Remove kludge for a/=b rewritten as
@@ -5512,7 +5553,7 @@
(Save_Occurrence_And_Private): Move GCC EH related code to
a-exexpr-gcc.adb
(Raise_Current_Excep): Add new variable Id with pragma
- volatile, to ensure that the variable lives on stack.
+ volatile, to ensure that the variable lives on stack.
* a-exexpr-gcc.adb, raise-gcc.c: New file.
@@ -6317,7 +6358,6 @@
Javier Miranda <miranda@adacore.com>
PR ada/15604
-
* sem_type.adb (Covers): In an inlined body, a composite type matches
a private type whose full view is a composite type.
(Interface_Present_In_Ancestor): Protect the frontend against
@@ -7624,9 +7664,9 @@
subprogram Complete_Subprograms_Derivation already does the
job associated with the second call.
- * exp_strm.adb (Build_Elementary_Input_Call): Add an explicit
- conversion to the full view when generating an operation for a
- discriminant whose type may currently be private.
+ * exp_strm.adb (Build_Elementary_Input_Call): Add an explicit
+ conversion to the full view when generating an operation for a
+ discriminant whose type may currently be private.
2005-09-01 Ed Schonberg <schonberg@adacore.com>
Javier Miranda <miranda@adacore.com>
@@ -8011,7 +8051,6 @@
2005-07-07 Olivier Hainque <hainque@adacore.com>
PR ada/22301
-
* raise.c: Only include unwind.h if IN_RTS, and provide dummy type
definitions for the Unwind wrappers in the compiler case.
@@ -8123,10 +8162,10 @@
N_Object_Declaration, only perform the checks if the Object_Definition
is not an Access_Definition.
- * sem_ch3.adb (Access_Subprogram_Declaration): Add test for the case
- where the parent of an the access definition is an N_Object_Declaration
- when determining the Associated_Node_For_Itype and scope of an
- anonymous access-to-subprogram type.
+ * sem_ch3.adb (Access_Subprogram_Declaration): Add test for the case
+ where the parent of an the access definition is an N_Object_Declaration
+ when determining the Associated_Node_For_Itype and scope of an
+ anonymous access-to-subprogram type.
* exp_ch6.adb (Expand_N_Subprogram_Declaration): Set the
Corresponding_Spec on the body created for a null procedure. Add ???
@@ -8309,7 +8348,6 @@
2005-07-04 Robert Dewar <dewar@adacore.com>
PR ada/22039
-
* s-sopco3.ads, s-sopco4.ads, s-sopco5.ads: Minor documentation fix
2005-07-04 Matthew Gingell <gingell@adacore.com>
@@ -8361,19 +8399,19 @@
2005-07-04 Sergey Rybin <rybin@adacore.com>
- * gnat_ugn.texi: Add description of --eol gnatpp option
+ * gnat_ugn.texi: Add description of --eol gnatpp option
2005-07-04 Eric Botcazou <ebotcazou@adacore.com>
Thomas Quinot <quinot@adacore.com>
- * gnat_rm.texi: Add a note that pragma Unreferenced is not appropriate
+ * gnat_rm.texi: Add a note that pragma Unreferenced is not appropriate
if the user wants all calls of a subprogram to be flagged,
independently of whether they are made from within the same unit or
another unit.
- Mention restriction for pragma Linker_Alias on some platforms.
- Document pragma Linker_Constructor and Linker_Destructor.
- Rewrite documentation of Weak_External, Linker_Section and
- Linker_Alias pragmas.
+ Mention restriction for pragma Linker_Alias on some platforms.
+ Document pragma Linker_Constructor and Linker_Destructor.
+ Rewrite documentation of Weak_External, Linker_Section and
+ Linker_Alias pragmas.
2005-07-04 Arnaud Charlet <charlet@adacore.com>
@@ -9340,8 +9378,8 @@
s-valwch.ads, s-widwch.adb, s-widwch.ads, s-wwdcha.adb, s-wwdwch.adb:
Rewrite to correspond to new wide character names in AI-395
- * par-ch12.adb (P_Formal_Subprogram_Declaration): Recognize null
- default procedures.
+ * par-ch12.adb (P_Formal_Subprogram_Declaration): Recognize null
+ default procedures.
2005-06-14 Ed Schonberg <schonberg@adacore.com>
Robert Dewar <dewar@adacore.com>
@@ -9430,7 +9468,6 @@
2005-06-14 Thomas Quinot <quinot@adacore.com>
PR ada/6717
-
* g-socket.ads, g-socket.adb (Inet_Addr): Special case the all-ones
broadcast address.
(Create_Selector): Bind listening socket used to create the signalling
@@ -9502,15 +9539,15 @@
For objects and parameters of a generic private type, retain the '*'
indicator to distinguish such an entity from its type.
- * ali.ads (Xref_Entity_Record): New fields Iref_File_Num and Iref_Line,
- to store information about instantiated entities.
+ * ali.ads (Xref_Entity_Record): New fields Iref_File_Num and Iref_Line,
+ to store information about instantiated entities.
- * ali.adb (Scan_ALI): Add support for parsing the reference to the
- generic parent
+ * ali.adb (Scan_ALI): Add support for parsing the reference to the
+ generic parent
- * xref_lib.adb (Skip_To_Matching_Closing_Bracket): New subprogram
- (Parse_Identifier_Info, Parse_Token): Add support for the generic parent
- information.
+ * xref_lib.adb (Skip_To_Matching_Closing_Bracket): New subprogram
+ (Parse_Identifier_Info, Parse_Token): Add support for the generic parent
+ information.
2005-06-10 Doug Rupp <rupp@adacore.com>
Arnaud Charlet <charlet@adacore.com>
@@ -9573,7 +9610,6 @@
2005-06-14 Robert Dewar <dewar@adacore.com>
PR ada/15613
-
* par-ch2.adb (Scan_Pragma_Argument): New procedure
(P_Pragma): Implement RM 2.8(4) check for no pos args after named args
@@ -9619,11 +9655,11 @@
characters are now considered graphic characters and hence yield false
in this call.
- * nmake.adt: Modify header so that xnmake does not generate output
- files with multiple blank lines.
+ * nmake.adt: Modify header so that xnmake does not generate output
+ files with multiple blank lines.
- * treeprs.adt: Remove a blank line so that output from xtreeprs does
- not have an extra blank line
+ * treeprs.adt: Remove a blank line so that output from xtreeprs does
+ not have an extra blank line
2005-06-14 Gary Dismukes <dismukes@adacore.com>
@@ -9655,7 +9691,6 @@
Ed Schonberg <schonberg@adacore.com>
PR ada/10671
-
* sem_prag.adb: Implement pragma Persistent_BSS
Remove obsolete pragma Persistent_Data, Persistent_Object
Set Ada_Version_Explicit, for implementation of AI-362
@@ -9720,8 +9755,8 @@
* nmake.adt: Modify header so that xnmake does not generate output
files with multiple blank lines.
- * treeprs.adt: Remove a blank line so that output from xtreeprs does
- not have an extra blank line
+ * treeprs.adt: Remove a blank line so that output from xtreeprs does
+ not have an extra blank line
2005-06-14 Sergey Rybin <rybin@adacore.com>
@@ -9745,7 +9780,7 @@
Add UNNECESSARY_BLANK_LINES for -gnatyu
Add qualifiers /ALL_PROJECTS (-U) for GNAT PRETTY and GNAT METRIC
- * ug_words: Add entry for -gnaty/Y [NO]ADA_2005_COMPATIBILITY
+ * ug_words: Add entry for -gnaty/Y [NO]ADA_2005_COMPATIBILITY
2005-06-14 Vincent Celier <celier@adacore.com>
@@ -9846,7 +9881,7 @@
object directories of project files before directories in ADA_*_PATH
environment variables.
- * g-trasym.ads: Document that IRIX is supported
+ * g-trasym.ads: Document that IRIX is supported
2005-06-10 Arnaud Charlet <charlet@adacore.com>
@@ -9941,9 +9976,9 @@
2005-04-16 Laurent GUERBY <laurent@guerby.net>
- PR ada/18847
- * a-nudira.adb (Value): Check for valid string.
- * a-nuflra.adb (Value): Likewise.
+ PR ada/18847
+ * a-nudira.adb (Value): Check for valid string.
+ * a-nuflra.adb (Value): Likewise.
2005-04-11 Richard Sandiford <rsandifo@redhat.com>
@@ -10116,7 +10151,6 @@
Generic_Dispatching_Constructor.
PR ada/20300
-
* sem_ch8.adb (Find_Direct_Name): Go to root type for check of
character type cases.
(Analyze_Subprogram_Renaming): Add special handling for
@@ -10416,13 +10450,12 @@
* Makefile.in: (ia64-hp-*vms*): Use s-crtl-vms64.ads.
- * 5xcrtl.ads: Renamed to...
- * s-crtl-vms64.ads: ...this new file
+ * 5xcrtl.ads: Renamed to...
+ * s-crtl-vms64.ads: ...this new file
2005-03-17 Robert Dewar <dewar@adacore.com>
PR ada/19519
-
* namet.adb (Copy_One_Character): Set proper wide character encoding
for upper half character if we have upper half encoding.
@@ -10798,7 +10831,6 @@
2005-03-15 Robert Dewar <dewar@adacore.com>
PR ada/13470
-
* a-stunau.ads, a-stunau.adb:
Change interface to allow efficient (and correct) implementation
The previous changes to allow extra space in unbounded strings had
@@ -10961,7 +10993,6 @@
PR ada/19408
PR ada/19140
PR ada/20255
-
* decl.c (gnat_to_gnu_field): Reject aliased components with a
representation clause that prescribes a size not equal to the rounded
size of their types.
@@ -11120,7 +11151,6 @@
PR ada/20226
PR ada/20344
-
* init.c (__gnat_initialize): Do not call __gnat_install_SEH_handler()
when IN_RTS. This is to work around a bootstrap path problem.
@@ -11831,8 +11861,7 @@
2005-02-09 Eric Botcazou <ebotcazou@adacore.com>
Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
- Fix for c330001 - PR ada/19386
-
+ PR ada/19386
* decl.c:
(gnat_to_gnu_field): Do not necessarily invoke make_packable_type
on the field if Pragma Component_Alignment (Storage_Unit).
@@ -11932,7 +11961,6 @@
2005-02-09 Arnaud Charlet <charlet@adacore.com>
PR ada/16592
-
* Makefile.in: Link all gnat tools with -static-libgcc, since
-shared-libgcc is now used by default on some systems (e.g. linux with
recent binutils).
@@ -13722,7 +13750,6 @@
2004-10-04 Bernard Banner <banner@gnat.com>
PR ada/13897
-
* Makefile.in: Add section for powerpc linux
Add variant i-vxwork-x86.ads
@@ -13998,7 +14025,6 @@
2004-09-23 Robert Dewar <dewar@gnat.com>
PR ada/17540
-
* sem_prag.adb (Process_Import_Or_Interface): Don't set Is_Public here,
instead do this at freeze time (we won't do it if there is an address
clause).
@@ -14043,7 +14069,6 @@
2004-09-20 Robert Dewar <dewar@gnat.com>
PR ada/17540
-
* freeze.adb (Check_Address_Clause): Reset Is_Imported and Is_Public
if an address clause is present, since that means that the Import
should be ignored.
@@ -14722,7 +14747,6 @@
2004-08-09 Ed Schonberg <schonberg@gnat.com>
PR ada/15408
-
* sem_ch7.adb (Install_Private_Declarations): In the body of the
package or of a child, private entities are both immediately_visible
and not hidden.
@@ -16260,7 +16284,6 @@
2004-06-11 Hristian Kirtchev <kirtchev@gnat.com>
PR ada/15587
-
* einfo.ads: Minor comment updates for Has_Completion and
E_Constant list of flags.
@@ -16343,7 +16366,6 @@
2004-06-11 Ed Schonberg <schonberg@gnat.com>
PR ada/15403
-
* sem_ch12.adb (Save_References): If operator node has been folded to
enumeration literal, associated_node must be discarded.
@@ -16355,7 +16377,6 @@
2004-06-08 Arnaud Charlet <charlet@act-europe.fr>
PR ada/15568
-
* Makefile.in: Remove target specific SO_OPT on IRIX
2004-06-07 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
@@ -17570,7 +17591,6 @@
2004-05-03 Olivier Hainque <hainque@act-europe.fr>
PR ada/15152
-
* exp_ch2.adb (Expand_Current_Value): Leave Machine_Code Asm arguments
alone. Replacing object references by literals is inappropriate in a
so low level context.
@@ -19901,7 +19921,8 @@
2004-02-10 Arnaud Charlet <charlet@act-europe.fr>,
Nathanael Nerode <neroden@gcc.gnu.org>
- PR ada/6637, PR ada/5911
+ PR ada/6637
+ PR ada/5911
Merge with libada-branch:
* config-lang.in: Build libada only when ada is built.
@@ -21033,7 +21054,6 @@
Fixes ACATS regressions.
PR ada/13353
-
* sem_prag.adb (Back_End_Cannot_Inline): A renaming_as_body can always
be inlined.
@@ -21270,7 +21290,6 @@
2003-12-03 Thomas Quinot <quinot@act-europe.fr>
PR ada/11724
-
* adaint.h, adaint.c, g-os_lib.ads:
Do not assume that the offset argument to lseek(2) is a 32 bit integer,
on some platforms (including FreeBSD), it is a 64 bit value.
@@ -22294,7 +22313,6 @@
2003-11-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
Part of PR ada/12806
-
* ada-tree.h (TYPE_DIGITS_VALUE, SET_TYPE_DIGITS_VALUE): Save count as
tree, not integer.
@@ -22608,7 +22626,7 @@
* Makefile.generic: Add missing substitution on object_deps handling.
- PR ada/5909:
+ PR ada/5909
* Make-lang.in (check-ada): Enable ACATS test suite.
2003-10-27 Robert Dewar <dewar@gnat.com>
@@ -22677,13 +22695,13 @@
2003-10-24 Pascal Obry <obry@gnat.com>
+ PR ada/12014
* adadecode.c (ostrcpy): New function.
(__gnat_decode): Use ostrcpy of strcpy.
(has_prefix): Set first parameter a const.
(has_suffix): Set first parameter a const.
Update copyright notice. Fix source name in header.
Removes a trailing space.
- PR ada/12014.
2003-10-24 Jose Ruiz <ruiz@act-europe.fr>
@@ -22758,13 +22776,13 @@
2003-10-23 Thomas Quinot <quinot@act-europe.fr>
- PR ada/11978:
+ PR ada/11978
* exp_ch13.adb (Expand_N_Freeze_Entity): Do not consider inherited
External_Tag attribute definition clauses.
2003-10-23 Ed Schonberg <schonberg@gnat.com>
- PR ada/7613:
+ PR ada/7613
* exp_dbug.adb (Debug_Renaming_Declaration): For the renaming of a
child unit, generate a fully qualified name to avoid spurious errors
when the context contains renamings of different child units with
@@ -22827,7 +22845,8 @@
2003-10-22 Arnaud Charlet <charlet@act-europe.fr>
- * Makefile.in: Disable build of gnatpsta. PR ada/10110.
+ PR ada/10110
+ * Makefile.in: Disable build of gnatpsta.
* cstreams.c (__gnat_full_name): Minor improvements and clean up
of previous change.
@@ -23362,7 +23381,7 @@
2003-06-04 Olivier Hainque <hainque@act-europe.fr>
- PR ada/9953:
+ PR ada/9953
* 5hsystem.ads: Remove pragma Linker_Option for pthreads library,
and turn ZCX_By_Default back to False since the underlying support
is not quite there yet.
@@ -23815,7 +23834,7 @@
2003-02-18 Ben Elliston <bje@redhat.com>
- Part of fix for PR ada/9406
+ Part of PR ada/9406
* gnat_ug.texi (Binder output file): Grammar fix.
2003-02-18 Ben Elliston <bje@redhat.com>
@@ -23924,9 +23943,10 @@
2002-12-14 Geert Bosch <bosch@gnat.com>
+ PR ada/5690
* sem_ch6.adb (Analyze_Subprogram_Body): Recognize additional
case of a body created for a Renaming_As_Body, on which
- conformance checks are not performed. Fixes PR ada/5690.
+ conformance checks are not performed.
2002-11-30 Zack Weinberg <zack@codesourcery.com>
@@ -23940,7 +23960,9 @@
solution to buffer overflow bug on GNU/Linux.
2002-11-14 Nathanael Nerode <neroden@gcc.gnu.org>
- Closes PR ada/5856 and PR ada/6919 !
+
+ PR ada/5856
+ PR ada/6919
* bindgen.adb: Remove all references to Public_Version.
* comperr.adb: Remove all references to Public_Version and
GNATPRO_Version; correct bug reporting instructions.
@@ -23949,6 +23971,7 @@
GNATPRO version.
2002-11-13 Nathanael Nerode <neroden@gcc.gnu.org>
+
PR ada/6919
* adaint.c (__gnat_tmp_name): Remove buffer overflow bug on
GNU/Linux.
@@ -23957,21 +23980,25 @@
* config-lang.in: Remove diff_excludes.
2002-11-05 Graham Stott <graham.stott@btinternet.com>
+
PR ada/8358
* trans.c (gnu_pending_elaboration_lists): New GC root.
(build_unit_elab): Use..
2002-10-30 Geert Bosch <bosch@gnat.com>
+
PR ada/6558
* misc.c : Include optabs.h
* Make-lang.in (misc.o): Add dependency on optabs.h
2002-10-29 Geert Bosch <bosch@gnat.com>
+
PR ada/6558
* Make-lang.in (gnatbind): Depend on CONFIG_H
2002-10-29 Geert bosch <bosch@gnat.com>
+
PR ada/6558
* misc.c: Unrevert misc.c (1.13)
@@ -23981,6 +24008,7 @@
maintainership comments.
2002-09-25 Nathanael Nerode <neroden@gcc.gnu.org>
+
PR ada/5904
* 5ataprop.adb 5atpopsp.adb 5bosinte.adb 5ftaprop.adb
5gtaprop.adb 5htaprop.adb 5rosinte.ads 5staprop.adb
diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in
index 4fada1e34ba..4d14dd2b0a9 100644
--- a/gcc/ada/Make-lang.in
+++ b/gcc/ada/Make-lang.in
@@ -1,6 +1,6 @@
# Top level -*- makefile -*- fragment for GNU Ada (GNAT).
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
#This file is part of GCC.
@@ -23,8 +23,9 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf
-# foo.uninstall, foo.mostlyclean, foo.clean, foo.distclean,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
@@ -388,7 +389,8 @@ ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
# Note that gnat_ugn_unw.texi does not depend on xgnatugn
# being built so we can distribute a pregenerated gnat_ugn_unw.info
-doc/gnat_ugn_unw.texi: $(srcdir)/ada/gnat_ugn.texi $(srcdir)/ada/ug_words
+doc/gnat_ugn_unw.texi: $(srcdir)/ada/gnat_ugn.texi $(srcdir)/ada/ug_words \
+ $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
$(MAKE) ada/doctools/xgnatugn$(build_exeext)
ada/doctools/xgnatugn unw $(srcdir)/ada/gnat_ugn.texi \
$(srcdir)/ada/ug_words doc/gnat_ugn_unw.texi
@@ -396,7 +398,6 @@ doc/gnat_ugn_unw.texi: $(srcdir)/ada/gnat_ugn.texi $(srcdir)/ada/ug_words
doc/gnat_ugn_unw.info: doc/gnat_ugn_unw.texi \
$(gcc_docdir)/include/fdl.texi $(gcc_docdir)/include/gcc-common.texi \
gcc-vers.texi
-
if [ x$(BUILD_INFO) = xinfo ]; then \
rm -f $(@)*; \
$(MAKEINFO) $(MAKEINFOFLAGS) -I$(gcc_docdir)/include \
@@ -411,7 +412,8 @@ doc/gnat_rm.info: ada/gnat_rm.texi $(gcc_docdir)/include/fdl.texi \
-I$(srcdir)/ada -o $@ $<; \
else true; fi
-doc/gnat-style.info: ada/gnat-style.texi $(gcc_docdir)/include/fdl.texi
+doc/gnat-style.info: ada/gnat-style.texi $(gcc_docdir)/include/fdl.texi \
+ $(gcc_docdir)/include/gcc-common.texi gcc-vers.texi
if [ x$(BUILD_INFO) = xinfo ]; then \
rm -f $(@)*; \
$(MAKEINFO) $(MAKEINFOFLAGS) -I$(gcc_docdir)/include \
@@ -433,8 +435,20 @@ ada.install-info: $(DESTDIR)$(infodir)/gnat_ugn_unw.info \
ada.dvi: doc/gnat_ugn_unw.dvi \
doc/gnat_rm.dvi doc/gnat-style.dvi
-ada.pdf: doc/gnat_ugn_unw.pdf \
- doc/gnat_rm.pdf doc/gnat-style.pdf
+ADA_PDFFILES = doc/gnat_ugn_unw.pdf \
+ doc/gnat_rm.pdf doc/gnat-style.pdf
+
+ada.pdf: $(ADA_PDFFILES)
+
+ada.install-pdf: $(ADA_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
+ @list='$(ADA_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
+ done
ada.html:
diff --git a/gcc/ada/cuintp.c b/gcc/ada/cuintp.c
index fbf800f3a8e..f8107282323 100644
--- a/gcc/ada/cuintp.c
+++ b/gcc/ada/cuintp.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 1992-2005 Free Software Foundation, Inc. *
+ * Copyright (C) 1992-2007 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- *
@@ -113,18 +113,18 @@ UI_To_gnu (Uint Input, tree type)
gnu_ret = build_cst_from_int (comp_type, First);
if (First < 0)
for (Idx++, Length--; Length; Idx++, Length--)
- gnu_ret = fold (build2 (MINUS_EXPR, comp_type,
- fold (build2 (MULT_EXPR, comp_type,
- gnu_ret, gnu_base)),
- build_cst_from_int (comp_type,
- Udigits_Ptr[Idx])));
+ gnu_ret = fold_build2 (MINUS_EXPR, comp_type,
+ fold_build2 (MULT_EXPR, comp_type,
+ gnu_ret, gnu_base),
+ build_cst_from_int (comp_type,
+ Udigits_Ptr[Idx]));
else
for (Idx++, Length--; Length; Idx++, Length--)
- gnu_ret = fold (build2 (PLUS_EXPR, comp_type,
- fold (build2 (MULT_EXPR, comp_type,
- gnu_ret, gnu_base)),
- build_cst_from_int (comp_type,
- Udigits_Ptr[Idx])));
+ gnu_ret = fold_build2 (PLUS_EXPR, comp_type,
+ fold_build2 (MULT_EXPR, comp_type,
+ gnu_ret, gnu_base),
+ build_cst_from_int (comp_type,
+ Udigits_Ptr[Idx]));
}
gnu_ret = convert (type, gnu_ret);
diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c
index af0e39246b0..80b904444db 100644
--- a/gcc/ada/decl.c
+++ b/gcc/ada/decl.c
@@ -1332,8 +1332,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
{
TYPE_MODULAR_P (gnu_type) = 1;
SET_TYPE_MODULUS (gnu_type, gnu_modulus);
- gnu_high = fold (build2 (MINUS_EXPR, gnu_type, gnu_modulus,
- convert (gnu_type, integer_one_node)));
+ gnu_high = fold_build2 (MINUS_EXPR, gnu_type, gnu_modulus,
+ convert (gnu_type, integer_one_node));
}
/* If we have to set TYPE_PRECISION different from its natural value,
@@ -1909,10 +1909,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&& TREE_CODE (gnu_max) == INTEGER_CST
&& TREE_OVERFLOW (gnu_min) && TREE_OVERFLOW (gnu_max)
&& (!TREE_OVERFLOW
- (fold (build2 (MINUS_EXPR, gnu_index_subtype,
- TYPE_MAX_VALUE (gnu_index_subtype),
- TYPE_MIN_VALUE (gnu_index_subtype))))))
- TREE_OVERFLOW (gnu_min) = TREE_OVERFLOW (gnu_max) = 0;
+ (fold_build2 (MINUS_EXPR, gnu_index_subtype,
+ TYPE_MAX_VALUE (gnu_index_subtype),
+ TYPE_MIN_VALUE (gnu_index_subtype)))))
+ {
+ TREE_OVERFLOW (gnu_min) = 0;
+ TREE_OVERFLOW (gnu_max) = 0;
+ }
/* Similarly, if the range is null, use bounds of 1..0 for
the sizetype bounds. */
@@ -5890,7 +5893,7 @@ annotate_value (tree gnu_size)
if (!annotate_value_cache)
annotate_value_cache = htab_create_ggc (512, tree_int_map_hash,
tree_int_map_eq, 0);
- in.from = gnu_size;
+ in.base.from = gnu_size;
h = (struct tree_int_map **)
htab_find_slot (annotate_value_cache, &in, INSERT);
@@ -6016,7 +6019,7 @@ annotate_value (tree gnu_size)
if (h)
{
*h = ggc_alloc (sizeof (struct tree_int_map));
- (*h)->from = gnu_size;
+ (*h)->base.from = gnu_size;
(*h)->to = ret;
}
diff --git a/gcc/ada/gnat-style.texi b/gcc/ada/gnat-style.texi
index 701897432d0..61fc713c8ab 100644
--- a/gcc/ada/gnat-style.texi
+++ b/gcc/ada/gnat-style.texi
@@ -27,6 +27,7 @@
@settitle GNAT Coding Style
@setchapternewpage odd
+@include gcc-common.texi
@dircategory Software development
@direntry
@@ -39,16 +40,12 @@
@c %**end of header
@titlepage
-@sp 10
-@title GNAT Coding Style
-@flushright
-@titlefont{A Guide for GNAT Developers}
-@end flushright
-@sp 2
+@titlefont{GNAT Coding Style:}
+@sp 1
+@title @hfill A Guide for GNAT Developers
@subtitle GNAT, The GNU Ada 95 Compiler
-
+@versionsubtitle
@author Ada Core Technologies, Inc.
-
@page
@vskip 0pt plus 1filll
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index fad7e14652e..8c5f79f5bfc 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -43,12 +43,10 @@ entitled ``GNU Free Documentation License''.
@end copying
@titlepage
-
@title GNAT Reference Manual
@subtitle GNAT, The GNU Ada 95 Compiler
-@subtitle GCC version @value{version-GCC}
-@author AdaCore
-
+@versionsubtitle
+@author Ada Core Technologies, Inc.
@page
@vskip 0pt plus 1filll
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index 214369a37bd..1f49987383a 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -125,23 +125,16 @@ A copy of the license is included in the section entitled
@end copying
@titlepage
-
@title @value{EDITION} User's Guide
-
@ifset vms
@sp 1
@flushright
@titlefont{@i{@value{PLATFORM}}}
@end flushright
@end ifset
-
-@sp 2
-
@subtitle GNAT, The GNU Ada 95 Compiler
-@subtitle GCC version @value{version-GCC}
-
-@author AdaCore
-
+@versionsubtitle
+@author Ada Core Technologies, Inc.
@page
@vskip 0pt plus 1filll
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c
index 67880122503..965382278b8 100644
--- a/gcc/ada/trans.c
+++ b/gcc/ada/trans.c
@@ -782,8 +782,8 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
if (attribute == Attr_Max_Size_In_Storage_Elements)
gnu_result = convert (sizetype,
- fold (build2 (CEIL_DIV_EXPR, bitsizetype,
- gnu_result, bitsize_unit_node)));
+ fold_build2 (CEIL_DIV_EXPR, bitsizetype,
+ gnu_result, bitsize_unit_node));
break;
case Attr_Alignment:
@@ -1100,8 +1100,8 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
example in AARM 11.6(5.e). */
if (prefix_unused && TREE_SIDE_EFFECTS (gnu_prefix)
&& !Is_Entity_Name (Prefix (gnat_node)))
- gnu_result = fold (build2 (COMPOUND_EXPR, TREE_TYPE (gnu_result),
- gnu_prefix, gnu_result));
+ gnu_result = fold_build2 (COMPOUND_EXPR, TREE_TYPE (gnu_result),
+ gnu_prefix, gnu_result);
*gnu_result_type_p = gnu_result_type;
return gnu_result;
@@ -3079,13 +3079,13 @@ gnat_to_gnu (Node_Id gnat_node)
expression if the slice range is not null (max >= min) or
returns the min if the slice range is null */
gnu_expr
- = fold (build3 (COND_EXPR, gnu_expr_type,
- build_binary_op (GE_EXPR, gnu_expr_type,
- convert (gnu_expr_type,
- gnu_max_expr),
- convert (gnu_expr_type,
- gnu_min_expr)),
- gnu_expr, gnu_min_expr));
+ = fold_build3 (COND_EXPR, gnu_expr_type,
+ build_binary_op (GE_EXPR, gnu_expr_type,
+ convert (gnu_expr_type,
+ gnu_max_expr),
+ convert (gnu_expr_type,
+ gnu_min_expr)),
+ gnu_expr, gnu_min_expr);
}
else
gnu_expr = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
@@ -5403,10 +5403,10 @@ emit_check (tree gnu_cond, tree gnu_expr, int reason)
in front of the comparison in case it ends up being a SAVE_EXPR. Put the
whole thing inside its own SAVE_EXPR so the inner SAVE_EXPR doesn't leak
out. */
- gnu_result = fold (build3 (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
- build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr),
- gnu_call, gnu_expr),
- gnu_expr));
+ gnu_result = fold_build3 (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
+ build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr),
+ gnu_call, gnu_expr),
+ gnu_expr);
/* If GNU_EXPR has side effects, make the outer COMPOUND_EXPR and
protect it. Otherwise, show GNU_RESULT has no side effects: we
diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c
index 6dc47de6cb3..42c9a9df23e 100644
--- a/gcc/ada/utils.c
+++ b/gcc/ada/utils.c
@@ -868,10 +868,10 @@ finish_record_type (tree record_type, tree fieldlist, bool has_rep,
case QUAL_UNION_TYPE:
ada_size
- = fold (build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
- this_ada_size, ada_size));
- size = fold (build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
- this_size, size));
+ = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
+ this_ada_size, ada_size);
+ size = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
+ this_size, size);
break;
case RECORD_TYPE:
@@ -1133,15 +1133,15 @@ merge_sizes (tree last_size, tree first_bit, tree size, bool special,
}
else
- new = fold (build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
- integer_zerop (TREE_OPERAND (size, 1))
- ? last_size : merge_sizes (last_size, first_bit,
- TREE_OPERAND (size, 1),
- 1, has_rep),
- integer_zerop (TREE_OPERAND (size, 2))
- ? last_size : merge_sizes (last_size, first_bit,
- TREE_OPERAND (size, 2),
- 1, has_rep)));
+ new = fold_build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
+ integer_zerop (TREE_OPERAND (size, 1))
+ ? last_size : merge_sizes (last_size, first_bit,
+ TREE_OPERAND (size, 1),
+ 1, has_rep),
+ integer_zerop (TREE_OPERAND (size, 2))
+ ? last_size : merge_sizes (last_size, first_bit,
+ TREE_OPERAND (size, 2),
+ 1, has_rep));
/* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
when fed through substitute_in_expr) into thinking that a constant
@@ -2372,9 +2372,9 @@ max_size (tree exp, bool max_p)
return max_size (TREE_OPERAND (exp, 0), max_p);
else
return
- fold (build1 (code, type,
- max_size (TREE_OPERAND (exp, 0),
- code == NEGATE_EXPR ? !max_p : max_p)));
+ fold_build1 (code, type,
+ max_size (TREE_OPERAND (exp, 0),
+ code == NEGATE_EXPR ? !max_p : max_p));
case 2:
if (code == COMPOUND_EXPR)
@@ -2424,16 +2424,16 @@ max_size (tree exp, bool max_p)
&& !TREE_CONSTANT (rhs))
return lhs;
else
- return fold (build2 (code, type, lhs, rhs));
+ return fold_build2 (code, type, lhs, rhs);
}
case 3:
if (code == SAVE_EXPR)
return exp;
else if (code == COND_EXPR)
- return fold (build2 (max_p ? MAX_EXPR : MIN_EXPR, type,
- max_size (TREE_OPERAND (exp, 1), max_p),
- max_size (TREE_OPERAND (exp, 2), max_p)));
+ return fold_build2 (max_p ? MAX_EXPR : MIN_EXPR, type,
+ max_size (TREE_OPERAND (exp, 1), max_p),
+ max_size (TREE_OPERAND (exp, 2), max_p));
}
/* Other tree classes cannot happen. */
@@ -3167,10 +3167,10 @@ convert (tree type, tree expr)
/* If the input is a biased type, adjust first. */
if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
- return convert (type, fold (build2 (PLUS_EXPR, TREE_TYPE (etype),
- fold_convert (TREE_TYPE (etype),
- expr),
- TYPE_MIN_VALUE (etype))));
+ return convert (type, fold_build2 (PLUS_EXPR, TREE_TYPE (etype),
+ fold_convert (TREE_TYPE (etype),
+ expr),
+ TYPE_MIN_VALUE (etype)));
/* If the input is a justified modular type, we need to extract the actual
object before converting it to any other type with the exceptions of an
@@ -3321,7 +3321,7 @@ convert (tree type, tree expr)
switch (code)
{
case VOID_TYPE:
- return build1 (CONVERT_EXPR, type, expr);
+ return fold_build1 (CONVERT_EXPR, type, expr);
case BOOLEAN_TYPE:
return fold_convert (type, gnat_truthvalue_conversion (expr));
diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c
index 31b0c6db9fd..8ad4c68c867 100644
--- a/gcc/ada/utils2.c
+++ b/gcc/ada/utils2.c
@@ -87,23 +87,27 @@ gnat_truthvalue_conversion (tree expr)
return expr;
case INTEGER_CST:
- return (integer_zerop (expr) ? convert (type, integer_zero_node)
- : convert (type, integer_one_node));
+ return (integer_zerop (expr)
+ ? build_int_cst (type, 0)
+ : build_int_cst (type, 1));
case REAL_CST:
- return (real_zerop (expr) ? convert (type, integer_zero_node)
- : convert (type, integer_one_node));
+ return (real_zerop (expr)
+ ? fold_convert (type, integer_zero_node)
+ : fold_convert (type, integer_one_node));
case COND_EXPR:
/* Distribute the conversion into the arms of a COND_EXPR. */
- return fold
- (build3 (COND_EXPR, type, TREE_OPERAND (expr, 0),
- gnat_truthvalue_conversion (TREE_OPERAND (expr, 1)),
- gnat_truthvalue_conversion (TREE_OPERAND (expr, 2))));
+ {
+ tree arg1 = gnat_truthvalue_conversion (TREE_OPERAND (expr, 1));
+ tree arg2 = gnat_truthvalue_conversion (TREE_OPERAND (expr, 2));
+ return fold_build3 (COND_EXPR, type, TREE_OPERAND (expr, 0),
+ arg1, arg2);
+ }
default:
return build_binary_op (NE_EXPR, type, expr,
- convert (type, integer_zero_node));
+ fold_convert (type, integer_zero_node));
}
}
@@ -351,8 +355,8 @@ compare_arrays (tree result_type, tree a1, tree a2)
tree lb2 = TYPE_MIN_VALUE (TYPE_DOMAIN (t2));
tree ub2 = TYPE_MAX_VALUE (TYPE_DOMAIN (t2));
tree bt = get_base_type (TREE_TYPE (lb1));
- tree length1 = fold (build2 (MINUS_EXPR, bt, ub1, lb1));
- tree length2 = fold (build2 (MINUS_EXPR, bt, ub2, lb2));
+ tree length1 = fold_build2 (MINUS_EXPR, bt, ub1, lb1);
+ tree length2 = fold_build2 (MINUS_EXPR, bt, ub2, lb2);
tree nbt;
tree tem;
tree comparison, this_a1_is_null, this_a2_is_null;
@@ -361,8 +365,8 @@ compare_arrays (tree result_type, tree a1, tree a2)
unless the length of the second array is the constant zero.
Note that we have set the `length' values to the length - 1. */
if (TREE_CODE (length1) == INTEGER_CST
- && !integer_zerop (fold (build2 (PLUS_EXPR, bt, length2,
- convert (bt, integer_one_node)))))
+ && !integer_zerop (fold_build2 (PLUS_EXPR, bt, length2,
+ convert (bt, integer_one_node))))
{
tem = a1, a1 = a2, a2 = tem;
tem = t1, t1 = t2, t2 = tem;
@@ -375,8 +379,8 @@ compare_arrays (tree result_type, tree a1, tree a2)
/* If the length of this dimension in the second array is the constant
zero, we can just go inside the original bounds for the first
array and see if last < first. */
- if (integer_zerop (fold (build2 (PLUS_EXPR, bt, length2,
- convert (bt, integer_one_node)))))
+ if (integer_zerop (fold_build2 (PLUS_EXPR, bt, length2,
+ convert (bt, integer_one_node))))
{
tree ub = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
tree lb = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (t1)));
@@ -455,7 +459,7 @@ compare_arrays (tree result_type, tree a1, tree a2)
a1 = convert (type, a1), a2 = convert (type, a2);
result = build_binary_op (TRUTH_ANDIF_EXPR, result_type, result,
- fold (build2 (EQ_EXPR, result_type, a1, a2)));
+ fold_build2 (EQ_EXPR, result_type, a1, a2));
}
@@ -496,7 +500,10 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
/* If this is an addition of a constant, convert it to a subtraction
of a constant since we can do that faster. */
if (op_code == PLUS_EXPR && TREE_CODE (rhs) == INTEGER_CST)
- rhs = fold (build2 (MINUS_EXPR, type, modulus, rhs)), op_code = MINUS_EXPR;
+ {
+ rhs = fold_build2 (MINUS_EXPR, type, modulus, rhs);
+ op_code = MINUS_EXPR;
+ }
/* For the logical operations, we only need PRECISION bits. For
addition and subtraction, we need one more and for multiplication we
@@ -528,7 +535,7 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
}
/* Do the operation, then we'll fix it up. */
- result = fold (build2 (op_code, op_type, lhs, rhs));
+ result = fold_build2 (op_code, op_type, lhs, rhs);
/* For multiplication, we have no choice but to do a full modulus
operation. However, we want to do this in the narrowest
@@ -540,32 +547,31 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
SET_TYPE_MODULUS (div_type, modulus);
TYPE_MODULAR_P (div_type) = 1;
result = convert (op_type,
- fold (build2 (TRUNC_MOD_EXPR, div_type,
- convert (div_type, result), modulus)));
+ fold_build2 (TRUNC_MOD_EXPR, div_type,
+ convert (div_type, result), modulus));
}
/* For subtraction, add the modulus back if we are negative. */
else if (op_code == MINUS_EXPR)
{
result = save_expr (result);
- result = fold (build3 (COND_EXPR, op_type,
- build2 (LT_EXPR, integer_type_node, result,
- convert (op_type, integer_zero_node)),
- fold (build2 (PLUS_EXPR, op_type,
- result, modulus)),
- result));
+ result = fold_build3 (COND_EXPR, op_type,
+ fold_build2 (LT_EXPR, integer_type_node, result,
+ convert (op_type, integer_zero_node)),
+ fold_build2 (PLUS_EXPR, op_type, result, modulus),
+ result);
}
/* For the other operations, subtract the modulus if we are >= it. */
else
{
result = save_expr (result);
- result = fold (build3 (COND_EXPR, op_type,
- build2 (GE_EXPR, integer_type_node,
- result, modulus),
- fold (build2 (MINUS_EXPR, op_type,
- result, modulus)),
- result));
+ result = fold_build3 (COND_EXPR, op_type,
+ fold_build2 (GE_EXPR, integer_type_node,
+ result, modulus),
+ fold_build2 (MINUS_EXPR, op_type,
+ result, modulus),
+ result);
}
return convert (type, result);
@@ -955,11 +961,11 @@ build_binary_op (enum tree_code op_code, tree result_type,
else if (TREE_CODE (right_operand) == NULL_EXPR)
return build1 (NULL_EXPR, operation_type, TREE_OPERAND (right_operand, 0));
else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
- result = fold (build4 (op_code, operation_type, left_operand,
- right_operand, NULL_TREE, NULL_TREE));
+ result = build4 (op_code, operation_type, left_operand,
+ right_operand, NULL_TREE, NULL_TREE);
else
result
- = fold (build2 (op_code, operation_type, left_operand, right_operand));
+ = fold_build2 (op_code, operation_type, left_operand, right_operand);
TREE_SIDE_EFFECTS (result) |= has_side_effects;
TREE_CONSTANT (result)
@@ -973,8 +979,8 @@ build_binary_op (enum tree_code op_code, tree result_type,
/* If we are working with modular types, perform the MOD operation
if something above hasn't eliminated the need for it. */
if (modulus)
- result = fold (build2 (FLOOR_MOD_EXPR, operation_type, result,
- convert (operation_type, modulus)));
+ result = fold_build2 (FLOOR_MOD_EXPR, operation_type, result,
+ convert (operation_type, modulus));
if (result_type && result_type != operation_type)
result = convert (result_type, result);
@@ -1012,7 +1018,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
else
gcc_assert (result_type == TREE_TYPE (type));
- result = fold (build1 (op_code, operation_type, operand));
+ result = fold_build1 (op_code, operation_type, operand);
break;
case TRUTH_NOT_EXPR:
@@ -1160,7 +1166,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
operation_type = build_pointer_type (type);
gnat_mark_addressable (operand);
- result = fold (build1 (ADDR_EXPR, operation_type, operand));
+ result = fold_build1 (ADDR_EXPR, operation_type, operand);
}
TREE_CONSTANT (result) = staticp (operand) || TREE_CONSTANT (operand);
@@ -1192,7 +1198,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
else
{
- result = fold (build1 (op_code, TREE_TYPE (type), operand));
+ result = fold_build1 (op_code, TREE_TYPE (type), operand);
TREE_READONLY (result) = TYPE_READONLY (TREE_TYPE (type));
}
@@ -1222,10 +1228,10 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
the straightforward code; the TRUNC_MOD_EXPR below
is an AND operation. */
if (op_code == NEGATE_EXPR && mod_pow2)
- result = fold (build2 (TRUNC_MOD_EXPR, operation_type,
- fold (build1 (NEGATE_EXPR, operation_type,
- operand)),
- modulus));
+ result = fold_build2 (TRUNC_MOD_EXPR, operation_type,
+ fold_build1 (NEGATE_EXPR, operation_type,
+ operand),
+ modulus);
/* For nonbinary negate case, return zero for zero operand,
else return the modulus minus the operand. If the modulus
@@ -1233,24 +1239,24 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
as an XOR since it is equivalent and faster on most machines. */
else if (op_code == NEGATE_EXPR && !mod_pow2)
{
- if (integer_pow2p (fold (build2 (PLUS_EXPR, operation_type,
- modulus,
- convert (operation_type,
- integer_one_node)))))
- result = fold (build2 (BIT_XOR_EXPR, operation_type,
- operand, modulus));
+ if (integer_pow2p (fold_build2 (PLUS_EXPR, operation_type,
+ modulus,
+ convert (operation_type,
+ integer_one_node))))
+ result = fold_build2 (BIT_XOR_EXPR, operation_type,
+ operand, modulus);
else
- result = fold (build2 (MINUS_EXPR, operation_type,
- modulus, operand));
-
- result = fold (build3 (COND_EXPR, operation_type,
- fold (build2 (NE_EXPR,
- integer_type_node,
- operand,
- convert
+ result = fold_build2 (MINUS_EXPR, operation_type,
+ modulus, operand);
+
+ result = fold_build3 (COND_EXPR, operation_type,
+ fold_build2 (NE_EXPR,
+ integer_type_node,
+ operand,
+ convert
(operation_type,
- integer_zero_node))),
- result, operand));
+ integer_zero_node)),
+ result, operand);
}
else
{
@@ -1259,16 +1265,16 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
XOR against the constant and subtract the operand from
that constant for nonbinary modulus. */
- tree cnst = fold (build2 (MINUS_EXPR, operation_type, modulus,
- convert (operation_type,
- integer_one_node)));
+ tree cnst = fold_build2 (MINUS_EXPR, operation_type, modulus,
+ convert (operation_type,
+ integer_one_node));
if (mod_pow2)
- result = fold (build2 (BIT_XOR_EXPR, operation_type,
- operand, cnst));
+ result = fold_build2 (BIT_XOR_EXPR, operation_type,
+ operand, cnst);
else
- result = fold (build2 (MINUS_EXPR, operation_type,
- cnst, operand));
+ result = fold_build2 (MINUS_EXPR, operation_type,
+ cnst, operand);
}
break;
@@ -1279,8 +1285,8 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
default:
gcc_assert (operation_type == base_type);
- result = fold (build1 (op_code, operation_type, convert (operation_type,
- operand)));
+ result = fold_build1 (op_code, operation_type,
+ convert (operation_type, operand));
}
if (side_effects)
@@ -1322,8 +1328,8 @@ build_cond_expr (tree result_type, tree condition_operand,
false_operand = build_unary_op (ADDR_EXPR, result_type, false_operand);
}
- result = fold (build3 (COND_EXPR, result_type, condition_operand,
- true_operand, false_operand));
+ result = fold_build3 (COND_EXPR, result_type, condition_operand,
+ true_operand, false_operand);
/* If either operand is a SAVE_EXPR (possibly surrounded by
arithmetic, make sure it gets done. */
diff --git a/gcc/builtins.c b/gcc/builtins.c
index e1c2deef647..676b9caba66 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -9017,6 +9017,142 @@ fold_builtin_carg (tree arg, tree type)
return NULL_TREE;
}
+/* Fold a call to builtin logb/ilogb. */
+
+static tree
+fold_builtin_logb (tree arg, tree rettype)
+{
+ if (! validate_arg (arg, REAL_TYPE))
+ return NULL_TREE;
+
+ STRIP_NOPS (arg);
+
+ if (TREE_CODE (arg) == REAL_CST && ! TREE_OVERFLOW (arg))
+ {
+ const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg);
+
+ switch (value->cl)
+ {
+ case rvc_nan:
+ case rvc_inf:
+ /* If arg is Inf or NaN and we're logb, return it. */
+ if (TREE_CODE (rettype) == REAL_TYPE)
+ return fold_convert (rettype, arg);
+ /* Fall through... */
+ case rvc_zero:
+ /* Zero may set errno and/or raise an exception for logb, also
+ for ilogb we don't know FP_ILOGB0. */
+ return NULL_TREE;
+ case rvc_normal:
+ /* For normal numbers, proceed iff radix == 2. In GCC,
+ normalized significands are in the range [0.5, 1.0). We
+ want the exponent as if they were [1.0, 2.0) so get the
+ exponent and subtract 1. */
+ if (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (arg)))->b == 2)
+ return fold_convert (rettype, build_int_cst (NULL_TREE,
+ REAL_EXP (value)-1));
+ break;
+ }
+ }
+
+ return NULL_TREE;
+}
+
+/* Fold a call to builtin significand, if radix == 2. */
+
+static tree
+fold_builtin_significand (tree arg, tree rettype)
+{
+ if (! validate_arg (arg, REAL_TYPE))
+ return NULL_TREE;
+
+ STRIP_NOPS (arg);
+
+ if (TREE_CODE (arg) == REAL_CST && ! TREE_OVERFLOW (arg))
+ {
+ const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg);
+
+ switch (value->cl)
+ {
+ case rvc_zero:
+ case rvc_nan:
+ case rvc_inf:
+ /* If arg is +-0, +-Inf or +-NaN, then return it. */
+ return fold_convert (rettype, arg);
+ case rvc_normal:
+ /* For normal numbers, proceed iff radix == 2. */
+ if (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (arg)))->b == 2)
+ {
+ REAL_VALUE_TYPE result = *value;
+ /* In GCC, normalized significands are in the range [0.5,
+ 1.0). We want them to be [1.0, 2.0) so set the
+ exponent to 1. */
+ SET_REAL_EXP (&result, 1);
+ return build_real (rettype, result);
+ }
+ break;
+ }
+ }
+
+ return NULL_TREE;
+}
+
+/* Fold a call to builtin frexp, we can assume the base is 2. */
+
+static tree
+fold_builtin_frexp (tree arg0, tree arg1, tree rettype)
+{
+ if (! validate_arg (arg0, REAL_TYPE) || ! validate_arg (arg1, POINTER_TYPE))
+ return NULL_TREE;
+
+ STRIP_NOPS (arg0);
+
+ if (!(TREE_CODE (arg0) == REAL_CST && ! TREE_OVERFLOW (arg0)))
+ return NULL_TREE;
+
+ arg1 = build_fold_indirect_ref (arg1);
+
+ /* Proceed if a valid pointer type was passed in. */
+ if (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)) == integer_type_node)
+ {
+ const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg0);
+ tree frac, exp;
+
+ switch (value->cl)
+ {
+ case rvc_zero:
+ /* For +-0, return (*exp = 0, +-0). */
+ exp = integer_zero_node;
+ frac = arg0;
+ break;
+ case rvc_nan:
+ case rvc_inf:
+ /* For +-NaN or +-Inf, *exp is unspecified, return arg0. */
+ return omit_one_operand (rettype, arg0, arg1);
+ case rvc_normal:
+ {
+ /* Since the frexp function always expects base 2, and in
+ GCC normalized significands are already in the range
+ [0.5, 1.0), we have exactly what frexp wants. */
+ REAL_VALUE_TYPE frac_rvt = *value;
+ SET_REAL_EXP (&frac_rvt, 0);
+ frac = build_real (rettype, frac_rvt);
+ exp = build_int_cst (NULL_TREE, REAL_EXP (value));
+ }
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ /* Create the COMPOUND_EXPR (*arg1 = trunc, frac). */
+ arg1 = fold_build2 (MODIFY_EXPR, rettype, arg1, exp);
+ TREE_SIDE_EFFECTS (arg1) = 1;
+ return fold_build2 (COMPOUND_EXPR, rettype, arg1, frac);
+ }
+
+ return NULL_TREE;
+}
+
/* Fold a call to builtin ldexp or scalbn/scalbln. If LDEXP is true
then we can assume the base is two. If it's false, then we have to
check the mode of the TYPE parameter in certain cases. */
@@ -9078,6 +9214,62 @@ fold_builtin_load_exponent (tree arg0, tree arg1, tree type, bool ldexp)
return NULL_TREE;
}
+/* Fold a call to builtin modf. */
+
+static tree
+fold_builtin_modf (tree arg0, tree arg1, tree rettype)
+{
+ if (! validate_arg (arg0, REAL_TYPE) || ! validate_arg (arg1, POINTER_TYPE))
+ return NULL_TREE;
+
+ STRIP_NOPS (arg0);
+
+ if (!(TREE_CODE (arg0) == REAL_CST && ! TREE_OVERFLOW (arg0)))
+ return NULL_TREE;
+
+ arg1 = build_fold_indirect_ref (arg1);
+
+ /* Proceed if a valid pointer type was passed in. */
+ if (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)) == TYPE_MAIN_VARIANT (rettype))
+ {
+ const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg0);
+ REAL_VALUE_TYPE trunc, frac;
+
+ switch (value->cl)
+ {
+ case rvc_nan:
+ case rvc_zero:
+ /* For +-NaN or +-0, return (*arg1 = arg0, arg0). */
+ trunc = frac = *value;
+ break;
+ case rvc_inf:
+ /* For +-Inf, return (*arg1 = arg0, +-0). */
+ frac = dconst0;
+ frac.sign = value->sign;
+ trunc = *value;
+ break;
+ case rvc_normal:
+ /* Return (*arg1 = trunc(arg0), arg0-trunc(arg0)). */
+ real_trunc (&trunc, VOIDmode, value);
+ real_arithmetic (&frac, MINUS_EXPR, value, &trunc);
+ /* If the original number was negative and already
+ integral, then the fractional part is -0.0. */
+ if (value->sign && frac.cl == rvc_zero)
+ frac.sign = value->sign;
+ break;
+ }
+
+ /* Create the COMPOUND_EXPR (*arg1 = trunc, frac). */
+ arg1 = fold_build2 (MODIFY_EXPR, rettype, arg1,
+ build_real (rettype, trunc));
+ TREE_SIDE_EFFECTS (arg1) = 1;
+ return fold_build2 (COMPOUND_EXPR, rettype, arg1,
+ build_real (rettype, frac));
+ }
+
+ return NULL_TREE;
+}
+
/* Fold a call to __builtin_isnan(), __builtin_isinf, __builtin_finite.
ARG is the argument for the call. */
@@ -9470,6 +9662,13 @@ fold_builtin_1 (tree fndecl, tree arg0, bool ignore)
CASE_FLT_FN (BUILT_IN_SIGNBIT):
return fold_builtin_signbit (arg0, type);
+ CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
+ return fold_builtin_significand (arg0, type);
+
+ CASE_FLT_FN (BUILT_IN_ILOGB):
+ CASE_FLT_FN (BUILT_IN_LOGB):
+ return fold_builtin_logb (arg0, type);
+
case BUILT_IN_ISASCII:
return fold_builtin_isascii (arg0);
@@ -9544,6 +9743,12 @@ fold_builtin_2 (tree fndecl, tree arg0, tree arg1, bool ignore)
CASE_FLT_FN (BUILT_IN_SCALBLN):
return fold_builtin_load_exponent (arg0, arg1, type, /*ldexp=*/false);
+ CASE_FLT_FN (BUILT_IN_FREXP):
+ return fold_builtin_frexp (arg0, arg1, type);
+
+ CASE_FLT_FN (BUILT_IN_MODF):
+ return fold_builtin_modf (arg0, arg1, type);
+
case BUILT_IN_BZERO:
return fold_builtin_bzero (arg0, arg1, ignore);
@@ -9919,56 +10124,13 @@ build_function_call_expr (tree fndecl, tree arglist)
{
tree fntype = TREE_TYPE (fndecl);
tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
- return fold_builtin_call_list (TREE_TYPE (fntype), fn, arglist);
-}
-
-/* Construct a CALL_EXPR with type TYPE with FN as the function expression.
- ARGLIST is a TREE_LIST of arguments. */
-
-tree
-fold_builtin_call_list (tree type, tree fn, tree arglist)
-{
- tree ret = NULL_TREE;
- if (TREE_CODE (fn) == ADDR_EXPR)
- {
- tree fndecl = TREE_OPERAND (fn, 0);
- if (TREE_CODE (fndecl) == FUNCTION_DECL
- && DECL_BUILT_IN (fndecl))
- {
- /* FIXME: Don't use a list in this interface. */
- if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
- {
- ret = targetm.fold_builtin (fndecl, arglist, false);
- if (ret)
- return ret;
- }
- else
- {
- tree tail = arglist;
- tree args[MAX_ARGS_TO_FOLD_BUILTIN];
- int nargs;
- tree exp;
-
- for (nargs = 0; nargs < MAX_ARGS_TO_FOLD_BUILTIN; nargs++)
- {
- if (!tail)
- break;
- args[nargs] = TREE_VALUE (tail);
- tail = TREE_CHAIN (tail);
- }
- if (nargs <= MAX_ARGS_TO_FOLD_BUILTIN)
- {
- ret = fold_builtin_n (fndecl, args, nargs, false);
- if (ret)
- return ret;
- }
- exp = build_call_list (type, fn, arglist);
- ret = fold_builtin_varargs (fndecl, exp, false);
- return ret ? ret : exp;
- }
- }
- }
- return build_call_list (type, fn, arglist);
+ int n = list_length (arglist);
+ tree *argarray = (tree *) alloca (n * sizeof (tree));
+ int i;
+
+ for (i = 0; i < n; i++, arglist = TREE_CHAIN (arglist))
+ argarray[i] = TREE_VALUE (arglist);
+ return fold_builtin_call_array (TREE_TYPE (fntype), fn, n, argarray);
}
/* Conveniently construct a function call expression. FNDECL names the
@@ -9979,24 +10141,26 @@ tree
build_call_expr (tree fndecl, int n, ...)
{
va_list ap;
- tree ret;
tree fntype = TREE_TYPE (fndecl);
tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
+ tree *argarray = (tree *) alloca (n * sizeof (tree));
+ int i;
va_start (ap, n);
- ret = fold_builtin_call_valist (TREE_TYPE (fntype), fn, n, ap);
+ for (i = 0; i < n; i++)
+ argarray[i] = va_arg (ap, tree);
va_end (ap);
- return ret;
+ return fold_builtin_call_array (TREE_TYPE (fntype), fn, n, argarray);
}
/* Construct a CALL_EXPR with type TYPE with FN as the function expression.
- N arguments are passed in the va_list AP. */
+ N arguments are passed in the array ARGARRAY. */
tree
-fold_builtin_call_valist (tree type,
- tree fn,
- int n,
- va_list ap)
+fold_builtin_call_array (tree type,
+ tree fn,
+ int n,
+ tree *argarray)
{
tree ret = NULL_TREE;
int i;
@@ -10011,15 +10175,8 @@ fold_builtin_call_valist (tree type,
if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
{
tree arglist = NULL_TREE;
- va_list ap0;
- va_copy (ap0, ap);
- for (i = 0; i < n; i++)
- {
- tree arg = va_arg (ap0, tree);
- arglist = tree_cons (NULL_TREE, arg, arglist);
- }
- va_end (ap0);
- arglist = nreverse (arglist);
+ for (i = n - 1; i >= 0; i--)
+ arglist = tree_cons (NULL_TREE, argarray[i], arglist);
ret = targetm.fold_builtin (fndecl, arglist, false);
if (ret)
return ret;
@@ -10028,25 +10185,19 @@ fold_builtin_call_valist (tree type,
{
/* First try the transformations that don't require consing up
an exp. */
- tree args[MAX_ARGS_TO_FOLD_BUILTIN];
- va_list ap0;
- va_copy (ap0, ap);
- for (i = 0; i < n; i++)
- args[i] = va_arg (ap0, tree);
- va_end (ap0);
- ret = fold_builtin_n (fndecl, args, n, false);
+ ret = fold_builtin_n (fndecl, argarray, n, false);
if (ret)
return ret;
}
/* If we got this far, we need to build an exp. */
- exp = build_call_valist (type, fn, n, ap);
+ exp = build_call_array (type, fn, n, argarray);
ret = fold_builtin_varargs (fndecl, exp, false);
return ret ? ret : exp;
}
}
- return build_call_valist (type, fn, n, ap);
+ return build_call_array (type, fn, n, argarray);
}
/* Construct a new CALL_EXPR using the tail of the argument list of EXP
diff --git a/gcc/builtins.def b/gcc/builtins.def
index 48c97bf912e..ebcbe11fa23 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -150,13 +150,13 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
ATTR_NOTHROW_LIST : ATTR_CONST_NOTHROW_LIST)
/* Define an attribute list for math functions that are normally
- "pure" but if flag_unsafe_math_optimizations is set they are
- instead "const". This distinction accounts for the fact that some
- math functions check the rounding mode which is akin to examining
- global memory. In "unsafe" mode we can be less careful. */
+ "const" but if flag_rounding_math is set they are instead "pure".
+ This distinction accounts for the fact that some math functions
+ check the rounding mode which is akin to examining global
+ memory. */
#undef ATTR_MATHFN_FPROUNDING
-#define ATTR_MATHFN_FPROUNDING (flag_unsafe_math_optimizations ? \
- ATTR_CONST_NOTHROW_LIST : ATTR_PURE_NOTHROW_NOVOPS_LIST)
+#define ATTR_MATHFN_FPROUNDING (flag_rounding_math ? \
+ ATTR_PURE_NOTHROW_NOVOPS_LIST : ATTR_CONST_NOTHROW_LIST)
/* Define an attribute list for math functions that are normally
"impure" because some of them may write into global memory for
@@ -282,24 +282,24 @@ DEF_EXT_LIB_BUILTIN (BUILT_IN_J1L, "j1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_M
DEF_EXT_LIB_BUILTIN (BUILT_IN_JN, "jn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_EXT_LIB_BUILTIN (BUILT_IN_JNF, "jnf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_EXT_LIB_BUILTIN (BUILT_IN_JNL, "jnl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
DEF_LIB_BUILTIN (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
-DEF_GCC_BUILTIN (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
DEF_C99_BUILTIN (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_BUILTIN (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
DEF_C99_BUILTIN (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
-DEF_GCC_BUILTIN (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING)
-DEF_GCC_BUILTIN (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
DEF_C99_BUILTIN (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 51fd22672cf..36b87eba206 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -48,6 +48,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "opts.h"
#include "real.h"
#include "cgraph.h"
+#include "target-def.h"
cpp_reader *parse_in; /* Declared in c-pragma.h. */
@@ -510,6 +511,8 @@ static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
static tree handle_common_attribute (tree *, tree, tree, int, bool *);
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
+static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
+static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
static tree handle_always_inline_attribute (tree *, tree, tree, int,
bool *);
@@ -554,7 +557,7 @@ static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
bool *);
static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
-static void check_function_nonnull (tree, tree);
+static void check_function_nonnull (tree, int, tree *);
static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
@@ -598,9 +601,9 @@ const struct attribute_spec c_common_attribute_table[] =
handle_const_attribute },
{ "transparent_union", 0, 0, false, false, false,
handle_transparent_union_attribute },
- { "constructor", 0, 0, true, false, false,
+ { "constructor", 0, 1, true, false, false,
handle_constructor_attribute },
- { "destructor", 0, 0, true, false, false,
+ { "destructor", 0, 1, true, false, false,
handle_destructor_attribute },
{ "mode", 1, 1, false, true, false,
handle_mode_attribute },
@@ -647,6 +650,10 @@ const struct attribute_spec c_common_attribute_table[] =
handle_warn_unused_result_attribute },
{ "sentinel", 0, 1, false, true, true,
handle_sentinel_attribute },
+ { "cold", 0, 0, true, false, false,
+ handle_cold_attribute },
+ { "hot", 0, 0, true, false, false,
+ handle_hot_attribute },
{ NULL, 0, 0, false, false, false, NULL }
};
@@ -663,6 +670,11 @@ const struct attribute_spec c_common_format_attribute_table[] =
{ NULL, 0, 0, false, false, false, NULL }
};
+/* Functions called automatically at the beginning and end of execution. */
+
+tree static_ctors;
+tree static_dtors;
+
/* Push current bindings for the function name VAR_DECLS. */
void
@@ -966,6 +978,42 @@ overflow_warning (tree value)
}
}
+
+/* Warn about use of a logical || / && operator being used in a
+ context where it is likely that the bitwise equivalent was intended
+ by the programmer. CODE is the TREE_CODE of the operator, ARG1
+ and ARG2 the arguments. */
+
+void
+warn_logical_operator (enum tree_code code, tree arg1, tree
+ arg2)
+{
+ switch (code)
+ {
+ case TRUTH_ANDIF_EXPR:
+ case TRUTH_ORIF_EXPR:
+ case TRUTH_OR_EXPR:
+ case TRUTH_AND_EXPR:
+ if (!TREE_NO_WARNING (arg1)
+ && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
+ && !CONSTANT_CLASS_P (arg1)
+ && TREE_CODE (arg2) == INTEGER_CST
+ && !integer_zerop (arg2))
+ {
+ warning (OPT_Wlogical_op,
+ "logical %<%s%> with non-zero constant "
+ "will always evaluate as true",
+ ((code == TRUTH_ANDIF_EXPR)
+ || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
+ TREE_NO_WARNING (arg1) = true;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+
/* Print a warning about casts that might indicate violation
of strict aliasing rules if -Wstrict-aliasing is used and
strict aliasing mode is in effect. OTYPE is the original
@@ -1008,26 +1056,23 @@ strict_aliasing_warning (tree otype, tree type, tree expr)
block. */
void
-empty_body_warning (tree inner_then, tree inner_else)
+empty_if_body_warning (tree inner_then, tree inner_else)
{
- if (warn_empty_body)
- {
- if (TREE_CODE (inner_then) == STATEMENT_LIST
- && STATEMENT_LIST_TAIL (inner_then))
- inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
+ if (TREE_CODE (inner_then) == STATEMENT_LIST
+ && STATEMENT_LIST_TAIL (inner_then))
+ inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
- if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
- && STATEMENT_LIST_TAIL (inner_else))
- inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
+ if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
+ && STATEMENT_LIST_TAIL (inner_else))
+ inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
- if (IS_EMPTY_STMT (inner_then) && !inner_else)
- warning (OPT_Wempty_body, "%Hempty body in an if-statement",
- EXPR_LOCUS (inner_then));
+ if (IS_EMPTY_STMT (inner_then) && !inner_else)
+ warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
+ "in an %<if%> statement", EXPR_LOCUS (inner_then));
- if (inner_else && IS_EMPTY_STMT (inner_else))
- warning (OPT_Wempty_body, "%Hempty body in an else-statement",
- EXPR_LOCUS (inner_else));
- }
+ else if (inner_else && IS_EMPTY_STMT (inner_else))
+ warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
+ "in an %<else%> statement", EXPR_LOCUS (inner_else));
}
/* Warn for unlikely, improbable, or stupid DECL declarations
@@ -1245,10 +1290,9 @@ convert_and_check (tree type, tree expr)
result = convert (type, expr);
- if (skip_evaluation)
+ if (skip_evaluation || TREE_OVERFLOW_P (expr))
return result;
-
if (TREE_CODE (expr) == INTEGER_CST
&& (TREE_CODE (type) == INTEGER_TYPE
|| TREE_CODE (type) == ENUMERAL_TYPE)
@@ -1269,21 +1313,19 @@ convert_and_check (tree type, tree expr)
else if (warn_conversion)
conversion_warning (type, expr);
}
- else
- {
- if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
- warning (OPT_Woverflow,
- "overflow in implicit constant conversion");
- /* No warning for converting 0x80000000 to int. */
- else if (pedantic
- && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
- || TYPE_PRECISION (TREE_TYPE (expr))
- != TYPE_PRECISION (type)))
- warning (OPT_Woverflow,
- "overflow in implicit constant conversion");
- else if (warn_conversion)
- conversion_warning (type, expr);
- }
+ else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
+ warning (OPT_Woverflow,
+ "overflow in implicit constant conversion");
+ /* No warning for converting 0x80000000 to int. */
+ else if (pedantic
+ && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
+ || TYPE_PRECISION (TREE_TYPE (expr))
+ != TYPE_PRECISION (type)))
+ warning (OPT_Woverflow,
+ "overflow in implicit constant conversion");
+
+ else if (warn_conversion)
+ conversion_warning (type, expr);
}
else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
warning (OPT_Woverflow,
@@ -4220,6 +4262,29 @@ c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
}
}
+
+/* Generate the RTL for the body of FNDECL. */
+
+void
+c_expand_body (tree fndecl)
+{
+
+ if (!DECL_INITIAL (fndecl)
+ || DECL_INITIAL (fndecl) == error_mark_node)
+ return;
+
+ tree_rest_of_compilation (fndecl);
+
+ if (DECL_STATIC_CONSTRUCTOR (fndecl)
+ && targetm.have_ctors_dtors)
+ targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
+ decl_init_priority_lookup (fndecl));
+ if (DECL_STATIC_DESTRUCTOR (fndecl)
+ && targetm.have_ctors_dtors)
+ targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
+ decl_fini_priority_lookup (fndecl));
+}
+
/* Hook used by staticp to handle language-specific tree codes. */
tree
@@ -4406,6 +4471,59 @@ handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
return NULL_TREE;
}
+/* Handle a "hot" and attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags), bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ {
+ if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
+ {
+ warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
+ name, "cold");
+ *no_add_attrs = true;
+ }
+ /* Do nothing else, just set the attribute. We'll get at
+ it later with lookup_attribute. */
+ }
+ else
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+
+ return NULL_TREE;
+}
+/* Handle a "cold" and attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags), bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ {
+ if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
+ {
+ warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
+ name, "hot");
+ *no_add_attrs = true;
+ }
+ /* Do nothing else, just set the attribute. We'll get at
+ it later with lookup_attribute. */
+ }
+ else
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+
+ return NULL_TREE;
+}
+
/* Handle a "noinline" attribute; arguments as in
struct attribute_spec.handler. */
@@ -4655,12 +4773,68 @@ handle_transparent_union_attribute (tree *node, tree name,
return NULL_TREE;
}
+/* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
+ get the requested priority for a constructor or destructor,
+ possibly issuing diagnostics for invalid or reserved
+ priorities. */
+
+static priority_type
+get_priority (tree args, bool is_destructor)
+{
+ HOST_WIDE_INT pri;
+ tree arg;
+
+ if (!args)
+ return DEFAULT_INIT_PRIORITY;
+
+ if (!SUPPORTS_INIT_PRIORITY)
+ {
+ if (is_destructor)
+ error ("destructor priorities are not supported");
+ else
+ error ("constructor priorities are not supported");
+ return DEFAULT_INIT_PRIORITY;
+ }
+
+ arg = TREE_VALUE (args);
+ if (!host_integerp (arg, /*pos=*/0)
+ || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
+ goto invalid;
+
+ pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
+ if (pri < 0 || pri > MAX_INIT_PRIORITY)
+ goto invalid;
+
+ if (pri <= MAX_RESERVED_INIT_PRIORITY)
+ {
+ if (is_destructor)
+ warning (0,
+ "destructor priorities from 0 to %d are reserved "
+ "for the implementation",
+ MAX_RESERVED_INIT_PRIORITY);
+ else
+ warning (0,
+ "constructor priorities from 0 to %d are reserved "
+ "for the implementation",
+ MAX_RESERVED_INIT_PRIORITY);
+ }
+ return pri;
+
+ invalid:
+ if (is_destructor)
+ error ("destructor priorities must be integers from 0 to %d inclusive",
+ MAX_INIT_PRIORITY);
+ else
+ error ("constructor priorities must be integers from 0 to %d inclusive",
+ MAX_INIT_PRIORITY);
+ return DEFAULT_INIT_PRIORITY;
+}
+
/* Handle a "constructor" attribute; arguments as in
struct attribute_spec.handler. */
static tree
-handle_constructor_attribute (tree *node, tree name,
- tree ARG_UNUSED (args),
+handle_constructor_attribute (tree *node, tree name, tree args,
int ARG_UNUSED (flags),
bool *no_add_attrs)
{
@@ -4671,7 +4845,10 @@ handle_constructor_attribute (tree *node, tree name,
&& TREE_CODE (type) == FUNCTION_TYPE
&& decl_function_context (decl) == 0)
{
+ priority_type priority;
DECL_STATIC_CONSTRUCTOR (decl) = 1;
+ priority = get_priority (args, /*is_destructor=*/false);
+ SET_DECL_INIT_PRIORITY (decl, priority);
TREE_USED (decl) = 1;
}
else
@@ -4687,8 +4864,7 @@ handle_constructor_attribute (tree *node, tree name,
struct attribute_spec.handler. */
static tree
-handle_destructor_attribute (tree *node, tree name,
- tree ARG_UNUSED (args),
+handle_destructor_attribute (tree *node, tree name, tree args,
int ARG_UNUSED (flags),
bool *no_add_attrs)
{
@@ -4699,7 +4875,10 @@ handle_destructor_attribute (tree *node, tree name,
&& TREE_CODE (type) == FUNCTION_TYPE
&& decl_function_context (decl) == 0)
{
+ priority_type priority;
DECL_STATIC_DESTRUCTOR (decl) = 1;
+ priority = get_priority (args, /*is_destructor=*/true);
+ SET_DECL_FINI_PRIORITY (decl, priority);
TREE_USED (decl) = 1;
}
else
@@ -5621,13 +5800,15 @@ handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
}
/* Check the argument list of a function call for null in argument slots
- that are marked as requiring a non-null pointer argument. */
+ that are marked as requiring a non-null pointer argument. The NARGS
+ arguments are passed in the array ARGARRAY.
+*/
static void
-check_function_nonnull (tree attrs, tree params)
+check_function_nonnull (tree attrs, int nargs, tree *argarray)
{
- tree a, args, param;
- int param_num;
+ tree a, args;
+ int i;
for (a = attrs; a; a = TREE_CHAIN (a))
{
@@ -5639,85 +5820,65 @@ check_function_nonnull (tree attrs, tree params)
should check for non-null, do it. If the attribute has no args,
then every pointer argument is checked (in which case the check
for pointer type is done in check_nonnull_arg). */
- for (param = params, param_num = 1; ;
- param_num++, param = TREE_CHAIN (param))
+ for (i = 0; i < nargs; i++)
{
- if (!param)
- break;
- if (!args || nonnull_check_p (args, param_num))
+ if (!args || nonnull_check_p (args, i + 1))
check_function_arguments_recurse (check_nonnull_arg, NULL,
- TREE_VALUE (param),
- param_num);
+ argarray[i],
+ i + 1);
}
}
}
}
/* Check that the Nth argument of a function call (counting backwards
- from the end) is a (pointer)0. */
+ from the end) is a (pointer)0. The NARGS arguments are passed in the
+ array ARGARRAY. */
static void
-check_function_sentinel (tree attrs, tree params, tree typelist)
+check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
{
tree attr = lookup_attribute ("sentinel", attrs);
if (attr)
{
- /* Skip over the named arguments. */
- while (typelist && params)
- {
- typelist = TREE_CHAIN (typelist);
- params = TREE_CHAIN (params);
- }
+ int len = 0;
+ int pos = 0;
+ tree sentinel;
- if (typelist || !params)
- warning (OPT_Wformat,
- "not enough variable arguments to fit a sentinel");
- else
+ /* Skip over the named arguments. */
+ while (typelist && len < nargs)
{
- tree sentinel, end;
- unsigned pos = 0;
-
- if (TREE_VALUE (attr))
- {
- tree p = TREE_VALUE (TREE_VALUE (attr));
- pos = TREE_INT_CST_LOW (p);
- }
-
- sentinel = end = params;
-
- /* Advance `end' ahead of `sentinel' by `pos' positions. */
- while (pos > 0 && TREE_CHAIN (end))
- {
- pos--;
- end = TREE_CHAIN (end);
- }
- if (pos > 0)
- {
- warning (OPT_Wformat,
- "not enough variable arguments to fit a sentinel");
- return;
- }
+ typelist = TREE_CHAIN (typelist);
+ len++;
+ }
- /* Now advance both until we find the last parameter. */
- while (TREE_CHAIN (end))
- {
- end = TREE_CHAIN (end);
- sentinel = TREE_CHAIN (sentinel);
- }
+ if (TREE_VALUE (attr))
+ {
+ tree p = TREE_VALUE (TREE_VALUE (attr));
+ pos = TREE_INT_CST_LOW (p);
+ }
- /* Validate the sentinel. */
- if ((!POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (sentinel)))
- || !integer_zerop (TREE_VALUE (sentinel)))
- /* Although __null (in C++) is only an integer we allow it
- nevertheless, as we are guaranteed that it's exactly
- as wide as a pointer, and we don't want to force
- users to cast the NULL they have written there.
- We warn with -Wstrict-null-sentinel, though. */
- && (warn_strict_null_sentinel
- || null_node != TREE_VALUE (sentinel)))
- warning (OPT_Wformat, "missing sentinel in function call");
+ /* The sentinel must be one of the varargs, i.e.
+ in position >= the number of fixed arguments. */
+ if ((nargs - 1 - pos) < len)
+ {
+ warning (OPT_Wformat,
+ "not enough variable arguments to fit a sentinel");
+ return;
}
+
+ /* Validate the sentinel. */
+ sentinel = argarray[nargs - 1 - pos];
+ if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
+ || !integer_zerop (sentinel))
+ /* Although __null (in C++) is only an integer we allow it
+ nevertheless, as we are guaranteed that it's exactly
+ as wide as a pointer, and we don't want to force
+ users to cast the NULL they have written there.
+ We warn with -Wstrict-null-sentinel, though. */
+ && (warn_strict_null_sentinel || null_node != sentinel))
+ warning (OPT_Wformat, "missing sentinel in function call");
}
}
@@ -5907,23 +6068,26 @@ handle_sentinel_attribute (tree *node, tree name, tree args,
return NULL_TREE;
}
-/* Check for valid arguments being passed to a function. */
+/* Check for valid arguments being passed to a function.
+ ATTRS is a list of attributes. There are NARGS arguments in the array
+ ARGARRAY. TYPELIST is the list of argument types for the function.
+ */
void
-check_function_arguments (tree attrs, tree params, tree typelist)
+check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
{
/* Check for null being passed in a pointer argument that must be
non-null. We also need to do this if format checking is enabled. */
if (warn_nonnull)
- check_function_nonnull (attrs, params);
+ check_function_nonnull (attrs, nargs, argarray);
/* Check for errors in format strings. */
if (warn_format || warn_missing_format_attribute)
- check_function_format (attrs, params);
+ check_function_format (attrs, nargs, argarray);
if (warn_format)
- check_function_sentinel (attrs, params, typelist);
+ check_function_sentinel (attrs, nargs, argarray, typelist);
}
/* Generic argument checking recursion routine. PARAM is the argument to
@@ -6312,6 +6476,12 @@ fold_offsetof_1 (tree expr, tree stop_ref)
off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
break;
+ case COMPOUND_EXPR:
+ /* Handle static members of volatile structs. */
+ t = TREE_OPERAND (expr, 1);
+ gcc_assert (TREE_CODE (t) == VAR_DECL);
+ return fold_offsetof_1 (t, stop_ref);
+
default:
gcc_unreachable ();
}
@@ -6800,4 +6970,76 @@ warn_for_unused_label (tree label)
}
}
+/* If FNDECL is a static constructor or destructor, add it to the list
+ of functions to be called by the file scope initialization
+ function. */
+
+void
+c_record_cdtor_fn (tree fndecl)
+{
+ if (targetm.have_ctors_dtors)
+ return;
+
+ if (DECL_STATIC_CONSTRUCTOR (fndecl))
+ static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
+ if (DECL_STATIC_DESTRUCTOR (fndecl))
+ static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
+}
+
+/* Synthesize a function which calls all the global ctors or global
+ dtors in this file. This is only used for targets which do not
+ support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
+static void
+build_cdtor (int method_type, tree cdtors)
+{
+ tree body = 0;
+
+ if (!cdtors)
+ return;
+
+ for (; cdtors; cdtors = TREE_CHAIN (cdtors))
+ append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
+ &body);
+
+ cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
+}
+
+/* Generate functions to call static constructors and destructors
+ for targets that do not support .ctors/.dtors sections. These
+ functions have magic names which are detected by collect2. */
+
+void
+c_build_cdtor_fns (void)
+{
+ if (!targetm.have_ctors_dtors)
+ {
+ build_cdtor ('I', static_ctors);
+ static_ctors = NULL_TREE;
+ build_cdtor ('D', static_dtors);
+ static_dtors = NULL_TREE;
+ }
+ else
+ {
+ gcc_assert (!static_ctors);
+ gcc_assert (!static_dtors);
+ }
+}
+
+#ifndef TARGET_HAS_TARGETCM
+struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
+#endif
+
+/* Warn for division by zero according to the value of DIVISOR. */
+
+void
+warn_for_div_by_zero (tree divisor)
+{
+ /* If DIVISOR is zero, and has integral type, issue a warning about
+ division by zero. Do not issue a warning if DIVISOR has a
+ floating-point type, since we consider 0.0/0.0 a valid way of
+ generating a NaN. */
+ if (skip_evaluation == 0 && integer_zerop (divisor))
+ warning (OPT_Wdiv_by_zero, "division by zero");
+}
+
#include "gt-c-common.h"
diff --git a/gcc/c-common.h b/gcc/c-common.h
index 5ad4582d240..08ce4600ee6 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -640,13 +640,13 @@ extern void finish_fname_decls (void);
extern const char *fname_as_string (int);
extern tree fname_decl (unsigned, tree);
-extern void check_function_arguments (tree, tree, tree);
+extern void check_function_arguments (tree, int, tree *, tree);
extern void check_function_arguments_recurse (void (*)
(void *, tree,
unsigned HOST_WIDE_INT),
void *, tree,
unsigned HOST_WIDE_INT);
-extern void check_function_format (tree, tree);
+extern void check_function_format (tree, int, tree *);
extern void set_Wformat (int);
extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
@@ -670,9 +670,10 @@ extern tree fix_string_type (tree);
struct varray_head_tag;
extern void constant_expression_warning (tree);
extern void strict_aliasing_warning (tree, tree, tree);
-extern void empty_body_warning (tree, tree);
+extern void empty_if_body_warning (tree, tree);
extern tree convert_and_check (tree, tree);
extern void overflow_warning (tree);
+extern void warn_logical_operator (enum tree_code, tree, tree);
extern void check_main_parameter_types (tree decl);
extern bool c_determine_visibility (tree);
extern bool same_scalar_type_ignoring_signedness (tree, tree);
@@ -810,6 +811,7 @@ extern tree lookup_name (tree);
extern bool vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note);
extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
+extern void c_expand_body (tree);
extern tree c_staticp (tree);
@@ -869,6 +871,7 @@ extern void warn_array_subscript_with_type_char (tree);
extern void warn_about_parentheses (enum tree_code, enum tree_code,
enum tree_code);
extern void warn_for_unused_label (tree label);
+extern void warn_for_div_by_zero (tree divisor);
/* In c-gimplify.c */
@@ -987,4 +990,11 @@ extern tree c_omp_remap_decl (tree, bool);
#define GCC_DIAG_STYLE __gcc_cdiag__
#endif
+/* Functions called automatically at the beginning and end of execution. */
+extern GTY (()) tree static_ctors;
+extern GTY (()) tree static_dtors;
+
+extern void c_record_cdtor_fn (tree);
+extern void c_build_cdtor_fns (void);
+
#endif /* ! GCC_C_COMMON_H */
diff --git a/gcc/c-cppbuiltin.c b/gcc/c-cppbuiltin.c
index 729cb0b7ed9..0239a1c3af8 100644
--- a/gcc/c-cppbuiltin.c
+++ b/gcc/c-cppbuiltin.c
@@ -1,5 +1,6 @@
/* Define builtin-in macros for the C family front ends.
- Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -495,6 +496,11 @@ c_cpp_builtins (cpp_reader *pfile)
/* Misc. */
builtin_define_with_value ("__VERSION__", version_string, 1);
+ if (flag_gnu89_inline)
+ cpp_define (pfile, "__GNUC_GNU_INLINE__");
+ else
+ cpp_define (pfile, "__GNUC_STDC_INLINE__");
+
/* Definitions for LP64 model. */
if (TYPE_PRECISION (long_integer_type_node) == 64
&& POINTER_SIZE == 64
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index ed0bf9cb25d..eaef0a506b8 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1,6 +1,6 @@
/* Process declarations and variables for C compiler.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -62,12 +62,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "langhooks-def.h"
#include "pointer-set.h"
-/* Set this to 1 if you want the standard ISO C99 semantics of 'inline'
- when you specify -std=c99 or -std=gnu99, and to 0 if you want
- behavior compatible with the nonstandard semantics implemented by
- GCC 2.95 through 4.2. */
-#define WANT_C99_INLINE_SEMANTICS 1
-
/* In grokdeclarator, distinguish syntactic contexts of declarators. */
enum decl_context
{ NORMAL, /* Ordinary declaration */
@@ -411,11 +405,6 @@ static bool keep_next_level_flag;
static bool next_is_function_body;
-/* Functions called automatically at the beginning and end of execution. */
-
-static GTY(()) tree static_ctors;
-static GTY(()) tree static_dtors;
-
/* Forward declarations. */
static tree lookup_name_in_scope (tree, struct c_scope *);
static tree c_make_fname_decl (tree, int);
@@ -808,7 +797,7 @@ pop_scope (void)
else if (DECL_DECLARED_INLINE_P (p)
&& TREE_PUBLIC (p)
&& !DECL_INITIAL (p)
- && flag_isoc99)
+ && !flag_gnu89_inline)
pedwarn ("inline function %q+D declared but never defined", p);
goto common_symbol;
@@ -1335,15 +1324,13 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
unit. */
if ((!DECL_EXTERN_INLINE (olddecl)
|| DECL_EXTERN_INLINE (newdecl)
-#if WANT_C99_INLINE_SEMANTICS
- || (flag_isoc99
+ || (!flag_gnu89_inline
&& (!DECL_DECLARED_INLINE_P (olddecl)
|| !lookup_attribute ("gnu_inline",
DECL_ATTRIBUTES (olddecl)))
&& (!DECL_DECLARED_INLINE_P (newdecl)
|| !lookup_attribute ("gnu_inline",
DECL_ATTRIBUTES (newdecl))))
-#endif /* WANT_C99_INLINE_SEMANTICS */
)
&& same_translation_unit_p (newdecl, olddecl))
{
@@ -1558,7 +1545,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
we still shouldn't warn.) */
if (DECL_DECLARED_INLINE_P (newdecl) && !DECL_DECLARED_INLINE_P (olddecl)
&& same_translation_unit_p (olddecl, newdecl)
- && ! flag_isoc99)
+ && flag_gnu89_inline)
{
if (TREE_USED (olddecl))
{
@@ -1703,11 +1690,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
TREE_READONLY (olddecl) = 1;
if (TREE_THIS_VOLATILE (newdecl))
- {
- TREE_THIS_VOLATILE (olddecl) = 1;
- if (TREE_CODE (newdecl) == VAR_DECL)
- make_var_volatile (newdecl);
- }
+ TREE_THIS_VOLATILE (olddecl) = 1;
/* Merge deprecatedness. */
if (TREE_DEPRECATED (newdecl))
@@ -1788,12 +1771,11 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
}
}
-#if WANT_C99_INLINE_SEMANTICS
/* In c99, 'extern' declaration before (or after) 'inline' means this
function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
is present. */
if (TREE_CODE (newdecl) == FUNCTION_DECL
- && flag_isoc99
+ && !flag_gnu89_inline
&& (DECL_DECLARED_INLINE_P (newdecl)
|| DECL_DECLARED_INLINE_P (olddecl))
&& (!DECL_DECLARED_INLINE_P (newdecl)
@@ -1802,7 +1784,6 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
&& DECL_EXTERNAL (newdecl)
&& !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl)))
DECL_EXTERNAL (newdecl) = 0;
-#endif /* WANT_C99_INLINE_SEMANTICS */
if (DECL_EXTERNAL (newdecl))
{
@@ -3314,10 +3295,9 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
/* Set attributes here so if duplicate decl, will have proper attributes. */
decl_attributes (&decl, attributes, 0);
-#if WANT_C99_INLINE_SEMANTICS
/* Handle gnu_inline attribute. */
if (declspecs->inline_p
- && flag_isoc99
+ && !flag_gnu89_inline
&& TREE_CODE (decl) == FUNCTION_DECL
&& lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl)))
{
@@ -3326,7 +3306,6 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
else if (declspecs->storage_class != csc_static)
DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
}
-#endif /* WANT_C99_INLINE_SEMANTICS */
if (TREE_CODE (decl) == FUNCTION_DECL
&& targetm.calls.promote_prototypes (TREE_TYPE (decl)))
@@ -3912,6 +3891,61 @@ check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
}
+
+/* Print warning about variable length array if necessary. */
+
+static void
+warn_variable_length_array (const char *name, tree size)
+{
+ int ped = !flag_isoc99 && pedantic && warn_vla != 0;
+ int const_size = TREE_CONSTANT (size);
+
+ if (ped)
+ {
+ if (const_size)
+ {
+ if (name)
+ pedwarn ("ISO C90 forbids array %qs whose size "
+ "can%'t be evaluated",
+ name);
+ else
+ pedwarn ("ISO C90 forbids array whose size "
+ "can%'t be evaluated");
+ }
+ else
+ {
+ if (name)
+ pedwarn ("ISO C90 forbids variable length array %qs",
+ name);
+ else
+ pedwarn ("ISO C90 forbids variable length array");
+ }
+ }
+ else if (warn_vla > 0)
+ {
+ if (const_size)
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "the size of array %qs can"
+ "%'t be evaluated", name);
+ else
+ warning (OPT_Wvla,
+ "the size of array can %'t be evaluated");
+ }
+ else
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "variable length array %qs is used",
+ name);
+ else
+ warning (OPT_Wvla,
+ "variable length array is used");
+ }
+ }
+}
+
/* Given declspecs and a declarator,
determine the name and type of the object declared
and construct a ..._DECL node for it.
@@ -4310,17 +4344,7 @@ grokdeclarator (const struct c_declarator *declarator,
nonconstant even if it is (eg) a const variable
with known value. */
size_varies = 1;
-
- if (!flag_isoc99 && pedantic)
- {
- if (TREE_CONSTANT (size))
- pedwarn ("ISO C90 forbids array %qs whose size "
- "can%'t be evaluated",
- name);
- else
- pedwarn ("ISO C90 forbids variable-size array %qs",
- name);
- }
+ warn_variable_length_array (orig_name, size);
}
if (integer_zerop (size))
@@ -4765,6 +4789,8 @@ grokdeclarator (const struct c_declarator *declarator,
type = c_build_qualified_type (type, type_quals);
decl = build_decl (FIELD_DECL, declarator->u.id, type);
DECL_NONADDRESSABLE_P (decl) = bitfield;
+ if (bitfield && !declarator->u.id)
+ TREE_NO_WARNING (decl) = 1;
if (size_varies)
C_DECL_VARIABLE_SIZE (decl) = 1;
@@ -4824,11 +4850,8 @@ grokdeclarator (const struct c_declarator *declarator,
in this file, C99 6.7.4p6. In GNU C89, a function declared
'extern inline' is an external reference. */
else if (declspecs->inline_p && storage_class != csc_static)
-#if WANT_C99_INLINE_SEMANTICS
- DECL_EXTERNAL (decl) = (storage_class == csc_extern) == !flag_isoc99;
-#else
- DECL_EXTERNAL (decl) = (storage_class == csc_extern);
-#endif
+ DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
+ == flag_gnu89_inline);
else
DECL_EXTERNAL (decl) = !initialized;
@@ -6090,17 +6113,15 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
decl1);
-#if WANT_C99_INLINE_SEMANTICS
/* Handle gnu_inline attribute. */
if (declspecs->inline_p
- && flag_isoc99
+ && !flag_gnu89_inline
&& TREE_CODE (decl1) == FUNCTION_DECL
&& lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1)))
{
if (declspecs->storage_class != csc_static)
DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
}
-#endif /* WANT_C99_INLINE_SEMANTICS */
announce_function (decl1);
@@ -6776,14 +6797,9 @@ finish_function (void)
info for the epilogue. */
cfun->function_end_locus = input_location;
- /* If we don't have ctors/dtors sections, and this is a static
- constructor or destructor, it must be recorded now. */
- if (DECL_STATIC_CONSTRUCTOR (fndecl)
- && !targetm.have_ctors_dtors)
- static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
- if (DECL_STATIC_DESTRUCTOR (fndecl)
- && !targetm.have_ctors_dtors)
- static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
+ /* Keep track of functions declared with the "constructor" and
+ "destructor" attribute. */
+ c_record_cdtor_fn (fndecl);
/* Finalize the ELF visibility for the function. */
c_determine_visibility (fndecl);
@@ -6828,28 +6844,6 @@ finish_function (void)
cfun = NULL;
current_function_decl = NULL;
}
-
-/* Generate the RTL for the body of FNDECL. */
-
-void
-c_expand_body (tree fndecl)
-{
-
- if (!DECL_INITIAL (fndecl)
- || DECL_INITIAL (fndecl) == error_mark_node)
- return;
-
- tree_rest_of_compilation (fndecl);
-
- if (DECL_STATIC_CONSTRUCTOR (fndecl)
- && targetm.have_ctors_dtors)
- targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
- DEFAULT_INIT_PRIORITY);
- if (DECL_STATIC_DESTRUCTOR (fndecl)
- && targetm.have_ctors_dtors)
- targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
- DEFAULT_INIT_PRIORITY);
-}
/* Check the declarations given in a for-loop for satisfying the C99
constraints. If exactly one such decl is found, return it. */
@@ -7834,24 +7828,6 @@ finish_declspecs (struct c_declspecs *specs)
return specs;
}
-/* Synthesize a function which calls all the global ctors or global
- dtors in this file. This is only used for targets which do not
- support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
-static void
-build_cdtor (int method_type, tree cdtors)
-{
- tree body = 0;
-
- if (!cdtors)
- return;
-
- for (; cdtors; cdtors = TREE_CHAIN (cdtors))
- append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
- &body);
-
- cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
-}
-
/* A subroutine of c_write_global_declarations. Perform final processing
on one file scope's declarations (or the external scope's declarations),
GLOBALS. */
@@ -7945,11 +7921,9 @@ c_write_global_declarations (void)
c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
c_write_global_declarations_1 (BLOCK_VARS (ext_block));
- /* Generate functions to call static constructors and destructors
- for targets that do not support .ctors/.dtors sections. These
- functions have magic names which are detected by collect2. */
- build_cdtor ('I', static_ctors); static_ctors = 0;
- build_cdtor ('D', static_dtors); static_dtors = 0;
+ /* Call functions declared with the "constructor" or "destructor"
+ attribute. */
+ c_build_cdtor_fns ();
/* We're done parsing; proceed to optimize and emit assembly.
FIXME: shouldn't be the front end's responsibility to call this. */
diff --git a/gcc/c-format.c b/gcc/c-format.c
index 403724e5e11..4a0a41e3a54 100644
--- a/gcc/c-format.c
+++ b/gcc/c-format.c
@@ -851,13 +851,14 @@ decode_format_type (const char *s)
/* Check the argument list of a call to printf, scanf, etc.
- ATTRS are the attributes on the function type.
- PARAMS is the list of argument values. Also, if -Wmissing-format-attribute,
+ ATTRS are the attributes on the function type. There are NARGS argument
+ values in the array ARGARRAY.
+ Also, if -Wmissing-format-attribute,
warn for calls to vprintf or vscanf in functions with no such format
attribute themselves. */
void
-check_function_format (tree attrs, tree params)
+check_function_format (tree attrs, int nargs, tree *argarray)
{
tree a;
@@ -870,7 +871,16 @@ check_function_format (tree attrs, tree params)
function_format_info info;
decode_format_attr (TREE_VALUE (a), &info, 1);
if (warn_format)
- check_format_info (&info, params);
+ {
+ /* FIXME: Rewrite all the internal functions in this file
+ to use the ARGARRAY directly instead of constructing this
+ temporary list. */
+ tree params = NULL_TREE;
+ int i;
+ for (i = nargs - 1; i >= 0; i--)
+ params = tree_cons (NULL_TREE, argarray[i], params);
+ check_format_info (&info, params);
+ }
if (warn_missing_format_attribute && info.first_arg_num == 0
&& (format_types[info.format_type].flags
& (int) FMT_FLAG_ARG_CONVERT))
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index fe863d52b6e..3a9585bd26d 100644
--- a/gcc/c-incpath.c
+++ b/gcc/c-incpath.c
@@ -167,11 +167,26 @@ add_standard_paths (const char *sysroot, const char *iprefix,
else if (!p->add_sysroot && relocated
&& strncmp (p->fname, cpp_PREFIX, cpp_PREFIX_len) == 0)
{
- /* If the compiler is relocated, and this is a configured
- prefix relative path, then we use gcc_exec_prefix instead
- of the configured prefix. */
- str = concat (gcc_exec_prefix, p->fname
- + cpp_PREFIX_len, NULL);
+ static const char *relocated_prefix;
+ /* If this path starts with the configure-time prefix,
+ but the compiler has been relocated, replace it
+ with the run-time prefix. The run-time exec prefix
+ is GCC_EXEC_PREFIX. Compute the path from there back
+ to the toplevel prefix. */
+ if (!relocated_prefix)
+ {
+ char *dummy;
+ /* Make relative prefix expects the first argument
+ to be a program, not a directory. */
+ dummy = concat (gcc_exec_prefix, "dummy", NULL);
+ relocated_prefix
+ = make_relative_prefix (dummy,
+ cpp_EXEC_PREFIX,
+ cpp_PREFIX);
+ }
+ str = concat (relocated_prefix,
+ p->fname + cpp_PREFIX_len,
+ NULL);
str = update_path (str, p->component);
}
else
diff --git a/gcc/c-opts.c b/gcc/c-opts.c
index 2839e6683d0..bddbaad9d7f 100644
--- a/gcc/c-opts.c
+++ b/gcc/c-opts.c
@@ -39,6 +39,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "opts.h"
#include "options.h"
#include "mkdeps.h"
+#include "target.h"
#ifndef DOLLARS_IN_IDENTIFIERS
# define DOLLARS_IN_IDENTIFIERS true
@@ -278,7 +279,12 @@ c_common_handle_option (size_t scode, const char *arg, int value)
{
default:
if (cl_options[code].flags & (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX))
- break;
+ {
+ if ((option->flags & CL_TARGET)
+ && ! targetcm.handle_c_option (scode, arg, value))
+ result = 0;
+ break;
+ }
#ifdef CL_Fortran
if (lang_fortran && (cl_options[code].flags & (CL_Fortran)))
break;
@@ -1023,6 +1029,13 @@ c_common_post_options (const char **pfilename)
if (flag_inline_functions)
flag_inline_trees = 2;
+ /* By default we use C99 inline semantics in GNU99 or C99 mode. C99
+ inline semantics are not supported in GNU89 or C89 mode. */
+ if (flag_gnu89_inline == -1)
+ flag_gnu89_inline = !flag_isoc99;
+ else if (!flag_gnu89_inline && !flag_isoc99)
+ error ("-fno-gnu89-inline is only supported in GNU99 or C99 mode");
+
/* If we are given more than one input file, we must use
unit-at-a-time mode. */
if (num_in_fnames > 1)
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index 665b494e231..b1f40a47faa 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -3844,7 +3844,7 @@ c_parser_if_body (c_parser *parser, bool *if_p)
&& c_parser_peek_2nd_token (parser)->type == CPP_COLON))
c_parser_label (parser);
*if_p = c_parser_next_token_is_keyword (parser, RID_IF);
- if (warn_empty_body && c_parser_next_token_is (parser, CPP_SEMICOLON))
+ if (c_parser_next_token_is (parser, CPP_SEMICOLON))
add_stmt (build_empty_stmt ());
c_parser_statement_after_labels (parser);
return c_end_compound_stmt (block, flag_isoc99);
@@ -3953,6 +3953,9 @@ c_parser_do_statement (c_parser *parser)
location_t loc;
gcc_assert (c_parser_next_token_is_keyword (parser, RID_DO));
c_parser_consume_token (parser);
+ if (c_parser_next_token_is (parser, CPP_SEMICOLON))
+ warning (OPT_Wempty_body,
+ "suggest braces around empty body in %<do%> statement");
block = c_begin_compound_stmt (flag_isoc99);
loc = c_parser_peek_token (parser)->location;
save_break = c_break_label;
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index b69f0da29ff..2b75eecb618 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -528,8 +528,8 @@ pp_c_direct_abstract_declarator (c_pretty_printer *pp, tree t)
if (host_integerp (maxval, 0))
pp_wide_integer (pp, tree_low_cst (maxval, 0) + 1);
else
- pp_expression (pp, fold (build2 (PLUS_EXPR, type, maxval,
- build_int_cst (type, 1))));
+ pp_expression (pp, fold_build2 (PLUS_EXPR, type, maxval,
+ build_int_cst (type, 1)));
}
pp_c_right_bracket (pp);
pp_direct_abstract_declarator (pp, TREE_TYPE (t));
diff --git a/gcc/c-tree.h b/gcc/c-tree.h
index 87af5cbae9d..b2fe22893c4 100644
--- a/gcc/c-tree.h
+++ b/gcc/c-tree.h
@@ -441,7 +441,6 @@ extern int global_bindings_p (void);
extern void push_scope (void);
extern tree pop_scope (void);
extern void insert_block (tree);
-extern void c_expand_body (tree);
extern void c_init_decl_processing (void);
extern void c_dup_lang_specific_decl (tree);
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index d3495a9f71d..6986405e8a9 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -83,7 +83,7 @@ static int function_types_compatible_p (tree, tree);
static int type_lists_compatible_p (tree, tree);
static tree decl_constant_value_for_broken_optimization (tree);
static tree lookup_field (tree, tree);
-static tree convert_arguments (tree, tree, tree, tree);
+static int convert_arguments (int, tree *, tree, tree, tree, tree);
static tree pointer_diff (tree, tree);
static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
int);
@@ -2228,9 +2228,11 @@ tree
build_function_call (tree function, tree params)
{
tree fntype, fundecl = 0;
- tree coerced_params;
tree name = NULL_TREE, result;
tree tem;
+ int nargs;
+ tree *argarray;
+
/* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
STRIP_TYPE_NOPS (function);
@@ -2317,30 +2319,30 @@ build_function_call (tree function, tree params)
/* Convert the parameters to the types declared in the
function prototype, or apply default promotions. */
- coerced_params
- = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
-
- if (coerced_params == error_mark_node)
+ nargs = list_length (params);
+ argarray = (tree *) alloca (nargs * sizeof (tree));
+ nargs = convert_arguments (nargs, argarray, TYPE_ARG_TYPES (fntype),
+ params, function, fundecl);
+ if (nargs < 0)
return error_mark_node;
/* Check that the arguments to the function are valid. */
- check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
+ check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
TYPE_ARG_TYPES (fntype));
if (require_constant_value)
{
- result = fold_build_call_list_initializer (TREE_TYPE (fntype),
- function,
- coerced_params);
+ result = fold_build_call_array_initializer (TREE_TYPE (fntype),
+ function, nargs, argarray);
if (TREE_CONSTANT (result)
&& (name == NULL_TREE
|| strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
pedwarn_init ("initializer element is not constant");
}
else
- result = fold_build_call_list (TREE_TYPE (fntype),
- function, coerced_params);
+ result = fold_build_call_array (TREE_TYPE (fntype),
+ function, nargs, argarray);
if (VOID_TYPE_P (TREE_TYPE (result)))
return result;
@@ -2348,9 +2350,8 @@ build_function_call (tree function, tree params)
}
/* Convert the argument expressions in the list VALUES
- to the types in the list TYPELIST. The result is a list of converted
- argument expressions, unless there are too few arguments in which
- case it is error_mark_node.
+ to the types in the list TYPELIST. The resulting arguments are
+ stored in the array ARGARRAY which has size NARGS.
If TYPELIST is exhausted, or when an element has NULL as its type,
perform the default conversions.
@@ -2364,14 +2365,17 @@ build_function_call (tree function, tree params)
This is also where warnings about wrong number of args are generated.
- Both VALUES and the returned value are chains of TREE_LIST nodes
- with the elements of the list in the TREE_VALUE slots of those nodes. */
+ VALUES is a chain of TREE_LIST nodes with the elements of the list
+ in the TREE_VALUE slots of those nodes.
-static tree
-convert_arguments (tree typelist, tree values, tree function, tree fundecl)
+ Returns the actual number of arguments processed (which may be less
+ than NARGS in some error situations), or -1 on failure. */
+
+static int
+convert_arguments (int nargs, tree *argarray,
+ tree typelist, tree values, tree function, tree fundecl)
{
tree typetail, valtail;
- tree result = NULL;
int parmnum;
tree selector;
@@ -2385,7 +2389,7 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
selector = objc_message_selector ();
/* Scan the given expressions and types, producing individual
- converted arguments and pushing them on RESULT in reverse order. */
+ converted arguments and storing them in ARGARRAY. */
for (valtail = values, typetail = typelist, parmnum = 0;
valtail;
@@ -2400,7 +2404,7 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
if (type == void_type_node)
{
error ("too many arguments to function %qE", function);
- break;
+ return parmnum;
}
if (selector && argnum > 2)
@@ -2558,35 +2562,37 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
&& (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
parmval = default_conversion (parmval);
}
- result = tree_cons (NULL_TREE, parmval, result);
+ argarray[parmnum] = parmval;
}
else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
&& (TYPE_PRECISION (TREE_TYPE (val))
< TYPE_PRECISION (double_type_node))
&& !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (val))))
/* Convert `float' to `double'. */
- result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
+ argarray[parmnum] = convert (double_type_node, val);
else if ((invalid_func_diag =
targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
{
error (invalid_func_diag);
- return error_mark_node;
+ return -1;
}
else
/* Convert `short' and `char' to full-size `int'. */
- result = tree_cons (NULL_TREE, default_conversion (val), result);
+ argarray[parmnum] = default_conversion (val);
if (typetail)
typetail = TREE_CHAIN (typetail);
}
+ gcc_assert (parmnum == nargs);
+
if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
{
error ("too few arguments to function %qE", function);
- return error_mark_node;
+ return -1;
}
- return nreverse (result);
+ return parmnum;
}
/* This is the entry point used by the parser to build unary operators
@@ -2634,6 +2640,9 @@ parser_build_binary_op (enum tree_code code, struct c_expr arg1,
if (warn_parentheses)
warn_about_parentheses (code, code1, code2);
+ if (code1 != tcc_comparison)
+ warn_logical_operator (code, arg1.value, arg2.value);
+
/* Warn about comparisons against string literals, with the exception
of testing for equality or inequality of a string literal with NULL. */
if (code == EQ_EXPR || code == NE_EXPR)
@@ -7220,7 +7229,7 @@ c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
&if_locus);
}
- empty_body_warning (then_block, else_block);
+ empty_if_body_warning (then_block, else_block);
stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
SET_EXPR_LOCATION (stmt, if_locus);
@@ -7839,10 +7848,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
case FLOOR_DIV_EXPR:
case ROUND_DIV_EXPR:
case EXACT_DIV_EXPR:
- /* Floating point division by zero is a legitimate way to obtain
- infinities and NaNs. */
- if (skip_evaluation == 0 && integer_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero");
+ warn_for_div_by_zero (op1);
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
|| code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
@@ -7882,8 +7888,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
case TRUNC_MOD_EXPR:
case FLOOR_MOD_EXPR:
- if (skip_evaluation == 0 && integer_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero");
+ warn_for_div_by_zero (op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{
diff --git a/gcc/c.opt b/gcc/c.opt
index aea783f6423..928e8b2c59a 100644
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -1,5 +1,5 @@
; Options for the C, ObjC, C++ and ObjC++ front ends.
-; Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+; Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
@@ -450,6 +450,10 @@ Wvariadic-macros
C ObjC C++ ObjC++ Warning
Do not warn about using variadic macros when -pedantic
+Wvla
+C ObjC C++ ObjC++ Var(warn_vla) Init(-1) Warning
+Warn if a variable length array is used
+
Wwrite-strings
C ObjC C++ ObjC++ Var(warn_write_strings) Warning
In C++, nonzero means warn about deprecated conversion from string literals to `char *'. In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard.
@@ -554,6 +558,10 @@ fgnu-runtime
ObjC ObjC++
Generate code for GNU runtime environment
+fgnu89-inline
+C Var(flag_gnu89_inline) Init(-1)
+Use traditional GNU semantics for inline functions
+
fguiding-decls
C++ ObjC++
diff --git a/gcc/calls.c b/gcc/calls.c
index d9ba08c0ddb..8723e1f4fae 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3774,7 +3774,18 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
if (reg != 0 && GET_CODE (reg) == PARALLEL)
use_group_regs (&call_fusage, reg);
else if (reg != 0)
- use_reg (&call_fusage, reg);
+ {
+ int partial = argvec[count].partial;
+ if (partial)
+ {
+ int nregs;
+ gcc_assert (partial % UNITS_PER_WORD == 0);
+ nregs = partial / UNITS_PER_WORD;
+ use_regs (&call_fusage, REGNO (reg), nregs);
+ }
+ else
+ use_reg (&call_fusage, reg);
+ }
}
/* Pass the function the address in which to return a structure value. */
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index eacfd996224..545cc5d77fc 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -347,6 +347,60 @@ struct tree_opt_pass pass_insn_locators_initialize =
0 /* letter */
};
+static unsigned int
+into_cfg_layout_mode (void)
+{
+ cfg_layout_initialize (0);
+ return 0;
+}
+
+static unsigned int
+outof_cfg_layout_mode (void)
+{
+ basic_block bb;
+
+ FOR_EACH_BB (bb)
+ if (bb->next_bb != EXIT_BLOCK_PTR)
+ bb->aux = bb->next_bb;
+
+ cfg_layout_finalize ();
+
+ return 0;
+}
+
+struct tree_opt_pass pass_into_cfg_layout_mode =
+{
+ "into_cfglayout", /* name */
+ NULL, /* gate */
+ into_cfg_layout_mode, /* execute */
+ NULL, /* sub */
+ NULL, /* next */
+ 0, /* static_pass_number */
+ 0, /* tv_id */
+ 0, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ TODO_dump_func, /* todo_flags_finish */
+ 0 /* letter */
+};
+
+struct tree_opt_pass pass_outof_cfg_layout_mode =
+{
+ "outof_cfglayout", /* name */
+ NULL, /* gate */
+ outof_cfg_layout_mode, /* execute */
+ NULL, /* sub */
+ NULL, /* next */
+ 0, /* static_pass_number */
+ 0, /* tv_id */
+ 0, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ TODO_dump_func, /* todo_flags_finish */
+ 0 /* letter */
+};
/* For each lexical block, set BLOCK_NUMBER to the depth at which it is
found in the block tree. */
@@ -1149,8 +1203,6 @@ cfg_layout_finalize (void)
bb->il.rtl->visited = 0;
}
- break_superblocks ();
-
#ifdef ENABLE_CHECKING
verify_flow_info ();
#endif
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index 62ee79c6cd1..12ce92cdd9e 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -1038,6 +1038,9 @@ record_loop_exits (void)
edge_iterator ei;
edge e;
+ if (!current_loops)
+ return;
+
if (current_loops->state & LOOPS_HAVE_RECORDED_EXITS)
return;
current_loops->state |= LOOPS_HAVE_RECORDED_EXITS;
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 09eef08ca3d..c6cd7221aa7 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -265,6 +265,9 @@ extern bool just_once_each_iteration_p (const struct loop *, basic_block);
extern unsigned expected_loop_iterations (const struct loop *);
extern rtx doloop_condition_get (rtx);
+void estimate_numbers_of_iterations_loop (struct loop *);
+HOST_WIDE_INT estimated_loop_iterations_int (struct loop *, bool);
+
/* Loop manipulation. */
extern bool can_duplicate_loop_p (struct loop *loop);
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 16c34aecfeb..55b915d3ff4 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -198,6 +198,13 @@ decide_is_function_needed (struct cgraph_node *node, tree decl)
&& TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
return true;
+ /* With -fkeep-inline-functions we are keeping all inline functions except
+ for extern inline ones. */
+ if (flag_keep_inline_functions
+ && DECL_DECLARED_INLINE_P (decl)
+ && !DECL_EXTERNAL (decl))
+ return true;
+
/* If we decided it was needed before, but at the time we didn't have
the body of the function available, then it's still needed. We have
to go back and re-check its dependencies now. */
diff --git a/gcc/combine.c b/gcc/combine.c
index d1277d49639..99da26da349 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1014,27 +1014,36 @@ init_reg_last (void)
static void
setup_incoming_promotions (void)
{
- unsigned int regno;
- rtx reg;
- enum machine_mode mode;
- int unsignedp;
- rtx first = get_insns ();
+ rtx first;
+ tree arg;
+
+ if (!targetm.calls.promote_function_args (TREE_TYPE (cfun->decl)))
+ return;
- if (targetm.calls.promote_function_args (TREE_TYPE (cfun->decl)))
+ first = get_insns ();
+
+ for (arg = DECL_ARGUMENTS (current_function_decl); arg;
+ arg = TREE_CHAIN (arg))
{
- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- /* Check whether this register can hold an incoming pointer
- argument. FUNCTION_ARG_REGNO_P tests outgoing register
- numbers, so translate if necessary due to register windows. */
- if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (regno))
- && (reg = promoted_input_arg (regno, &mode, &unsignedp)) != 0)
- {
- record_value_for_reg
- (reg, first, gen_rtx_fmt_e ((unsignedp ? ZERO_EXTEND
- : SIGN_EXTEND),
- GET_MODE (reg),
- gen_rtx_CLOBBER (mode, const0_rtx)));
- }
+ rtx reg = DECL_INCOMING_RTL (arg);
+
+ if (!REG_P (reg))
+ continue;
+
+ if (TYPE_MODE (DECL_ARG_TYPE (arg)) == TYPE_MODE (TREE_TYPE (arg)))
+ {
+ enum machine_mode mode = TYPE_MODE (TREE_TYPE (arg));
+ int uns = TYPE_UNSIGNED (TREE_TYPE (arg));
+
+ mode = promote_mode (TREE_TYPE (arg), mode, &uns, 1);
+ if (mode == GET_MODE (reg) && mode != DECL_MODE (arg))
+ {
+ rtx x;
+ x = gen_rtx_CLOBBER (DECL_MODE (arg), const0_rtx);
+ x = gen_rtx_fmt_e ((uns ? ZERO_EXTEND : SIGN_EXTEND), mode, x);
+ record_value_for_reg (reg, first, x);
+ }
+ }
}
}
diff --git a/gcc/common.opt b/gcc/common.opt
index 30649a649a5..bcf0fcd4ec8 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -118,6 +118,10 @@ Wlarger-than-
Common RejectNegative Joined UInteger Warning
-Wlarger-than-<number> Warn if an object is larger than <number> bytes
+Wlogical-op
+Common Warning Var(warn_logical_op)
+Warn when a logical operator is suspicously always evaluating to true or false
+
Wunsafe-loop-optimizations
Common Var(warn_unsafe_loop_optimizations) Warning
Warn if the loop cannot be optimized due to nontrivial assumptions.
@@ -352,6 +356,10 @@ fcaller-saves
Common Report Var(flag_caller_saves) Optimization
Save registers around function calls
+fcheck-data-deps
+Common Report Var(flag_check_data_deps)
+Compare the results of several data dependence analyzers.
+
fcommon
Common Report Var(flag_no_common,0) Optimization
Do not put uninitialized globals in the common section
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 877d25c1842..c8fecaac65f 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -572,6 +572,7 @@ case ${target} in
tm_file="${tm_file} elfos.h svr4.h"
xm_defines=POSIX
extra_options="${extra_options} vxworks.opt"
+ extra_objs=vxworks.o
case ${enable_threads} in
no) ;;
"" | yes | vxworks) thread_file='vxworks' ;;
@@ -810,7 +811,12 @@ bfin*-elf*)
;;
bfin*-uclinux*)
tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h bfin/uclinux.h"
- tmake_file=bfin/t-bfin-elf
+ tmake_file=bfin/t-bfin-uclinux
+ use_collect2=no
+ ;;
+bfin*-linux-uclibc*)
+ tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h linux.h bfin/linux.h"
+ tmake_file="t-slibgcc-elf-ver bfin/t-bfin-linux"
use_collect2=no
;;
bfin*-rtems*)
@@ -1311,7 +1317,7 @@ i[34567]86-*-sysv4*) # Intel 80386's running system V.4
use_fixproto=yes
;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
- tm_file="${tm_file} i386/sysv4.h i386/unix.h i386/att.h vx-common.h"
+ tm_file="${tm_file} i386/sysv4.h i386/unix.h i386/att.h elfos.h vx-common.h"
case ${target} in
*-vxworksae*)
tm_file="${tm_file} vxworksae.h i386/vxworksae.h"
@@ -1542,7 +1548,7 @@ m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux
# ABI.
default_m68k_cpu=68020
default_cf_cpu=5206
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h flat.h m68k/linux.h m68k/uclinux.h"
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h"
tm_defines="${tm_defines} MOTOROLA=1 USE_GAS UCLIBC_DEFAULT=1"
extra_options="${extra_options} linux.opt"
tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
diff --git a/gcc/config.in b/gcc/config.in
index 275327d46e7..69f7e9e65b8 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -228,6 +228,12 @@
#endif
+/* Define if your assembler supports the sahf mnemonic. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_IX86_SAHF
+#endif
+
+
/* Define if your assembler supports the lituse_jsrdirect relocation. */
#ifndef USED_FOR_TARGET
#undef HAVE_AS_JSRDIRECT_RELOCS
@@ -240,6 +246,12 @@
#endif
+/* Define if the assembler won't complain about a line such as # 0 "" 2. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_LINE_ZERO
+#endif
+
+
/* Define if your assembler supports ltoffx and ldxmov relocations. */
#ifndef USED_FOR_TARGET
#undef HAVE_AS_LTOFFX_LDXMOV_RELOCS
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 023bbcc92f7..817aa479479 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -4781,7 +4781,7 @@ alpha_gp_save_rtx (void)
seq = get_insns ();
end_sequence ();
- emit_insn_after (seq, entry_of_function ());
+ emit_insn_at_entry (seq);
cfun->machine->gp_save_rtx = m;
}
@@ -6629,8 +6629,8 @@ alpha_fold_builtin_zapnot (tree *op, unsigned HOST_WIDE_INT opint[],
return build_int_cst (long_integer_type_node, opint[0] & mask);
if (op)
- return fold (build2 (BIT_AND_EXPR, long_integer_type_node, op[0],
- build_int_cst (long_integer_type_node, mask)));
+ return fold_build2 (BIT_AND_EXPR, long_integer_type_node, op[0],
+ build_int_cst (long_integer_type_node, mask));
}
else if ((op_const & 1) && opint[0] == 0)
return build_int_cst (long_integer_type_node, 0);
@@ -6783,7 +6783,7 @@ alpha_fold_vector_minmax (enum tree_code code, tree op[], tree vtype)
{
tree op0 = fold_convert (vtype, op[0]);
tree op1 = fold_convert (vtype, op[1]);
- tree val = fold (build2 (code, vtype, op0, op1));
+ tree val = fold_build2 (code, vtype, op0, op1);
return fold_convert (long_integer_type_node, val);
}
@@ -9320,6 +9320,14 @@ alpha_file_start (void)
#endif
#ifdef OBJECT_FORMAT_ELF
+/* Since we don't have a .dynbss section, we should not allow global
+ relocations in the .rodata section. */
+
+static int
+alpha_elf_reloc_rw_mask (void)
+{
+ return flag_pic ? 3 : 2;
+}
/* Return a section for X. The only special thing we do here is to
honor small data. */
@@ -9335,6 +9343,22 @@ alpha_elf_select_rtx_section (enum machine_mode mode, rtx x,
return default_elf_select_rtx_section (mode, x, align);
}
+static unsigned int
+alpha_elf_section_type_flags (tree decl, const char *name, int reloc)
+{
+ unsigned int flags = 0;
+
+ if (strcmp (name, ".sdata") == 0
+ || strncmp (name, ".sdata.", 7) == 0
+ || strncmp (name, ".gnu.linkonce.s.", 16) == 0
+ || strcmp (name, ".sbss") == 0
+ || strncmp (name, ".sbss.", 6) == 0
+ || strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
+ flags = SECTION_SMALL;
+
+ flags |= default_section_type_flags (decl, name, reloc);
+ return flags;
+}
#endif /* OBJECT_FORMAT_ELF */
/* Structure to collect function names for final output in link section. */
@@ -10568,8 +10592,12 @@ alpha_init_libfuncs (void)
#endif
#ifdef OBJECT_FORMAT_ELF
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK alpha_elf_reloc_rw_mask
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION alpha_elf_select_rtx_section
+#undef TARGET_SECTION_TYPE_FLAGS
+#define TARGET_SECTION_TYPE_FLAGS alpha_elf_section_type_flags
#endif
#undef TARGET_ASM_FUNCTION_END_PROLOGUE
diff --git a/gcc/config/alpha/osf.h b/gcc/config/alpha/osf.h
index b62435aa6b7..f7aaf4d4606 100644
--- a/gcc/config/alpha/osf.h
+++ b/gcc/config/alpha/osf.h
@@ -121,7 +121,7 @@ Boston, MA 02110-1301, USA. */
%{K: -I %b.o~} \
%{!K: %{save-temps: -I %b.o~}} \
%{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \
- %{.s:%i} %{!.s:%g.s}}}"
+ %{,assembler:%i;:%g.s}}}"
#else
#define ASM_FINAL_SPEC "\
@@ -130,7 +130,7 @@ Boston, MA 02110-1301, USA. */
%{K: -I %b.o~} \
%{!K: %{save-temps: -I %b.o~}} \
%{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \
- %{.s:%i} %{!.s:%g.s}}}"
+ %{,assembler:%i;:%g.s}}}"
#endif
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index 6a9a5492c1c..9d24cd2b877 100644
--- a/gcc/config/arm/arm-protos.h
+++ b/gcc/config/arm/arm-protos.h
@@ -68,7 +68,8 @@ extern rtx thumb_legitimize_reload_address (rtx *, enum machine_mode, int, int,
int);
extern int arm_const_double_rtx (rtx);
extern int neg_const_double_rtx_ok_for_fpa (rtx);
-extern enum reg_class vfp_secondary_reload_class (enum machine_mode, rtx);
+extern enum reg_class coproc_secondary_reload_class (enum machine_mode, rtx,
+ bool);
extern bool arm_tls_referenced_p (rtx);
extern int cirrus_memory_offset (rtx);
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 6998332a79d..74a9e008ca5 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3922,10 +3922,15 @@ thumb2_legitimate_index_p (enum machine_mode mode, rtx index, int strict_p)
&& (INTVAL (index) & 3) == 0);
if (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (mode))
- return (code == CONST_INT
- && INTVAL (index) < 1024
- && INTVAL (index) > -1024
- && (INTVAL (index) & 3) == 0);
+ {
+ /* For DImode assume values will usually live in core regs
+ and only allow LDRD addressing modes. */
+ if (!TARGET_LDRD || mode != DImode)
+ return (code == CONST_INT
+ && INTVAL (index) < 1024
+ && INTVAL (index) > -1024
+ && (INTVAL (index) & 3) == 0);
+ }
if (arm_address_register_rtx_p (index, strict_p)
&& (GET_MODE_SIZE (mode) <= 4))
@@ -5764,12 +5769,12 @@ arm_eliminable_register (rtx x)
}
/* Return GENERAL_REGS if a scratch register required to reload x to/from
- VFP registers. Otherwise return NO_REGS. */
+ coprocessor registers. Otherwise return NO_REGS. */
enum reg_class
-vfp_secondary_reload_class (enum machine_mode mode, rtx x)
+coproc_secondary_reload_class (enum machine_mode mode, rtx x, bool wb)
{
- if (arm_coproc_mem_operand (x, FALSE) || s_register_operand (x, mode))
+ if (arm_coproc_mem_operand (x, wb) || s_register_operand (x, mode))
return NO_REGS;
return GENERAL_REGS;
@@ -9146,12 +9151,37 @@ output_move_double (rtx *operands)
output_asm_insn ("ldr%(d%)\t%0, [%1] @split", otherops);
}
else
- output_asm_insn ("ldr%(d%)\t%0, [%1, %2]!", otherops);
+ {
+ /* IWMMXT allows offsets larger than ldrd can handle,
+ fix these up with a pair of ldr. */
+ if (GET_CODE (otherops[2]) == CONST_INT
+ && (INTVAL(otherops[2]) <= -256
+ || INTVAL(otherops[2]) >= 256))
+ {
+ output_asm_insn ("ldr%?\t%0, [%1, %2]!", otherops);
+ otherops[0] = gen_rtx_REG (SImode, 1 + reg0);
+ output_asm_insn ("ldr%?\t%0, [%1, #4]", otherops);
+ }
+ else
+ output_asm_insn ("ldr%(d%)\t%0, [%1, %2]!", otherops);
+ }
}
else
{
- /* We only allow constant increments, so this is safe. */
- output_asm_insn ("ldr%(d%)\t%0, [%1], %2", otherops);
+ /* IWMMXT allows offsets larger than ldrd can handle,
+ fix these up with a pair of ldr. */
+ if (GET_CODE (otherops[2]) == CONST_INT
+ && (INTVAL(otherops[2]) <= -256
+ || INTVAL(otherops[2]) >= 256))
+ {
+ otherops[0] = gen_rtx_REG (SImode, 1 + reg0);
+ output_asm_insn ("ldr%?\t%0, [%1, #4]", otherops);
+ otherops[0] = operands[0];
+ output_asm_insn ("ldr%?\t%0, [%1], %2", otherops);
+ }
+ else
+ /* We only allow constant increments, so this is safe. */
+ output_asm_insn ("ldr%(d%)\t%0, [%1], %2", otherops);
}
break;
@@ -9289,7 +9319,29 @@ output_move_double (rtx *operands)
otherops[1] = XEXP (XEXP (XEXP (operands[0], 0), 1), 0);
otherops[2] = XEXP (XEXP (XEXP (operands[0], 0), 1), 1);
- if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
+ /* IWMMXT allows offsets larger than ldrd can handle,
+ fix these up with a pair of ldr. */
+ if (GET_CODE (otherops[2]) == CONST_INT
+ && (INTVAL(otherops[2]) <= -256
+ || INTVAL(otherops[2]) >= 256))
+ {
+ rtx reg1;
+ reg1 = gen_rtx_REG (SImode, 1 + REGNO (operands[1]));
+ if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
+ {
+ output_asm_insn ("ldr%?\t%0, [%1, %2]!", otherops);
+ otherops[0] = reg1;
+ output_asm_insn ("ldr%?\t%0, [%1, #4]", otherops);
+ }
+ else
+ {
+ otherops[0] = reg1;
+ output_asm_insn ("ldr%?\t%0, [%1, #4]", otherops);
+ otherops[0] = operands[1];
+ output_asm_insn ("ldr%?\t%0, [%1], %2", otherops);
+ }
+ }
+ else if (GET_CODE (XEXP (operands[0], 0)) == PRE_MODIFY)
output_asm_insn ("str%(d%)\t%0, [%1, %2]!", otherops);
else
output_asm_insn ("str%(d%)\t%0, [%1], %2", otherops);
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 318d4f44624..d09bb734e2d 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -1121,10 +1121,12 @@ enum reg_class
or out of a register in CLASS in MODE. If it can be done directly,
NO_REGS is returned. */
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
- /* Restrict which direct reloads are allowed for VFP regs. */ \
+ /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
((TARGET_VFP && TARGET_HARD_FLOAT \
&& (CLASS) == VFP_REGS) \
- ? vfp_secondary_reload_class (MODE, X) \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) \
+ : (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) \
+ ? coproc_secondary_reload_class (MODE, X, TRUE) \
: TARGET_32BIT \
? (((MODE) == HImode && ! arm_arch4 && true_regnum (X) == -1) \
? GENERAL_REGS : NO_REGS) \
@@ -1132,10 +1134,12 @@ enum reg_class
/* If we need to load shorts byte-at-a-time, then we need a scratch. */
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
- /* Restrict which direct reloads are allowed for VFP regs. */ \
+ /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
((TARGET_VFP && TARGET_HARD_FLOAT \
&& (CLASS) == VFP_REGS) \
- ? vfp_secondary_reload_class (MODE, X) : \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) : \
+ (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) ? \
+ coproc_secondary_reload_class (MODE, X, TRUE) : \
/* Cannot load constants into Cirrus registers. */ \
(TARGET_MAVERICK && TARGET_HARD_FLOAT \
&& (CLASS) == CIRRUS_REGS \
diff --git a/gcc/config/arm/libunwind.S b/gcc/config/arm/libunwind.S
index ef3f89aafcb..23284710467 100644
--- a/gcc/config/arm/libunwind.S
+++ b/gcc/config/arm/libunwind.S
@@ -41,6 +41,18 @@
EQUIV SYM (\name), SYM (__\name)
.endm
+#if (__ARM_ARCH__ == 4)
+/* Some coprocessors require armv5. We know this code will never be run on
+ other cpus. Tell gas to allow armv5, but only mark the objects as armv4.
+ */
+.arch armv5t
+#ifdef __ARM_ARCH_4T__
+.object_arch armv4t
+#else
+.object_arch armv4
+#endif
+#endif
+
/* r0 points to a 16-word block. Upload these values to the actual core
state. */
ARM_FUNC_START restore_core_regs
@@ -119,6 +131,66 @@ ARM_FUNC_START gnu_Unwind_Save_VFP_D_16_to_31
stcl p11,cr0,[r0],{0x20} /* vstm r0, {d16-d31} */
RET
+ARM_FUNC_START gnu_Unwind_Restore_WMMXD
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ ldcl p1, cr0, [r0], #8 /* wldrd wr0, [r0], #8 */
+ ldcl p1, cr1, [r0], #8 /* wldrd wr1, [r0], #8 */
+ ldcl p1, cr2, [r0], #8 /* wldrd wr2, [r0], #8 */
+ ldcl p1, cr3, [r0], #8 /* wldrd wr3, [r0], #8 */
+ ldcl p1, cr4, [r0], #8 /* wldrd wr4, [r0], #8 */
+ ldcl p1, cr5, [r0], #8 /* wldrd wr5, [r0], #8 */
+ ldcl p1, cr6, [r0], #8 /* wldrd wr6, [r0], #8 */
+ ldcl p1, cr7, [r0], #8 /* wldrd wr7, [r0], #8 */
+ ldcl p1, cr8, [r0], #8 /* wldrd wr8, [r0], #8 */
+ ldcl p1, cr9, [r0], #8 /* wldrd wr9, [r0], #8 */
+ ldcl p1, cr10, [r0], #8 /* wldrd wr10, [r0], #8 */
+ ldcl p1, cr11, [r0], #8 /* wldrd wr11, [r0], #8 */
+ ldcl p1, cr12, [r0], #8 /* wldrd wr12, [r0], #8 */
+ ldcl p1, cr13, [r0], #8 /* wldrd wr13, [r0], #8 */
+ ldcl p1, cr14, [r0], #8 /* wldrd wr14, [r0], #8 */
+ ldcl p1, cr15, [r0], #8 /* wldrd wr15, [r0], #8 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Save_WMMXD
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ stcl p1, cr0, [r0], #8 /* wstrd wr0, [r0], #8 */
+ stcl p1, cr1, [r0], #8 /* wstrd wr1, [r0], #8 */
+ stcl p1, cr2, [r0], #8 /* wstrd wr2, [r0], #8 */
+ stcl p1, cr3, [r0], #8 /* wstrd wr3, [r0], #8 */
+ stcl p1, cr4, [r0], #8 /* wstrd wr4, [r0], #8 */
+ stcl p1, cr5, [r0], #8 /* wstrd wr5, [r0], #8 */
+ stcl p1, cr6, [r0], #8 /* wstrd wr6, [r0], #8 */
+ stcl p1, cr7, [r0], #8 /* wstrd wr7, [r0], #8 */
+ stcl p1, cr8, [r0], #8 /* wstrd wr8, [r0], #8 */
+ stcl p1, cr9, [r0], #8 /* wstrd wr9, [r0], #8 */
+ stcl p1, cr10, [r0], #8 /* wstrd wr10, [r0], #8 */
+ stcl p1, cr11, [r0], #8 /* wstrd wr11, [r0], #8 */
+ stcl p1, cr12, [r0], #8 /* wstrd wr12, [r0], #8 */
+ stcl p1, cr13, [r0], #8 /* wstrd wr13, [r0], #8 */
+ stcl p1, cr14, [r0], #8 /* wstrd wr14, [r0], #8 */
+ stcl p1, cr15, [r0], #8 /* wstrd wr15, [r0], #8 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Restore_WMMXC
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ ldc2 p1, cr8, [r0], #4 /* wldrw wcgr0, [r0], #4 */
+ ldc2 p1, cr9, [r0], #4 /* wldrw wcgr1, [r0], #4 */
+ ldc2 p1, cr10, [r0], #4 /* wldrw wcgr2, [r0], #4 */
+ ldc2 p1, cr11, [r0], #4 /* wldrw wcgr3, [r0], #4 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Save_WMMXC
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ stc2 p1, cr8, [r0], #4 /* wstrw wcgr0, [r0], #4 */
+ stc2 p1, cr9, [r0], #4 /* wstrw wcgr1, [r0], #4 */
+ stc2 p1, cr10, [r0], #4 /* wstrw wcgr2, [r0], #4 */
+ stc2 p1, cr11, [r0], #4 /* wstrw wcgr3, [r0], #4 */
+ RET
+
/* Wrappers to save core registers, then call the real routine. */
.macro UNWIND_WRAPPER name nargs
diff --git a/gcc/config/arm/unwind-arm.c b/gcc/config/arm/unwind-arm.c
index 4b75b0fe665..60f61d526f4 100644
--- a/gcc/config/arm/unwind-arm.c
+++ b/gcc/config/arm/unwind-arm.c
@@ -91,6 +91,16 @@ struct fpa_regs
struct fpa_reg f[8];
};
+struct wmmxd_regs
+{
+ _uw64 wd[16];
+};
+
+struct wmmxc_regs
+{
+ _uw wc[4];
+};
+
/* Unwind descriptors. */
typedef struct
@@ -123,12 +133,18 @@ typedef struct
struct vfp_regs vfp;
struct vfpv3_regs vfp_regs_16_to_31;
struct fpa_regs fpa;
+ struct wmmxd_regs wmmxd;
+ struct wmmxc_regs wmmxc;
} phase1_vrs;
#define DEMAND_SAVE_VFP 1 /* VFP state has been saved if not set */
#define DEMAND_SAVE_VFP_D 2 /* VFP state is for FLDMD/FSTMD if set */
#define DEMAND_SAVE_VFP_V3 4 /* VFPv3 state for regs 16 .. 31 has
been saved if not set */
+#define DEMAND_SAVE_WMMXD 8 /* iWMMXt data registers have been
+ saved if not set. */
+#define DEMAND_SAVE_WMMXC 16 /* iWMMXt control registers have been
+ saved if not set. */
/* This must match the structure created by the assembly wrappers. */
typedef struct
@@ -157,6 +173,10 @@ void __attribute__((noreturn)) restore_core_regs (struct core_regs *);
/* Routines for FLDMX/FSTMX format... */
void __gnu_Unwind_Save_VFP (struct vfp_regs * p);
void __gnu_Unwind_Restore_VFP (struct vfp_regs * p);
+void __gnu_Unwind_Save_WMMXD (struct wmmxd_regs * p);
+void __gnu_Unwind_Restore_WMMXD (struct wmmxd_regs * p);
+void __gnu_Unwind_Save_WMMXC (struct wmmxc_regs * p);
+void __gnu_Unwind_Restore_WMMXC (struct wmmxc_regs * p);
/* ...and those for FLDMD/FSTMD format... */
void __gnu_Unwind_Save_VFP_D (struct vfp_regs * p);
@@ -181,6 +201,11 @@ restore_non_core_regs (phase1_vrs * vrs)
if ((vrs->demand_save_flags & DEMAND_SAVE_VFP_V3) == 0)
__gnu_Unwind_Restore_VFP_D_16_to_31 (&vrs->vfp_regs_16_to_31);
+
+ if ((vrs->demand_save_flags & DEMAND_SAVE_WMMXD) == 0)
+ __gnu_Unwind_Restore_WMMXD (&vrs->wmmxd);
+ if ((vrs->demand_save_flags & DEMAND_SAVE_WMMXC) == 0)
+ __gnu_Unwind_Restore_WMMXC (&vrs->wmmxc);
}
/* A better way to do this would probably be to compare the absolute address
@@ -421,9 +446,80 @@ _Unwind_VRS_Result _Unwind_VRS_Pop (_Unwind_Context *context,
return _UVRSR_OK;
case _UVRSC_FPA:
+ return _UVRSR_NOT_IMPLEMENTED;
+
case _UVRSC_WMMXD:
+ {
+ _uw start = discriminator >> 16;
+ _uw count = discriminator & 0xffff;
+ struct wmmxd_regs tmp;
+ _uw *sp;
+ _uw *dest;
+
+ if ((representation != _UVRSD_UINT64) || start + count > 16)
+ return _UVRSR_FAILED;
+
+ if (vrs->demand_save_flags & DEMAND_SAVE_WMMXD)
+ {
+ /* Demand-save resisters for stage1. */
+ vrs->demand_save_flags &= ~DEMAND_SAVE_WMMXD;
+ __gnu_Unwind_Save_WMMXD (&vrs->wmmxd);
+ }
+
+ /* Restore the registers from the stack. Do this by saving the
+ current WMMXD registers to a memory area, moving the in-memory
+ values into that area, and restoring from the whole area. */
+ __gnu_Unwind_Save_WMMXD (&tmp);
+
+ /* The stack address is only guaranteed to be word aligned, so
+ we can't use doubleword copies. */
+ sp = (_uw *) vrs->core.r[R_SP];
+ dest = (_uw *) &tmp.wd[start];
+ count *= 2;
+ while (count--)
+ *(dest++) = *(sp++);
+
+ /* Set the new stack pointer. */
+ vrs->core.r[R_SP] = (_uw) sp;
+
+ /* Reload the registers. */
+ __gnu_Unwind_Restore_WMMXD (&tmp);
+ }
+ return _UVRSR_OK;
+
case _UVRSC_WMMXC:
- return _UVRSR_NOT_IMPLEMENTED;
+ {
+ int i;
+ struct wmmxc_regs tmp;
+ _uw *sp;
+
+ if ((representation != _UVRSD_UINT32) || discriminator > 16)
+ return _UVRSR_FAILED;
+
+ if (vrs->demand_save_flags & DEMAND_SAVE_WMMXC)
+ {
+ /* Demand-save resisters for stage1. */
+ vrs->demand_save_flags &= ~DEMAND_SAVE_WMMXC;
+ __gnu_Unwind_Save_WMMXC (&vrs->wmmxc);
+ }
+
+ /* Restore the registers from the stack. Do this by saving the
+ current WMMXC registers to a memory area, moving the in-memory
+ values into that area, and restoring from the whole area. */
+ __gnu_Unwind_Save_WMMXC (&tmp);
+
+ sp = (_uw *) vrs->core.r[R_SP];
+ for (i = 0; i < 4; i++)
+ if (discriminator & (1 << i))
+ tmp.wc[i] = *(sp++);
+
+ /* Set the new stack pointer. */
+ vrs->core.r[R_SP] = (_uw) sp;
+
+ /* Reload the registers. */
+ __gnu_Unwind_Restore_WMMXC (&tmp);
+ }
+ return _UVRSR_OK;
default:
return _UVRSR_FAILED;
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index efe7b86e3e6..436c570bdf6 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -208,6 +208,7 @@ static const struct mcu_type_s avr_mcu_types[] = {
{ "at90pwm1", 4, "__AVR_AT90PWM1__" },
{ "at90pwm2", 4, "__AVR_AT90PWM2__" },
{ "at90pwm3", 4, "__AVR_AT90PWM3__" },
+ { "at90usb82", 5, "__AVR_AT90USB82__" },
/* Enhanced, > 8K. */
{ "avr5", 5, NULL },
{ "atmega16", 5, "__AVR_ATmega16__" },
@@ -224,9 +225,13 @@ static const struct mcu_type_s avr_mcu_types[] = {
{ "atmega323", 5, "__AVR_ATmega323__" },
{ "atmega324p",5, "__AVR_ATmega324P__" },
{ "atmega325", 5, "__AVR_ATmega325__" },
+ { "atmega325p", 5, "__AVR_ATmega325P__" },
{ "atmega3250", 5, "__AVR_ATmega3250__" },
+ { "atmega3250p", 5, "__AVR_ATmega3250P__" },
{ "atmega329", 5, "__AVR_ATmega329__" },
+ { "atmega329p", 5, "__AVR_ATmega329P__" },
{ "atmega3290", 5, "__AVR_ATmega3290__" },
+ { "atmega3290p", 5, "__AVR_ATmega3290P__" },
{ "atmega406", 5, "__AVR_ATmega406__" },
{ "atmega64", 5, "__AVR_ATmega64__" },
{ "atmega640", 5, "__AVR_ATmega640__" },
@@ -242,6 +247,7 @@ static const struct mcu_type_s avr_mcu_types[] = {
{ "at90can32", 5, "__AVR_AT90CAN32__" },
{ "at90can64", 5, "__AVR_AT90CAN64__" },
{ "at90can128", 5, "__AVR_AT90CAN128__" },
+ { "at90usb162", 5, "__AVR_AT90USB162__" },
{ "at90usb646", 5, "__AVR_AT90USB646__" },
{ "at90usb647", 5, "__AVR_AT90USB647__" },
{ "at90usb1286", 5, "__AVR_AT90USB1286__" },
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 0c8a800dec3..fb003ce0b2c 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -769,10 +769,10 @@ mmcu=*:-mmcu=%*}"
mmcu=at90usb*|\
mmcu=at94k:-m avr5}\
%{mmcu=atmega324*|\
- mmcu=atmega325|\
- mmcu=atmega3250|\
- mmcu=atmega329|\
- mmcu=atmega3290|\
+ mmcu=atmega325*|\
+ mmcu=atmega3250*|\
+ mmcu=atmega329*|\
+ mmcu=atmega3290*|\
mmcu=atmega406|\
mmcu=atmega48|\
mmcu=atmega88|\
@@ -865,9 +865,13 @@ mmcu=*:-mmcu=%*}"
%{mmcu=atmega323:crtm323.o%s} \
%{mmcu=atmega324p:crtm324p.o%s} \
%{mmcu=atmega325:crtm325.o%s} \
+%{mmcu=atmega325p:crtm325p.o%s} \
%{mmcu=atmega3250:crtm3250.o%s} \
+%{mmcu=atmega3250p:crtm3250p.o%s} \
%{mmcu=atmega329:crtm329.o%s} \
+%{mmcu=atmega329p:crtm329p.o%s} \
%{mmcu=atmega3290:crtm3290.o%s} \
+%{mmcu=atmega3290p:crtm3290p.o%s} \
%{mmcu=atmega406:crtm406.o%s} \
%{mmcu=atmega64:crtm64.o%s} \
%{mmcu=atmega640:crtm640.o%s} \
@@ -883,6 +887,8 @@ mmcu=*:-mmcu=%*}"
%{mmcu=at90can32:crtcan32.o%s} \
%{mmcu=at90can64:crtcan64.o%s} \
%{mmcu=at90can128:crtcan128.o%s} \
+%{mmcu=at90usb82:crtusb82.o%s} \
+%{mmcu=at90usb162:crtusb162.o%s} \
%{mmcu=at90usb646:crtusb646.o%s} \
%{mmcu=at90usb647:crtusb647.o%s} \
%{mmcu=at90usb1286:crtusb1286.o%s} \
diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr
index 09cdc0fb526..2afae4266e1 100644
--- a/gcc/config/avr/t-avr
+++ b/gcc/config/avr/t-avr
@@ -67,6 +67,7 @@ MULTILIB_MATCHES = \
mmcu?avr4=mmcu?at90pwm1 \
mmcu?avr4=mmcu?at90pwm2 \
mmcu?avr4=mmcu?at90pwm3 \
+ mmcu?avr4=mmcu?at90usb82 \
mmcu?avr5=mmcu?atmega16 \
mmcu?avr5=mmcu?atmega161 \
mmcu?avr5=mmcu?atmega162 \
@@ -81,9 +82,13 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega323 \
mmcu?avr5=mmcu?atmega324p \
mmcu?avr5=mmcu?atmega325 \
+ mmcu?avr5=mmcu?atmega325p \
mmcu?avr5=mmcu?atmega3250 \
+ mmcu?avr5=mmcu?atmega3250p \
mmcu?avr5=mmcu?atmega329 \
+ mmcu?avr5=mmcu?atmega329p \
mmcu?avr5=mmcu?atmega3290 \
+ mmcu?avr5=mmcu?atmega3290p \
mmcu?avr5=mmcu?atmega406 \
mmcu?avr5=mmcu?atmega64 \
mmcu?avr5=mmcu?atmega640 \
@@ -99,6 +104,7 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?at90can32 \
mmcu?avr5=mmcu?at90can64 \
mmcu?avr5=mmcu?at90can128 \
+ mmcu?avr5=mmcu?at90usb162 \
mmcu?avr5=mmcu?at90usb646 \
mmcu?avr5=mmcu?at90usb647 \
mmcu?avr5=mmcu?at90usb1286 \
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index e71305a7eb0..43ab3ec85dd 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -52,6 +52,7 @@
#include "tm-preds.h"
#include "gt-bfin.h"
#include "basic-block.h"
+#include "cfglayout.h"
#include "timevar.h"
/* A C structure for machine-specific, per-function data.
@@ -3025,6 +3026,9 @@ bfin_hardware_loop (void)
/* Maximum size of a loop. */
#define MAX_LOOP_LENGTH 2042
+/* Maximum distance of the LSETUP instruction from the loop start. */
+#define MAX_LSETUP_DISTANCE 30
+
/* We need to keep a vector of loops */
typedef struct loop_info *loop_info;
DEF_VEC_P (loop_info);
@@ -3037,9 +3041,16 @@ struct loop_info GTY (())
/* loop number, for dumps */
int loop_no;
- /* Predecessor block of the loop. This is the one that falls into
- the loop and contains the initialization instruction. */
- basic_block predecessor;
+ /* All edges that jump into and out of the loop. */
+ VEC(edge,gc) *incoming;
+
+ /* We can handle two cases: all incoming edges have the same destination
+ block, or all incoming edges have the same source block. These two
+ members are set to the common source or destination we found, or NULL
+ if different blocks were found. If both are NULL the loop can't be
+ optimized. */
+ basic_block incoming_src;
+ basic_block incoming_dest;
/* First block in the loop. This is the one branched to by the loop_end
insn. */
@@ -3175,6 +3186,31 @@ bfin_scan_loop (loop_info loop, rtx reg, rtx loop_end)
return false;
}
+/* Estimate the length of INSN conservatively. */
+
+static int
+length_for_loop (rtx insn)
+{
+ int length = 0;
+ if (JUMP_P (insn) && any_condjump_p (insn) && !optimize_size)
+ {
+ if (TARGET_CSYNC_ANOMALY)
+ length = 8;
+ else if (TARGET_SPECLD_ANOMALY)
+ length = 6;
+ }
+ else if (LABEL_P (insn))
+ {
+ if (TARGET_CSYNC_ANOMALY)
+ length = 4;
+ }
+
+ if (INSN_P (insn))
+ length += get_attr_length (insn);
+
+ return length;
+}
+
/* Optimize LOOP. */
static void
@@ -3187,7 +3223,7 @@ bfin_optimize_loop (loop_info loop)
rtx reg_lc0, reg_lc1, reg_lt0, reg_lt1, reg_lb0, reg_lb1;
rtx iter_reg;
rtx lc_reg, lt_reg, lb_reg;
- rtx seq;
+ rtx seq, seq_end;
int length;
unsigned ix;
int inner_depth = 0;
@@ -3239,6 +3275,32 @@ bfin_optimize_loop (loop_info loop)
goto bad_loop;
}
+ if (loop->incoming_src)
+ {
+ /* Make sure the predecessor is before the loop start label, as required by
+ the LSETUP instruction. */
+ length = 0;
+ for (insn = BB_END (loop->incoming_src);
+ insn && insn != loop->start_label;
+ insn = NEXT_INSN (insn))
+ length += length_for_loop (insn);
+
+ if (!insn)
+ {
+ if (dump_file)
+ fprintf (dump_file, ";; loop %d lsetup not before loop_start\n",
+ loop->loop_no);
+ goto bad_loop;
+ }
+
+ if (length > MAX_LSETUP_DISTANCE)
+ {
+ if (dump_file)
+ fprintf (dump_file, ";; loop %d lsetup too far away\n", loop->loop_no);
+ goto bad_loop;
+ }
+ }
+
/* Check if start_label appears before loop_end and calculate the
offset between them. We calculate the length of instructions
conservatively. */
@@ -3246,23 +3308,7 @@ bfin_optimize_loop (loop_info loop)
for (insn = loop->start_label;
insn && insn != loop->loop_end;
insn = NEXT_INSN (insn))
- {
- if (JUMP_P (insn) && any_condjump_p (insn) && !optimize_size)
- {
- if (TARGET_CSYNC_ANOMALY)
- length += 8;
- else if (TARGET_SPECLD_ANOMALY)
- length += 6;
- }
- else if (LABEL_P (insn))
- {
- if (TARGET_CSYNC_ANOMALY)
- length += 4;
- }
-
- if (INSN_P (insn))
- length += get_attr_length (insn);
- }
+ length += length_for_loop (insn);
if (!insn)
{
@@ -3472,21 +3518,64 @@ bfin_optimize_loop (loop_info loop)
if (loop->init != NULL_RTX)
emit_insn (loop->init);
- emit_insn(loop->loop_init);
- emit_label (loop->start_label);
+ seq_end = emit_insn (loop->loop_init);
seq = get_insns ();
end_sequence ();
- emit_insn_after (seq, BB_END (loop->predecessor));
- delete_insn (loop->loop_end);
+ if (loop->incoming_src)
+ {
+ rtx prev = BB_END (loop->incoming_src);
+ if (VEC_length (edge, loop->incoming) > 1
+ || !(VEC_last (edge, loop->incoming)->flags & EDGE_FALLTHRU))
+ {
+ gcc_assert (JUMP_P (prev));
+ prev = PREV_INSN (prev);
+ }
+ emit_insn_after (seq, prev);
+ }
+ else
+ {
+ basic_block new_bb;
+ edge e;
+ edge_iterator ei;
+
+ if (loop->head != loop->incoming_dest)
+ {
+ FOR_EACH_EDGE (e, ei, loop->head->preds)
+ {
+ if (e->flags & EDGE_FALLTHRU)
+ {
+ rtx newjump = gen_jump (loop->start_label);
+ emit_insn_before (newjump, BB_HEAD (loop->head));
+ new_bb = create_basic_block (newjump, newjump, loop->head->prev_bb);
+ gcc_assert (new_bb = loop->head->prev_bb);
+ break;
+ }
+ }
+ }
+
+ emit_insn_before (seq, BB_HEAD (loop->head));
+ seq = emit_label_before (gen_label_rtx (), seq);
+ new_bb = create_basic_block (seq, seq_end, loop->head->prev_bb);
+ FOR_EACH_EDGE (e, ei, loop->incoming)
+ {
+ if (!(e->flags & EDGE_FALLTHRU)
+ || e->dest != loop->head)
+ redirect_edge_and_branch_force (e, new_bb);
+ else
+ redirect_edge_succ (e, new_bb);
+ }
+ }
+
+ delete_insn (loop->loop_end);
/* Insert the loop end label before the last instruction of the loop. */
emit_label_before (loop->end_label, loop->last_insn);
return;
-bad_loop:
+ bad_loop:
if (dump_file)
fprintf (dump_file, ";; loop %d is bad\n", loop->loop_no);
@@ -3531,7 +3620,6 @@ bfin_discover_loop (loop_info loop, basic_block tail_bb, rtx tail_insn)
loop->tail = tail_bb;
loop->head = BRANCH_EDGE (tail_bb)->dest;
loop->successor = FALLTHRU_EDGE (tail_bb)->dest;
- loop->predecessor = NULL;
loop->loop_end = tail_insn;
loop->last_insn = NULL_RTX;
loop->iter_reg = SET_DEST (XVECEXP (PATTERN (tail_insn), 0, 1));
@@ -3540,7 +3628,7 @@ bfin_discover_loop (loop_info loop, basic_block tail_bb, rtx tail_insn)
loop->clobber_loop0 = loop->clobber_loop1 = 0;
loop->outer = NULL;
loop->loops = NULL;
-
+ loop->incoming = VEC_alloc (edge, gc, 2);
loop->init = loop->loop_init = NULL_RTX;
loop->start_label = XEXP (XEXP (SET_SRC (XVECEXP (PATTERN (tail_insn), 0, 0)), 1), 0);
loop->end_label = NULL_RTX;
@@ -3594,69 +3682,113 @@ bfin_discover_loop (loop_info loop, basic_block tail_bb, rtx tail_insn)
}
}
+ /* Find the predecessor, and make sure nothing else jumps into this loop. */
if (!loop->bad)
{
- /* Make sure we only have one entry point. */
- if (EDGE_COUNT (loop->head->preds) == 2)
+ int pass, retry;
+ for (dwork = 0; VEC_iterate (basic_block, loop->blocks, dwork, bb); dwork++)
{
- loop->predecessor = EDGE_PRED (loop->head, 0)->src;
- if (loop->predecessor == loop->tail)
- /* We wanted the other predecessor. */
- loop->predecessor = EDGE_PRED (loop->head, 1)->src;
-
- /* We can only place a loop insn on a fall through edge of a
- single exit block. */
- if (EDGE_COUNT (loop->predecessor->succs) != 1
- || !(EDGE_SUCC (loop->predecessor, 0)->flags & EDGE_FALLTHRU)
- /* If loop->predecessor is in loop, loop->head is not really
- the head of the loop. */
- || bfin_bb_in_loop (loop, loop->predecessor))
- loop->predecessor = NULL;
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ {
+ basic_block pred = e->src;
+
+ if (!bfin_bb_in_loop (loop, pred))
+ {
+ if (dump_file)
+ fprintf (dump_file, ";; Loop %d: incoming edge %d -> %d\n",
+ loop->loop_no, pred->index,
+ e->dest->index);
+ VEC_safe_push (edge, gc, loop->incoming, e);
+ }
+ }
}
- if (loop->predecessor == NULL)
+ for (pass = 0, retry = 1; retry && pass < 2; pass++)
{
- if (dump_file)
- fprintf (dump_file, ";; loop has bad predecessor\n");
- loop->bad = 1;
+ edge e;
+ edge_iterator ei;
+ bool first = true;
+ retry = 0;
+
+ FOR_EACH_EDGE (e, ei, loop->incoming)
+ {
+ if (first)
+ {
+ loop->incoming_src = e->src;
+ loop->incoming_dest = e->dest;
+ first = false;
+ }
+ else
+ {
+ if (e->dest != loop->incoming_dest)
+ loop->incoming_dest = NULL;
+ if (e->src != loop->incoming_src)
+ loop->incoming_src = NULL;
+ }
+ if (loop->incoming_src == NULL && loop->incoming_dest == NULL)
+ {
+ if (pass == 0)
+ {
+ if (dump_file)
+ fprintf (dump_file,
+ ";; retrying loop %d with forwarder blocks\n",
+ loop->loop_no);
+ retry = 1;
+ break;
+ }
+ loop->bad = 1;
+ if (dump_file)
+ fprintf (dump_file,
+ ";; can't find suitable entry for loop %d\n",
+ loop->loop_no);
+ goto out;
+ }
+ }
+ if (retry)
+ {
+ retry = 0;
+ FOR_EACH_EDGE (e, ei, loop->incoming)
+ {
+ if (forwarder_block_p (e->src))
+ {
+ edge e2;
+ edge_iterator ei2;
+
+ if (dump_file)
+ fprintf (dump_file,
+ ";; Adding forwarder block %d to loop %d and retrying\n",
+ e->src->index, loop->loop_no);
+ VEC_safe_push (basic_block, heap, loop->blocks, e->src);
+ bitmap_set_bit (loop->block_bitmap, e->src->index);
+ FOR_EACH_EDGE (e2, ei2, e->src->preds)
+ VEC_safe_push (edge, gc, loop->incoming, e2);
+ VEC_unordered_remove (edge, loop->incoming, ei.index);
+ retry = 1;
+ break;
+ }
+ }
+ }
}
}
-#ifdef ENABLE_CHECKING
- /* Make sure nothing jumps into this loop. This shouldn't happen as we
- wouldn't have generated the counted loop patterns in such a case.
- However, this test must be done after the test above to detect loops
- with invalid headers. */
- if (!loop->bad)
- for (dwork = 0; VEC_iterate (basic_block, loop->blocks, dwork, bb); dwork++)
- {
- edge e;
- edge_iterator ei;
- if (bb == loop->head)
- continue;
- FOR_EACH_EDGE (e, ei, bb->preds)
- {
- basic_block pred = EDGE_PRED (bb, ei.index)->src;
- if (!bfin_bb_in_loop (loop, pred))
- abort ();
- }
- }
-#endif
+ out:
VEC_free (basic_block, heap, works);
}
-static void
-bfin_reorg_loops (FILE *dump_file)
+/* Analyze the structure of the loops in the current function. Use STACK
+ for bitmap allocations. Returns all the valid candidates for hardware
+ loops found in this function. */
+static loop_info
+bfin_discover_loops (bitmap_obstack *stack, FILE *dump_file)
{
- bitmap_obstack stack;
- bitmap tmp_bitmap;
- basic_block bb;
loop_info loops = NULL;
loop_info loop;
+ basic_block bb;
+ bitmap tmp_bitmap;
int nloops = 0;
- bitmap_obstack_initialize (&stack);
-
/* Find all the possible loop tails. This means searching for every
loop_end instruction. For each one found, create a loop_info
structure and add the head block to the work list. */
@@ -3678,7 +3810,7 @@ bfin_reorg_loops (FILE *dump_file)
loops = loop;
loop->loop_no = nloops++;
loop->blocks = VEC_alloc (basic_block, heap, 20);
- loop->block_bitmap = BITMAP_ALLOC (&stack);
+ loop->block_bitmap = BITMAP_ALLOC (stack);
bb->aux = loop;
if (dump_file)
@@ -3692,7 +3824,7 @@ bfin_reorg_loops (FILE *dump_file)
}
}
- tmp_bitmap = BITMAP_ALLOC (&stack);
+ tmp_bitmap = BITMAP_ALLOC (stack);
/* Compute loop nestings. */
for (loop = loops; loop; loop = loop->next)
{
@@ -3720,12 +3852,130 @@ bfin_reorg_loops (FILE *dump_file)
}
else
{
+ if (dump_file)
+ fprintf (dump_file,
+ ";; can't find suitable nesting for loops %d and %d\n",
+ loop->loop_no, other->loop_no);
loop->bad = other->bad = 1;
}
}
}
BITMAP_FREE (tmp_bitmap);
+ return loops;
+}
+
+/* Free up the loop structures in LOOPS. */
+static void
+free_loops (loop_info loops)
+{
+ while (loops)
+ {
+ loop_info loop = loops;
+ loops = loop->next;
+ VEC_free (loop_info, heap, loop->loops);
+ VEC_free (basic_block, heap, loop->blocks);
+ BITMAP_FREE (loop->block_bitmap);
+ XDELETE (loop);
+ }
+}
+
+#define BB_AUX_INDEX(BB) ((unsigned)(BB)->aux)
+
+/* The taken-branch edge from the loop end can actually go forward. Since the
+ Blackfin's LSETUP instruction requires that the loop end be after the loop
+ start, try to reorder a loop's basic blocks when we find such a case. */
+static void
+bfin_reorder_loops (loop_info loops, FILE *dump_file)
+{
+ basic_block bb;
+ loop_info loop;
+
+ FOR_EACH_BB (bb)
+ bb->aux = NULL;
+ cfg_layout_initialize (CLEANUP_UPDATE_LIFE);
+
+ for (loop = loops; loop; loop = loop->next)
+ {
+ unsigned index;
+ basic_block bb;
+ edge e;
+ edge_iterator ei;
+
+ if (loop->bad)
+ continue;
+
+ /* Recreate an index for basic blocks that represents their order. */
+ for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
+ bb != EXIT_BLOCK_PTR;
+ bb = bb->next_bb, index++)
+ bb->aux = (PTR) index;
+
+ if (BB_AUX_INDEX (loop->head) < BB_AUX_INDEX (loop->tail))
+ continue;
+
+ FOR_EACH_EDGE (e, ei, loop->head->succs)
+ {
+ if (bitmap_bit_p (loop->block_bitmap, e->dest->index)
+ && BB_AUX_INDEX (e->dest) < BB_AUX_INDEX (loop->tail))
+ {
+ basic_block start_bb = e->dest;
+ basic_block start_prev_bb = start_bb->prev_bb;
+
+ if (dump_file)
+ fprintf (dump_file, ";; Moving block %d before block %d\n",
+ loop->head->index, start_bb->index);
+ loop->head->prev_bb->next_bb = loop->head->next_bb;
+ loop->head->next_bb->prev_bb = loop->head->prev_bb;
+
+ loop->head->prev_bb = start_prev_bb;
+ loop->head->next_bb = start_bb;
+ start_prev_bb->next_bb = start_bb->prev_bb = loop->head;
+ break;
+ }
+ }
+ loops = loops->next;
+ }
+
+ FOR_EACH_BB (bb)
+ {
+ if (bb->next_bb != EXIT_BLOCK_PTR)
+ bb->aux = bb->next_bb;
+ else
+ bb->aux = NULL;
+ }
+ cfg_layout_finalize ();
+}
+
+/* Run from machine_dependent_reorg, this pass looks for doloop_end insns
+ and tries to rewrite the RTL of these loops so that proper Blackfin
+ hardware loops are generated. */
+
+static void
+bfin_reorg_loops (FILE *dump_file)
+{
+ loop_info loops = NULL;
+ loop_info loop;
+ basic_block bb;
+ bitmap_obstack stack;
+
+ bitmap_obstack_initialize (&stack);
+
+ if (dump_file)
+ fprintf (dump_file, ";; Find loops, first pass\n\n");
+
+ loops = bfin_discover_loops (&stack, dump_file);
+
+ if (dump_file)
+ bfin_dump_loops (loops);
+
+ bfin_reorder_loops (loops, dump_file);
+ free_loops (loops);
+
+ if (dump_file)
+ fprintf (dump_file, ";; Find loops, second pass\n\n");
+
+ loops = bfin_discover_loops (&stack, dump_file);
if (dump_file)
{
fprintf (dump_file, ";; All loops found:\n\n");
@@ -3742,16 +3992,7 @@ bfin_reorg_loops (FILE *dump_file)
bfin_dump_loops (loops);
}
- /* Free up the loop structures */
- while (loops)
- {
- loop = loops;
- loops = loop->next;
- VEC_free (loop_info, heap, loop->loops);
- VEC_free (basic_block, heap, loop->blocks);
- BITMAP_FREE (loop->block_bitmap);
- XDELETE (loop);
- }
+ free_loops (loops);
if (dump_file)
print_rtl (dump_file, get_insns ());
@@ -4315,7 +4556,7 @@ bfin_output_mi_thunk (FILE *file ATTRIBUTE_UNUSED,
if (vcall_offset)
{
rtx p2tmp = gen_rtx_REG (Pmode, REG_P2);
- rtx tmp = gen_rtx_REG (Pmode, REG_R2);
+ rtx tmp = gen_rtx_REG (Pmode, REG_R3);
xops[1] = tmp;
xops[2] = p2tmp;
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index 9b9b78aa119..3085a38909d 100644
--- a/gcc/config/bfin/bfin.h
+++ b/gcc/config/bfin/bfin.h
@@ -411,6 +411,14 @@ enum reg_class
CCREGS,
EVEN_DREGS,
ODD_DREGS,
+ D0REGS,
+ D1REGS,
+ D2REGS,
+ D3REGS,
+ D4REGS,
+ D5REGS,
+ D6REGS,
+ D7REGS,
DREGS,
FDPIC_REGS,
FDPIC_FPTR_REGS,
@@ -447,6 +455,14 @@ enum reg_class
"CCREGS", \
"EVEN_DREGS", \
"ODD_DREGS", \
+ "D0REGS", \
+ "D1REGS", \
+ "D2REGS", \
+ "D3REGS", \
+ "D4REGS", \
+ "D5REGS", \
+ "D6REGS", \
+ "D7REGS", \
"DREGS", \
"FDPIC_REGS", \
"FDPIC_FPTR_REGS", \
@@ -491,6 +507,14 @@ enum reg_class
{ 0x00000000, 0x4 }, /* CCREGS */ \
{ 0x00000055, 0 }, /* EVEN_DREGS */ \
{ 0x000000aa, 0 }, /* ODD_DREGS */ \
+ { 0x00000001, 0 }, /* D0REGS */ \
+ { 0x00000002, 0 }, /* D1REGS */ \
+ { 0x00000004, 0 }, /* D2REGS */ \
+ { 0x00000008, 0 }, /* D3REGS */ \
+ { 0x00000010, 0 }, /* D4REGS */ \
+ { 0x00000020, 0 }, /* D5REGS */ \
+ { 0x00000040, 0 }, /* D6REGS */ \
+ { 0x00000080, 0 }, /* D7REGS */ \
{ 0x000000ff, 0 }, /* DREGS */ \
{ 0x00000800, 0x000 }, /* FDPIC_REGS */ \
{ 0x00000200, 0x000 }, /* FDPIC_FPTR_REGS */ \
@@ -537,7 +561,7 @@ enum reg_class
/* Get reg_class from a letter such as appears in the machine description. */
-#define REG_CLASS_FROM_LETTER(LETTER) \
+#define REG_CLASS_FROM_CONSTRAINT(LETTER, STR) \
((LETTER) == 'a' ? PREGS : \
(LETTER) == 'Z' ? FDPIC_REGS : \
(LETTER) == 'Y' ? FDPIC_FPTR_REGS : \
@@ -559,6 +583,16 @@ enum reg_class
(LETTER) == 'x' ? MOST_REGS : \
(LETTER) == 'y' ? PROLOGUE_REGS : \
(LETTER) == 'w' ? NON_A_CC_REGS : \
+ (LETTER) == 'q' \
+ ? ((STR)[1] == '0' ? D0REGS \
+ : (STR)[1] == '1' ? D1REGS \
+ : (STR)[1] == '2' ? D2REGS \
+ : (STR)[1] == '3' ? D3REGS \
+ : (STR)[1] == '4' ? D4REGS \
+ : (STR)[1] == '5' ? D5REGS \
+ : (STR)[1] == '6' ? D6REGS \
+ : (STR)[1] == '7' ? D7REGS \
+ : NO_REGS) : \
NO_REGS)
/* The same information, inverted:
@@ -567,7 +601,14 @@ enum reg_class
or could index an array. */
#define REGNO_REG_CLASS(REGNO) \
- ((REGNO) < REG_P0 ? DREGS \
+((REGNO) == REG_R0 ? D0REGS \
+ : (REGNO) == REG_R1 ? D1REGS \
+ : (REGNO) == REG_R2 ? D2REGS \
+ : (REGNO) == REG_R3 ? D3REGS \
+ : (REGNO) == REG_R4 ? D4REGS \
+ : (REGNO) == REG_R5 ? D5REGS \
+ : (REGNO) == REG_R6 ? D6REGS \
+ : (REGNO) == REG_R7 ? D7REGS \
: (REGNO) < REG_I0 ? PREGS \
: (REGNO) == REG_ARGP ? PREGS \
: (REGNO) >= REG_I0 && (REGNO) <= REG_I3 ? IREGS \
@@ -590,6 +631,9 @@ enum reg_class
#define CLASS_LIKELY_SPILLED_P(CLASS) \
((CLASS) == PREGS_CLOBBERED \
|| (CLASS) == PROLOGUE_REGS \
+ || (CLASS) == D0REGS \
+ || (CLASS) == D1REGS \
+ || (CLASS) == D2REGS \
|| (CLASS) == CCREGS)
/* Do not allow to store a value in REG_CC for any mode */
@@ -1030,7 +1074,7 @@ do { \
#define CONST_3UBIT_IMM_P(VALUE) ((VALUE) >= 0 && (VALUE) <= 7)
#define CONSTRAINT_LEN(C, STR) \
- ((C) == 'P' || (C) == 'M' || (C) == 'N' ? 2 \
+ ((C) == 'P' || (C) == 'M' || (C) == 'N' || (C) == 'q' ? 2 \
: (C) == 'K' ? 3 \
: DEFAULT_CONSTRAINT_LEN ((C), (STR)))
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index 8c088f93caf..fd55f4f58df 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -1007,6 +1007,24 @@
;; DImode arithmetic operations
+(define_insn "add_with_carry"
+ [(set (match_operand:SI 0 "register_operand" "=d,d")
+ (plus:SI (match_operand:SI 1 "register_operand" "%0,0")
+ (match_operand:SI 2 "nonmemory_operand" "Ks7,d")))
+ (set (match_operand:SI 3 "register_operand" "=d,d")
+ (truncate:SI
+ (lshiftrt:DI (plus:DI (zero_extend:DI (match_dup 1))
+ (zero_extend:DI (match_dup 2)))
+ (const_int 32))))
+ (clobber (reg:CC 34))]
+ ""
+ "@
+ %0 += %2; cc = ac0; %3 = cc;
+ %0 = %0 + %2; cc = ac0; %3 = cc;"
+ [(set_attr "type" "alu0")
+ (set_attr "length" "6")
+ (set_attr "seq_insns" "multi")])
+
(define_insn "adddi3"
[(set (match_operand:DI 0 "register_operand" "=&d,&d,&d")
(plus:DI (match_operand:DI 1 "register_operand" "%0,0,0")
@@ -1418,6 +1436,46 @@
"%0 *= %2;"
[(set_attr "type" "mult")])
+(define_expand "umulsi3_highpart"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (zero_extend:DI
+ (match_operand:SI 1 "nonimmediate_operand" ""))
+ (zero_extend:DI
+ (match_operand:SI 2 "register_operand" "")))
+ (const_int 32))))]
+ ""
+{
+ rtx umulsi3_highpart_libfunc
+ = init_one_libfunc ("__umulsi3_highpart");
+
+ emit_library_call_value (umulsi3_highpart_libfunc,
+ operands[0], LCT_NORMAL, SImode,
+ 2, operands[1], SImode, operands[2], SImode);
+ DONE;
+})
+
+(define_expand "smulsi3_highpart"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (sign_extend:DI
+ (match_operand:SI 1 "nonimmediate_operand" ""))
+ (sign_extend:DI
+ (match_operand:SI 2 "register_operand" "")))
+ (const_int 32))))]
+ ""
+{
+ rtx smulsi3_highpart_libfunc
+ = init_one_libfunc ("__smulsi3_highpart");
+
+ emit_library_call_value (smulsi3_highpart_libfunc,
+ operands[0], LCT_NORMAL, SImode,
+ 2, operands[1], SImode, operands[2], SImode);
+ DONE;
+})
+
(define_expand "ashlsi3"
[(set (match_operand:SI 0 "register_operand" "")
(ashift:SI (match_operand:SI 1 "register_operand" "")
@@ -1459,6 +1517,37 @@
%0 = %1 >>> %2%!"
[(set_attr "type" "shft,dsp32")])
+(define_insn "rotl16"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (rotate:SI (match_operand:SI 1 "register_operand" "d")
+ (const_int 16)))]
+ ""
+ "%0 = PACK (%h1, %d1)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_expand "rotlsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (rotate:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "immediate_operand" "")))]
+ ""
+{
+ if (INTVAL (operands[2]) != 16)
+ FAIL;
+})
+
+(define_expand "rotrsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (rotatert:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "immediate_operand" "")))]
+ ""
+{
+ if (INTVAL (operands[2]) != 16)
+ FAIL;
+ emit_insn (gen_rotl16 (operands[0], operands[1]));
+ DONE;
+})
+
+
(define_insn "ror_one"
[(set (match_operand:SI 0 "register_operand" "=d")
(ior:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "d") (const_int 1))
@@ -1639,7 +1728,18 @@
(unspec [(const_int 0)] UNSPEC_LSETUP_END)
(clobber (match_scratch:SI 5 ""))])]
""
- {bfin_hardware_loop ();})
+{
+ /* The loop optimizer doesn't check the predicates... */
+ if (GET_MODE (operands[0]) != SImode)
+ FAIL;
+ /* Due to limitations in the hardware (an initial loop count of 0
+ does not loop 2^32 times) we must avoid to generate a hardware
+ loops when we cannot rule out this case. */
+ if (!flag_unsafe_loop_optimizations
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 0xFFFFFFFF)
+ FAIL;
+ bfin_hardware_loop ();
+})
(define_insn "loop_end"
[(set (pc)
@@ -3238,54 +3338,491 @@
}
[(set_attr "type" "dsp32")])
-(define_insn "mulhisi_ll"
+(define_code_macro s_or_u [sign_extend zero_extend])
+(define_code_attr su_optab [(sign_extend "mul")
+ (zero_extend "umul")])
+(define_code_attr su_modifier [(sign_extend "IS")
+ (zero_extend "FU")])
+
+(define_insn "<su_optab>hisi_ll"
[(set (match_operand:SI 0 "register_operand" "=d")
- (mult:SI (sign_extend:SI
+ (mult:SI (s_or_u:SI
(vec_select:HI (match_operand:V2HI 1 "register_operand" "%d")
(parallel [(const_int 0)])))
- (sign_extend:SI
+ (s_or_u:SI
(vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
(parallel [(const_int 0)])))))]
""
- "%0 = %h1 * %h2 (IS)%!"
+ "%0 = %h1 * %h2 (<su_modifier>)%!"
[(set_attr "type" "dsp32")])
-(define_insn "mulhisi_lh"
+(define_insn "<su_optab>hisi_lh"
[(set (match_operand:SI 0 "register_operand" "=d")
- (mult:SI (sign_extend:SI
- (vec_select:HI (match_operand:V2HI 1 "register_operand" "%d")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d")
(parallel [(const_int 0)])))
- (sign_extend:SI
+ (s_or_u:SI
(vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
(parallel [(const_int 1)])))))]
""
- "%0 = %h1 * %d2 (IS)%!"
+ "%0 = %h1 * %d2 (<su_modifier>)%!"
[(set_attr "type" "dsp32")])
-(define_insn "mulhisi_hl"
+(define_insn "<su_optab>hisi_hl"
[(set (match_operand:SI 0 "register_operand" "=d")
- (mult:SI (sign_extend:SI
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d")
+ (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
+ (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %d1 * %h2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_hh"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (mult:SI (s_or_u:SI
(vec_select:HI (match_operand:V2HI 1 "register_operand" "%d")
(parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
+ (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %d2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+;; Additional variants for signed * unsigned multiply.
+
+(define_insn "usmulhisi_ull"
+ [(set (match_operand:SI 0 "register_operand" "=W")
+ (mult:SI (zero_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "%d")
+ (parallel [(const_int 0)])))
(sign_extend:SI
(vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
(parallel [(const_int 0)])))))]
""
- "%0 = %d1 * %h2 (IS)%!"
+ "%0 = %h2 * %h1 (IS,M)%!"
[(set_attr "type" "dsp32")])
-(define_insn "mulhisi_hh"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (mult:SI (sign_extend:SI
+(define_insn "usmulhisi_ulh"
+ [(set (match_operand:SI 0 "register_operand" "=W")
+ (mult:SI (zero_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
+ (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d2 * %h1 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_uhl"
+ [(set (match_operand:SI 0 "register_operand" "=W")
+ (mult:SI (zero_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
+ (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h2 * %d1 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_uhh"
+ [(set (match_operand:SI 0 "register_operand" "=W")
+ (mult:SI (zero_extend:SI
(vec_select:HI (match_operand:V2HI 1 "register_operand" "%d")
(parallel [(const_int 1)])))
(sign_extend:SI
(vec_select:HI (match_operand:V2HI 2 "register_operand" "d")
(parallel [(const_int 1)])))))]
""
- "%0 = %d1 * %d2 (IS)%!"
+ "%0 = %d2 * %d1 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+;; Parallel versions of these operations. First, normal signed or unsigned
+;; multiplies.
+
+(define_insn "<su_optab>hisi_ll_lh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %h1 * %d2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_ll_hl"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %d1 * %h2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_ll_hh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %d1 * %d2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_lh_hl"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %d1 * %h2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_lh_hh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %d1 * %d2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "<su_optab>hisi_hl_hh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (s_or_u:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (s_or_u:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %h2, %3 = %d1 * %d2 (<su_modifier>)%!"
+ [(set_attr "type" "dsp32")])
+
+;; Special signed * unsigned variants.
+
+(define_insn "usmulhisi_ll_lul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %h1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_ll_luh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %h1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_ll_hul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %d1 * %h2 (IS,M)%!"
[(set_attr "type" "dsp32")])
+(define_insn "usmulhisi_ll_huh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %h2, %3 = %d1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_lh_lul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %h1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_lh_luh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %h1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_lh_hul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %d1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_lh_huh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %h1 * %d2, %3 = %d1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hl_lul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %d1 * %h2, %3 = %h1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hl_luh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %h2, %3 = %h1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hl_hul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %d1 * %h2, %3 = %d1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hl_huh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 0)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %h2, %3 = %d1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hh_lul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %d1 * %d2, %3 = %h1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hh_luh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %d2, %3 = %h1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hh_hul"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 0)])))))]
+ ""
+ "%0 = %d1 * %d2, %3 = %d1 * %h2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+(define_insn "usmulhisi_hh_huh"
+ [(set (match_operand:SI 0 "register_operand" "=q0,q2,q4,q6")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 1 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))
+ (sign_extend:SI
+ (vec_select:HI (match_operand:V2HI 2 "register_operand" "d,d,d,d")
+ (parallel [(const_int 1)])))))
+ (set (match_operand:SI 3 "register_operand" "=q1,q3,q5,q7")
+ (mult:SI (sign_extend:SI
+ (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
+ (zero_extend:SI
+ (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))]
+ ""
+ "%0 = %d1 * %d2, %3 = %d1 * %d2 (IS,M)%!"
+ [(set_attr "type" "dsp32")])
+
+;; Vector neg/abs.
+
(define_insn "ssnegv2hi2"
[(set (match_operand:V2HI 0 "register_operand" "=d")
(ss_neg:V2HI (match_operand:V2HI 1 "register_operand" "d")))]
@@ -3311,7 +3848,7 @@
(ss_ashift:V2HI (match_dup 1) (match_dup 2))))]
""
"@
- %0 = ASHIFT %1 BY %2 (V, S)%!
+ %0 = ASHIFT %1 BY %h2 (V, S)%!
%0 = %1 << %2 (V,S)%!
%0 = %1 >>> %N2 (V,S)%!"
[(set_attr "type" "dsp32")])
@@ -3325,7 +3862,7 @@
(ss_ashift:HI (match_dup 1) (match_dup 2))))]
""
"@
- %0 = ASHIFT %1 BY %2 (V, S)%!
+ %0 = ASHIFT %1 BY %h2 (V, S)%!
%0 = %1 << %2 (V,S)%!
%0 = %1 >>> %N2 (V,S)%!"
[(set_attr "type" "dsp32")])
@@ -3339,7 +3876,7 @@
(ashift:V2HI (match_dup 1) (match_dup 2))))]
""
"@
- %0 = LSHIFT %1 BY %2 (V)%!
+ %0 = LSHIFT %1 BY %h2 (V)%!
%0 = %1 << %2 (V)%!
%0 = %1 >> %N2 (V)%!"
[(set_attr "type" "dsp32")])
@@ -3353,7 +3890,7 @@
(ashift:HI (match_dup 1) (match_dup 2))))]
""
"@
- %0 = LSHIFT %1 BY %2 (V)%!
+ %0 = LSHIFT %1 BY %h2 (V)%!
%0 = %1 << %2 (V)%!
%0 = %1 >> %N2 (V)%!"
[(set_attr "type" "dsp32")])
diff --git a/gcc/config/bfin/lib1funcs.asm b/gcc/config/bfin/lib1funcs.asm
index 77d4fff069b..1d2db9beb3e 100644
--- a/gcc/config/bfin/lib1funcs.asm
+++ b/gcc/config/bfin/lib1funcs.asm
@@ -117,3 +117,50 @@ ___umodsi3:
RTS;
#endif
+#ifdef L_umulsi3_highpart
+.align 2
+.global ___umulsi3_highpart;
+.type ___umulsi3_highpart, STT_FUNC;
+
+___umulsi3_highpart:
+ R2 = R1.H * R0.H, R3 = R1.L * R0.H (FU);
+ R0 = R1.L * R0.L, R1 = R1.H * R0.L (FU);
+ R0 >>= 16;
+ /* Unsigned multiplication has the nice property that we can
+ ignore carry on this first addition. */
+ R0 = R0 + R3;
+ R0 = R0 + R1;
+ cc = ac0;
+ R1 = cc;
+ R1 = PACK(R1.l,R0.h);
+ R0 = R1 + R2;
+ RTS;
+#endif
+
+#ifdef L_smulsi3_highpart
+.align 2
+.global ___smulsi3_highpart;
+.type ___smulsi3_highpart, STT_FUNC;
+
+___smulsi3_highpart:
+ R2 = R1.L * R0.L (FU);
+ R3 = R1.H * R0.L (IS,M);
+ R0 = R0.H * R1.H, R1 = R0.H * R1.L (IS,M);
+
+ R1.L = R2.H + R1.L;
+ cc = ac0;
+ R2 = cc;
+
+ R1.L = R1.L + R3.L;
+ cc = ac0;
+ R1 >>>= 16;
+ R3 >>>= 16;
+ R1 = R1 + R3;
+ R1 = R1 + R2;
+ R2 = cc;
+ R1 = R1 + R2;
+
+ R0 = R0 + R1;
+ RTS;
+#endif
+
diff --git a/gcc/config/bfin/libgcc-bfin.ver b/gcc/config/bfin/libgcc-bfin.ver
new file mode 100644
index 00000000000..1afb78e9c82
--- /dev/null
+++ b/gcc/config/bfin/libgcc-bfin.ver
@@ -0,0 +1,285 @@
+GCC_3.0 {
+ # libgcc1 integer symbols
+ ___absvsi2
+ ___addvsi3
+ ___ashlsi3
+ ___ashrsi3
+ ___divsi3
+ ___lshrsi3
+ ___modsi3
+ ___mulsi3
+ ___mulvsi3
+ ___negvsi2
+ ___subvsi3
+ ___udivsi3
+ ___umodsi3
+
+ # libgcc1 floating point symbols
+ ___addsf3
+ ___adddf3
+ ___addxf3
+ ___addtf3
+ ___divsf3
+ ___divdf3
+ ___divxf3
+ ___divtf3
+ ___eqsf2
+ ___eqdf2
+ ___eqxf2
+ ___eqtf2
+ ___extenddfxf2
+ ___extenddftf2
+ ___extendsfdf2
+ ___extendsfxf2
+ ___extendsftf2
+ ___fixsfsi
+ ___fixdfsi
+ ___fixxfsi
+ ___fixtfsi
+ ___floatsisf
+ ___floatsidf
+ ___floatsixf
+ ___floatsitf
+ ___gesf2
+ ___gedf2
+ ___gexf2
+ ___getf2
+ ___gtsf2
+ ___gtdf2
+ ___gtxf2
+ ___gttf2
+ ___lesf2
+ ___ledf2
+ ___lexf2
+ ___letf2
+ ___ltsf2
+ ___ltdf2
+ ___ltxf2
+ ___lttf2
+ ___mulsf3
+ ___muldf3
+ ___mulxf3
+ ___multf3
+ ___negsf2
+ ___negdf2
+ ___negxf2
+ ___negtf2
+ ___nesf2
+ ___nedf2
+ ___nexf2
+ ___netf2
+ ___subsf3
+ ___subdf3
+ ___subxf3
+ ___subtf3
+ ___truncdfsf2
+ ___truncxfsf2
+ ___trunctfsf2
+ ___truncxfdf2
+ ___trunctfdf2
+
+ # libgcc2 DImode arithmetic (for 32-bit targets).
+ ___absvdi2
+ ___addvdi3
+ ___ashldi3
+ ___ashrdi3
+ ___cmpdi2
+ ___divdi3
+ ___ffsdi2
+ ___fixdfdi
+ ___fixsfdi
+ ___fixtfdi
+ ___fixxfdi
+ ___fixunsdfdi
+ ___fixunsdfsi
+ ___fixunssfsi
+ ___fixunssfdi
+ ___fixunstfdi
+ ___fixunstfsi
+ ___fixunsxfdi
+ ___fixunsxfsi
+ ___floatdidf
+ ___floatdisf
+ ___floatdixf
+ ___floatditf
+ ___lshrdi3
+ ___moddi3
+ ___muldi3
+ ___mulvdi3
+ ___negdi2
+ ___negvdi2
+ ___subvdi3
+ ___ucmpdi2
+ ___udivdi3
+ ___udivmoddi4
+ ___umoddi3
+
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ ___ashlti3
+ ___ashrti3
+ ___cmpti2
+ ___divti3
+ ___ffsti2
+ ___fixdfti
+ ___fixsfti
+ ___fixtfti
+ ___fixxfti
+ ___lshrti3
+ ___modti3
+ ___multi3
+ ___negti2
+ ___ucmpti2
+ ___udivmodti4
+ ___udivti3
+ ___umodti3
+ ___fixunsdfti
+ ___fixunssfti
+ ___fixunstfti
+ ___fixunsxfti
+ ___floattidf
+ ___floattisf
+ ___floattixf
+ ___floattitf
+
+ # Used to deal with trampoline initialization on some platforms
+ ___clear_cache
+
+ # EH symbols
+ __Unwind_DeleteException
+ __Unwind_Find_FDE
+ __Unwind_ForcedUnwind
+ __Unwind_GetGR
+ __Unwind_GetIP
+ __Unwind_GetLanguageSpecificData
+ __Unwind_GetRegionStart
+ __Unwind_GetTextRelBase
+ __Unwind_GetDataRelBase
+ __Unwind_RaiseException
+ __Unwind_Resume
+ __Unwind_SetGR
+ __Unwind_SetIP
+ ___deregister_frame
+ ___deregister_frame_info
+ ___deregister_frame_info_bases
+ ___register_frame
+ ___register_frame_info
+ ___register_frame_info_bases
+ ___register_frame_info_table
+ ___register_frame_info_table_bases
+ ___register_frame_table
+
+ # SjLj EH symbols
+ __Unwind_SjLj_Register
+ __Unwind_SjLj_Unregister
+ __Unwind_SjLj_RaiseException
+ __Unwind_SjLj_ForcedUnwind
+ __Unwind_SjLj_Resume
+}
+
+%inherit GCC_3.3 GCC_3.0
+GCC_3.3 {
+ __Unwind_FindEnclosingFunction
+ __Unwind_GetCFA
+ __Unwind_Backtrace
+ __Unwind_Resume_or_Rethrow
+ __Unwind_SjLj_Resume_or_Rethrow
+}
+
+%inherit GCC_3.3.1 GCC_3.3
+GCC_3.3.1 {
+ ___gcc_personality_sj0
+ ___gcc_personality_v0
+}
+
+%inherit GCC_3.3.2 GCC_3.3.1
+GCC_3.3.2 {
+}
+%inherit GCC_3.3.4 GCC_3.3.2
+GCC_3.3.4 {
+ ___unorddf2
+ ___unordsf2
+}
+
+%inherit GCC_3.4 GCC_3.3.4
+GCC_3.4 {
+ # bit scanning and counting built-ins
+ ___clzsi2
+ ___clzdi2
+ ___clzti2
+ ___ctzsi2
+ ___ctzdi2
+ ___ctzti2
+ ___popcountsi2
+ ___popcountdi2
+ ___popcountti2
+ ___paritysi2
+ ___paritydi2
+ ___parityti2
+}
+
+%inherit GCC_3.4.2 GCC_3.4
+GCC_3.4.2 {
+ # Used to deal with trampoline initialization on some platforms
+ ___enable_execute_stack
+ ___trampoline_setup
+}
+
+%inherit GCC_3.4.4 GCC_3.4.2
+GCC_3.4.4 {
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ ___absvti2
+ ___addvti3
+ ___mulvti3
+ ___negvti2
+ ___subvti3
+}
+
+%inherit GCC_4.0.0 GCC_3.4.4
+GCC_4.0.0 {
+ # libgcc2 ___builtin_powi helpers.
+ ___powisf2
+ ___powidf2
+ ___powixf2
+ ___powitf2
+
+ # c99 compliant complex arithmetic
+ ___divsc3
+ ___divdc3
+ ___divxc3
+ ___divtc3
+ ___mulsc3
+ ___muldc3
+ ___mulxc3
+ ___multc3
+}
+
+%inherit GCC_4.1.0 GCC_4.0.0
+GCC_4.1.0 {
+}
+
+%inherit GCC_4.2.0 GCC_4.1.0
+GCC_4.2.0 {
+ # unsigned-to-floating conversions
+ ___floatunsisf
+ ___floatunsidf
+ ___floatunsixf
+ ___floatunsitf
+ ___floatundidf
+ ___floatundisf
+ ___floatundixf
+ ___floatunditf
+ ___floatuntidf
+ ___floatuntisf
+ ___floatuntixf
+ ___floatuntitf
+ __Unwind_GetIPInfo
+}
+
+%inherit GCC_4.3.0 GCC_4.2.0
+GCC_4.3.0 {
+ # byte swapping routines
+ ___bswapsi2
+ ___bswapdi2
+ ___emutls_get_address
+ ___emutls_register_common
+}
diff --git a/gcc/config/bfin/linux.h b/gcc/config/bfin/linux.h
new file mode 100644
index 00000000000..d391cd0a1fe
--- /dev/null
+++ b/gcc/config/bfin/linux.h
@@ -0,0 +1,49 @@
+#undef SUBTARGET_DRIVER_SELF_SPECS
+#define SUBTARGET_DRIVER_SELF_SPECS \
+ "%{!mno-fdpic:-mfdpic}",
+
+/* The GNU C++ standard library requires that these macros be defined. */
+#undef CPLUSPLUS_CPP_SPEC
+#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
+
+#ifdef __BFIN_FDPIC__
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
+asm (SECTION_OP); \
+asm ("P3 = [SP + 20];\n\tcall " USER_LABEL_PREFIX #FUNC ";"); \
+asm (TEXT_SECTION_ASM_OP);
+#endif
+
+#define NO_IMPLICIT_EXTERN_C
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ LINUX_TARGET_OS_CPP_BUILTINS(); \
+ if (flag_pic) \
+ { \
+ builtin_define ("__PIC__"); \
+ builtin_define ("__pic__"); \
+ } \
+ } \
+ while (0)
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} crtreloc.o%s \
+ crti.o%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+
+#undef LINK_GCC_C_SEQUENCE_SPEC
+#define LINK_GCC_C_SEQUENCE_SPEC \
+ "%{mfast-fp:-lbffastfp} %{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "\
+ %{mfdpic: -m elf32bfinfd -z text} %{shared} %{pie} \
+ %{static:-dn -Bstatic} \
+ %{shared:-G -Bdynamic} \
+ %{!shared: %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
+ %{static}} -init __init -fini __fini"
+
diff --git a/gcc/config/bfin/t-bfin-elf b/gcc/config/bfin/t-bfin-elf
index 06aa0aebeaf..1d9fce6b320 100644
--- a/gcc/config/bfin/t-bfin-elf
+++ b/gcc/config/bfin/t-bfin-elf
@@ -1,7 +1,8 @@
## Target part of the Makefile
LIB1ASMSRC = bfin/lib1funcs.asm
-LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3
+LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 _umulsi3_highpart
+LIB1ASMFUNCS += _smulsi3_highpart
EXTRA_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o
diff --git a/gcc/config/bfin/t-bfin-linux b/gcc/config/bfin/t-bfin-linux
new file mode 100644
index 00000000000..249e1159ffa
--- /dev/null
+++ b/gcc/config/bfin/t-bfin-linux
@@ -0,0 +1,34 @@
+## Target part of the Makefile
+
+LIB1ASMSRC = bfin/lib1funcs.asm
+LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 _umulsi3_highpart
+LIB1ASMFUNCS += _smulsi3_highpart
+
+EXTRA_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o
+
+FPBIT = fp-bit.c
+DPBIT = dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ cat $(srcdir)/config/fp-bit.c > dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+CRTSTUFF_T_CFLAGS = -fpic
+TARGET_LIBGCC2_CFLAGS = -fpic
+
+# Assemble startup files.
+$(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/bfin/crti.s
+
+$(T)crtn.o: $(srcdir)/config/bfin/crtn.s $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/bfin/crtn.s
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o
+
+SHLIB_MAPFILES=$(srcdir)/config/bfin/libgcc-bfin.ver
+
diff --git a/gcc/config/bfin/t-bfin-uclinux b/gcc/config/bfin/t-bfin-uclinux
new file mode 100644
index 00000000000..5d2bfea1f67
--- /dev/null
+++ b/gcc/config/bfin/t-bfin-uclinux
@@ -0,0 +1,43 @@
+## Target part of the Makefile
+
+LIB1ASMSRC = bfin/lib1funcs.asm
+LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 _umulsi3_highpart
+LIB1ASMFUNCS += _smulsi3_highpart
+
+EXTRA_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o
+
+FPBIT = fp-bit.c
+DPBIT = dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ cat $(srcdir)/config/fp-bit.c > dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+CRTSTUFF_T_CFLAGS = -fpic
+TARGET_LIBGCC2_CFLAGS = -fpic
+
+MULTILIB_OPTIONS=mid-shared-library mleaf-id-shared-library
+MULTILIB_OPTIONS+=msep-data
+MULTILIB_DEFAULTS=
+MULTILIB_DIRNAMES=
+MULTILIB_EXCEPTIONS=mleaf-id-shared-library*
+MULTILIB_EXCEPTIONS+=*msep-data*
+
+# Assemble startup files.
+$(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/bfin/crti.s
+
+$(T)crtn.o: $(srcdir)/config/bfin/crtn.s $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/bfin/crtn.s
+
+$(T)crtlibid.o: $(srcdir)/config/bfin/crtlibid.s $(GCC_PASSES)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
+ -c -o $(T)crtlibid.o -x assembler-with-cpp \
+ $(srcdir)/config/bfin/crtlibid.s
+
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o
diff --git a/gcc/config/bfin/uclinux.h b/gcc/config/bfin/uclinux.h
index 57e062dd68e..0678e91d14b 100644
--- a/gcc/config/bfin/uclinux.h
+++ b/gcc/config/bfin/uclinux.h
@@ -21,3 +21,25 @@ asm (TEXT_SECTION_ASM_OP);
#endif
#define NO_IMPLICIT_EXTERN_C
+
+#define LINUX_TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__gnu_linux__"); \
+ builtin_define_std ("linux"); \
+ builtin_define_std ("unix"); \
+ builtin_assert ("system=linux"); \
+ builtin_assert ("system=unix"); \
+ builtin_assert ("system=posix"); \
+ } while (0)
+
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ LINUX_TARGET_OS_CPP_BUILTINS(); \
+ if (flag_pic) \
+ { \
+ builtin_define ("__PIC__"); \
+ builtin_define ("__pic__"); \
+ } \
+ } \
+ while (0)
diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c
index eefd5f6fc5f..dc03a9d96be 100644
--- a/gcc/config/darwin-c.c
+++ b/gcc/config/darwin-c.c
@@ -34,6 +34,8 @@ Boston, MA 02110-1301, USA. */
#include "tm_p.h"
#include "cppdefault.h"
#include "prefix.h"
+#include "target.h"
+#include "target-def.h"
/* Pragmas. */
@@ -42,13 +44,6 @@ Boston, MA 02110-1301, USA. */
static bool using_frameworks = false;
-/* Maintain a small stack of alignments. This is similar to pragma
- pack's stack, but simpler. */
-
-static void push_field_alignment (int);
-static void pop_field_alignment (void);
-static const char *find_subframework_file (const char *, const char *);
-static void add_system_framework_path (char *);
static const char *find_subframework_header (cpp_reader *pfile, const char *header,
cpp_dir **dirp);
@@ -60,6 +55,9 @@ typedef struct align_stack
static struct align_stack * field_align_stack = NULL;
+/* Maintain a small stack of alignments. This is similar to pragma
+ pack's stack, but simpler. */
+
static void
push_field_alignment (int bit_alignment)
{
@@ -619,3 +617,31 @@ darwin_cpp_builtins (cpp_reader *pfile)
builtin_define_with_value ("__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__",
version_as_macro(), false);
}
+
+/* Handle C family front-end options. */
+
+static bool
+handle_c_option (size_t code,
+ const char *arg,
+ int value ATTRIBUTE_UNUSED)
+{
+ switch (code)
+ {
+ default:
+ /* Unrecognized options that we said we'd handle turn into
+ errors if not listed here. */
+ return false;
+
+ case OPT_iframework:
+ add_system_framework_path (xstrdup (arg));
+ break;
+ }
+
+ /* We recognized the option. */
+ return true;
+}
+
+#undef TARGET_HANDLE_C_OPTION
+#define TARGET_HANDLE_C_OPTION handle_c_option
+
+struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
diff --git a/gcc/config/darwin-crt3.c b/gcc/config/darwin-crt3.c
index 65b766369ee..ac5e0398f58 100644
--- a/gcc/config/darwin-crt3.c
+++ b/gcc/config/darwin-crt3.c
@@ -27,6 +27,9 @@ along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
+/* Don't do anything if we are compiling for a kext multilib. */
+#ifdef __PIC__
+
/* It is incorrect to include config.h here, because this file is being
compiled for the target, and hence definitions concerning only the host
do not apply. */
@@ -530,3 +533,5 @@ atexit (atexit_callback func)
r.has_arg = 0;
return atexit_common (&r, &__dso_handle);
}
+
+#endif /* __PIC__ */
diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h
index b28317b8b77..8981eded88b 100644
--- a/gcc/config/darwin-protos.h
+++ b/gcc/config/darwin-protos.h
@@ -52,6 +52,7 @@ extern void darwin_set_default_type_attributes (tree);
extern void machopic_finish (FILE *);
+extern int machopic_reloc_rw_mask (void);
extern section *machopic_select_section (tree, int, unsigned HOST_WIDE_INT);
extern section *machopic_select_rtx_section (enum machine_mode, rtx,
unsigned HOST_WIDE_INT);
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 7bd916d907b..507b1b47a3f 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -1172,6 +1172,12 @@ darwin_mergeable_constant_section (tree exp,
return readonly_data_section;
}
+int
+machopic_reloc_rw_mask (void)
+{
+ return MACHOPIC_INDIRECT ? 3 : 0;
+}
+
section *
machopic_select_section (tree decl,
int reloc,
@@ -1182,10 +1188,9 @@ machopic_select_section (tree decl,
&& (lookup_attribute ("weak", DECL_ATTRIBUTES (decl))
|| ! lookup_attribute ("weak_import",
DECL_ATTRIBUTES (decl))));
- int shlib = flag_pic;
section *base_section;
- switch (categorize_decl_for_section (decl, reloc, shlib))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_TEXT:
base_section = darwin_text_section (reloc, weak);
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index 43c7937b7b6..07cc7767a65 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -351,7 +351,7 @@ extern GTY(()) int darwin_ms_struct;
#undef REAL_LIBGCC_SPEC
#define REAL_LIBGCC_SPEC \
"%{static-libgcc|static: -lgcc_eh -lgcc; \
- shared-libgcc|fexceptions: \
+ shared-libgcc|fexceptions|fgnu-runtime: \
%:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \
%:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5) \
-lgcc; \
@@ -377,7 +377,8 @@ extern GTY(()) int darwin_ms_struct;
%{!pg:%{static:-lcrt0.o} \
%{!static:%{object:-lcrt0.o} \
%{!object:%{preload:-lcrt0.o} \
- %{!preload: %(darwin_crt1) %(darwin_crt2)}}}}}} \
+ %{!preload: %(darwin_crt1) \
+ %(darwin_crt2)}}}}}} \
%{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}"
/* The native Darwin linker doesn't necessarily place files in the order
@@ -385,17 +386,17 @@ extern GTY(()) int darwin_ms_struct;
to put anything in ENDFILE_SPEC. */
/* #define ENDFILE_SPEC "" */
-#define DARWIN_EXTRA_SPECS \
- { "darwin_crt1", DARWIN_CRT1_SPEC }, \
- { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \
+#define DARWIN_EXTRA_SPECS \
+ { "darwin_crt1", DARWIN_CRT1_SPEC }, \
+ { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \
{ "darwin_minversion", DARWIN_MINVERSION_SPEC },
-#define DARWIN_DYLIB1_SPEC \
- "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
+#define DARWIN_DYLIB1_SPEC \
+ "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
%:version-compare(>= 10.5 mmacosx-version-min= -ldylib1.10.5.o)"
-#define DARWIN_CRT1_SPEC \
- "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \
+#define DARWIN_CRT1_SPEC \
+ "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \
%:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)"
/* Default Darwin ASM_SPEC, very simple. */
@@ -700,6 +701,8 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
#define TARGET_ASM_UNIQUE_SECTION darwin_unique_section
#undef TARGET_ASM_FUNCTION_RODATA_SECTION
#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
@@ -979,4 +982,6 @@ extern int flag_mkernel;
extern int flag_apple_kext;
#define TARGET_KEXTABI flag_apple_kext
+#define TARGET_HAS_TARGETCM 1
+
#endif /* CONFIG_DARWIN_H */
diff --git a/gcc/config/darwin.opt b/gcc/config/darwin.opt
index 28dd1c4cfa9..b27b3db75ca 100644
--- a/gcc/config/darwin.opt
+++ b/gcc/config/darwin.opt
@@ -42,3 +42,7 @@ Generate code for darwin loadable kernel extensions
mkernel
Target Report Var(flag_mkernel)
Generate code for the kernel or loadable kernel extensions
+
+iframework
+Target RejectNegative C ObjC C++ ObjC++ Joined Separate
+-iframework <dir> Add <dir> to the end of the system framework include path
diff --git a/gcc/config/dfp-bit.c b/gcc/config/dfp-bit.c
index 927804c1def..2fa89996967 100644
--- a/gcc/config/dfp-bit.c
+++ b/gcc/config/dfp-bit.c
@@ -450,7 +450,7 @@ DFP_TO_INT (DFP_C_TYPE x)
/* Rescale if the exponent is less than zero. */
decNumberToIntegralValue (&n2, &n1, &context);
/* Get a value to use for the quantize call. */
- decNumberFromString (&qval, (char *) "1.0", &context);
+ decNumberFromString (&qval, (char *) "1.", &context);
/* Force the exponent to zero. */
decNumberQuantize (&n1, &n2, &qval, &context);
/* Get a string, which at this point will not include an exponent. */
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index ab8704f6695..67b6206e37d 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -2595,33 +2595,7 @@ fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL)
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
fprintf (STREAM, "\t.word .L%d\n", VALUE)
-/* Define this if the label before a jump-table needs to be output specially.
- The first three arguments are the same as for `(*targetm.asm_out.internal_label)';
- the fourth argument is the jump-table which follows (a `jump_insn'
- containing an `addr_vec' or `addr_diff_vec').
-
- This feature is used on system V to output a `swbeg' statement for the
- table.
-
- If this macro is not defined, these labels are output with
- `(*targetm.asm_out.internal_label)'.
-
- Defined in svr4.h. */
-/* When generating embedded PIC or 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(STREAM, PREFIX, NUM, TABLE) \
-do { \
- if (flag_pic) \
- switch_to_section (function_section (current_function_decl)); \
- (*targetm.asm_out.internal_label) (STREAM, PREFIX, NUM); \
-} while (0)
-
+#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
/* Assembler Commands for Exception Regions. */
diff --git a/gcc/config/i386/att.h b/gcc/config/i386/att.h
index 28d0f6ce27c..a454e42fce5 100644
--- a/gcc/config/i386/att.h
+++ b/gcc/config/i386/att.h
@@ -33,6 +33,7 @@ Boston, MA 02110-1301, USA. */
/* How to output an ASCII string constant. */
+#undef ASM_OUTPUT_ASCII
#define ASM_OUTPUT_ASCII(FILE, PTR, SIZE) \
do \
{ size_t i = 0, limit = (SIZE); \
@@ -57,6 +58,7 @@ do \
/* This is how to output an assembler line
that says to advance the location counter by SIZE bytes. */
+#undef ASM_OUTPUT_SKIP
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf ((FILE), "\t.set .,.+%u\n", (int)(SIZE))
diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h
index e507d59f6ec..0f5b54545dc 100644
--- a/gcc/config/i386/darwin.h
+++ b/gcc/config/i386/darwin.h
@@ -84,7 +84,11 @@ Boston, MA 02110-1301, USA. */
#define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC
/* Determine a minimum version based on compiler options. */
-#define DARWIN_MINVERSION_SPEC "10.4"
+#define DARWIN_MINVERSION_SPEC \
+ "%{!m64|fgnu-runtime:10.4; \
+ ,objective-c|,objc-cpp-output:10.5; \
+ ,objective-c++|,objective-c++-cpp-output:10.5; \
+ :10.4}"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
diff --git a/gcc/config/i386/driver-i386.c b/gcc/config/i386/driver-i386.c
index df43512f775..a4155373f1a 100644
--- a/gcc/config/i386/driver-i386.c
+++ b/gcc/config/i386/driver-i386.c
@@ -43,10 +43,136 @@ const char *host_detect_local_cpu (int argc, const char **argv);
#define bit_SSE4a (1 << 6)
#define bit_CMPXCHG16B (1 << 13)
+#define bit_LAHF_LM (1 << 0)
#define bit_3DNOW (1 << 31)
#define bit_3DNOWP (1 << 30)
#define bit_LM (1 << 29)
+/* Returns parameters that describe L1_ASSOC associative cache of size
+ L1_SIZEKB with lines of size L1_LINE. */
+
+static char *
+describe_cache (unsigned l1_sizekb, unsigned l1_line,
+ unsigned l1_assoc ATTRIBUTE_UNUSED)
+{
+ char size[1000], line[1000];
+ unsigned size_in_lines;
+
+ /* At the moment, gcc middle-end does not use the information about the
+ associativity of the cache. */
+
+ size_in_lines = (l1_sizekb * 1024) / l1_line;
+
+ sprintf (size, "--param l1-cache-size=%u", size_in_lines);
+ sprintf (line, "--param l1-cache-line-size=%u", l1_line);
+
+ return concat (size, " ", line, " ", NULL);
+}
+
+/* Returns the description of caches for an AMD processor. */
+
+static char *
+detect_caches_amd (unsigned max_ext_level)
+{
+ unsigned eax, ebx, ecx, edx;
+ unsigned l1_sizekb, l1_line, l1_assoc;
+
+ if (max_ext_level < 0x80000005)
+ return NULL;
+
+ cpuid (0x80000005, eax, ebx, ecx, edx);
+
+ l1_line = ecx & 0xff;
+ l1_sizekb = (ecx >> 24) & 0xff;
+ l1_assoc = (ecx >> 16) & 0xff;
+
+ return describe_cache (l1_sizekb, l1_line, l1_assoc);
+}
+
+/* Stores the size of the L1 cache and cache line, and the associativity
+ of the cache according to REG to L1_SIZEKB, L1_LINE and L1_ASSOC. */
+
+static void
+decode_caches_intel (unsigned reg, unsigned *l1_sizekb, unsigned *l1_line,
+ unsigned *l1_assoc)
+{
+ unsigned i, val;
+
+ if (((reg >> 31) & 1) != 0)
+ return;
+
+ for (i = 0; i < 4; i++)
+ {
+ val = reg & 0xff;
+ reg >>= 8;
+
+ switch (val)
+ {
+ case 0xa:
+ *l1_sizekb = 8;
+ *l1_line = 32;
+ *l1_assoc = 2;
+ break;
+ case 0xc:
+ *l1_sizekb = 16;
+ *l1_line = 32;
+ *l1_assoc = 4;
+ break;
+ case 0x2c:
+ *l1_sizekb = 32;
+ *l1_line = 64;
+ *l1_assoc = 8;
+ break;
+ case 0x60:
+ *l1_sizekb = 16;
+ *l1_line = 64;
+ *l1_assoc = 8;
+ break;
+ case 0x66:
+ *l1_sizekb = 8;
+ *l1_line = 64;
+ *l1_assoc = 4;
+ break;
+ case 0x67:
+ *l1_sizekb = 16;
+ *l1_line = 64;
+ *l1_assoc = 4;
+ break;
+ case 0x68:
+ *l1_sizekb = 32;
+ *l1_line = 64;
+ *l1_assoc = 4;
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+/* Returns the description of caches for an intel processor. */
+
+static char *
+detect_caches_intel (unsigned max_level)
+{
+ unsigned eax, ebx, ecx, edx;
+ unsigned l1_sizekb = 0, l1_line = 0, assoc = 0;
+
+ if (max_level < 2)
+ return NULL;
+
+ cpuid (2, eax, ebx, ecx, edx);
+
+ decode_caches_intel (eax, &l1_sizekb, &l1_line, &assoc);
+ decode_caches_intel (ebx, &l1_sizekb, &l1_line, &assoc);
+ decode_caches_intel (ecx, &l1_sizekb, &l1_line, &assoc);
+ decode_caches_intel (edx, &l1_sizekb, &l1_line, &assoc);
+ if (!l1_sizekb)
+ return (char *) "";
+
+ return describe_cache (l1_sizekb, l1_line, assoc);
+}
+
/* This will be called by the spec parser in gcc.c when it sees
a %:local_cpu_detect(args) construct. Currently it will be called
with either "arch" or "tune" as argument depending on if -march=native
@@ -62,6 +188,8 @@ const char *host_detect_local_cpu (int argc, const char **argv);
const char *host_detect_local_cpu (int argc, const char **argv)
{
const char *cpu = NULL;
+ const char *cache = "";
+ const char *options = "";
enum processor_type processor = PROCESSOR_I386;
unsigned int eax, ebx, ecx, edx;
unsigned int max_level;
@@ -69,6 +197,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
unsigned int ext_level;
unsigned char has_mmx = 0, has_3dnow = 0, has_3dnowp = 0, has_sse = 0;
unsigned char has_sse2 = 0, has_sse3 = 0, has_ssse3 = 0, has_cmov = 0;
+ unsigned char has_cmpxchg16b = 0, has_lahf_lm = 0;
unsigned char has_longmode = 0, has_cmpxchg8b = 0, has_sse4a = 0;
unsigned char is_amd = 0;
unsigned int family = 0;
@@ -110,6 +239,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
has_sse2 = !!(edx & bit_SSE2);
has_sse3 = !!(ecx & bit_SSE3);
has_ssse3 = !!(ecx & bit_SSSE3);
+ has_cmpxchg16b = !!(ecx & bit_CMPXCHG16B);
/* We don't care for extended family. */
family = (eax >> 8) & ~(1 << 4);
@@ -118,6 +248,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
if (ext_level >= 0x80000000)
{
cpuid (0x80000001, eax, ebx, ecx, edx);
+ has_lahf_lm = !!(ecx & bit_LAHF_LM);
has_3dnow = !!(edx & bit_3DNOW);
has_3dnowp = !!(edx & bit_3DNOWP);
has_longmode = !!(edx & bit_LM);
@@ -126,6 +257,14 @@ const char *host_detect_local_cpu (int argc, const char **argv)
is_amd = vendor == *(unsigned int*)"Auth";
+ if (!arch)
+ {
+ if (is_amd)
+ cache = detect_caches_amd (ext_level);
+ else if (vendor == *(unsigned int*)"Genu")
+ cache = detect_caches_intel (max_level);
+ }
+
if (is_amd)
{
if (has_mmx)
@@ -282,8 +421,16 @@ const char *host_detect_local_cpu (int argc, const char **argv)
break;
}
+ if (arch)
+ {
+ if (has_cmpxchg16b)
+ options = concat (options, "-mcx16 ", NULL);
+ if (has_lahf_lm)
+ options = concat (options, "-msahf ", NULL);
+ }
+
done:
- return concat ("-m", argv[0], "=", cpu, NULL);
+ return concat (cache, "-m", argv[0], "=", cpu, " ", options, NULL);
}
#else
/* If we aren't compiling with GCC we just provide a minimal
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index 24655fe2377..a3a0f664882 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -249,5 +249,6 @@ extern void x86_elf_aligned_common (FILE *, const char *,
extern void ix86_fp_comparison_codes (enum rtx_code code, enum rtx_code *,
enum rtx_code *, enum rtx_code *);
extern enum rtx_code ix86_fp_compare_code_to_integer (enum rtx_code);
+extern rtx construct_plt_address (rtx);
#endif
extern int asm_preferred_eh_data_format (int, int);
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 8ad98d80eea..d4101cb4acd 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -984,205 +984,268 @@ const struct processor_costs *ix86_cost = &pentium_cost;
#define m_486 (1<<PROCESSOR_I486)
#define m_PENT (1<<PROCESSOR_PENTIUM)
#define m_PPRO (1<<PROCESSOR_PENTIUMPRO)
+#define m_PENT4 (1<<PROCESSOR_PENTIUM4)
+#define m_NOCONA (1<<PROCESSOR_NOCONA)
+#define m_CORE2 (1<<PROCESSOR_CORE2)
+
#define m_GEODE (1<<PROCESSOR_GEODE)
-#define m_K6_GEODE (m_K6 | m_GEODE)
#define m_K6 (1<<PROCESSOR_K6)
-#define m_ATHLON (1<<PROCESSOR_ATHLON)
-#define m_PENT4 (1<<PROCESSOR_PENTIUM4)
+#define m_K6_GEODE (m_K6 | m_GEODE)
#define m_K8 (1<<PROCESSOR_K8)
+#define m_ATHLON (1<<PROCESSOR_ATHLON)
#define m_ATHLON_K8 (m_K8 | m_ATHLON)
#define m_AMDFAM10 (1<<PROCESSOR_AMDFAM10)
-#define m_NOCONA (1<<PROCESSOR_NOCONA)
-#define m_CORE2 (1<<PROCESSOR_CORE2)
+#define m_ATHLON_K8_AMDFAM10 (m_K8 | m_ATHLON | m_AMDFAM10)
+
#define m_GENERIC32 (1<<PROCESSOR_GENERIC32)
#define m_GENERIC64 (1<<PROCESSOR_GENERIC64)
-#define m_GENERIC (m_GENERIC32 | m_GENERIC64)
-#define m_ATHLON_K8_AMDFAM10 (m_K8 | m_ATHLON | m_AMDFAM10)
/* Generic instruction choice should be common subset of supported CPUs
(PPro/PENT4/NOCONA/CORE2/Athlon/K8). */
+#define m_GENERIC (m_GENERIC32 | m_GENERIC64)
-/* Leave is not affecting Nocona SPEC2000 results negatively, so enabling for
- Generic64 seems like good code size tradeoff. We can't enable it for 32bit
- generic because it is not working well with PPro base chips. */
-const int x86_use_leave = m_386 | m_K6_GEODE | m_ATHLON_K8_AMDFAM10 | m_CORE2
- | m_GENERIC64;
-const int x86_push_memory = m_386 | m_K6_GEODE | m_ATHLON_K8_AMDFAM10 | m_PENT4
- | m_NOCONA | m_CORE2 | m_GENERIC;
-const int x86_zero_extend_with_and = m_486 | m_PENT;
-/* Enable to zero extend integer registers to avoid partial dependencies */
-const int x86_movx = m_ATHLON_K8_AMDFAM10 | m_PPRO | m_PENT4 | m_NOCONA
- | m_CORE2 | m_GENERIC | m_GEODE /* m_386 | m_K6 */;
-const int x86_double_with_add = ~m_386;
-const int x86_use_bit_test = m_386;
-const int x86_unroll_strlen = m_486 | m_PENT | m_PPRO | m_ATHLON_K8_AMDFAM10
- | m_K6 | m_CORE2 | m_GENERIC;
-const int x86_cmove = m_PPRO | m_GEODE | m_ATHLON_K8_AMDFAM10 | m_PENT4
- | m_NOCONA;
-const int x86_3dnow_a = m_ATHLON_K8_AMDFAM10;
-const int x86_deep_branch = m_PPRO | m_K6_GEODE | m_ATHLON_K8_AMDFAM10
- | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC;
-/* Branch hints were put in P4 based on simulation result. But
- after P4 was made, no performance benefit was observed with
- branch hints. It also increases the code size. As the result,
- icc never generates branch hints. */
-const int x86_branch_hints = 0;
-const int x86_use_sahf = m_PPRO | m_K6_GEODE | m_PENT4 | m_NOCONA | m_GENERIC32;
- /*m_GENERIC | m_ATHLON_K8 ? */
-/* We probably ought to watch for partial register stalls on Generic32
- compilation setting as well. However in current implementation the
- partial register stalls are not eliminated very well - they can
- be introduced via subregs synthesized by combine and can happen
- in caller/callee saving sequences.
- Because this option pays back little on PPro based chips and is in conflict
- with partial reg. dependencies used by Athlon/P4 based chips, it is better
- to leave it off for generic32 for now. */
-const int x86_partial_reg_stall = m_PPRO;
-const int x86_partial_flag_reg_stall = m_CORE2 | m_GENERIC;
-const int x86_use_himode_fiop = m_386 | m_486 | m_K6_GEODE;
-const int x86_use_simode_fiop = ~(m_PPRO | m_ATHLON_K8_AMDFAM10 | m_PENT
- | m_CORE2 | m_GENERIC);
-const int x86_use_mov0 = m_K6;
-const int x86_use_cltd = ~(m_PENT | m_K6 | m_CORE2 | m_GENERIC);
-/* Use xchgb %rh,%rl instead of rolw/rorw $8,rx. */
-const int x86_use_xchgb = m_PENT4;
-const int x86_read_modify_write = ~m_PENT;
-const int x86_read_modify = ~(m_PENT | m_PPRO);
-const int x86_split_long_moves = m_PPRO;
-const int x86_promote_QImode = m_K6_GEODE | m_PENT | m_386 | m_486
- | m_ATHLON_K8_AMDFAM10 | m_CORE2 | m_GENERIC;
- /* m_PENT4 ? */
-const int x86_fast_prefix = ~(m_PENT | m_486 | m_386);
-const int x86_single_stringop = m_386 | m_PENT4 | m_NOCONA;
-const int x86_qimode_math = ~(0);
-const int x86_promote_qi_regs = 0;
-/* On PPro this flag is meant to avoid partial register stalls. Just like
- the x86_partial_reg_stall this option might be considered for Generic32
- if our scheme for avoiding partial stalls was more effective. */
-const int x86_himode_math = ~(m_PPRO);
-const int x86_promote_hi_regs = m_PPRO;
-/* Enable if add/sub rsp is preferred over 1 or 2 push/pop */
-const int x86_sub_esp_4 = m_ATHLON_K8_AMDFAM10 | m_PPRO | m_PENT4 | m_NOCONA
- | m_CORE2 | m_GENERIC;
-const int x86_sub_esp_8 = m_ATHLON_K8_AMDFAM10 | m_PPRO | m_386 | m_486
- | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC;
-const int x86_add_esp_4 = m_ATHLON_K8_AMDFAM10 | m_K6_GEODE | m_PENT4 | m_NOCONA
- | m_CORE2 | m_GENERIC;
-const int x86_add_esp_8 = m_ATHLON_K8_AMDFAM10 | m_PPRO | m_K6_GEODE | m_386
- | m_486 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC;
-/* Enable if integer moves are preferred for DFmode copies */
-const int x86_integer_DFmode_moves = ~(m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA
- | m_PPRO | m_CORE2 | m_GENERIC | m_GEODE);
-const int x86_partial_reg_dependency = m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA
- | m_CORE2 | m_GENERIC;
-const int x86_memory_mismatch_stall = m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA
- | m_CORE2 | m_GENERIC;
-/* If ACCUMULATE_OUTGOING_ARGS is enabled, the maximum amount of space required
- for outgoing arguments will be computed and placed into the variable
- `current_function_outgoing_args_size'. No space will be pushed onto the stack
- for each call; instead, the function prologue should increase the stack frame
- size by this amount. Setting both PUSH_ARGS and ACCUMULATE_OUTGOING_ARGS is
- not proper. */
-const int x86_accumulate_outgoing_args = m_ATHLON_K8_AMDFAM10 | m_PENT4
- | m_NOCONA | m_PPRO | m_CORE2
- | m_GENERIC;
-const int x86_prologue_using_move = m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC;
-const int x86_epilogue_using_move = m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC;
-const int x86_shift1 = ~m_486;
-const int x86_arch_always_fancy_math_387 = m_PENT | m_PPRO
- | m_ATHLON_K8_AMDFAM10 | m_PENT4
- | m_NOCONA | m_CORE2 | m_GENERIC;
-/* In Generic model we have an conflict here in between PPro/Pentium4 based chips
- that thread 128bit SSE registers as single units versus K8 based chips that
- divide SSE registers to two 64bit halves.
- x86_sse_partial_reg_dependency promote all store destinations to be 128bit
- to allow register renaming on 128bit SSE units, but usually results in one
- extra microop on 64bit SSE units. Experimental results shows that disabling
- this option on P4 brings over 20% SPECfp regression, while enabling it on
- K8 brings roughly 2.4% regression that can be partly masked by careful scheduling
- of moves. */
-const int x86_sse_partial_reg_dependency = m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
- | m_GENERIC | m_AMDFAM10;
-/* Set for machines where the type and dependencies are resolved on SSE
- register parts instead of whole registers, so we may maintain just
- lower part of scalar values in proper format leaving the upper part
- undefined. */
-const int x86_sse_split_regs = m_ATHLON_K8;
-/* Code generation for scalar reg-reg moves of single and double precision data:
- if (x86_sse_partial_reg_dependency == true | x86_sse_split_regs == true)
- movaps reg, reg
- else
- movss reg, reg
- if (x86_sse_partial_reg_dependency == true)
- movapd reg, reg
- else
- movsd reg, reg
+/* Feature tests against the various tunings. */
+unsigned int ix86_tune_features[X86_TUNE_LAST] = {
+ /* X86_TUNE_USE_LEAVE: Leave does not affect Nocona SPEC2000 results
+ negatively, so enabling for Generic64 seems like good code size
+ tradeoff. We can't enable it for 32bit generic because it does not
+ work well with PPro base chips. */
+ m_386 | m_K6_GEODE | m_ATHLON_K8_AMDFAM10 | m_CORE2 | m_GENERIC64,
- Code generation for scalar loads of double precision data:
- if (x86_sse_split_regs == true)
- movlpd mem, reg (gas syntax)
- else
- movsd mem, reg
-
- Code generation for unaligned packed loads of single precision data
- (x86_sse_unaligned_move_optimal overrides x86_sse_partial_reg_dependency):
- if (x86_sse_unaligned_move_optimal)
- movups mem, reg
+ /* X86_TUNE_PUSH_MEMORY */
+ m_386 | m_K6_GEODE | m_ATHLON_K8_AMDFAM10 | m_PENT4
+ | m_NOCONA | m_CORE2 | m_GENERIC,
- if (x86_sse_partial_reg_dependency == true)
- {
- xorps reg, reg
- movlps mem, reg
- movhps mem+8, reg
- }
- else
- {
- movlps mem, reg
- movhps mem+8, reg
- }
+ /* X86_TUNE_ZERO_EXTEND_WITH_AND */
+ m_486 | m_PENT,
- Code generation for unaligned packed loads of double precision data
- (x86_sse_unaligned_move_optimal overrides x86_sse_split_regs):
- if (x86_sse_unaligned_move_optimal)
- movupd mem, reg
+ /* X86_TUNE_USE_BIT_TEST */
+ m_386,
- if (x86_sse_split_regs == true)
- {
- movlpd mem, reg
- movhpd mem+8, reg
- }
- else
- {
- movsd mem, reg
- movhpd mem+8, reg
- }
- */
-const int x86_sse_unaligned_move_optimal = m_AMDFAM10;
-const int x86_sse_typeless_stores = m_ATHLON_K8_AMDFAM10;
-const int x86_sse_load0_by_pxor = m_PPRO | m_PENT4 | m_NOCONA;
-const int x86_use_ffreep = m_ATHLON_K8_AMDFAM10;
-const int x86_use_incdec = ~(m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC);
-
-const int x86_inter_unit_moves = ~(m_ATHLON_K8_AMDFAM10 | m_GENERIC);
-
-const int x86_ext_80387_constants = m_K6_GEODE | m_ATHLON_K8 | m_PENT4
- | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC;
-/* Some CPU cores are not able to predict more than 4 branch instructions in
- the 16 byte window. */
-const int x86_four_jump_limit = m_PPRO | m_ATHLON_K8_AMDFAM10 | m_PENT4
- | m_NOCONA | m_CORE2 | m_GENERIC;
-const int x86_schedule = m_PPRO | m_ATHLON_K8_AMDFAM10 | m_K6_GEODE | m_PENT
- | m_CORE2 | m_GENERIC;
-const int x86_use_bt = m_ATHLON_K8_AMDFAM10;
-/* Compare and exchange was added for 80486. */
-const int x86_cmpxchg = ~m_386;
-/* Compare and exchange 8 bytes was added for pentium. */
-const int x86_cmpxchg8b = ~(m_386 | m_486);
-/* Exchange and add was added for 80486. */
-const int x86_xadd = ~m_386;
-/* Byteswap was added for 80486. */
-const int x86_bswap = ~m_386;
-const int x86_pad_returns = m_ATHLON_K8_AMDFAM10 | m_CORE2 | m_GENERIC;
+ /* X86_TUNE_UNROLL_STRLEN */
+ m_486 | m_PENT | m_PPRO | m_ATHLON_K8_AMDFAM10 | m_K6 | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_DEEP_BRANCH_PREDICTION */
+ m_PPRO | m_K6_GEODE | m_ATHLON_K8_AMDFAM10 | m_PENT4
+ | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_BRANCH_PREDICTION_HINTS: Branch hints were put in P4 based
+ on simulation result. But after P4 was made, no performance benefit
+ was observed with branch hints. It also increases the code size.
+ As a result, icc never generates branch hints. */
+ 0,
+
+ /* X86_TUNE_DOUBLE_WITH_ADD */
+ ~m_386,
+
+ /* X86_TUNE_USE_SAHF */
+ m_PPRO | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_PENT4
+ | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_MOVX: Enable to zero extend integer registers to avoid
+ partial dependencies. */
+ m_ATHLON_K8_AMDFAM10 | m_PPRO | m_PENT4 | m_NOCONA
+ | m_CORE2 | m_GENERIC | m_GEODE /* m_386 | m_K6 */,
+
+ /* X86_TUNE_PARTIAL_REG_STALL: We probably ought to watch for partial
+ register stalls on Generic32 compilation setting as well. However
+ in current implementation the partial register stalls are not eliminated
+ very well - they can be introduced via subregs synthesized by combine
+ and can happen in caller/callee saving sequences. Because this option
+ pays back little on PPro based chips and is in conflict with partial reg
+ dependencies used by Athlon/P4 based chips, it is better to leave it off
+ for generic32 for now. */
+ m_PPRO,
+
+ /* X86_TUNE_PARTIAL_FLAG_REG_STALL */
+ m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_USE_HIMODE_FIOP */
+ m_386 | m_486 | m_K6_GEODE,
+
+ /* X86_TUNE_USE_SIMODE_FIOP */
+ ~(m_PPRO | m_ATHLON_K8_AMDFAM10 | m_PENT | m_CORE2 | m_GENERIC),
+
+ /* X86_TUNE_USE_MOV0 */
+ m_K6,
+
+ /* X86_TUNE_USE_CLTD */
+ ~(m_PENT | m_K6 | m_CORE2 | m_GENERIC),
+
+ /* X86_TUNE_USE_XCHGB: Use xchgb %rh,%rl instead of rolw/rorw $8,rx. */
+ m_PENT4,
+
+ /* X86_TUNE_SPLIT_LONG_MOVES */
+ m_PPRO,
+
+ /* X86_TUNE_READ_MODIFY_WRITE */
+ ~m_PENT,
+
+ /* X86_TUNE_READ_MODIFY */
+ ~(m_PENT | m_PPRO),
+
+ /* X86_TUNE_PROMOTE_QIMODE */
+ m_K6_GEODE | m_PENT | m_386 | m_486 | m_ATHLON_K8_AMDFAM10 | m_CORE2
+ | m_GENERIC /* | m_PENT4 ? */,
+
+ /* X86_TUNE_FAST_PREFIX */
+ ~(m_PENT | m_486 | m_386),
+
+ /* X86_TUNE_SINGLE_STRINGOP */
+ m_386 | m_PENT4 | m_NOCONA,
+
+ /* X86_TUNE_QIMODE_MATH */
+ ~0,
+
+ /* X86_TUNE_HIMODE_MATH: On PPro this flag is meant to avoid partial
+ register stalls. Just like X86_TUNE_PARTIAL_REG_STALL this option
+ might be considered for Generic32 if our scheme for avoiding partial
+ stalls was more effective. */
+ ~m_PPRO,
+
+ /* X86_TUNE_PROMOTE_QI_REGS */
+ 0,
+
+ /* X86_TUNE_PROMOTE_HI_REGS */
+ m_PPRO,
+
+ /* X86_TUNE_ADD_ESP_4: Enable if add/sub is preferred over 1/2 push/pop. */
+ m_ATHLON_K8_AMDFAM10 | m_K6_GEODE | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_ADD_ESP_8 */
+ m_ATHLON_K8_AMDFAM10 | m_PPRO | m_K6_GEODE | m_386
+ | m_486 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SUB_ESP_4 */
+ m_ATHLON_K8_AMDFAM10 | m_PPRO | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SUB_ESP_8 */
+ m_ATHLON_K8_AMDFAM10 | m_PPRO | m_386 | m_486
+ | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_INTEGER_DFMODE_MOVES: Enable if integer moves are preferred
+ for DFmode copies */
+ ~(m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2
+ | m_GENERIC | m_GEODE),
+
+ /* X86_TUNE_PARTIAL_REG_DEPENDENCY */
+ m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: In the Generic model we have a
+ conflict here in between PPro/Pentium4 based chips that thread 128bit
+ SSE registers as single units versus K8 based chips that divide SSE
+ registers to two 64bit halves. This knob promotes all store destinations
+ to be 128bit to allow register renaming on 128bit SSE units, but usually
+ results in one extra microop on 64bit SSE units. Experimental results
+ shows that disabling this option on P4 brings over 20% SPECfp regression,
+ while enabling it on K8 brings roughly 2.4% regression that can be partly
+ masked by careful scheduling of moves. */
+ m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC | m_AMDFAM10,
+
+ /* X86_TUNE_SSE_UNALIGNED_MOVE_OPTIMAL */
+ m_AMDFAM10,
+
+ /* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
+ are resolved on SSE register parts instead of whole registers, so we may
+ maintain just lower part of scalar values in proper format leaving the
+ upper part undefined. */
+ m_ATHLON_K8,
+
+ /* X86_TUNE_SSE_TYPELESS_STORES */
+ m_ATHLON_K8_AMDFAM10,
+
+ /* X86_TUNE_SSE_LOAD0_BY_PXOR */
+ m_PPRO | m_PENT4 | m_NOCONA,
+
+ /* X86_TUNE_MEMORY_MISMATCH_STALL */
+ m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_PROLOGUE_USING_MOVE */
+ m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_EPILOGUE_USING_MOVE */
+ m_ATHLON_K8 | m_PPRO | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SHIFT1 */
+ ~m_486,
+
+ /* X86_TUNE_USE_FFREEP */
+ m_ATHLON_K8_AMDFAM10,
+
+ /* X86_TUNE_INTER_UNIT_MOVES */
+ ~(m_ATHLON_K8_AMDFAM10 | m_GENERIC),
+
+ /* X86_TUNE_FOUR_JUMP_LIMIT: Some CPU cores are not able to predict more
+ than 4 branch instructions in the 16 byte window. */
+ m_PPRO | m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SCHEDULE */
+ m_PPRO | m_ATHLON_K8_AMDFAM10 | m_K6_GEODE | m_PENT | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_USE_BT */
+ m_ATHLON_K8_AMDFAM10,
+
+ /* X86_TUNE_USE_INCDEC */
+ ~(m_PENT4 | m_NOCONA | m_CORE2 | m_GENERIC),
+
+ /* X86_TUNE_PAD_RETURNS */
+ m_ATHLON_K8_AMDFAM10 | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_EXT_80387_CONSTANTS */
+ m_K6_GEODE | m_ATHLON_K8 | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC,
+
+ /* X86_TUNE_SHORTEN_X87_SSE */
+ ~m_K8,
+
+ /* X86_TUNE_AVOID_VECTOR_DECODE */
+ m_K8 | m_GENERIC64,
+
+ /* X86_TUNE_SLOW_IMUL_IMM32_MEM (imul of 32-bit constant and memory is vector
+ path on AMD machines) */
+ m_K8 | m_GENERIC64 | m_AMDFAM10,
+
+ /* X86_TUNE_SLOW_IMUL_IMM8 (imul of 8-bit constant is vector path on AMD
+ machines) */
+ m_K8 | m_GENERIC64 | m_AMDFAM10,
+
+ /* X86_TUNE_MOVE_M1_VIA_OR (on pentiums, it is faster to load -1 via OR than
+ a MOV) */
+ m_PENT,
+
+ /* X86_TUNE_NOT_UNPAIRABLE (NOT is not pairable on Pentium, while XOR is, but
+ one byte longer). */
+ m_PENT,
+
+ /* X86_TUNE_NOT_VECTORMODE (On AMD K6, NOT is vector decoded with memory
+ operand that cannot be represented using a modRM byte. The XOR
+ replacement is long decoded, so this split helps here as well). */
+ m_K6,
+};
+
+/* Feature tests against the various architecture variations. */
+unsigned int ix86_arch_features[X86_ARCH_LAST] = {
+ /* X86_ARCH_CMOVE */
+ m_PPRO | m_GEODE | m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA,
+
+ /* X86_ARCH_CMPXCHG: Compare and exchange was added for 80486. */
+ ~m_386,
+
+ /* X86_ARCH_CMPXCHG8B: Compare and exchange 8 bytes was added for pentium. */
+ ~(m_386 | m_486),
+
+ /* X86_ARCH_XADD: Exchange and add was added for 80486. */
+ ~m_386,
+
+ /* X86_ARCH_BSWAP: Byteswap was added for 80486. */
+ ~m_386,
+};
+
+static const unsigned int x86_accumulate_outgoing_args
+ = m_ATHLON_K8_AMDFAM10 | m_PENT4 | m_NOCONA | m_PPRO | m_CORE2 | m_GENERIC;
+
+static const unsigned int x86_arch_always_fancy_math_387
+ = m_PENT | m_PPRO | m_ATHLON_K8_AMDFAM10 | m_PENT4
+ | m_NOCONA | m_CORE2 | m_GENERIC;
static enum stringop_alg stringop_alg = no_stringop;
@@ -1395,15 +1458,13 @@ enum fpmath_unit ix86_fpmath;
/* Which cpu are we scheduling for. */
enum processor_type ix86_tune;
+
/* Which instruction set architecture to use. */
enum processor_type ix86_arch;
/* true if sse prefetch instruction is not NOOP. */
int x86_prefetch_sse;
-/* true if cmpxchg16b is supported. */
-int x86_cmpxchg16b;
-
/* ix86_regparm_string as a number */
static int ix86_regparm;
@@ -1806,6 +1867,7 @@ override_options (void)
{
int i;
int ix86_tune_defaulted = 0;
+ unsigned int ix86_arch_mask, ix86_tune_mask;
/* Comes from final.c -- no real reason to change it. */
#define MAX_CODE_ALIGN 16
@@ -1846,19 +1908,20 @@ override_options (void)
const enum processor_type processor;
const enum pta_flags
{
- PTA_SSE = 1,
- PTA_SSE2 = 2,
- PTA_SSE3 = 4,
- PTA_MMX = 8,
- PTA_PREFETCH_SSE = 16,
- PTA_3DNOW = 32,
- PTA_3DNOW_A = 64,
- PTA_64BIT = 128,
- PTA_SSSE3 = 256,
- PTA_CX16 = 512,
- PTA_POPCNT = 1024,
- PTA_ABM = 2048,
- PTA_SSE4A = 4096
+ PTA_SSE = 1 << 0,
+ PTA_SSE2 = 1 << 1,
+ PTA_SSE3 = 1 << 2,
+ PTA_MMX = 1 << 3,
+ PTA_PREFETCH_SSE = 1 << 4,
+ PTA_3DNOW = 1 << 5,
+ PTA_3DNOW_A = 1 << 6,
+ PTA_64BIT = 1 << 7,
+ PTA_SSSE3 = 1 << 8,
+ PTA_CX16 = 1 << 9,
+ PTA_POPCNT = 1 << 10,
+ PTA_ABM = 1 << 11,
+ PTA_SSE4A = 1 << 12,
+ PTA_NO_SAHF = 1 << 13
} flags;
}
const processor_alias_table[] =
@@ -1885,7 +1948,8 @@ override_options (void)
{"prescott", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3
| PTA_MMX | PTA_PREFETCH_SSE},
{"nocona", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_64BIT
- | PTA_MMX | PTA_PREFETCH_SSE | PTA_CX16},
+ | PTA_MMX | PTA_PREFETCH_SSE
+ | PTA_CX16 | PTA_NO_SAHF},
{"core2", PROCESSOR_CORE2, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3
| PTA_64BIT | PTA_MMX
| PTA_PREFETCH_SSE | PTA_CX16},
@@ -1905,7 +1969,7 @@ override_options (void)
{"athlon-mp", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
| PTA_3DNOW_A | PTA_SSE},
{"x86-64", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_64BIT
- | PTA_SSE | PTA_SSE2 },
+ | PTA_SSE | PTA_SSE2 | PTA_NO_SAHF},
{"k8", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
| PTA_3DNOW_A | PTA_SSE | PTA_SSE2},
{"opteron", PROCESSOR_K8, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT
@@ -2034,14 +2098,14 @@ override_options (void)
ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
else if (!strcmp (ix86_cmodel_string, "medium"))
ix86_cmodel = flag_pic ? CM_MEDIUM_PIC : CM_MEDIUM;
+ else if (!strcmp (ix86_cmodel_string, "large"))
+ ix86_cmodel = flag_pic ? CM_LARGE_PIC : CM_LARGE;
else if (flag_pic)
- sorry ("code model %s not supported in PIC mode", ix86_cmodel_string);
+ error ("code model %s does not support PIC mode", ix86_cmodel_string);
else if (!strcmp (ix86_cmodel_string, "32"))
ix86_cmodel = CM_32;
else if (!strcmp (ix86_cmodel_string, "kernel") && !flag_pic)
ix86_cmodel = CM_KERNEL;
- else if (!strcmp (ix86_cmodel_string, "large") && !flag_pic)
- ix86_cmodel = CM_LARGE;
else
error ("bad value (%s) for -mcmodel= switch", ix86_cmodel_string);
}
@@ -2064,8 +2128,6 @@ override_options (void)
if ((TARGET_64BIT == 0) != (ix86_cmodel == CM_32))
error ("code model %qs not supported in the %s bit mode",
ix86_cmodel_string, TARGET_64BIT ? "64" : "32");
- if (ix86_cmodel == CM_LARGE)
- sorry ("code model %<large%> not supported yet");
if ((TARGET_64BIT != 0) != ((target_flags & MASK_64BIT) != 0))
sorry ("%i-bit mode not compiled in",
(target_flags & MASK_64BIT) ? 64 : 32);
@@ -2110,6 +2172,8 @@ override_options (void)
if (processor_alias_table[i].flags & PTA_SSE4A
&& !(target_flags_explicit & MASK_SSE4A))
target_flags |= MASK_SSE4A;
+ if (!(TARGET_64BIT && (processor_alias_table[i].flags & PTA_NO_SAHF)))
+ x86_sahf = true;
if (TARGET_64BIT && !(processor_alias_table[i].flags & PTA_64BIT))
error ("CPU you selected does not support x86-64 "
"instruction set");
@@ -2119,6 +2183,10 @@ override_options (void)
if (i == pta_size)
error ("bad value (%s) for -march= switch", ix86_arch_string);
+ ix86_arch_mask = 1u << ix86_arch;
+ for (i = 0; i < X86_ARCH_LAST; ++i)
+ ix86_arch_features[i] &= ix86_arch_mask;
+
for (i = 0; i < pta_size; i++)
if (! strcmp (ix86_tune_string, processor_alias_table[i].name))
{
@@ -2150,6 +2218,10 @@ override_options (void)
if (i == pta_size)
error ("bad value (%s) for -mtune= switch", ix86_tune_string);
+ ix86_tune_mask = 1u << ix86_tune;
+ for (i = 0; i < X86_TUNE_LAST; ++i)
+ ix86_tune_features[i] &= ix86_tune_mask;
+
if (optimize_size)
ix86_cost = &size_cost;
else
@@ -2276,7 +2348,7 @@ override_options (void)
/* If the architecture always has an FPU, turn off NO_FANCY_MATH_387,
since the insns won't need emulation. */
- if (x86_arch_always_fancy_math_387 & (1 << ix86_arch))
+ if (x86_arch_always_fancy_math_387 & ix86_arch_mask)
target_flags &= ~MASK_NO_FANCY_MATH_387;
/* Likewise, if the target doesn't have a 387, or we've specified
@@ -2358,7 +2430,6 @@ override_options (void)
error ("-msseregparm used without SSE enabled");
ix86_fpmath = TARGET_FPMATH_DEFAULT;
-
if (ix86_fpmath_string != 0)
{
if (! strcmp (ix86_fpmath_string, "387"))
@@ -2397,7 +2468,7 @@ override_options (void)
if (!TARGET_80387)
target_flags &= ~MASK_FLOAT_RETURNS;
- if ((x86_accumulate_outgoing_args & TUNEMASK)
+ if ((x86_accumulate_outgoing_args & ix86_tune_mask)
&& !(target_flags_explicit & MASK_ACCUMULATE_OUTGOING_ARGS)
&& !optimize_size)
target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS;
@@ -2417,6 +2488,11 @@ override_options (void)
target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS;
}
+ /* For sane SSE instruction set generation we need fcomi instruction.
+ It is safe to enable all CMOVE instructions. */
+ if (TARGET_SSE)
+ TARGET_CMOVE = 1;
+
/* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */
{
char *p;
@@ -2452,7 +2528,7 @@ x86_64_elf_select_section (tree decl, int reloc,
{
const char *sname = NULL;
unsigned int flags = SECTION_WRITE;
- switch (categorize_decl_for_section (decl, reloc, flag_pic))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_DATA:
sname = ".ldata";
@@ -2519,7 +2595,7 @@ x86_64_elf_unique_section (tree decl, int reloc)
/* We only need to use .gnu.linkonce if we don't have COMDAT groups. */
bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
- switch (categorize_decl_for_section (decl, reloc, flag_pic))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_DATA:
case SECCAT_DATA_REL:
@@ -4851,13 +4927,13 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
src_offset = REGNO (reg) * 8;
}
src_addr = fold_convert (addr_type, src_addr);
- src_addr = fold (build2 (PLUS_EXPR, addr_type, src_addr,
- size_int (src_offset)));
+ src_addr = fold_build2 (PLUS_EXPR, addr_type, src_addr,
+ size_int (src_offset));
src = build_va_arg_indirect_ref (src_addr);
dest_addr = fold_convert (addr_type, addr);
- dest_addr = fold (build2 (PLUS_EXPR, addr_type, dest_addr,
- size_int (INTVAL (XEXP (slot, 1)))));
+ dest_addr = fold_build2 (PLUS_EXPR, addr_type, dest_addr,
+ size_int (INTVAL (XEXP (slot, 1))));
dest = build_va_arg_indirect_ref (dest_addr);
t = build2 (GIMPLE_MODIFY_STMT, void_type_node, dest, src);
@@ -4991,7 +5067,7 @@ standard_80387_constant_p (rtx x)
/* For XFmode constants, try to find a special 80387 instruction when
optimizing for size or on those CPUs that benefit from them. */
if (GET_MODE (x) == XFmode
- && (optimize_size || x86_ext_80387_constants & TUNEMASK))
+ && (optimize_size || TARGET_EXT_80387_CONSTANTS))
{
int i;
@@ -5319,6 +5395,23 @@ output_set_got (rtx dest, rtx label ATTRIBUTE_UNUSED)
rtx xops[3];
xops[0] = dest;
+
+ if (TARGET_VXWORKS_RTP && flag_pic)
+ {
+ /* Load (*VXWORKS_GOTT_BASE) into the PIC register. */
+ xops[2] = gen_rtx_MEM (Pmode,
+ gen_rtx_SYMBOL_REF (Pmode, VXWORKS_GOTT_BASE));
+ output_asm_insn ("mov{l}\t{%2, %0|%0, %2}", xops);
+
+ /* Load (*VXWORKS_GOTT_BASE)[VXWORKS_GOTT_INDEX] into the PIC register.
+ Use %P and a local symbol in order to print VXWORKS_GOTT_INDEX as
+ an unadorned address. */
+ xops[2] = gen_rtx_SYMBOL_REF (Pmode, VXWORKS_GOTT_INDEX);
+ SYMBOL_REF_FLAGS (xops[2]) |= SYMBOL_FLAG_LOCAL;
+ output_asm_insn ("mov{l}\t{%P2(%0), %0|%0, DWORD PTR %P2[%0]}", xops);
+ return "";
+ }
+
xops[1] = gen_rtx_SYMBOL_REF (Pmode, GOT_SYMBOL_NAME);
if (! TARGET_DEEP_BRANCH_PREDICTION || !flag_pic)
@@ -5928,7 +6021,25 @@ ix86_expand_prologue (void)
if (pic_reg_used)
{
if (TARGET_64BIT)
- insn = emit_insn (gen_set_got_rex64 (pic_offset_table_rtx));
+ {
+ if (ix86_cmodel == CM_LARGE_PIC)
+ {
+ rtx tmp_reg = gen_rtx_REG (DImode,
+ FIRST_REX_INT_REG + 3 /* R11 */);
+ rtx label = gen_label_rtx ();
+ emit_label (label);
+ LABEL_PRESERVE_P (label) = 1;
+ gcc_assert (REGNO (pic_offset_table_rtx) != REGNO (tmp_reg));
+ insn = emit_insn (gen_set_rip_rex64 (pic_offset_table_rtx, label));
+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, NULL);
+ insn = emit_insn (gen_set_got_offset_rex64 (tmp_reg, label));
+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, NULL);
+ insn = emit_insn (gen_adddi3 (pic_offset_table_rtx,
+ pic_offset_table_rtx, tmp_reg));
+ }
+ else
+ insn = emit_insn (gen_set_got_rex64 (pic_offset_table_rtx));
+ }
else
insn = emit_insn (gen_set_got (pic_offset_table_rtx));
@@ -6483,7 +6594,9 @@ legitimate_constant_p (rtx x)
if (GET_CODE (x) == UNSPEC)
switch (XINT (x, 1))
{
+ case UNSPEC_GOT:
case UNSPEC_GOTOFF:
+ case UNSPEC_PLTOFF:
return TARGET_64BIT;
case UNSPEC_TPOFF:
case UNSPEC_NTPOFF:
@@ -6581,7 +6694,9 @@ legitimate_pic_operand_p (rtx x)
if (GET_CODE (inner) == UNSPEC)
switch (XINT (inner, 1))
{
+ case UNSPEC_GOT:
case UNSPEC_GOTOFF:
+ case UNSPEC_PLTOFF:
return TARGET_64BIT;
case UNSPEC_TPOFF:
x = XVECEXP (inner, 0, 0);
@@ -6639,7 +6754,8 @@ legitimate_pic_address_disp_p (rtx disp)
/* TLS references should always be enclosed in UNSPEC. */
if (SYMBOL_REF_TLS_MODEL (op0))
return false;
- if (!SYMBOL_REF_FAR_ADDR_P (op0) && SYMBOL_REF_LOCAL_P (op0))
+ if (!SYMBOL_REF_FAR_ADDR_P (op0) && SYMBOL_REF_LOCAL_P (op0)
+ && ix86_cmodel != CM_LARGE_PIC)
return true;
break;
@@ -6657,7 +6773,8 @@ legitimate_pic_address_disp_p (rtx disp)
of GOT tables. We should not need these anyway. */
if (GET_CODE (disp) != UNSPEC
|| (XINT (disp, 1) != UNSPEC_GOTPCREL
- && XINT (disp, 1) != UNSPEC_GOTOFF))
+ && XINT (disp, 1) != UNSPEC_GOTOFF
+ && XINT (disp, 1) != UNSPEC_PLTOFF))
return 0;
if (GET_CODE (XVECEXP (disp, 0, 0)) != SYMBOL_REF
@@ -6686,7 +6803,11 @@ legitimate_pic_address_disp_p (rtx disp)
case UNSPEC_GOT:
if (saw_plus)
return false;
- return GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF;
+ /* We need to check for both symbols and labels because VxWorks loads
+ text labels with @GOT rather than @GOTOFF. See gotoff_operand for
+ details. */
+ return (GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF
+ || GET_CODE (XVECEXP (disp, 0, 0)) == LABEL_REF);
case UNSPEC_GOTOFF:
/* Refuse GOTOFF in 64bit mode since it is always 64bit when used.
While ABI specify also 32bit relocation but we don't produce it in
@@ -6694,7 +6815,7 @@ legitimate_pic_address_disp_p (rtx disp)
if ((GET_CODE (XVECEXP (disp, 0, 0)) == SYMBOL_REF
|| GET_CODE (XVECEXP (disp, 0, 0)) == LABEL_REF)
&& !TARGET_64BIT)
- return local_symbolic_operand (XVECEXP (disp, 0, 0), Pmode);
+ return gotoff_operand (XVECEXP (disp, 0, 0), Pmode);
return false;
case UNSPEC_GOTTPOFF:
case UNSPEC_GOTNTPOFF:
@@ -7015,7 +7136,7 @@ legitimize_pic_address (rtx orig, rtx reg)
new = addr;
else if (TARGET_64BIT
&& ix86_cmodel != CM_SMALL_PIC
- && local_symbolic_operand (addr, Pmode))
+ && gotoff_operand (addr, Pmode))
{
rtx tmpreg;
/* This symbol may be referenced via a displacement from the PIC
@@ -7047,7 +7168,7 @@ legitimize_pic_address (rtx orig, rtx reg)
}
else new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, tmpreg);
}
- else if (!TARGET_64BIT && local_symbolic_operand (addr, Pmode))
+ else if (!TARGET_64BIT && gotoff_operand (addr, Pmode))
{
/* This symbol may be referenced via a displacement from the PIC
base address (@GOTOFF). */
@@ -7072,9 +7193,12 @@ legitimize_pic_address (rtx orig, rtx reg)
new = reg;
}
}
- else if (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (addr) == 0)
+ else if ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (addr) == 0)
+ /* We can't use @GOTOFF for text labels on VxWorks;
+ see gotoff_operand. */
+ || (TARGET_VXWORKS_RTP && GET_CODE (addr) == LABEL_REF))
{
- if (TARGET_64BIT)
+ if (TARGET_64BIT && ix86_cmodel != CM_LARGE_PIC)
{
new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), UNSPEC_GOTPCREL);
new = gen_rtx_CONST (Pmode, new);
@@ -7098,6 +7222,8 @@ legitimize_pic_address (rtx orig, rtx reg)
regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1;
new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), UNSPEC_GOT);
new = gen_rtx_CONST (Pmode, new);
+ if (TARGET_64BIT)
+ new = force_reg (Pmode, new);
new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new);
new = gen_const_mem (Pmode, new);
set_mem_alias_set (new, ix86_GOT_alias_set ());
@@ -7140,7 +7266,7 @@ legitimize_pic_address (rtx orig, rtx reg)
/* Check first to see if this is a constant offset from a @GOTOFF
symbol reference. */
- if (local_symbolic_operand (op0, Pmode)
+ if (gotoff_operand (op0, Pmode)
&& CONST_INT_P (op1))
{
if (!TARGET_64BIT)
@@ -7582,7 +7708,23 @@ output_pic_addr_const (FILE *file, rtx x, int code)
break;
case SYMBOL_REF:
- output_addr_const (file, x);
+ if (! TARGET_MACHO || TARGET_64BIT)
+ output_addr_const (file, x);
+ else
+ {
+ const char *name = XSTR (x, 0);
+
+ /* Mark the decl as referenced so that cgraph will output the function. */
+ if (SYMBOL_REF_DECL (x))
+ mark_decl_referenced (SYMBOL_REF_DECL (x));
+
+#if TARGET_MACHO
+ if (MACHOPIC_INDIRECT
+ && machopic_classify_symbol (x) == MACHOPIC_UNDEFINED_FUNCTION)
+ name = machopic_indirection_name (x, /*stub_p=*/true);
+#endif
+ assemble_name (file, name);
+ }
if (!TARGET_MACHO && code == 'P' && ! SYMBOL_REF_LOCAL_P (x))
fputs ("@PLT", file);
break;
@@ -7660,6 +7802,9 @@ output_pic_addr_const (FILE *file, rtx x, int code)
case UNSPEC_GOTOFF:
fputs ("@GOTOFF", file);
break;
+ case UNSPEC_PLTOFF:
+ fputs ("@PLTOFF", file);
+ break;
case UNSPEC_GOTPCREL:
fputs ("@GOTPCREL(%rip)", file);
break;
@@ -9274,9 +9419,18 @@ ix86_output_addr_vec_elt (FILE *file, int value)
void
ix86_output_addr_diff_elt (FILE *file, int value, int rel)
{
- if (TARGET_64BIT)
+ const char *directive = ASM_LONG;
+
+#ifdef ASM_QUAD
+ if (TARGET_64BIT && CASE_VECTOR_MODE == DImode)
+ directive = ASM_QUAD;
+#else
+ gcc_assert (!TARGET_64BIT);
+#endif
+ /* We can't use @GOTOFF for text labels on VxWorks; see gotoff_operand. */
+ if (TARGET_64BIT || TARGET_VXWORKS_RTP)
fprintf (file, "%s%s%d-%s%d\n",
- ASM_LONG, LPREFIX, value, LPREFIX, rel);
+ directive, LPREFIX, value, LPREFIX, rel);
else if (HAVE_AS_GOTOFF_IN_DATA)
fprintf (file, "%s%s%d@GOTOFF\n", ASM_LONG, LPREFIX, value);
#if TARGET_MACHO
@@ -9396,8 +9550,13 @@ ix86_expand_move (enum machine_mode mode, rtx operands[])
{
if (MEM_P (op0))
op1 = force_reg (Pmode, op1);
- else
- op1 = legitimize_address (op1, op1, Pmode);
+ else if (!TARGET_64BIT || !x86_64_movabs_operand (op1, Pmode))
+ {
+ rtx reg = no_new_pseudos ? op0 : NULL_RTX;
+ op1 = legitimize_pic_address (op1, reg);
+ if (op0 == op1)
+ return;
+ }
}
}
else
@@ -9475,6 +9634,55 @@ ix86_expand_vector_move (enum machine_mode mode, rtx operands[])
/* Implement the movmisalign patterns for SSE. Non-SSE modes go
straight to ix86_expand_vector_move. */
+/* Code generation for scalar reg-reg moves of single and double precision data:
+ if (x86_sse_partial_reg_dependency == true | x86_sse_split_regs == true)
+ movaps reg, reg
+ else
+ movss reg, reg
+ if (x86_sse_partial_reg_dependency == true)
+ movapd reg, reg
+ else
+ movsd reg, reg
+
+ Code generation for scalar loads of double precision data:
+ if (x86_sse_split_regs == true)
+ movlpd mem, reg (gas syntax)
+ else
+ movsd mem, reg
+
+ Code generation for unaligned packed loads of single precision data
+ (x86_sse_unaligned_move_optimal overrides x86_sse_partial_reg_dependency):
+ if (x86_sse_unaligned_move_optimal)
+ movups mem, reg
+
+ if (x86_sse_partial_reg_dependency == true)
+ {
+ xorps reg, reg
+ movlps mem, reg
+ movhps mem+8, reg
+ }
+ else
+ {
+ movlps mem, reg
+ movhps mem+8, reg
+ }
+
+ Code generation for unaligned packed loads of double precision data
+ (x86_sse_unaligned_move_optimal overrides x86_sse_split_regs):
+ if (x86_sse_unaligned_move_optimal)
+ movupd mem, reg
+
+ if (x86_sse_split_regs == true)
+ {
+ movlpd mem, reg
+ movhpd mem+8, reg
+ }
+ else
+ {
+ movsd mem, reg
+ movhpd mem+8, reg
+ }
+ */
void
ix86_expand_vector_move_misalign (enum machine_mode mode, rtx operands[])
@@ -10792,7 +11000,7 @@ ix86_fp_comparison_sahf_cost (enum rtx_code code)
enum rtx_code bypass_code, first_code, second_code;
/* Return arbitrarily high cost when instruction is not preferred - this
avoids gcc from using it. */
- if (!TARGET_USE_SAHF && !optimize_size)
+ if (!(TARGET_SAHF && (TARGET_USE_SAHF || optimize_size)))
return 1024;
ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
return (bypass_code != UNKNOWN || second_code != UNKNOWN) + 3;
@@ -10839,7 +11047,8 @@ ix86_expand_fp_compare (enum rtx_code code, rtx op0, rtx op1, rtx scratch,
ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code);
/* Do fcomi/sahf based test when profitable. */
- if ((bypass_code == UNKNOWN || bypass_test)
+ if ((TARGET_CMOVE || TARGET_SAHF)
+ && (bypass_code == UNKNOWN || bypass_test)
&& (second_code == UNKNOWN || second_test)
&& ix86_fp_comparison_arithmetics_cost (code) > cost)
{
@@ -13298,6 +13507,21 @@ scale_counter (rtx countreg, int scale)
return sc;
}
+/* Return mode for the memcpy/memset loop counter. Preffer SImode over DImode
+ for constant loop counts. */
+
+static enum machine_mode
+counter_mode (rtx count_exp)
+{
+ if (GET_MODE (count_exp) != VOIDmode)
+ return GET_MODE (count_exp);
+ if (GET_CODE (count_exp) != CONST_INT)
+ return Pmode;
+ if (TARGET_64BIT && (INTVAL (count_exp) & ~0xffffffff))
+ return DImode;
+ return SImode;
+}
+
/* When SRCPTR is non-NULL, output simple loop to move memory
pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
overall size is COUNT specified in bytes. When SRCPTR is NULL, output the
@@ -13314,7 +13538,7 @@ expand_set_or_movmem_via_loop (rtx destmem, rtx srcmem,
int expected_size)
{
rtx out_label, top_label, iter, tmp;
- enum machine_mode iter_mode;
+ enum machine_mode iter_mode = counter_mode (count);
rtx piece_size = GEN_INT (GET_MODE_SIZE (mode) * unroll);
rtx piece_size_mask = GEN_INT (~((GET_MODE_SIZE (mode) * unroll) - 1));
rtx size;
@@ -13322,10 +13546,6 @@ expand_set_or_movmem_via_loop (rtx destmem, rtx srcmem,
rtx y_addr;
int i;
- iter_mode = GET_MODE (count);
- if (iter_mode == VOIDmode)
- iter_mode = word_mode;
-
top_label = gen_label_rtx ();
out_label = gen_label_rtx ();
iter = gen_reg_rtx (iter_mode);
@@ -13522,7 +13742,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
HOST_WIDE_INT countval = INTVAL (count);
int offset = 0;
- if ((countval & 0x16) && max_size > 16)
+ if ((countval & 0x10) && max_size > 16)
{
if (TARGET_64BIT)
{
@@ -13539,8 +13759,8 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
emit_strmov (destmem, srcmem, destptr, srcptr, DImode, offset);
else
{
- emit_strmov (destmem, srcmem, destptr, srcptr, DImode, offset);
- emit_strmov (destmem, srcmem, destptr, srcptr, DImode, offset + 4);
+ emit_strmov (destmem, srcmem, destptr, srcptr, SImode, offset);
+ emit_strmov (destmem, srcmem, destptr, srcptr, SImode, offset + 4);
}
offset += 8;
}
@@ -13657,8 +13877,8 @@ expand_setmem_epilogue_via_loop (rtx destmem, rtx destptr, rtx value,
rtx count, int max_size)
{
count =
- expand_simple_binop (GET_MODE (count), AND, count, GEN_INT (max_size - 1),
- count, 1, OPTAB_DIRECT);
+ expand_simple_binop (counter_mode (count), AND, count,
+ GEN_INT (max_size - 1), count, 1, OPTAB_DIRECT);
expand_set_or_movmem_via_loop (destmem, NULL, destptr, NULL,
gen_lowpart (QImode, value), count, QImode,
1, max_size / 2);
@@ -13675,7 +13895,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx value, rtx count, int max_
HOST_WIDE_INT countval = INTVAL (count);
int offset = 0;
- if ((countval & 0x16) && max_size > 16)
+ if ((countval & 0x10) && max_size > 16)
{
if (TARGET_64BIT)
{
@@ -14118,11 +14338,9 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
gcc_assert (desired_align >= 1 && align >= 1);
/* Ensure that alignment prologue won't copy past end of block. */
- if ((size_needed > 1 || (desired_align > 1 && desired_align > align))
- && !count)
+ if (size_needed > 1 || (desired_align > 1 && desired_align > align))
{
epilogue_size_needed = MAX (size_needed - 1, desired_align - align);
-
/* Epilogue always copies COUNT_EXP & EPILOGUE_SIZE_NEEDED bytes.
Make sure it is power of 2. */
epilogue_size_needed = smallest_pow2_greater_than (epilogue_size_needed);
@@ -14130,8 +14348,10 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
label = gen_label_rtx ();
emit_cmp_and_jump_insns (count_exp,
GEN_INT (epilogue_size_needed),
- LTU, 0, GET_MODE (count_exp), 1, label);
- if (expected_size == -1 || expected_size < epilogue_size_needed)
+ LTU, 0, counter_mode (count_exp), 1, label);
+ if (GET_CODE (count_exp) == CONST_INT)
+ ;
+ else if (expected_size == -1 || expected_size < epilogue_size_needed)
predict_jump (REG_BR_PROB_BASE * 60 / 100);
else
predict_jump (REG_BR_PROB_BASE * 20 / 100);
@@ -14231,7 +14451,7 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
if (size_needed < epilogue_size_needed)
{
tmp =
- expand_simple_binop (GET_MODE (count_exp), AND, count_exp,
+ expand_simple_binop (counter_mode (count_exp), AND, count_exp,
GEN_INT (size_needed - 1), count_exp, 1,
OPTAB_DIRECT);
if (tmp != count_exp)
@@ -14387,7 +14607,7 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
return 0;
gcc_assert (alg != no_stringop);
if (!count)
- count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
+ count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
destreg = copy_to_mode_reg (Pmode, XEXP (dst, 0));
switch (alg)
{
@@ -14430,11 +14650,9 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
promoted_val = promote_duplicated_reg_to_size (val_exp, size_needed,
desired_align, align);
/* Ensure that alignment prologue won't copy past end of block. */
- if ((size_needed > 1 || (desired_align > 1 && desired_align > align))
- && !count)
+ if (size_needed > 1 || (desired_align > 1 && desired_align > align))
{
epilogue_size_needed = MAX (size_needed - 1, desired_align - align);
-
/* Epilogue always copies COUNT_EXP & EPILOGUE_SIZE_NEEDED bytes.
Make sure it is power of 2. */
epilogue_size_needed = smallest_pow2_greater_than (epilogue_size_needed);
@@ -14448,8 +14666,10 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
label = gen_label_rtx ();
emit_cmp_and_jump_insns (count_exp,
GEN_INT (epilogue_size_needed),
- LTU, 0, GET_MODE (count_exp), 1, label);
- if (expected_size == -1 || expected_size <= epilogue_size_needed)
+ LTU, 0, counter_mode (count_exp), 1, label);
+ if (GET_CODE (count_exp) == CONST_INT)
+ ;
+ else if (expected_size == -1 || expected_size <= epilogue_size_needed)
predict_jump (REG_BR_PROB_BASE * 60 / 100);
else
predict_jump (REG_BR_PROB_BASE * 20 / 100);
@@ -14459,7 +14679,7 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
rtx hot_label = gen_label_rtx ();
jump_around_label = gen_label_rtx ();
emit_cmp_and_jump_insns (count_exp, GEN_INT (dynamic_check - 1),
- LEU, 0, GET_MODE (count_exp), 1, hot_label);
+ LEU, 0, counter_mode (count_exp), 1, hot_label);
predict_jump (REG_BR_PROB_BASE * 90 / 100);
set_storage_via_libcall (dst, count_exp, val_exp, false);
emit_jump (jump_around_label);
@@ -14542,7 +14762,7 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
if (size_needed < desired_align - align)
{
tmp =
- expand_simple_binop (GET_MODE (count_exp), AND, count_exp,
+ expand_simple_binop (counter_mode (count_exp), AND, count_exp,
GEN_INT (size_needed - 1), count_exp, 1,
OPTAB_DIRECT);
size_needed = desired_align - align + 1;
@@ -14828,6 +15048,22 @@ ix86_expand_strlensi_unroll_1 (rtx out, rtx src, rtx align_rtx)
emit_label (end_0_label);
}
+/* For given symbol (function) construct code to compute address of it's PLT
+ entry in large x86-64 PIC model. */
+rtx
+construct_plt_address (rtx symbol)
+{
+ rtx tmp = gen_reg_rtx (Pmode);
+ rtx unspec = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, symbol), UNSPEC_PLTOFF);
+
+ gcc_assert (GET_CODE (symbol) == SYMBOL_REF);
+ gcc_assert (ix86_cmodel == CM_LARGE_PIC);
+
+ emit_move_insn (tmp, gen_rtx_CONST (Pmode, unspec));
+ emit_insn (gen_adddi3 (tmp, tmp, pic_offset_table_rtx));
+ return tmp;
+}
+
void
ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
rtx callarg2 ATTRIBUTE_UNUSED,
@@ -14849,7 +15085,7 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
else
{
/* Static functions and indirect calls don't need the pic register. */
- if (! TARGET_64BIT && flag_pic
+ if (flag_pic && (!TARGET_64BIT || ix86_cmodel == CM_LARGE_PIC)
&& GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF
&& ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0)))
use_reg (&use, pic_offset_table_rtx);
@@ -14862,7 +15098,12 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
use_reg (&use, al);
}
- if (! call_insn_operand (XEXP (fnaddr, 0), Pmode))
+ if (ix86_cmodel == CM_LARGE_PIC
+ && GET_CODE (fnaddr) == MEM
+ && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF
+ && !local_symbolic_operand (XEXP (fnaddr, 0), VOIDmode))
+ fnaddr = gen_rtx_MEM (QImode, construct_plt_address (XEXP (fnaddr, 0)));
+ else if (! call_insn_operand (XEXP (fnaddr, 0), Pmode))
{
fnaddr = copy_to_mode_reg (Pmode, XEXP (fnaddr, 0));
fnaddr = gen_rtx_MEM (QImode, fnaddr);
@@ -15417,7 +15658,7 @@ ix86_constant_alignment (tree exp, int align)
int
ix86_data_alignment (tree type, int align)
{
- int max_align = optimize_size ? BITS_PER_WORD : 256;
+ int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
if (AGGREGATE_TYPE_P (type)
&& TYPE_SIZE (type)
@@ -16490,8 +16731,8 @@ static const struct builtin_description bdesc_1arg[] =
{ MASK_SSE2, CODE_FOR_sse2_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 },
/* SSE3 */
- { MASK_SSE3, CODE_FOR_sse3_movshdup, 0, IX86_BUILTIN_MOVSHDUP, 0, 0 },
- { MASK_SSE3, CODE_FOR_sse3_movsldup, 0, IX86_BUILTIN_MOVSLDUP, 0, 0 },
+ { MASK_SSE3, CODE_FOR_sse3_movshdup, "__builtin_ia32_movshdup", IX86_BUILTIN_MOVSHDUP, 0, 0 },
+ { MASK_SSE3, CODE_FOR_sse3_movsldup, "__builtin_ia32_movsldup", IX86_BUILTIN_MOVSLDUP, 0, 0 },
/* SSSE3 */
{ MASK_SSSE3, CODE_FOR_absv16qi2, "__builtin_ia32_pabsb128", IX86_BUILTIN_PABSB128, 0, 0 },
@@ -17141,12 +17382,6 @@ ix86_init_mmx_sse_builtins (void)
def_builtin (MASK_SSE3, "__builtin_ia32_mwait",
void_ftype_unsigned_unsigned,
IX86_BUILTIN_MWAIT);
- def_builtin (MASK_SSE3, "__builtin_ia32_movshdup",
- v4sf_ftype_v4sf,
- IX86_BUILTIN_MOVSHDUP);
- def_builtin (MASK_SSE3, "__builtin_ia32_movsldup",
- v4sf_ftype_v4sf,
- IX86_BUILTIN_MOVSLDUP);
def_builtin (MASK_SSE3, "__builtin_ia32_lddqu",
v16qi_ftype_pcchar, IX86_BUILTIN_LDDQU);
@@ -18762,15 +18997,17 @@ 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 (GET_MODE_SIZE (mode2) >= 8
+ if (GET_MODE_SIZE (mode2) == 16
&& ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode2))
- return ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode1);
+ return (GET_MODE_SIZE (mode1) == 16
+ && ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode1));
- /* If MODE2 is appropriate for an MMX (or SSE) register, then tie
+ /* If MODE2 is appropriate for an MMX register, then tie
with any other mode acceptable to MMX registers. */
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 (GET_MODE_SIZE (mode1) == 8
+ && ix86_hard_regno_mode_ok (FIRST_MMX_REG, mode1));
return false;
}
@@ -20795,7 +21032,7 @@ ix86_emit_fp_unordered_jump (rtx label)
emit_insn (gen_x86_fnstsw_1 (reg));
- if (TARGET_USE_SAHF)
+ if (TARGET_SAHF && (TARGET_USE_SAHF || optimize_size))
{
emit_insn (gen_x86_sahf_1 (reg));
@@ -20814,7 +21051,9 @@ ix86_emit_fp_unordered_jump (rtx label)
gen_rtx_LABEL_REF (VOIDmode, label),
pc_rtx);
temp = gen_rtx_SET (VOIDmode, pc_rtx, temp);
+
emit_jump_insn (temp);
+ predict_jump (REG_BR_PROB_BASE * 10 / 100);
}
/* Output code to perform a log1p XFmode calculation. */
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 4dab579130d..f0c6ab9d697 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -20,6 +20,8 @@ along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
+#include "config/vxworks-dummy.h"
+
/* Algorithm to expand string function with. */
enum stringop_alg
{
@@ -179,108 +181,181 @@ extern const struct processor_costs *ix86_cost;
#define TARGET_GENERIC (TARGET_GENERIC32 || TARGET_GENERIC64)
#define TARGET_AMDFAM10 (ix86_tune == PROCESSOR_AMDFAM10)
-#define TUNEMASK (1 << ix86_tune)
-extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
-extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
-extern const int x86_branch_hints, x86_unroll_strlen;
-extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
-extern const int x86_use_himode_fiop, x86_use_simode_fiop;
-extern const int x86_use_mov0, x86_use_cltd, x86_use_xchgb;
-extern const int x86_read_modify_write, x86_read_modify, x86_split_long_moves;
-extern const int x86_promote_QImode, x86_single_stringop, x86_fast_prefix;
-extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
-extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
-extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
-extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
-extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
-extern const int x86_epilogue_using_move, x86_decompose_lea;
-extern const int x86_arch_always_fancy_math_387, x86_shift1;
-extern const int x86_sse_partial_reg_dependency, x86_sse_split_regs;
-extern const int x86_sse_unaligned_move_optimal;
-extern const int x86_sse_typeless_stores, x86_sse_load0_by_pxor;
-extern const int x86_use_ffreep;
-extern const int x86_inter_unit_moves, x86_schedule;
-extern const int x86_use_bt;
-extern const int x86_cmpxchg, x86_cmpxchg8b, x86_xadd;
-extern const int x86_use_incdec;
-extern const int x86_pad_returns;
-extern const int x86_bswap;
-extern const int x86_partial_flag_reg_stall;
-extern int x86_prefetch_sse, x86_cmpxchg16b;
-
-#define TARGET_USE_LEAVE (x86_use_leave & TUNEMASK)
-#define TARGET_PUSH_MEMORY (x86_push_memory & TUNEMASK)
-#define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & TUNEMASK)
-#define TARGET_USE_BIT_TEST (x86_use_bit_test & TUNEMASK)
-#define TARGET_UNROLL_STRLEN (x86_unroll_strlen & TUNEMASK)
-/* For sane SSE instruction set generation we need fcomi instruction. It is
- safe to enable all CMOVE instructions. */
-#define TARGET_CMOVE ((x86_cmove & (1 << ix86_arch)) || TARGET_SSE)
-#define TARGET_FISTTP (TARGET_SSE3 && TARGET_80387)
-#define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & TUNEMASK)
-#define TARGET_BRANCH_PREDICTION_HINTS (x86_branch_hints & TUNEMASK)
-#define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & TUNEMASK)
-#define TARGET_USE_SAHF ((x86_use_sahf & TUNEMASK) && !TARGET_64BIT)
-#define TARGET_MOVX (x86_movx & TUNEMASK)
-#define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & TUNEMASK)
-#define TARGET_PARTIAL_FLAG_REG_STALL (x86_partial_flag_reg_stall & TUNEMASK)
-#define TARGET_USE_HIMODE_FIOP (x86_use_himode_fiop & TUNEMASK)
-#define TARGET_USE_SIMODE_FIOP (x86_use_simode_fiop & TUNEMASK)
-#define TARGET_USE_MOV0 (x86_use_mov0 & TUNEMASK)
-#define TARGET_USE_CLTD (x86_use_cltd & TUNEMASK)
-#define TARGET_USE_XCHGB (x86_use_xchgb & TUNEMASK)
-#define TARGET_SPLIT_LONG_MOVES (x86_split_long_moves & TUNEMASK)
-#define TARGET_READ_MODIFY_WRITE (x86_read_modify_write & TUNEMASK)
-#define TARGET_READ_MODIFY (x86_read_modify & TUNEMASK)
-#define TARGET_PROMOTE_QImode (x86_promote_QImode & TUNEMASK)
-#define TARGET_FAST_PREFIX (x86_fast_prefix & TUNEMASK)
-#define TARGET_SINGLE_STRINGOP (x86_single_stringop & TUNEMASK)
-#define TARGET_QIMODE_MATH (x86_qimode_math & TUNEMASK)
-#define TARGET_HIMODE_MATH (x86_himode_math & TUNEMASK)
-#define TARGET_PROMOTE_QI_REGS (x86_promote_qi_regs & TUNEMASK)
-#define TARGET_PROMOTE_HI_REGS (x86_promote_hi_regs & TUNEMASK)
-#define TARGET_ADD_ESP_4 (x86_add_esp_4 & TUNEMASK)
-#define TARGET_ADD_ESP_8 (x86_add_esp_8 & TUNEMASK)
-#define TARGET_SUB_ESP_4 (x86_sub_esp_4 & TUNEMASK)
-#define TARGET_SUB_ESP_8 (x86_sub_esp_8 & TUNEMASK)
-#define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & TUNEMASK)
-#define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & TUNEMASK)
+/* Feature tests against the various tunings. */
+enum ix86_tune_indices {
+ X86_TUNE_USE_LEAVE,
+ X86_TUNE_PUSH_MEMORY,
+ X86_TUNE_ZERO_EXTEND_WITH_AND,
+ X86_TUNE_USE_BIT_TEST,
+ X86_TUNE_UNROLL_STRLEN,
+ X86_TUNE_DEEP_BRANCH_PREDICTION,
+ X86_TUNE_BRANCH_PREDICTION_HINTS,
+ X86_TUNE_DOUBLE_WITH_ADD,
+ X86_TUNE_USE_SAHF,
+ X86_TUNE_MOVX,
+ X86_TUNE_PARTIAL_REG_STALL,
+ X86_TUNE_PARTIAL_FLAG_REG_STALL,
+ X86_TUNE_USE_HIMODE_FIOP,
+ X86_TUNE_USE_SIMODE_FIOP,
+ X86_TUNE_USE_MOV0,
+ X86_TUNE_USE_CLTD,
+ X86_TUNE_USE_XCHGB,
+ X86_TUNE_SPLIT_LONG_MOVES,
+ X86_TUNE_READ_MODIFY_WRITE,
+ X86_TUNE_READ_MODIFY,
+ X86_TUNE_PROMOTE_QIMODE,
+ X86_TUNE_FAST_PREFIX,
+ X86_TUNE_SINGLE_STRINGOP,
+ X86_TUNE_QIMODE_MATH,
+ X86_TUNE_HIMODE_MATH,
+ X86_TUNE_PROMOTE_QI_REGS,
+ X86_TUNE_PROMOTE_HI_REGS,
+ X86_TUNE_ADD_ESP_4,
+ X86_TUNE_ADD_ESP_8,
+ X86_TUNE_SUB_ESP_4,
+ X86_TUNE_SUB_ESP_8,
+ X86_TUNE_INTEGER_DFMODE_MOVES,
+ X86_TUNE_PARTIAL_REG_DEPENDENCY,
+ X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY,
+ X86_TUNE_SSE_UNALIGNED_MOVE_OPTIMAL,
+ X86_TUNE_SSE_SPLIT_REGS,
+ X86_TUNE_SSE_TYPELESS_STORES,
+ X86_TUNE_SSE_LOAD0_BY_PXOR,
+ X86_TUNE_MEMORY_MISMATCH_STALL,
+ X86_TUNE_PROLOGUE_USING_MOVE,
+ X86_TUNE_EPILOGUE_USING_MOVE,
+ X86_TUNE_SHIFT1,
+ X86_TUNE_USE_FFREEP,
+ X86_TUNE_INTER_UNIT_MOVES,
+ X86_TUNE_FOUR_JUMP_LIMIT,
+ X86_TUNE_SCHEDULE,
+ X86_TUNE_USE_BT,
+ X86_TUNE_USE_INCDEC,
+ X86_TUNE_PAD_RETURNS,
+ X86_TUNE_EXT_80387_CONSTANTS,
+ X86_TUNE_SHORTEN_X87_SSE,
+ X86_TUNE_AVOID_VECTOR_DECODE,
+ X86_TUNE_SLOW_IMUL_IMM32_MEM,
+ X86_TUNE_SLOW_IMUL_IMM8,
+ X86_TUNE_MOVE_M1_VIA_OR,
+ X86_TUNE_NOT_UNPAIRABLE,
+ X86_TUNE_NOT_VECTORMODE,
+
+ X86_TUNE_LAST
+};
+
+extern unsigned int ix86_tune_features[X86_TUNE_LAST];
+
+#define TARGET_USE_LEAVE ix86_tune_features[X86_TUNE_USE_LEAVE]
+#define TARGET_PUSH_MEMORY ix86_tune_features[X86_TUNE_PUSH_MEMORY]
+#define TARGET_ZERO_EXTEND_WITH_AND \
+ ix86_tune_features[X86_TUNE_ZERO_EXTEND_WITH_AND]
+#define TARGET_USE_BIT_TEST ix86_tune_features[X86_TUNE_USE_BIT_TEST]
+#define TARGET_UNROLL_STRLEN ix86_tune_features[X86_TUNE_UNROLL_STRLEN]
+#define TARGET_DEEP_BRANCH_PREDICTION \
+ ix86_tune_features[X86_TUNE_DEEP_BRANCH_PREDICTION]
+#define TARGET_BRANCH_PREDICTION_HINTS \
+ ix86_tune_features[X86_TUNE_BRANCH_PREDICTION_HINTS]
+#define TARGET_DOUBLE_WITH_ADD ix86_tune_features[X86_TUNE_DOUBLE_WITH_ADD]
+#define TARGET_USE_SAHF ix86_tune_features[X86_TUNE_USE_SAHF]
+#define TARGET_MOVX ix86_tune_features[X86_TUNE_MOVX]
+#define TARGET_PARTIAL_REG_STALL ix86_tune_features[X86_TUNE_PARTIAL_REG_STALL]
+#define TARGET_PARTIAL_FLAG_REG_STALL \
+ ix86_tune_features[X86_TUNE_PARTIAL_FLAG_REG_STALL]
+#define TARGET_USE_HIMODE_FIOP ix86_tune_features[X86_TUNE_USE_HIMODE_FIOP]
+#define TARGET_USE_SIMODE_FIOP ix86_tune_features[X86_TUNE_USE_SIMODE_FIOP]
+#define TARGET_USE_MOV0 ix86_tune_features[X86_TUNE_USE_MOV0]
+#define TARGET_USE_CLTD ix86_tune_features[X86_TUNE_USE_CLTD]
+#define TARGET_USE_XCHGB ix86_tune_features[X86_TUNE_USE_XCHGB]
+#define TARGET_SPLIT_LONG_MOVES ix86_tune_features[X86_TUNE_SPLIT_LONG_MOVES]
+#define TARGET_READ_MODIFY_WRITE ix86_tune_features[X86_TUNE_READ_MODIFY_WRITE]
+#define TARGET_READ_MODIFY ix86_tune_features[X86_TUNE_READ_MODIFY]
+#define TARGET_PROMOTE_QImode ix86_tune_features[X86_TUNE_PROMOTE_QIMODE]
+#define TARGET_FAST_PREFIX ix86_tune_features[X86_TUNE_FAST_PREFIX]
+#define TARGET_SINGLE_STRINGOP ix86_tune_features[X86_TUNE_SINGLE_STRINGOP]
+#define TARGET_QIMODE_MATH ix86_tune_features[X86_TUNE_QIMODE_MATH]
+#define TARGET_HIMODE_MATH ix86_tune_features[X86_TUNE_HIMODE_MATH]
+#define TARGET_PROMOTE_QI_REGS ix86_tune_features[X86_TUNE_PROMOTE_QI_REGS]
+#define TARGET_PROMOTE_HI_REGS ix86_tune_features[X86_TUNE_PROMOTE_HI_REGS]
+#define TARGET_ADD_ESP_4 ix86_tune_features[X86_TUNE_ADD_ESP_4]
+#define TARGET_ADD_ESP_8 ix86_tune_features[X86_TUNE_ADD_ESP_8]
+#define TARGET_SUB_ESP_4 ix86_tune_features[X86_TUNE_SUB_ESP_4]
+#define TARGET_SUB_ESP_8 ix86_tune_features[X86_TUNE_SUB_ESP_8]
+#define TARGET_INTEGER_DFMODE_MOVES \
+ ix86_tune_features[X86_TUNE_INTEGER_DFMODE_MOVES]
+#define TARGET_PARTIAL_REG_DEPENDENCY \
+ ix86_tune_features[X86_TUNE_PARTIAL_REG_DEPENDENCY]
#define TARGET_SSE_PARTIAL_REG_DEPENDENCY \
- (x86_sse_partial_reg_dependency & TUNEMASK)
+ ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY]
#define TARGET_SSE_UNALIGNED_MOVE_OPTIMAL \
- (x86_sse_unaligned_move_optimal & TUNEMASK)
-#define TARGET_SSE_SPLIT_REGS (x86_sse_split_regs & TUNEMASK)
-#define TARGET_SSE_TYPELESS_STORES (x86_sse_typeless_stores & TUNEMASK)
-#define TARGET_SSE_LOAD0_BY_PXOR (x86_sse_load0_by_pxor & TUNEMASK)
-#define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & TUNEMASK)
-#define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & TUNEMASK)
-#define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & TUNEMASK)
-#define TARGET_PREFETCH_SSE (x86_prefetch_sse)
-#define TARGET_SHIFT1 (x86_shift1 & TUNEMASK)
-#define TARGET_USE_FFREEP (x86_use_ffreep & TUNEMASK)
-#define TARGET_INTER_UNIT_MOVES (x86_inter_unit_moves & TUNEMASK)
-#define TARGET_FOUR_JUMP_LIMIT (x86_four_jump_limit & TUNEMASK)
-#define TARGET_SCHEDULE (x86_schedule & TUNEMASK)
-#define TARGET_USE_BT (x86_use_bt & TUNEMASK)
-#define TARGET_USE_INCDEC (x86_use_incdec & TUNEMASK)
-#define TARGET_PAD_RETURNS (x86_pad_returns & TUNEMASK)
-
-#define ASSEMBLER_DIALECT (ix86_asm_dialect)
-
-#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0)
-#define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \
- && (ix86_fpmath & FPMATH_387))
-
-#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU)
-#define TARGET_GNU2_TLS (ix86_tls_dialect == TLS_DIALECT_GNU2)
-#define TARGET_ANY_GNU_TLS (TARGET_GNU_TLS || TARGET_GNU2_TLS)
-#define TARGET_SUN_TLS (ix86_tls_dialect == TLS_DIALECT_SUN)
-
-#define TARGET_CMPXCHG (x86_cmpxchg & (1 << ix86_arch))
-#define TARGET_CMPXCHG8B (x86_cmpxchg8b & (1 << ix86_arch))
-#define TARGET_CMPXCHG16B (x86_cmpxchg16b)
-#define TARGET_XADD (x86_xadd & (1 << ix86_arch))
-#define TARGET_BSWAP (x86_bswap & (1 << ix86_arch))
+ ix86_tune_features[X86_TUNE_SSE_UNALIGNED_MOVE_OPTIMAL]
+#define TARGET_SSE_SPLIT_REGS ix86_tune_features[X86_TUNE_SSE_SPLIT_REGS]
+#define TARGET_SSE_TYPELESS_STORES \
+ ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES]
+#define TARGET_SSE_LOAD0_BY_PXOR ix86_tune_features[X86_TUNE_SSE_LOAD0_BY_PXOR]
+#define TARGET_MEMORY_MISMATCH_STALL \
+ ix86_tune_features[X86_TUNE_MEMORY_MISMATCH_STALL]
+#define TARGET_PROLOGUE_USING_MOVE \
+ ix86_tune_features[X86_TUNE_PROLOGUE_USING_MOVE]
+#define TARGET_EPILOGUE_USING_MOVE \
+ ix86_tune_features[X86_TUNE_EPILOGUE_USING_MOVE]
+#define TARGET_SHIFT1 ix86_tune_features[X86_TUNE_SHIFT1]
+#define TARGET_USE_FFREEP ix86_tune_features[X86_TUNE_USE_FFREEP]
+#define TARGET_INTER_UNIT_MOVES ix86_tune_features[X86_TUNE_INTER_UNIT_MOVES]
+#define TARGET_FOUR_JUMP_LIMIT ix86_tune_features[X86_TUNE_FOUR_JUMP_LIMIT]
+#define TARGET_SCHEDULE ix86_tune_features[X86_TUNE_SCHEDULE]
+#define TARGET_USE_BT ix86_tune_features[X86_TUNE_USE_BT]
+#define TARGET_USE_INCDEC ix86_tune_features[X86_TUNE_USE_INCDEC]
+#define TARGET_PAD_RETURNS ix86_tune_features[X86_TUNE_PAD_RETURNS]
+#define TARGET_EXT_80387_CONSTANTS \
+ ix86_tune_features[X86_TUNE_EXT_80387_CONSTANTS]
+#define TARGET_SHORTEN_X87_SSE ix86_tune_features[X86_TUNE_SHORTEN_X87_SSE]
+#define TARGET_AVOID_VECTOR_DECODE \
+ ix86_tune_features[X86_TUNE_AVOID_VECTOR_DECODE]
+#define TARGET_SLOW_IMUL_IMM32_MEM \
+ ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM32_MEM]
+#define TARGET_SLOW_IMUL_IMM8 ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM8]
+#define TARGET_MOVE_M1_VIA_OR ix86_tune_features[X86_TUNE_MOVE_M1_VIA_OR]
+#define TARGET_NOT_UNPAIRABLE ix86_tune_features[X86_TUNE_NOT_UNPAIRABLE]
+#define TARGET_NOT_VECTORMODE ix86_tune_features[X86_TUNE_NOT_VECTORMODE]
+
+/* Feature tests against the various architecture variations. */
+enum ix86_arch_indices {
+ X86_ARCH_CMOVE, /* || TARGET_SSE */
+ X86_ARCH_CMPXCHG,
+ X86_ARCH_CMPXCHG8B,
+ X86_ARCH_XADD,
+ X86_ARCH_BSWAP,
+
+ X86_ARCH_LAST
+};
+
+extern unsigned int ix86_arch_features[X86_ARCH_LAST];
+
+#define TARGET_CMOVE ix86_arch_features[X86_ARCH_CMOVE]
+#define TARGET_CMPXCHG ix86_arch_features[X86_ARCH_CMPXCHG]
+#define TARGET_CMPXCHG8B ix86_arch_features[X86_ARCH_CMPXCHG8B]
+#define TARGET_XADD ix86_arch_features[X86_ARCH_XADD]
+#define TARGET_BSWAP ix86_arch_features[X86_ARCH_BSWAP]
+
+#define TARGET_CMPXCHG16B x86_cmpxchg16b
+#define TARGET_SAHF x86_sahf
+
+#define TARGET_FISTTP (TARGET_SSE3 && TARGET_80387)
+
+extern int x86_prefetch_sse;
+#define TARGET_PREFETCH_SSE x86_prefetch_sse
+
+#define ASSEMBLER_DIALECT (ix86_asm_dialect)
+
+#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0)
+#define TARGET_MIX_SSE_I387 \
+ ((ix86_fpmath & (FPMATH_SSE | FPMATH_387)) == (FPMATH_SSE | FPMATH_387))
+
+#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU)
+#define TARGET_GNU2_TLS (ix86_tls_dialect == TLS_DIALECT_GNU2)
+#define TARGET_ANY_GNU_TLS (TARGET_GNU_TLS || TARGET_GNU2_TLS)
+#define TARGET_SUN_TLS (ix86_tls_dialect == TLS_DIALECT_SUN)
#ifndef TARGET_64BIT_DEFAULT
#define TARGET_64BIT_DEFAULT 0
@@ -1794,7 +1869,8 @@ do { \
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */
-#define CASE_VECTOR_MODE (!TARGET_64BIT || flag_pic ? SImode : DImode)
+#define CASE_VECTOR_MODE \
+ (!TARGET_64BIT || (flag_pic && ix86_cmodel != CM_LARGE_PIC) ? SImode : DImode)
/* Define this as 1 if `char' should by default be signed; else as 0. */
#define DEFAULT_SIGNED_CHAR 1
@@ -2156,7 +2232,8 @@ enum cmodel {
CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */
CM_LARGE, /* No assumptions. */
CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region. */
- CM_MEDIUM_PIC /* Assumes code+got/plt fits in a 31 bit region. */
+ CM_MEDIUM_PIC,/* Assumes code+got/plt fits in a 31 bit region. */
+ CM_LARGE_PIC /* No assumptions. */
};
extern enum cmodel ix86_cmodel;
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 920b9dde8a1..a76c7802e49 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -58,6 +58,7 @@
(UNSPEC_DTPOFF 6)
(UNSPEC_GOTNTPOFF 7)
(UNSPEC_INDNTPOFF 8)
+ (UNSPEC_PLTOFF 9)
; Prologue support
(UNSPEC_STACK_ALLOC 11)
@@ -65,36 +66,38 @@
(UNSPEC_SSE_PROLOGUE_SAVE 13)
(UNSPEC_REG_SAVE 14)
(UNSPEC_DEF_CFA 15)
+ (UNSPEC_SET_RIP 16)
+ (UNSPEC_SET_GOT_OFFSET 17)
; TLS support
- (UNSPEC_TP 16)
- (UNSPEC_TLS_GD 17)
- (UNSPEC_TLS_LD_BASE 18)
- (UNSPEC_TLSDESC 19)
+ (UNSPEC_TP 18)
+ (UNSPEC_TLS_GD 19)
+ (UNSPEC_TLS_LD_BASE 20)
+ (UNSPEC_TLSDESC 21)
; Other random patterns
- (UNSPEC_SCAS 20)
- (UNSPEC_FNSTSW 21)
- (UNSPEC_SAHF 22)
- (UNSPEC_FSTCW 23)
- (UNSPEC_ADD_CARRY 24)
- (UNSPEC_FLDCW 25)
- (UNSPEC_REP 26)
- (UNSPEC_EH_RETURN 27)
- (UNSPEC_LD_MPIC 28) ; load_macho_picbase
- (UNSPEC_TRUNC_NOOP 29)
+ (UNSPEC_SCAS 30)
+ (UNSPEC_FNSTSW 31)
+ (UNSPEC_SAHF 32)
+ (UNSPEC_FSTCW 33)
+ (UNSPEC_ADD_CARRY 34)
+ (UNSPEC_FLDCW 35)
+ (UNSPEC_REP 36)
+ (UNSPEC_EH_RETURN 37)
+ (UNSPEC_LD_MPIC 38) ; load_macho_picbase
+ (UNSPEC_TRUNC_NOOP 39)
; For SSE/MMX support:
- (UNSPEC_FIX_NOTRUNC 30)
- (UNSPEC_MASKMOV 31)
- (UNSPEC_MOVMSK 32)
- (UNSPEC_MOVNT 33)
- (UNSPEC_MOVU 34)
- (UNSPEC_RCP 35)
- (UNSPEC_RSQRT 36)
- (UNSPEC_SFENCE 37)
- (UNSPEC_NOP 38) ; prevents combiner cleverness
- (UNSPEC_PFRCP 39)
+ (UNSPEC_FIX_NOTRUNC 40)
+ (UNSPEC_MASKMOV 41)
+ (UNSPEC_MOVMSK 42)
+ (UNSPEC_MOVNT 43)
+ (UNSPEC_MOVU 44)
+ (UNSPEC_RCP 45)
+ (UNSPEC_RSQRT 46)
+ (UNSPEC_SFENCE 47)
+ (UNSPEC_NOP 48) ; prevents combiner cleverness
+ (UNSPEC_PFRCP 49)
(UNSPEC_PFRCPIT1 40)
(UNSPEC_PFRCPIT2 41)
(UNSPEC_PFRSQRT 42)
@@ -141,6 +144,8 @@
(UNSPEC_FPREM1_F 90)
(UNSPEC_FPREM1_U 91)
+ (UNSPEC_C2_FLAG 95)
+
; SSP patterns
(UNSPEC_SP_SET 100)
(UNSPEC_SP_TEST 101)
@@ -980,9 +985,10 @@
(define_insn "x86_sahf_1"
[(set (reg:CC FLAGS_REG)
- (unspec:CC [(match_operand:HI 0 "register_operand" "a")] UNSPEC_SAHF))]
- "!TARGET_64BIT"
- "sahf"
+ (unspec:CC [(match_operand:HI 0 "register_operand" "a")]
+ UNSPEC_SAHF))]
+ "TARGET_SAHF"
+ "* return HAVE_AS_IX86_SAHF ? \"sahf\" : \".byte\t0x9e\";"
[(set_attr "length" "1")
(set_attr "athlon_decode" "vector")
(set_attr "amdfam10_decode" "direct")
@@ -1176,7 +1182,7 @@
(clobber (reg:CC FLAGS_REG))]
"reload_completed
&& operands[1] == constm1_rtx
- && (TARGET_PENTIUM || optimize_size)"
+ && (TARGET_MOVE_M1_VIA_OR || optimize_size)"
{
operands[1] = constm1_rtx;
return "or{l}\t{%1, %0|%0, %1}";
@@ -1968,7 +1974,7 @@
[(set (match_operand:DI 0 "register_operand" "=r")
(match_operand:DI 1 "const_int_operand" "i"))
(clobber (reg:CC FLAGS_REG))]
- "TARGET_64BIT && (TARGET_PENTIUM || optimize_size)
+ "TARGET_64BIT && (TARGET_MOVE_M1_VIA_OR || optimize_size)
&& reload_completed
&& operands[1] == constm1_rtx"
{
@@ -2022,9 +2028,9 @@
(define_insn "*movdi_1_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand"
- "=r,r ,r,m ,!m,*y,*y,?r ,m ,?*Ym,*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
+ "=r,r ,r,m ,!m,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
(match_operand:DI 1 "general_operand"
- "Z ,rem,i,re,n ,C ,*y,*Ym,*y,r ,m ,C ,*x,*Yi,*x,r ,m ,*Ym,*x"))]
+ "Z ,rem,i,re,n ,C ,*y,*Ym,*y,r ,m ,C ,*x,*Yi,*x,r ,m ,*Ym,*x"))]
"TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
{
switch (get_attr_type (insn))
@@ -2266,6 +2272,22 @@
[(const_int 0)]
"ix86_split_long_move (operands); DONE;")
+;; This expands to what emit_move_complex would generate if we didn't
+;; have a movti pattern. Having this avoids problems with reload on
+;; 32-bit targets when SSE is present, but doesn't seem to be harmful
+;; to have around all the time.
+(define_expand "movcdi"
+ [(set (match_operand:CDI 0 "nonimmediate_operand" "")
+ (match_operand:CDI 1 "general_operand" ""))]
+ ""
+{
+ if (push_operand (operands[0], CDImode))
+ emit_move_complex_push (CDImode, operands[0], operands[1]);
+ else
+ emit_move_complex_parts (operands[0], operands[1]);
+ DONE;
+})
+
(define_expand "movsf"
[(set (match_operand:SF 0 "nonimmediate_operand" "")
(match_operand:SF 1 "general_operand" ""))]
@@ -2326,9 +2348,9 @@
(define_insn "*movsf_1"
[(set (match_operand:SF 0 "nonimmediate_operand"
- "=f,m,f,r ,m ,x,x,x ,m,*y,m ,*y,Yi,r ,*Ym,r ")
+ "=f,m,f,r ,m ,x,x,x ,m,!*y,!m,!*y,?Yi,?r,!*Ym,!r")
(match_operand:SF 1 "general_operand"
- "fm,f,G,rmF,Fr,C,x,xm,x,m ,*y,*y,r ,Yi,r ,*Ym"))]
+ "fm,f,G,rmF,Fr,C,x,xm,x,m ,*y,*y ,r ,Yi,r ,*Ym"))]
"!(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
@@ -3401,9 +3423,9 @@
})
(define_insn "zero_extendsidi2_32"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?o,?*Ym,*y,?*Yi,*Y2")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?o,?*Ym,?*y,?*Yi,*Y2")
(zero_extend:DI
- (match_operand:SI 1 "nonimmediate_operand" "0,rm,r ,r ,m ,r ,m")))
+ (match_operand:SI 1 "nonimmediate_operand" "0,rm,r ,r ,m ,r ,m")))
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT"
"@
@@ -3418,9 +3440,9 @@
(set_attr "type" "multi,multi,multi,mmxmov,mmxmov,ssemov,ssemov")])
(define_insn "zero_extendsidi2_rex64"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,*y,?*Yi,*Y2")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,?*y,?*Yi,*Y2")
(zero_extend:DI
- (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))]
+ (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))]
"TARGET_64BIT"
"@
mov\t{%k1, %k0|%k0, %k1}
@@ -4374,90 +4396,54 @@
;; Without these patterns, we'll try the unsigned SI conversion which
;; is complex for SSE, rather than the signed SI conversion, which isn't.
-(define_expand "fixuns_truncsfhi2"
+(define_expand "fixuns_trunc<mode>hi2"
[(set (match_dup 2)
- (fix:SI (match_operand:SF 1 "nonimmediate_operand" "")))
+ (fix:SI (match_operand:SSEMODEF 1 "nonimmediate_operand" "")))
(set (match_operand:HI 0 "nonimmediate_operand" "")
(subreg:HI (match_dup 2) 0))]
- "TARGET_SSE_MATH"
- "operands[2] = gen_reg_rtx (SImode);")
-
-(define_expand "fixuns_truncdfhi2"
- [(set (match_dup 2)
- (fix:SI (match_operand:DF 1 "nonimmediate_operand" "")))
- (set (match_operand:HI 0 "nonimmediate_operand" "")
- (subreg:HI (match_dup 2) 0))]
- "TARGET_SSE_MATH && TARGET_SSE2"
+ "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
"operands[2] = gen_reg_rtx (SImode);")
;; When SSE is available, it is always faster to use it!
-(define_insn "fix_truncsfdi_sse"
+(define_insn "fix_trunc<mode>di_sse"
[(set (match_operand:DI 0 "register_operand" "=r,r")
- (fix:DI (match_operand:SF 1 "nonimmediate_operand" "x,xm")))]
- "TARGET_64BIT && TARGET_SSE && (!TARGET_FISTTP || TARGET_SSE_MATH)"
- "cvttss2si{q}\t{%1, %0|%0, %1}"
+ (fix:DI (match_operand:SSEMODEF 1 "nonimmediate_operand" "x,xm")))]
+ "TARGET_64BIT && SSE_FLOAT_MODE_P (<MODE>mode)
+ && (!TARGET_FISTTP || TARGET_SSE_MATH)"
+ "cvtts<ssemodefsuffix>2si{q}\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
- (set_attr "mode" "SF")
- (set_attr "athlon_decode" "double,vector")
- (set_attr "amdfam10_decode" "double,double")])
-
-(define_insn "fix_truncdfdi_sse"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (fix:DI (match_operand:DF 1 "nonimmediate_operand" "x,xm")))]
- "TARGET_64BIT && TARGET_SSE2 && (!TARGET_FISTTP || TARGET_SSE_MATH)"
- "cvttsd2si{q}\t{%1, %0|%0, %1}"
- [(set_attr "type" "sseicvt")
- (set_attr "mode" "DF")
- (set_attr "athlon_decode" "double,vector")
- (set_attr "amdfam10_decode" "double,double")])
-
-(define_insn "fix_truncsfsi_sse"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (fix:SI (match_operand:SF 1 "nonimmediate_operand" "x,xm")))]
- "TARGET_SSE && (!TARGET_FISTTP || TARGET_SSE_MATH)"
- "cvttss2si\t{%1, %0|%0, %1}"
- [(set_attr "type" "sseicvt")
- (set_attr "mode" "DF")
+ (set_attr "mode" "<MODE>")
(set_attr "athlon_decode" "double,vector")
(set_attr "amdfam10_decode" "double,double")])
-(define_insn "fix_truncdfsi_sse"
+(define_insn "fix_trunc<mode>si_sse"
[(set (match_operand:SI 0 "register_operand" "=r,r")
- (fix:SI (match_operand:DF 1 "nonimmediate_operand" "x,xm")))]
- "TARGET_SSE2 && (!TARGET_FISTTP || TARGET_SSE_MATH)"
- "cvttsd2si\t{%1, %0|%0, %1}"
+ (fix:SI (match_operand:SSEMODEF 1 "nonimmediate_operand" "x,xm")))]
+ "SSE_FLOAT_MODE_P (<MODE>mode)
+ && (!TARGET_FISTTP || TARGET_SSE_MATH)"
+ "cvtts<ssemodefsuffix>2si\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
- (set_attr "mode" "DF")
+ (set_attr "mode" "<MODE>")
(set_attr "athlon_decode" "double,vector")
(set_attr "amdfam10_decode" "double,double")])
;; Shorten x87->SSE reload sequences of fix_trunc?f?i_sse patterns.
(define_peephole2
- [(set (match_operand:DF 0 "register_operand" "")
- (match_operand:DF 1 "memory_operand" ""))
- (set (match_operand:SSEMODEI24 2 "register_operand" "")
- (fix:SSEMODEI24 (match_dup 0)))]
- "!TARGET_K8
- && peep2_reg_dead_p (2, operands[0])"
- [(set (match_dup 2) (fix:SSEMODEI24 (match_dup 1)))]
- "")
-
-(define_peephole2
- [(set (match_operand:SF 0 "register_operand" "")
- (match_operand:SF 1 "memory_operand" ""))
+ [(set (match_operand:SSEMODEF 0 "register_operand" "")
+ (match_operand:SSEMODEF 1 "memory_operand" ""))
(set (match_operand:SSEMODEI24 2 "register_operand" "")
(fix:SSEMODEI24 (match_dup 0)))]
- "!TARGET_K8
+ "TARGET_SHORTEN_X87_SSE
&& peep2_reg_dead_p (2, operands[0])"
[(set (match_dup 2) (fix:SSEMODEI24 (match_dup 1)))]
"")
;; Avoid vector decoded forms of the instruction.
(define_peephole2
- [(match_scratch:DF 2 "Y")
+ [(match_scratch:DF 2 "Y2")
(set (match_operand:SSEMODEI24 0 "register_operand" "")
(fix:SSEMODEI24 (match_operand:DF 1 "memory_operand" "")))]
- "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size"
+ "TARGET_AVOID_VECTOR_DECODE && !optimize_size"
[(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (fix:SSEMODEI24 (match_dup 2)))]
"")
@@ -4466,7 +4452,7 @@
[(match_scratch:SF 2 "x")
(set (match_operand:SSEMODEI24 0 "register_operand" "")
(fix:SSEMODEI24 (match_operand:SF 1 "memory_operand" "")))]
- "(TARGET_K8 || TARGET_GENERIC64) && !optimize_size"
+ "TARGET_AVOID_VECTOR_DECODE && !optimize_size"
[(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (fix:SSEMODEI24 (match_dup 2)))]
"")
@@ -14334,7 +14320,9 @@
rtx op0, op1;
enum rtx_code code;
- if (TARGET_64BIT)
+ /* We can't use @GOTOFF for text labels on VxWorks;
+ see gotoff_operand. */
+ if (TARGET_64BIT || TARGET_VXWORKS_RTP)
{
code = PLUS;
op0 = operands[0];
@@ -14529,7 +14517,8 @@
(define_insn "*call_1_rex64"
[(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rsm"))
(match_operand 1 "" ""))]
- "!SIBLING_CALL_P (insn) && TARGET_64BIT"
+ "!SIBLING_CALL_P (insn) && TARGET_64BIT
+ && ix86_cmodel != CM_LARGE && ix86_cmodel != CM_LARGE_PIC"
{
if (constant_call_address_operand (operands[0], Pmode))
return "call\t%P0";
@@ -14537,6 +14526,13 @@
}
[(set_attr "type" "call")])
+(define_insn "*call_1_rex64_large"
+ [(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rm"))
+ (match_operand 1 "" ""))]
+ "!SIBLING_CALL_P (insn) && TARGET_64BIT"
+ "call\t%A0"
+ [(set_attr "type" "call")])
+
(define_insn "*sibcall_1_rex64"
[(call (mem:QI (match_operand:DI 0 "constant_call_address_operand" ""))
(match_operand 1 "" ""))]
@@ -14753,6 +14749,22 @@
[(set_attr "type" "lea")
(set_attr "length" "6")])
+(define_insn "set_rip_rex64"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (unspec:DI [(match_operand:DI 1 "" "")] UNSPEC_SET_RIP))]
+ "TARGET_64BIT"
+ "lea{q}\t%l1(%%rip), %0"
+ [(set_attr "type" "lea")
+ (set_attr "length" "6")])
+
+(define_insn "set_got_offset_rex64"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (unspec:DI [(match_operand:DI 1 "" "")] UNSPEC_SET_GOT_OFFSET))]
+ "TARGET_64BIT"
+ "movabs{q}\t$_GLOBAL_OFFSET_TABLE_-%l1, %0"
+ [(set_attr "type" "imov")
+ (set_attr "length" "11")])
+
(define_expand "epilogue"
[(const_int 1)]
""
@@ -16269,7 +16281,8 @@
(unspec:XF [(match_dup 2) (match_dup 3)]
UNSPEC_FPREM_U))
(set (reg:CCFP FPSR_REG)
- (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ (unspec:CCFP [(match_dup 2) (match_dup 3)]
+ UNSPEC_C2_FLAG))]
"TARGET_USE_FANCY_MATH_387"
"fprem"
[(set_attr "type" "fpspc")
@@ -16288,6 +16301,7 @@
emit_insn (gen_fpremxf4_i387 (operands[1], operands[2],
operands[1], operands[2]));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
emit_move_insn (operands[0], operands[1]);
DONE;
@@ -16310,6 +16324,7 @@
emit_label (label);
emit_insn (gen_fpremxf4_i387 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
/* Truncate the result properly for strict SSE math. */
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
@@ -16330,7 +16345,8 @@
(unspec:XF [(match_dup 2) (match_dup 3)]
UNSPEC_FPREM1_U))
(set (reg:CCFP FPSR_REG)
- (unspec:CCFP [(const_int 0)] UNSPEC_NOP))]
+ (unspec:CCFP [(match_dup 2) (match_dup 3)]
+ UNSPEC_C2_FLAG))]
"TARGET_USE_FANCY_MATH_387"
"fprem1"
[(set_attr "type" "fpspc")
@@ -16349,6 +16365,7 @@
emit_insn (gen_fprem1xf4_i387 (operands[1], operands[2],
operands[1], operands[2]));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
emit_move_insn (operands[0], operands[1]);
DONE;
@@ -16372,6 +16389,7 @@
emit_insn (gen_fprem1xf4_i387 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label);
+ LABEL_NUSES (label) = 1;
/* Truncate the result properly for strict SSE math. */
if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
@@ -17264,54 +17282,28 @@
})
-(define_insn "frndintxf2"
+(define_insn "rintxf2"
[(set (match_operand:XF 0 "register_operand" "=f")
(unspec:XF [(match_operand:XF 1 "register_operand" "0")]
- UNSPEC_FRNDINT))]
+ UNSPEC_FRNDINT))]
"TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations"
"frndint"
[(set_attr "type" "fpspc")
(set_attr "mode" "XF")])
-(define_expand "rintdf2"
- [(use (match_operand:DF 0 "register_operand" ""))
- (use (match_operand:DF 1 "register_operand" ""))]
+(define_expand "rint<mode>2"
+ [(use (match_operand:SSEMODEF 0 "register_operand" ""))
+ (use (match_operand:SSEMODEF 1 "register_operand" ""))]
"(TARGET_USE_FANCY_MATH_387
- && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
+ && (!(SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
+ || TARGET_MIX_SSE_I387)
&& flag_unsafe_math_optimizations)
- || (SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
+ || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !flag_trapping_math
&& !optimize_size)"
{
- if (SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
- && !flag_trapping_math
- && !optimize_size)
- ix86_expand_rint (operand0, operand1);
- else
- {
- rtx op0 = gen_reg_rtx (XFmode);
- rtx op1 = gen_reg_rtx (XFmode);
-
- emit_insn (gen_extenddfxf2 (op1, operands[1]));
- emit_insn (gen_frndintxf2 (op0, op1));
-
- emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
- }
- DONE;
-})
-
-(define_expand "rintsf2"
- [(use (match_operand:SF 0 "register_operand" ""))
- (use (match_operand:SF 1 "register_operand" ""))]
- "(TARGET_USE_FANCY_MATH_387
- && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
- && flag_unsafe_math_optimizations)
- || (SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
- && !flag_trapping_math
- && !optimize_size)"
-{
- if (SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
+ if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !flag_trapping_math
&& !optimize_size)
ix86_expand_rint (operand0, operand1);
@@ -17320,43 +17312,22 @@
rtx op0 = gen_reg_rtx (XFmode);
rtx op1 = gen_reg_rtx (XFmode);
- emit_insn (gen_extendsfxf2 (op1, operands[1]));
- emit_insn (gen_frndintxf2 (op0, op1));
+ emit_insn (gen_extend<mode>xf2 (op1, operands[1]));
+ emit_insn (gen_rintxf2 (op0, op1));
- emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
+ emit_insn (gen_truncxf<mode>2_i387_noop (operands[0], op0));
}
DONE;
})
-(define_expand "rintxf2"
- [(use (match_operand:XF 0 "register_operand" ""))
- (use (match_operand:XF 1 "register_operand" ""))]
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations && !optimize_size"
-{
- emit_insn (gen_frndintxf2 (operands[0], operands[1]));
- DONE;
-})
-
-(define_expand "roundsf2"
- [(match_operand:SF 0 "register_operand" "")
- (match_operand:SF 1 "nonimmediate_operand" "")]
- "SSE_FLOAT_MODE_P (SFmode) && TARGET_SSE_MATH
- && !flag_trapping_math && !flag_rounding_math
- && !optimize_size"
-{
- ix86_expand_round (operand0, operand1);
- DONE;
-})
-
-(define_expand "rounddf2"
- [(match_operand:DF 0 "register_operand" "")
- (match_operand:DF 1 "nonimmediate_operand" "")]
- "SSE_FLOAT_MODE_P (DFmode) && TARGET_SSE_MATH
+(define_expand "round<mode>2"
+ [(match_operand:SSEMODEF 0 "register_operand" "")
+ (match_operand:SSEMODEF 1 "nonimmediate_operand" "")]
+ "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
&& !flag_trapping_math && !flag_rounding_math
&& !optimize_size"
{
- if (TARGET_64BIT)
+ if ((<MODE>mode != DFmode) || TARGET_64BIT)
ix86_expand_round (operand0, operand1);
else
ix86_expand_rounddf_32 (operand0, operand1);
@@ -17366,7 +17337,7 @@
(define_insn_and_split "*fistdi2_1"
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
(unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
- UNSPEC_FIST))]
+ UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387
&& !(reload_completed || reload_in_progress)"
"#"
@@ -17389,7 +17360,7 @@
(define_insn "fistdi2"
[(set (match_operand:DI 0 "memory_operand" "=m")
(unspec:DI [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_scratch:XF 2 "=&1f"))]
"TARGET_USE_FANCY_MATH_387"
"* return output_fix_trunc (insn, operands, 0);"
@@ -17399,7 +17370,7 @@
(define_insn "fistdi2_with_temp"
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r")
(unspec:DI [(match_operand:XF 1 "register_operand" "f,f")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:DI 2 "memory_operand" "=m,m"))
(clobber (match_scratch:XF 3 "=&1f,&1f"))]
"TARGET_USE_FANCY_MATH_387"
@@ -17410,7 +17381,7 @@
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(unspec:DI [(match_operand:XF 1 "register_operand" "")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:DI 2 "memory_operand" ""))
(clobber (match_scratch 3 ""))]
"reload_completed"
@@ -17422,7 +17393,7 @@
(define_split
[(set (match_operand:DI 0 "memory_operand" "")
(unspec:DI [(match_operand:XF 1 "register_operand" "")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:DI 2 "memory_operand" ""))
(clobber (match_scratch 3 ""))]
"reload_completed"
@@ -17433,7 +17404,7 @@
(define_insn_and_split "*fist<mode>2_1"
[(set (match_operand:X87MODEI12 0 "register_operand" "=r")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))]
+ UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387
&& !(reload_completed || reload_in_progress)"
"#"
@@ -17451,7 +17422,7 @@
(define_insn "fist<mode>2"
[(set (match_operand:X87MODEI12 0 "memory_operand" "=m")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))]
+ UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387"
"* return output_fix_trunc (insn, operands, 0);"
[(set_attr "type" "fpspc")
@@ -17460,7 +17431,7 @@
(define_insn "fist<mode>2_with_temp"
[(set (match_operand:X87MODEI12 0 "register_operand" "=r")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "f")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:X87MODEI12 2 "memory_operand" "=m"))]
"TARGET_USE_FANCY_MATH_387"
"#"
@@ -17470,60 +17441,42 @@
(define_split
[(set (match_operand:X87MODEI12 0 "register_operand" "")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:X87MODEI12 2 "memory_operand" ""))]
"reload_completed"
- [(set (match_dup 2) (unspec:X87MODEI12 [(match_dup 1)]
- UNSPEC_FIST))
+ [(set (match_dup 2) (unspec:X87MODEI12 [(match_dup 1)] UNSPEC_FIST))
(set (match_dup 0) (match_dup 2))]
"")
(define_split
[(set (match_operand:X87MODEI12 0 "memory_operand" "")
(unspec:X87MODEI12 [(match_operand:XF 1 "register_operand" "")]
- UNSPEC_FIST))
+ UNSPEC_FIST))
(clobber (match_operand:X87MODEI12 2 "memory_operand" ""))]
"reload_completed"
- [(set (match_dup 0) (unspec:X87MODEI12 [(match_dup 1)]
- UNSPEC_FIST))]
+ [(set (match_dup 0) (unspec:X87MODEI12 [(match_dup 1)] UNSPEC_FIST))]
"")
(define_expand "lrintxf<mode>2"
[(set (match_operand:X87MODEI 0 "nonimmediate_operand" "")
(unspec:X87MODEI [(match_operand:XF 1 "register_operand" "")]
- UNSPEC_FIST))]
+ UNSPEC_FIST))]
"TARGET_USE_FANCY_MATH_387"
"")
-(define_expand "lrint<mode>di2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "")
- (unspec:DI [(match_operand:SSEMODEF 1 "register_operand" "")]
- UNSPEC_FIX_NOTRUNC))]
- "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH && TARGET_64BIT"
- "")
-
-(define_expand "lrint<mode>si2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "")
- (unspec:SI [(match_operand:SSEMODEF 1 "register_operand" "")]
- UNSPEC_FIX_NOTRUNC))]
- "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH"
+(define_expand "lrint<SSEMODEF:mode><SSEMODEI24:mode>2"
+ [(set (match_operand:SSEMODEI24 0 "nonimmediate_operand" "")
+ (unspec:SSEMODEI24 [(match_operand:SSEMODEF 1 "register_operand" "")]
+ UNSPEC_FIX_NOTRUNC))]
+ "SSE_FLOAT_MODE_P (<SSEMODEF:MODE>mode) && TARGET_SSE_MATH
+ && ((<SSEMODEI24:MODE>mode != DImode) || TARGET_64BIT)"
"")
-(define_expand "lround<mode>di2"
- [(match_operand:DI 0 "nonimmediate_operand" "")
- (match_operand:SSEMODEF 1 "register_operand" "")]
- "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH && TARGET_64BIT
- && !flag_trapping_math && !flag_rounding_math
- && !optimize_size"
-{
- ix86_expand_lround (operand0, operand1);
- DONE;
-})
-
-(define_expand "lround<mode>si2"
- [(match_operand:SI 0 "nonimmediate_operand" "")
+(define_expand "lround<SSEMODEF:mode><SSEMODEI24:mode>2"
+ [(match_operand:SSEMODEI24 0 "nonimmediate_operand" "")
(match_operand:SSEMODEF 1 "register_operand" "")]
- "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
+ "SSE_FLOAT_MODE_P (<SSEMODEF:MODE>mode) && TARGET_SSE_MATH
+ && ((<SSEMODEI24:MODE>mode != DImode) || TARGET_64BIT)
&& !flag_trapping_math && !flag_rounding_math
&& !optimize_size"
{
@@ -20071,10 +20024,10 @@
(not:SI (match_operand:SI 1 "nonimmediate_operand" "")))]
"!optimize_size
&& peep2_regno_dead_p (0, FLAGS_REG)
- && ((TARGET_PENTIUM
+ && ((TARGET_NOT_UNPAIRABLE
&& (!MEM_P (operands[0])
|| !memory_displacement_operand (operands[0], SImode)))
- || (TARGET_K6 && long_memory_operand (operands[0], SImode)))"
+ || (TARGET_NOT_VECTORMODE && long_memory_operand (operands[0], SImode)))"
[(parallel [(set (match_dup 0)
(xor:SI (match_dup 1) (const_int -1)))
(clobber (reg:CC FLAGS_REG))])]
@@ -20085,10 +20038,10 @@
(not:HI (match_operand:HI 1 "nonimmediate_operand" "")))]
"!optimize_size
&& peep2_regno_dead_p (0, FLAGS_REG)
- && ((TARGET_PENTIUM
+ && ((TARGET_NOT_UNPAIRABLE
&& (!MEM_P (operands[0])
|| !memory_displacement_operand (operands[0], HImode)))
- || (TARGET_K6 && long_memory_operand (operands[0], HImode)))"
+ || (TARGET_NOT_VECTORMODE && long_memory_operand (operands[0], HImode)))"
[(parallel [(set (match_dup 0)
(xor:HI (match_dup 1) (const_int -1)))
(clobber (reg:CC FLAGS_REG))])]
@@ -20099,10 +20052,10 @@
(not:QI (match_operand:QI 1 "nonimmediate_operand" "")))]
"!optimize_size
&& peep2_regno_dead_p (0, FLAGS_REG)
- && ((TARGET_PENTIUM
+ && ((TARGET_NOT_UNPAIRABLE
&& (!MEM_P (operands[0])
|| !memory_displacement_operand (operands[0], QImode)))
- || (TARGET_K6 && long_memory_operand (operands[0], QImode)))"
+ || (TARGET_NOT_VECTORMODE && long_memory_operand (operands[0], QImode)))"
[(parallel [(set (match_dup 0)
(xor:QI (match_dup 1) (const_int -1)))
(clobber (reg:CC FLAGS_REG))])]
@@ -20284,7 +20237,7 @@
"(GET_MODE (operands[0]) == HImode
|| GET_MODE (operands[0]) == SImode
|| (GET_MODE (operands[0]) == DImode && TARGET_64BIT))
- && (optimize_size || TARGET_PENTIUM)
+ && (optimize_size || TARGET_MOVE_M1_VIA_OR)
&& peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 0) (const_int -1))
(clobber (reg:CC FLAGS_REG))])]
@@ -20688,7 +20641,7 @@
(mult:DI (match_operand:DI 1 "memory_operand" "")
(match_operand:DI 2 "immediate_operand" "")))
(clobber (reg:CC FLAGS_REG))])]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size
+ "TARGET_SLOW_IMUL_IMM32_MEM && !optimize_size
&& !satisfies_constraint_K (operands[2])"
[(set (match_dup 3) (match_dup 1))
(parallel [(set (match_dup 0) (mult:DI (match_dup 3) (match_dup 2)))
@@ -20701,7 +20654,7 @@
(mult:SI (match_operand:SI 1 "memory_operand" "")
(match_operand:SI 2 "immediate_operand" "")))
(clobber (reg:CC FLAGS_REG))])]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size
+ "TARGET_SLOW_IMUL_IMM32_MEM && !optimize_size
&& !satisfies_constraint_K (operands[2])"
[(set (match_dup 3) (match_dup 1))
(parallel [(set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))
@@ -20715,7 +20668,7 @@
(mult:SI (match_operand:SI 1 "memory_operand" "")
(match_operand:SI 2 "immediate_operand" ""))))
(clobber (reg:CC FLAGS_REG))])]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size
+ "TARGET_SLOW_IMUL_IMM32_MEM && !optimize_size
&& !satisfies_constraint_K (operands[2])"
[(set (match_dup 3) (match_dup 1))
(parallel [(set (match_dup 0) (zero_extend:DI (mult:SI (match_dup 3) (match_dup 2))))
@@ -20732,7 +20685,7 @@
(match_operand:DI 2 "const_int_operand" "")))
(clobber (reg:CC FLAGS_REG))])
(match_scratch:DI 3 "r")]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size
+ "TARGET_SLOW_IMUL_IMM8 && !optimize_size
&& satisfies_constraint_K (operands[2])"
[(set (match_dup 3) (match_dup 2))
(parallel [(set (match_dup 0) (mult:DI (match_dup 0) (match_dup 3)))
@@ -20748,7 +20701,7 @@
(match_operand:SI 2 "const_int_operand" "")))
(clobber (reg:CC FLAGS_REG))])
(match_scratch:SI 3 "r")]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size
+ "TARGET_SLOW_IMUL_IMM8 && !optimize_size
&& satisfies_constraint_K (operands[2])"
[(set (match_dup 3) (match_dup 2))
(parallel [(set (match_dup 0) (mult:SI (match_dup 0) (match_dup 3)))
@@ -20764,7 +20717,7 @@
(match_operand:HI 2 "immediate_operand" "")))
(clobber (reg:CC FLAGS_REG))])
(match_scratch:HI 3 "r")]
- "(TARGET_K8 || TARGET_GENERIC64 || TARGET_AMDFAM10) && !optimize_size"
+ "TARGET_SLOW_IMUL_IMM8 && !optimize_size"
[(set (match_dup 3) (match_dup 2))
(parallel [(set (match_dup 0) (mult:HI (match_dup 0) (match_dup 3)))
(clobber (reg:CC FLAGS_REG))])]
@@ -20925,7 +20878,8 @@
[(set (match_operand 0 "" "")
(call (mem:QI (match_operand:DI 1 "call_insn_operand" "rsm"))
(match_operand:DI 2 "" "")))]
- "!SIBLING_CALL_P (insn) && TARGET_64BIT"
+ "!SIBLING_CALL_P (insn) && TARGET_64BIT
+ && ix86_cmodel != CM_LARGE && ix86_cmodel != CM_LARGE_PIC"
{
if (constant_call_address_operand (operands[1], Pmode))
return "call\t%P1";
@@ -20933,6 +20887,14 @@
}
[(set_attr "type" "callv")])
+(define_insn "*call_value_1_rex64_large"
+ [(set (match_operand 0 "" "")
+ (call (mem:QI (match_operand:DI 1 "call_insn_operand" "rm"))
+ (match_operand:DI 2 "" "")))]
+ "!SIBLING_CALL_P (insn) && TARGET_64BIT"
+ "call\t%A1"
+ [(set_attr "type" "callv")])
+
(define_insn "*sibcall_value_1_rex64"
[(set (match_operand 0 "" "")
(call (mem:QI (match_operand:DI 1 "constant_call_address_operand" ""))
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 61c68074020..d8955ae3a93 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -221,6 +221,14 @@ which include popcnt and lzcnt instructions, for popcount and clz built-ins
namely __builtin_popcount, __builtin_popcountl, __builtin_popcountll and
__builtin_clz, __builtin_clzl, __builtin_clzll
+mcx16
+Target Report RejectNegative Var(x86_cmpxchg16b)
+Support code generation of cmpxchg16b instruction.
+
+msahf
+Target Report RejectNegative Var(x86_sahf)
+Support code generation of sahf instruction in 64bit x86-64 code
+
msseregparm
Target RejectNegative Mask(SSEREGPARM)
Use SSE register passing conventions for SF and DF mode
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index ea2eb69cf37..be2141c13f2 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -456,6 +456,18 @@
return 0;
})
+;; Test for a legitimate @GOTOFF operand.
+;;
+;; VxWorks does not impose a fixed gap between segments; the run-time
+;; gap can be different from the object-file gap. We therefore can't
+;; use @GOTOFF unless we are absolutely sure that the symbol is in the
+;; same segment as the GOT. Unfortunately, the flexibility of linker
+;; scripts means that we can't be sure of that in general, so assume
+;; that @GOTOFF is never valid on VxWorks.
+(define_predicate "gotoff_operand"
+ (and (match_test "!TARGET_VXWORKS_RTP")
+ (match_operand 0 "local_symbolic_operand")))
+
;; Test for various thread-local symbols.
(define_predicate "tls_symbolic_operand"
(and (match_code "symbol_ref")
@@ -472,8 +484,9 @@
;; Test for a pc-relative call operand
(define_predicate "constant_call_address_operand"
- (ior (match_code "symbol_ref")
- (match_operand 0 "local_symbolic_operand")))
+ (and (ior (match_code "symbol_ref")
+ (match_operand 0 "local_symbolic_operand"))
+ (match_test "ix86_cmodel != CM_LARGE && ix86_cmodel != CM_LARGE_PIC")))
;; True for any non-virtual or eliminable register. Used in places where
;; instantiation of such a register may cause the pattern to not be recognized.
diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h
index 7593071030e..8df92e3b29c 100644
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -51,7 +51,7 @@ Boston, MA 02110-1301, USA. */
/* Solaris 2/Intel as chokes on #line directives. */
#undef CPP_SPEC
-#define CPP_SPEC "%{.S:-P} %(cpp_subtarget)"
+#define CPP_SPEC "%{,assembler-with-cpp:-P} %(cpp_subtarget)"
/* FIXME: Removed -K PIC from generic Solaris 2 ASM_SPEC: the native assembler
gives many warnings: R_386_32 relocation is used for symbol ".text". */
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 512a8f9bfdf..cc123cc3510 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -60,7 +60,9 @@
(define_insn "*mov<mode>_internal"
[(set (match_operand:SSEMODEI 0 "nonimmediate_operand" "=x,x ,m")
(match_operand:SSEMODEI 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))]
- "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+ "TARGET_SSE
+ && (register_operand (operands[0], <MODE>mode)
+ || register_operand (operands[1], <MODE>mode))"
{
switch (which_alternative)
{
@@ -140,7 +142,9 @@
(define_insn "*movv4sf_internal"
[(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,x,m")
(match_operand:V4SF 1 "nonimmediate_or_sse_const_operand" "C,xm,x"))]
- "TARGET_SSE"
+ "TARGET_SSE
+ && (register_operand (operands[0], V4SFmode)
+ || register_operand (operands[1], V4SFmode))"
{
switch (which_alternative)
{
@@ -182,7 +186,9 @@
(define_insn "*movv2df_internal"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m")
(match_operand:V2DF 1 "nonimmediate_or_sse_const_operand" "C,xm,x"))]
- "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+ "TARGET_SSE
+ && (register_operand (operands[0], V2DFmode)
+ || register_operand (operands[1], V2DFmode))"
{
switch (which_alternative)
{
diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h
index 186f339147b..bdf3968e95c 100644
--- a/gcc/config/ia64/hpux.h
+++ b/gcc/config/ia64/hpux.h
@@ -1,5 +1,5 @@
/* Definitions of target machine GNU compiler. IA-64 version.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
Contributed by Steve Ellcey <sje@cup.hp.com> and
Reva Cuthbertson <reva@cup.hp.com>
@@ -174,13 +174,8 @@ do { \
/* It is illegal to have relocations in shared segments on HPUX.
Pretend flag_pic is always set. */
-#undef TARGET_ASM_SELECT_SECTION
-#define TARGET_ASM_SELECT_SECTION ia64_rwreloc_select_section
-#undef TARGET_ASM_UNIQUE_SECTION
-#define TARGET_ASM_UNIQUE_SECTION ia64_rwreloc_unique_section
-#undef TARGET_ASM_SELECT_RTX_SECTION
-#define TARGET_ASM_SELECT_RTX_SECTION ia64_rwreloc_select_rtx_section
-#define TARGET_RWRELOC true
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK ia64_hpux_reloc_rw_mask
/* ia64 HPUX has the float and long double forms of math functions. */
#undef TARGET_C99_FUNCTIONS
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index f1dbfc35a73..dc10abb3dcd 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by James E. Wilson <wilson@cygnus.com> and
David Mosberger <davidm@hpl.hp.com>.
@@ -244,17 +244,12 @@ static void ia64_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
static void ia64_file_start (void);
static void ia64_globalize_decl_name (FILE *, tree);
+static int ia64_hpux_reloc_rw_mask (void) ATTRIBUTE_UNUSED;
+static int ia64_reloc_rw_mask (void) ATTRIBUTE_UNUSED;
static section *ia64_select_rtx_section (enum machine_mode, rtx,
unsigned HOST_WIDE_INT);
static void ia64_output_dwarf_dtprel (FILE *, int, rtx)
ATTRIBUTE_UNUSED;
-static section *ia64_rwreloc_select_section (tree, int, unsigned HOST_WIDE_INT)
- ATTRIBUTE_UNUSED;
-static void ia64_rwreloc_unique_section (tree, int)
- ATTRIBUTE_UNUSED;
-static section *ia64_rwreloc_select_rtx_section (enum machine_mode, rtx,
- unsigned HOST_WIDE_INT)
- ATTRIBUTE_UNUSED;
static unsigned int ia64_section_type_flags (tree, const char *, int);
static void ia64_init_libfuncs (void)
ATTRIBUTE_UNUSED;
@@ -9374,6 +9369,24 @@ ia64_sysv4_init_libfuncs (void)
glibc doesn't have them. */
}
+/* For HPUX, it is illegal to have relocations in shared segments. */
+
+static int
+ia64_hpux_reloc_rw_mask (void)
+{
+ return 3;
+}
+
+/* For others, relax this so that relocations to local data goes in
+ read-only segments, but we still cannot allow global relocations
+ in read-only segments. */
+
+static int
+ia64_reloc_rw_mask (void)
+{
+ return flag_pic ? 3 : 2;
+}
+
/* Return the section to use for X. The only special thing we do here
is to honor small data. */
@@ -9389,37 +9402,6 @@ ia64_select_rtx_section (enum machine_mode mode, rtx x,
return default_elf_select_rtx_section (mode, x, align);
}
-/* It is illegal to have relocations in shared segments on AIX and HPUX.
- Pretend flag_pic is always set. */
-
-static section *
-ia64_rwreloc_select_section (tree exp, int reloc, unsigned HOST_WIDE_INT align)
-{
- return default_elf_select_section_1 (exp, reloc, align, true);
-}
-
-static void
-ia64_rwreloc_unique_section (tree decl, int reloc)
-{
- default_unique_section_1 (decl, reloc, true);
-}
-
-static section *
-ia64_rwreloc_select_rtx_section (enum machine_mode mode, rtx x,
- unsigned HOST_WIDE_INT align)
-{
- section *sect;
- int save_pic = flag_pic;
- flag_pic = 1;
- sect = ia64_select_rtx_section (mode, x, align);
- flag_pic = save_pic;
- return sect;
-}
-
-#ifndef TARGET_RWRELOC
-#define TARGET_RWRELOC flag_pic
-#endif
-
static unsigned int
ia64_section_type_flags (tree decl, const char *name, int reloc)
{
@@ -9435,7 +9417,7 @@ ia64_section_type_flags (tree decl, const char *name, int reloc)
|| strncmp (name, ".gnu.linkonce.sb.", 17) == 0)
flags = SECTION_SMALL;
- flags |= default_section_type_flags_1 (decl, name, reloc, TARGET_RWRELOC);
+ flags |= default_section_type_flags (decl, name, reloc);
return flags;
}
diff --git a/gcc/config/ia64/sysv4.h b/gcc/config/ia64/sysv4.h
index 5e93d4cd2d9..0e03e7d6107 100644
--- a/gcc/config/ia64/sysv4.h
+++ b/gcc/config/ia64/sysv4.h
@@ -121,6 +121,8 @@ do { \
} while (0)
/* Override default elf definition. */
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK ia64_reloc_rw_mask
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION ia64_select_rtx_section
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
index 09078374340..f57e4d5cb88 100644
--- a/gcc/config/linux.h
+++ b/gcc/config/linux.h
@@ -91,6 +91,7 @@ Boston, MA 02110-1301, USA. */
/* Define this so we can compile MS code for use with WINE. */
#define HANDLE_PRAGMA_PACK_PUSH_POP
+#undef LINK_GCC_C_SEQUENCE_SPEC
#define LINK_GCC_C_SEQUENCE_SPEC \
"%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
diff --git a/gcc/config/m32c/t-m32c b/gcc/config/m32c/t-m32c
index eb5882d9252..e5c8dd930b0 100644
--- a/gcc/config/m32c/t-m32c
+++ b/gcc/config/m32c/t-m32c
@@ -57,7 +57,7 @@ md : $(MD_FILES:%=$(srcdir)/config/m32c/%.md) $(srcdir)/config/m32c/t-m32c
echo "(include \"$(srcdir)/config/m32c/$$md.md\")"; \
done > md
-m32c-pragma.o: $(srcdir)/config/m32c/m32c-pragma.c $(RTL_H) $(TREE_H) $(CONFIG_H)
+m32c-pragma.o: $(srcdir)/config/m32c/m32c-pragma.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
# We support four CPU series, but R8C and M16C share one multilib, and
diff --git a/gcc/config/m68k/m68k-protos.h b/gcc/config/m68k/m68k-protos.h
index 85a5376826b..b3b78a15adb 100644
--- a/gcc/config/m68k/m68k-protos.h
+++ b/gcc/config/m68k/m68k-protos.h
@@ -21,6 +21,7 @@ Boston, MA 02110-1301, USA. */
/* Define functions defined in aux-output.c and used in templates. */
#ifdef RTX_CODE
+extern bool m68k_interrupt_function_p (tree);
extern HOST_WIDE_INT m68k_initial_elimination_offset (int from, int to);
extern void split_di (rtx[], int, rtx[], rtx[]);
@@ -41,6 +42,7 @@ extern const char *output_andsi3 (rtx *);
extern const char *output_iorsi3 (rtx *);
extern const char *output_xorsi3 (rtx *);
extern const char *output_call (rtx);
+extern const char *output_sibcall (rtx);
extern void output_dbcc_and_branch (rtx *);
extern int floating_exact_log2 (rtx);
extern bool strict_low_part_peephole_ok (enum machine_mode mode, rtx first_insn, rtx target);
@@ -50,20 +52,34 @@ extern int standard_68881_constant_p (rtx);
extern void print_operand_address (FILE *, rtx);
extern void print_operand (FILE *, rtx, int);
extern void notice_update_cc (rtx, rtx);
+extern bool m68k_legitimate_base_reg_p (rtx, bool);
+extern bool m68k_legitimate_index_reg_p (rtx, bool);
+extern bool m68k_illegitimate_symbolic_constant_p (rtx);
+extern bool m68k_legitimate_address_p (enum machine_mode, rtx, bool);
+extern bool m68k_matches_q_p (rtx);
+extern bool m68k_matches_u_p (rtx);
extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode);
extern rtx m68k_libcall_value (enum machine_mode);
extern rtx m68k_function_value (tree, tree);
extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
+extern bool m68k_movem_pattern_p (rtx, rtx, HOST_WIDE_INT, bool);
+extern const char *m68k_output_movem (rtx *, rtx, HOST_WIDE_INT, bool);
#endif /* RTX_CODE */
extern bool m68k_regno_mode_ok (int, enum machine_mode);
+extern enum reg_class m68k_secondary_reload_class (enum reg_class,
+ enum machine_mode, rtx);
+extern enum reg_class m68k_preferred_reload_class (rtx, enum reg_class);
extern int flags_in_68881 (void);
+extern void m68k_expand_prologue (void);
extern bool m68k_use_return_insn (void);
+extern void m68k_expand_epilogue (bool);
extern void override_options (void);
extern const char *m68k_cpp_cpu_ident (const char *);
extern const char *m68k_cpp_cpu_family (const char *);
extern void init_68881_table (void);
extern rtx m68k_legitimize_call_address (rtx);
+extern rtx m68k_legitimize_sibcall_address (rtx);
extern int m68k_hard_regno_rename_ok(unsigned int, unsigned int);
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index 08ebbd20dac..99dedb847b9 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -70,6 +70,16 @@ enum reg_class regno_reg_class[] =
#endif
+/* The minimum number of integer registers that we want to save with the
+ movem instruction. Using two movel instructions instead of a single
+ moveml is about 15% faster for the 68020 and 68030 at no expense in
+ code size. */
+#define MIN_MOVEM_REGS 3
+
+/* The minimum number of floating point registers that we want to save
+ with the fmovem instruction. */
+#define MIN_FMOVEM_REGS 1
+
/* Structure describing stack frame layout. */
struct m68k_frame
{
@@ -85,12 +95,10 @@ struct m68k_frame
/* Data and address register. */
int reg_no;
unsigned int reg_mask;
- unsigned int reg_rev_mask;
/* FPU registers. */
int fpu_no;
unsigned int fpu_mask;
- unsigned int fpu_rev_mask;
/* Offsets relative to ARG_POINTER. */
HOST_WIDE_INT frame_pointer_offset;
@@ -103,23 +111,42 @@ struct m68k_frame
/* Current frame information calculated by m68k_compute_frame_layout(). */
static struct m68k_frame current_frame;
+/* Structure describing an m68k address.
+
+ If CODE is UNKNOWN, the address is BASE + INDEX * SCALE + OFFSET,
+ with null fields evaluating to 0. Here:
+
+ - BASE satisfies m68k_legitimate_base_reg_p
+ - INDEX satisfies m68k_legitimate_index_reg_p
+ - OFFSET satisfies m68k_legitimate_constant_address_p
+
+ INDEX is either HImode or SImode. The other fields are SImode.
+
+ If CODE is PRE_DEC, the address is -(BASE). If CODE is POST_INC,
+ the address is (BASE)+. */
+struct m68k_address {
+ enum rtx_code code;
+ rtx base;
+ rtx index;
+ rtx offset;
+ int scale;
+};
+
static bool m68k_handle_option (size_t, const char *, int);
static rtx find_addr_reg (rtx);
static const char *singlemove_string (rtx *);
-static void m68k_output_function_prologue (FILE *, HOST_WIDE_INT);
-static void m68k_output_function_epilogue (FILE *, HOST_WIDE_INT);
#ifdef M68K_TARGET_COFF
static void m68k_coff_asm_named_section (const char *, unsigned int, tree);
#endif /* M68K_TARGET_COFF */
static void m68k_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
HOST_WIDE_INT, tree);
static rtx m68k_struct_value_rtx (tree, int);
-static bool m68k_interrupt_function_p (tree func);
static tree m68k_handle_fndecl_attribute (tree *node, tree name,
tree args, int flags,
bool *no_add_attrs);
static void m68k_compute_frame_layout (void);
static bool m68k_save_reg (unsigned int regno, bool interrupt_handler);
+static bool m68k_ok_for_sibcall_p (tree, tree);
static bool m68k_rtx_costs (rtx, int, int, int *);
@@ -161,15 +188,10 @@ int m68k_last_compare_had_fp_operands;
#undef TARGET_ASM_UNALIGNED_SI_OP
#define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP
-#undef TARGET_ASM_FUNCTION_PROLOGUE
-#define TARGET_ASM_FUNCTION_PROLOGUE m68k_output_function_prologue
-#undef TARGET_ASM_FUNCTION_EPILOGUE
-#define TARGET_ASM_FUNCTION_EPILOGUE m68k_output_function_epilogue
-
#undef TARGET_ASM_OUTPUT_MI_THUNK
#define TARGET_ASM_OUTPUT_MI_THUNK m68k_output_mi_thunk
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
-#define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true
#undef TARGET_ASM_FILE_START_APP_OFF
#define TARGET_ASM_FILE_START_APP_OFF true
@@ -191,6 +213,12 @@ int m68k_last_compare_had_fp_operands;
#undef TARGET_STRUCT_VALUE_RTX
#define TARGET_STRUCT_VALUE_RTX m68k_struct_value_rtx
+#undef TARGET_CANNOT_FORCE_CONST_MEM
+#define TARGET_CANNOT_FORCE_CONST_MEM m68k_illegitimate_symbolic_constant_p
+
+#undef TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL m68k_ok_for_sibcall_p
+
static const struct attribute_spec m68k_attribute_table[] =
{
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
@@ -607,8 +635,8 @@ m68k_cpp_cpu_family (const char *prefix)
/* Return nonzero if FUNC is an interrupt function as specified by the
"interrupt_handler" attribute. */
-static bool
-m68k_interrupt_function_p(tree func)
+bool
+m68k_interrupt_function_p (tree func)
{
tree a;
@@ -641,7 +669,7 @@ static void
m68k_compute_frame_layout (void)
{
int regno, saved;
- unsigned int mask, rmask;
+ unsigned int mask;
bool interrupt_handler = m68k_interrupt_function_p (current_function_decl);
/* Only compute the frame once per function.
@@ -652,28 +680,25 @@ m68k_compute_frame_layout (void)
current_frame.size = (get_frame_size () + 3) & -4;
- mask = rmask = saved = 0;
+ mask = saved = 0;
for (regno = 0; regno < 16; regno++)
if (m68k_save_reg (regno, interrupt_handler))
{
- mask |= 1 << regno;
- rmask |= 1 << (15 - regno);
+ mask |= 1 << (regno - D0_REG);
saved++;
}
current_frame.offset = saved * 4;
current_frame.reg_no = saved;
current_frame.reg_mask = mask;
- current_frame.reg_rev_mask = rmask;
current_frame.foffset = 0;
- mask = rmask = saved = 0;
+ mask = saved = 0;
if (TARGET_HARD_FLOAT)
{
for (regno = 16; regno < 24; regno++)
if (m68k_save_reg (regno, interrupt_handler))
{
- mask |= 1 << (regno - 16);
- rmask |= 1 << (23 - regno);
+ mask |= 1 << (regno - FP0_REG);
saved++;
}
current_frame.foffset = saved * TARGET_FP_REG_SIZE;
@@ -681,7 +706,6 @@ m68k_compute_frame_layout (void)
}
current_frame.fpu_no = saved;
current_frame.fpu_mask = mask;
- current_frame.fpu_rev_mask = rmask;
/* Remember what function this frame refers to. */
current_frame.funcdef_no = current_function_funcdef_no;
@@ -721,11 +745,20 @@ m68k_initial_elimination_offset (int from, int to)
static bool
m68k_save_reg (unsigned int regno, bool interrupt_handler)
{
- if (flag_pic && regno == PIC_OFFSET_TABLE_REGNUM)
+ if (flag_pic && regno == PIC_REG)
{
+ /* A function that receives a nonlocal goto must save all call-saved
+ registers. */
+ if (current_function_has_nonlocal_label)
+ return true;
if (current_function_uses_pic_offset_table)
return true;
- if (!current_function_is_leaf && TARGET_ID_SHARED_LIBRARY)
+ /* Reload may introduce constant pool references into a function
+ that thitherto didn't need a PIC register. Note that the test
+ above will not catch that case because we will only set
+ current_function_uses_pic_offset_table when emitting
+ the address reloads. */
+ if (current_function_uses_const_pool)
return true;
}
@@ -769,154 +802,158 @@ m68k_save_reg (unsigned int regno, bool interrupt_handler)
return !call_used_regs[regno];
}
-/* This function generates the assembly code for function entry.
- STREAM is a stdio stream to output the code to.
- SIZE is an int: how many units of temporary storage to allocate. */
+/* Emit RTL for a MOVEM or FMOVEM instruction. BASE + OFFSET represents
+ the lowest memory address. COUNT is the number of registers to be
+ moved, with register REGNO + I being moved if bit I of MASK is set.
+ STORE_P specifies the direction of the move and ADJUST_STACK_P says
+ whether or not this is pre-decrement (if STORE_P) or post-increment
+ (if !STORE_P) operation. */
+
+static rtx
+m68k_emit_movem (rtx base, HOST_WIDE_INT offset,
+ unsigned int count, unsigned int regno,
+ unsigned int mask, bool store_p, bool adjust_stack_p)
+{
+ int i;
+ rtx body, addr, src, operands[2];
+ enum machine_mode mode;
+
+ body = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (adjust_stack_p + count));
+ mode = reg_raw_mode[regno];
+ i = 0;
+
+ if (adjust_stack_p)
+ {
+ src = plus_constant (base, (count
+ * GET_MODE_SIZE (mode)
+ * (HOST_WIDE_INT) (store_p ? -1 : 1)));
+ XVECEXP (body, 0, i++) = gen_rtx_SET (VOIDmode, base, src);
+ }
+
+ for (; mask != 0; mask >>= 1, regno++)
+ if (mask & 1)
+ {
+ addr = plus_constant (base, offset);
+ operands[!store_p] = gen_frame_mem (mode, addr);
+ operands[store_p] = gen_rtx_REG (mode, regno);
+ XVECEXP (body, 0, i++)
+ = gen_rtx_SET (VOIDmode, operands[0], operands[1]);
+ offset += GET_MODE_SIZE (mode);
+ }
+ gcc_assert (i == XVECLEN (body, 0));
+
+ return emit_insn (body);
+}
+
+/* Make INSN a frame-related instruction. */
static void
-m68k_output_function_prologue (FILE *stream,
- HOST_WIDE_INT size ATTRIBUTE_UNUSED)
+m68k_set_frame_related (rtx insn)
+{
+ rtx body;
+ int i;
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ body = PATTERN (insn);
+ if (GET_CODE (body) == PARALLEL)
+ for (i = 0; i < XVECLEN (body, 0); i++)
+ RTX_FRAME_RELATED_P (XVECEXP (body, 0, i)) = 1;
+}
+
+/* Emit RTL for the "prologue" define_expand. */
+
+void
+m68k_expand_prologue (void)
{
HOST_WIDE_INT fsize_with_regs;
- HOST_WIDE_INT cfa_offset = INCOMING_FRAME_SP_OFFSET;
+ rtx limit, src, dest, insn;
- m68k_compute_frame_layout();
+ m68k_compute_frame_layout ();
/* If the stack limit is a symbol, we can check it here,
before actually allocating the space. */
if (current_function_limit_stack
&& GET_CODE (stack_limit_rtx) == SYMBOL_REF)
- asm_fprintf (stream, "\tcmp" ASM_DOT "l %I%s+%wd,%Rsp\n\ttrapcs\n",
- XSTR (stack_limit_rtx, 0), current_frame.size + 4);
+ {
+ limit = plus_constant (stack_limit_rtx, current_frame.size + 4);
+ if (!LEGITIMATE_CONSTANT_P (limit))
+ {
+ emit_move_insn (gen_rtx_REG (Pmode, D0_REG), limit);
+ limit = gen_rtx_REG (Pmode, D0_REG);
+ }
+ emit_insn (gen_cmpsi (stack_pointer_rtx, limit));
+ emit_insn (gen_conditional_trap (gen_rtx_LTU (VOIDmode,
+ cc0_rtx, const0_rtx),
+ const1_rtx));
+ }
- /* On ColdFire add register save into initial stack frame setup, if possible. */
fsize_with_regs = current_frame.size;
if (TARGET_COLDFIRE)
{
- if (current_frame.reg_no > 2)
- fsize_with_regs += current_frame.reg_no * 4;
- if (current_frame.fpu_no)
- fsize_with_regs += current_frame.fpu_no * 8;
+ /* ColdFire's move multiple instructions do not allow pre-decrement
+ addressing. Add the size of movem saves to the initial stack
+ allocation instead. */
+ if (current_frame.reg_no >= MIN_MOVEM_REGS)
+ fsize_with_regs += current_frame.reg_no * GET_MODE_SIZE (SImode);
+ if (current_frame.fpu_no >= MIN_FMOVEM_REGS)
+ fsize_with_regs += current_frame.fpu_no * GET_MODE_SIZE (DFmode);
}
if (frame_pointer_needed)
{
- if (current_frame.size == 0 && TUNE_68040)
- /* on the 68040, pea + move is faster than link.w 0 */
- fprintf (stream, (MOTOROLA
- ? "\tpea (%s)\n\tmove.l %s,%s\n"
- : "\tpea %s@\n\tmovel %s,%s\n"),
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- M68K_REGNAME (STACK_POINTER_REGNUM),
- M68K_REGNAME (FRAME_POINTER_REGNUM));
- else if (fsize_with_regs < 0x8000)
- asm_fprintf (stream, "\tlink" ASM_DOTW " %s,%I%wd\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM), -fsize_with_regs);
- else if (TARGET_68020)
- asm_fprintf (stream, "\tlink" ASM_DOTL " %s,%I%wd\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM), -fsize_with_regs);
- else
- /* Adding negative number is faster on the 68040. */
- asm_fprintf (stream,
- "\tlink" ASM_DOTW " %s,%I0\n"
- "\tadd" ASM_DOT "l %I%wd,%Rsp\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM), -fsize_with_regs);
- }
- else if (fsize_with_regs) /* !frame_pointer_needed */
- {
- if (fsize_with_regs < 0x8000)
+ if (fsize_with_regs == 0 && TUNE_68040)
{
- if (fsize_with_regs <= 8)
- {
- if (!TARGET_COLDFIRE)
- asm_fprintf (stream, "\tsubq" ASM_DOT "w %I%wd,%Rsp\n",
- fsize_with_regs);
- else
- asm_fprintf (stream, "\tsubq" ASM_DOT "l %I%wd,%Rsp\n",
- fsize_with_regs);
- }
- else if (fsize_with_regs <= 16 && TUNE_CPU32)
- /* On the CPU32 it is faster to use two subqw instructions to
- subtract a small integer (8 < N <= 16) to a register. */
- asm_fprintf (stream,
- "\tsubq" ASM_DOT "w %I8,%Rsp\n"
- "\tsubq" ASM_DOT "w %I%wd,%Rsp\n",
- fsize_with_regs - 8);
- else if (TUNE_68040)
- /* Adding negative number is faster on the 68040. */
- asm_fprintf (stream, "\tadd" ASM_DOT "w %I%wd,%Rsp\n",
- -fsize_with_regs);
- else
- asm_fprintf (stream, (MOTOROLA
- ? "\tlea (%wd,%Rsp),%Rsp\n"
- : "\tlea %Rsp@(%wd),%Rsp\n"),
- -fsize_with_regs);
+ /* On the 68040, two separate moves are faster than link.w 0. */
+ dest = gen_frame_mem (Pmode,
+ gen_rtx_PRE_DEC (Pmode, stack_pointer_rtx));
+ m68k_set_frame_related (emit_move_insn (dest, frame_pointer_rtx));
+ m68k_set_frame_related (emit_move_insn (frame_pointer_rtx,
+ stack_pointer_rtx));
}
- else /* fsize_with_regs >= 0x8000 */
- asm_fprintf (stream, "\tadd" ASM_DOT "l %I%wd,%Rsp\n",
- -fsize_with_regs);
- } /* !frame_pointer_needed */
-
- if (dwarf2out_do_frame ())
- {
- if (frame_pointer_needed)
- {
- char *l;
- l = (char *) dwarf2out_cfi_label ();
- cfa_offset += 4;
- dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_offset);
- dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset);
- cfa_offset += current_frame.size;
- }
+ else if (fsize_with_regs < 0x8000 || TARGET_68020)
+ m68k_set_frame_related
+ (emit_insn (gen_link (frame_pointer_rtx,
+ GEN_INT (-4 - fsize_with_regs))));
else
- {
- cfa_offset += current_frame.size;
- dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
- }
+ {
+ m68k_set_frame_related
+ (emit_insn (gen_link (frame_pointer_rtx, GEN_INT (-4))));
+ m68k_set_frame_related
+ (emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (-fsize_with_regs))));
+ }
}
+ else if (fsize_with_regs != 0)
+ m68k_set_frame_related
+ (emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (-fsize_with_regs))));
if (current_frame.fpu_mask)
{
+ gcc_assert (current_frame.fpu_no >= MIN_FMOVEM_REGS);
if (TARGET_68881)
- {
- asm_fprintf (stream, (MOTOROLA
- ? "\tfmovm %I0x%x,-(%Rsp)\n"
- : "\tfmovem %I0x%x,%Rsp@-\n"),
- current_frame.fpu_mask);
- }
+ m68k_set_frame_related
+ (m68k_emit_movem (stack_pointer_rtx,
+ current_frame.fpu_no * -GET_MODE_SIZE (XFmode),
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, true, true));
else
{
int offset;
- /* stack already has registers in it. Find the offset from
- the bottom of stack to where the FP registers go */
- if (current_frame.reg_no <= 2)
+ /* If we're using moveml to save the integer registers,
+ the stack pointer will point to the bottom of the moveml
+ save area. Find the stack offset of the first FP register. */
+ if (current_frame.reg_no < MIN_MOVEM_REGS)
offset = 0;
else
- offset = current_frame.reg_no * 4;
- if (offset)
- asm_fprintf (stream,
- "\tfmovem %I0x%x,%d(%Rsp)\n",
- current_frame.fpu_rev_mask,
- offset);
- else
- asm_fprintf (stream,
- "\tfmovem %I0x%x,(%Rsp)\n",
- current_frame.fpu_rev_mask);
- }
-
- if (dwarf2out_do_frame ())
- {
- char *l = (char *) dwarf2out_cfi_label ();
- int n_regs, regno;
-
- cfa_offset += current_frame.fpu_no * TARGET_FP_REG_SIZE;
- if (! frame_pointer_needed)
- dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
- for (regno = 16, n_regs = 0; regno < 24; regno++)
- if (current_frame.fpu_mask & (1 << (regno - 16)))
- dwarf2out_reg_save (l, regno, -cfa_offset
- + n_regs++ * TARGET_FP_REG_SIZE);
+ offset = current_frame.reg_no * GET_MODE_SIZE (SImode);
+ m68k_set_frame_related
+ (m68k_emit_movem (stack_pointer_rtx, offset,
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, true, false));
}
}
@@ -925,96 +962,55 @@ m68k_output_function_prologue (FILE *stream,
if (current_function_limit_stack)
{
if (REG_P (stack_limit_rtx))
- asm_fprintf (stream, "\tcmp" ASM_DOT "l %s,%Rsp\n\ttrapcs\n",
- M68K_REGNAME (REGNO (stack_limit_rtx)));
+ {
+ emit_insn (gen_cmpsi (stack_pointer_rtx, stack_limit_rtx));
+ emit_insn (gen_conditional_trap (gen_rtx_LTU (VOIDmode,
+ cc0_rtx, const0_rtx),
+ const1_rtx));
+ }
else if (GET_CODE (stack_limit_rtx) != SYMBOL_REF)
warning (0, "stack limit expression is not supported");
}
- if (current_frame.reg_no <= 2)
+ if (current_frame.reg_no < MIN_MOVEM_REGS)
{
- /* Store each separately in the same order moveml uses.
- Using two movel instructions instead of a single moveml
- is about 15% faster for the 68020 and 68030 at no expense
- in code size. */
-
+ /* Store each register separately in the same order moveml does. */
int i;
- for (i = 0; i < 16; i++)
- if (current_frame.reg_rev_mask & (1 << i))
+ for (i = 16; i-- > 0; )
+ if (current_frame.reg_mask & (1 << i))
{
- asm_fprintf (stream, (MOTOROLA
- ? "\t%Omove.l %s,-(%Rsp)\n"
- : "\tmovel %s,%Rsp@-\n"),
- M68K_REGNAME (15 - i));
- if (dwarf2out_do_frame ())
- {
- char *l = (char *) dwarf2out_cfi_label ();
-
- cfa_offset += 4;
- if (! frame_pointer_needed)
- dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
- dwarf2out_reg_save (l, 15 - i, -cfa_offset);
- }
+ src = gen_rtx_REG (SImode, D0_REG + i);
+ dest = gen_frame_mem (SImode,
+ gen_rtx_PRE_DEC (Pmode, stack_pointer_rtx));
+ m68k_set_frame_related (emit_insn (gen_movsi (dest, src)));
}
}
- else if (current_frame.reg_rev_mask)
+ else
{
if (TARGET_COLDFIRE)
- /* The ColdFire does not support the predecrement form of the
- MOVEM instruction, so we must adjust the stack pointer and
- then use the plain address register indirect mode.
- The required register save space was combined earlier with
- the fsize_with_regs amount. */
-
- asm_fprintf (stream, (MOTOROLA
- ? "\tmovm.l %I0x%x,(%Rsp)\n"
- : "\tmoveml %I0x%x,%Rsp@\n"),
- current_frame.reg_mask);
+ /* The required register save space has already been allocated.
+ The first register should be stored at (%sp). */
+ m68k_set_frame_related
+ (m68k_emit_movem (stack_pointer_rtx, 0,
+ current_frame.reg_no, D0_REG,
+ current_frame.reg_mask, true, false));
else
- asm_fprintf (stream, (MOTOROLA
- ? "\tmovm.l %I0x%x,-(%Rsp)\n"
- : "\tmoveml %I0x%x,%Rsp@-\n"),
- current_frame.reg_rev_mask);
- if (dwarf2out_do_frame ())
- {
- char *l = (char *) dwarf2out_cfi_label ();
- int n_regs, regno;
-
- cfa_offset += current_frame.reg_no * 4;
- if (! frame_pointer_needed)
- dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
- for (regno = 0, n_regs = 0; regno < 16; regno++)
- if (current_frame.reg_mask & (1 << regno))
- dwarf2out_reg_save (l, regno, -cfa_offset + n_regs++ * 4);
- }
+ m68k_set_frame_related
+ (m68k_emit_movem (stack_pointer_rtx,
+ current_frame.reg_no * -GET_MODE_SIZE (SImode),
+ current_frame.reg_no, D0_REG,
+ current_frame.reg_mask, true, true));
}
- if (!TARGET_SEP_DATA && flag_pic
- && (current_function_uses_pic_offset_table
- || (!current_function_is_leaf && TARGET_ID_SHARED_LIBRARY)))
+
+ if (flag_pic
+ && !TARGET_SEP_DATA
+ && current_function_uses_pic_offset_table)
{
- if (TARGET_ID_SHARED_LIBRARY)
- {
- asm_fprintf (stream, "\tmovel %s@(%s), %s\n",
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM),
- m68k_library_id_string,
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM));
- }
- else
- {
- if (MOTOROLA)
- asm_fprintf (stream,
- "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM));
- else
- {
- asm_fprintf (stream, "\tmovel %I%U_GLOBAL_OFFSET_TABLE_, %s\n",
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM));
- asm_fprintf (stream, "\tlea %Rpc@(0,%s:l),%s\n",
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM),
- M68K_REGNAME (PIC_OFFSET_TABLE_REGNUM));
- }
- }
+ insn = emit_insn (gen_load_got (pic_offset_table_rtx));
+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD,
+ const0_rtx,
+ REG_NOTES (insn));
}
}
@@ -1031,301 +1027,175 @@ m68k_use_return_insn (void)
return current_frame.offset == 0;
}
-/* This function generates the assembly code for function exit,
- on machines that need it.
+/* Emit RTL for the "epilogue" or "sibcall_epilogue" define_expand;
+ SIBCALL_P says which.
The function epilogue should not depend on the current stack pointer!
It should use the frame pointer only, if there is a frame pointer.
This is mandatory because of alloca; we also take advantage of it to
omit stack adjustments before returning. */
-static void
-m68k_output_function_epilogue (FILE *stream,
- HOST_WIDE_INT size ATTRIBUTE_UNUSED)
+void
+m68k_expand_epilogue (bool sibcall_p)
{
HOST_WIDE_INT fsize, fsize_with_regs;
- bool big = false;
- bool restore_from_sp = false;
- rtx insn = get_last_insn ();
+ bool big, restore_from_sp;
m68k_compute_frame_layout ();
- /* If the last insn was a BARRIER, we don't have to write any code. */
- if (GET_CODE (insn) == NOTE)
- insn = prev_nonnote_insn (insn);
- if (insn && GET_CODE (insn) == BARRIER)
- return;
-
fsize = current_frame.size;
+ big = false;
+ restore_from_sp = false;
- /* FIXME: leaf_function_p below is too strong.
+ /* FIXME : current_function_is_leaf below is too strong.
What we really need to know there is if there could be pending
stack adjustment needed at that point. */
- restore_from_sp
- = (! frame_pointer_needed
- || (! current_function_calls_alloca && leaf_function_p ()));
+ restore_from_sp = (!frame_pointer_needed
+ || (!current_function_calls_alloca
+ && current_function_is_leaf));
/* fsize_with_regs is the size we need to adjust the sp when
popping the frame. */
fsize_with_regs = fsize;
-
- /* Because the ColdFire doesn't support moveml with
- complex address modes, we must adjust the stack manually
- after restoring registers. When the frame pointer isn't used,
- we can merge movem adjustment into frame unlinking
- made immediately after it. */
if (TARGET_COLDFIRE && restore_from_sp)
{
- if (current_frame.reg_no > 2)
- fsize_with_regs += current_frame.reg_no * 4;
- if (current_frame.fpu_no)
- fsize_with_regs += current_frame.fpu_no * 8;
+ /* ColdFire's move multiple instructions do not allow post-increment
+ addressing. Add the size of movem loads to the final deallocation
+ instead. */
+ if (current_frame.reg_no >= MIN_MOVEM_REGS)
+ fsize_with_regs += current_frame.reg_no * GET_MODE_SIZE (SImode);
+ if (current_frame.fpu_no >= MIN_FMOVEM_REGS)
+ fsize_with_regs += current_frame.fpu_no * GET_MODE_SIZE (DFmode);
}
if (current_frame.offset + fsize >= 0x8000
- && ! restore_from_sp
+ && !restore_from_sp
&& (current_frame.reg_mask || current_frame.fpu_mask))
{
- /* Because the ColdFire doesn't support moveml with
- complex address modes we make an extra correction here. */
- if (TARGET_COLDFIRE)
- fsize += current_frame.offset;
-
- asm_fprintf (stream, "\t%Omove" ASM_DOT "l %I%wd,%Ra1\n", -fsize);
- fsize = 0, big = true;
+ if (TARGET_COLDFIRE
+ && (current_frame.reg_no >= MIN_MOVEM_REGS
+ || current_frame.fpu_no >= MIN_FMOVEM_REGS))
+ {
+ /* ColdFire's move multiple instructions do not support the
+ (d8,Ax,Xi) addressing mode, so we're as well using a normal
+ stack-based restore. */
+ emit_move_insn (gen_rtx_REG (Pmode, A1_REG),
+ GEN_INT (-(current_frame.offset + fsize)));
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ gen_rtx_REG (Pmode, A1_REG),
+ frame_pointer_rtx));
+ restore_from_sp = true;
+ }
+ else
+ {
+ emit_move_insn (gen_rtx_REG (Pmode, A1_REG), GEN_INT (-fsize));
+ fsize = 0;
+ big = true;
+ }
}
- if (current_frame.reg_no <= 2)
- {
- /* Restore each separately in the same order moveml does.
- Using two movel instructions instead of a single moveml
- is about 15% faster for the 68020 and 68030 at no expense
- in code size. */
+ if (current_frame.reg_no < MIN_MOVEM_REGS)
+ {
+ /* Restore each register separately in the same order moveml does. */
int i;
- HOST_WIDE_INT offset = current_frame.offset + fsize;
+ HOST_WIDE_INT offset;
+ offset = current_frame.offset + fsize;
for (i = 0; i < 16; i++)
if (current_frame.reg_mask & (1 << i))
{
- if (big)
- {
- if (MOTOROLA)
- asm_fprintf (stream, "\t%Omove.l -%wd(%s,%Ra1.l),%s\n",
- offset,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- M68K_REGNAME (i));
- else
- asm_fprintf (stream, "\tmovel %s@(-%wd,%Ra1:l),%s\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- offset,
- M68K_REGNAME (i));
- }
- else if (restore_from_sp)
- asm_fprintf (stream, (MOTOROLA
- ? "\t%Omove.l (%Rsp)+,%s\n"
- : "\tmovel %Rsp@+,%s\n"),
- M68K_REGNAME (i));
- else
+ rtx addr;
+
+ if (big)
{
- if (MOTOROLA)
- asm_fprintf (stream, "\t%Omove.l -%wd(%s),%s\n",
- offset,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- M68K_REGNAME (i));
- else
- asm_fprintf (stream, "\tmovel %s@(-%wd),%s\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- offset,
- M68K_REGNAME (i));
+ /* Generate the address -OFFSET(%fp,%a1.l). */
+ addr = gen_rtx_REG (Pmode, A1_REG);
+ addr = gen_rtx_PLUS (Pmode, addr, frame_pointer_rtx);
+ addr = plus_constant (addr, -offset);
}
- offset -= 4;
- }
+ else if (restore_from_sp)
+ addr = gen_rtx_POST_INC (Pmode, stack_pointer_rtx);
+ else
+ addr = plus_constant (frame_pointer_rtx, -offset);
+ emit_move_insn (gen_rtx_REG (SImode, D0_REG + i),
+ gen_frame_mem (SImode, addr));
+ offset -= GET_MODE_SIZE (SImode);
+ }
}
else if (current_frame.reg_mask)
{
- /* The ColdFire requires special handling due to its limited moveml
- insn. */
- if (TARGET_COLDFIRE)
- {
- if (big)
- {
- asm_fprintf (stream, "\tadd" ASM_DOT "l %s,%Ra1\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM));
- asm_fprintf (stream, (MOTOROLA
- ? "\tmovm.l (%Ra1),%I0x%x\n"
- : "\tmoveml %Ra1@,%I0x%x\n"),
- current_frame.reg_mask);
- }
- else if (restore_from_sp)
- asm_fprintf (stream, (MOTOROLA
- ? "\tmovm.l (%Rsp),%I0x%x\n"
- : "\tmoveml %Rsp@,%I0x%x\n"),
- current_frame.reg_mask);
- else
- {
- if (MOTOROLA)
- asm_fprintf (stream, "\tmovm.l -%wd(%s),%I0x%x\n",
- current_frame.offset + fsize,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.reg_mask);
- else
- asm_fprintf (stream, "\tmoveml %s@(-%wd),%I0x%x\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.offset + fsize,
- current_frame.reg_mask);
- }
- }
- else /* !TARGET_COLDFIRE */
- {
- if (big)
- {
- if (MOTOROLA)
- asm_fprintf (stream, "\tmovm.l -%wd(%s,%Ra1.l),%I0x%x\n",
- current_frame.offset + fsize,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.reg_mask);
- else
- asm_fprintf (stream, "\tmoveml %s@(-%wd,%Ra1:l),%I0x%x\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.offset + fsize,
- current_frame.reg_mask);
- }
- else if (restore_from_sp)
- {
- asm_fprintf (stream, (MOTOROLA
- ? "\tmovm.l (%Rsp)+,%I0x%x\n"
- : "\tmoveml %Rsp@+,%I0x%x\n"),
- current_frame.reg_mask);
- }
- else
- {
- if (MOTOROLA)
- asm_fprintf (stream, "\tmovm.l -%wd(%s),%I0x%x\n",
- current_frame.offset + fsize,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.reg_mask);
- else
- asm_fprintf (stream, "\tmoveml %s@(-%wd),%I0x%x\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.offset + fsize,
- current_frame.reg_mask);
- }
- }
+ if (big)
+ m68k_emit_movem (gen_rtx_PLUS (Pmode,
+ gen_rtx_REG (Pmode, A1_REG),
+ frame_pointer_rtx),
+ -(current_frame.offset + fsize),
+ current_frame.reg_no, D0_REG,
+ current_frame.reg_mask, false, false);
+ else if (restore_from_sp)
+ m68k_emit_movem (stack_pointer_rtx, 0,
+ current_frame.reg_no, D0_REG,
+ current_frame.reg_mask, false,
+ !TARGET_COLDFIRE);
+ else
+ m68k_emit_movem (frame_pointer_rtx,
+ -(current_frame.offset + fsize),
+ current_frame.reg_no, D0_REG,
+ current_frame.reg_mask, false, false);
}
- if (current_frame.fpu_rev_mask)
+
+ if (current_frame.fpu_no > 0)
{
if (big)
- {
- if (TARGET_COLDFIRE)
- {
- if (current_frame.reg_no)
- asm_fprintf (stream, MOTOROLA ?
- "\tfmovem.d %d(%Ra1),%I0x%x\n" :
- "\tfmovmd (%d,%Ra1),%I0x%x\n",
- current_frame.reg_no * 4,
- current_frame.fpu_rev_mask);
- else
- asm_fprintf (stream, MOTOROLA ?
- "\tfmovem.d (%Ra1),%I0x%x\n" :
- "\tfmovmd (%Ra1),%I0x%x\n",
- current_frame.fpu_rev_mask);
- }
- else if (MOTOROLA)
- asm_fprintf (stream, "\tfmovm -%wd(%s,%Ra1.l),%I0x%x\n",
- current_frame.foffset + fsize,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.fpu_rev_mask);
- else
- asm_fprintf (stream, "\tfmovem %s@(-%wd,%Ra1:l),%I0x%x\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.foffset + fsize,
- current_frame.fpu_rev_mask);
- }
+ m68k_emit_movem (gen_rtx_PLUS (Pmode,
+ gen_rtx_REG (Pmode, A1_REG),
+ frame_pointer_rtx),
+ -(current_frame.foffset + fsize),
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, false, false);
else if (restore_from_sp)
{
if (TARGET_COLDFIRE)
{
int offset;
- /* Stack already has registers in it. Find the offset from
- the bottom of stack to where the FP registers go. */
- if (current_frame.reg_no <= 2)
+ /* If we used moveml to restore the integer registers, the
+ stack pointer will still point to the bottom of the moveml
+ save area. Find the stack offset of the first FP
+ register. */
+ if (current_frame.reg_no < MIN_MOVEM_REGS)
offset = 0;
else
- offset = current_frame.reg_no * 4;
- if (offset)
- asm_fprintf (stream,
- "\tfmovem %Rsp@(%d), %I0x%x\n",
- offset, current_frame.fpu_rev_mask);
- else
- asm_fprintf (stream,
- "\tfmovem %Rsp@, %I0x%x\n",
- current_frame.fpu_rev_mask);
+ offset = current_frame.reg_no * GET_MODE_SIZE (SImode);
+ m68k_emit_movem (stack_pointer_rtx, offset,
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, false, false);
}
else
- asm_fprintf (stream, MOTOROLA ?
- "\tfmovm (%Rsp)+,%I0x%x\n" :
- "\tfmovem %Rsp@+,%I0x%x\n",
- current_frame.fpu_rev_mask);
+ m68k_emit_movem (stack_pointer_rtx, 0,
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, false, true);
}
else
- {
- if (MOTOROLA && !TARGET_COLDFIRE)
- asm_fprintf (stream, "\tfmovm -%wd(%s),%I0x%x\n",
- current_frame.foffset + fsize,
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.fpu_rev_mask);
- else
- asm_fprintf (stream, "\tfmovem %s@(-%wd),%I0x%x\n",
- M68K_REGNAME (FRAME_POINTER_REGNUM),
- current_frame.foffset + fsize,
- current_frame.fpu_rev_mask);
- }
+ m68k_emit_movem (frame_pointer_rtx,
+ -(current_frame.foffset + fsize),
+ current_frame.fpu_no, FP0_REG,
+ current_frame.fpu_mask, false, false);
}
+
if (frame_pointer_needed)
- fprintf (stream, "\tunlk %s\n", M68K_REGNAME (FRAME_POINTER_REGNUM));
+ emit_insn (gen_unlink (frame_pointer_rtx));
else if (fsize_with_regs)
- {
- if (fsize_with_regs <= 8)
- {
- if (!TARGET_COLDFIRE)
- asm_fprintf (stream, "\taddq" ASM_DOT "w %I%wd,%Rsp\n",
- fsize_with_regs);
- else
- asm_fprintf (stream, "\taddq" ASM_DOT "l %I%wd,%Rsp\n",
- fsize_with_regs);
- }
- else if (fsize_with_regs <= 16 && TUNE_CPU32)
- {
- /* On the CPU32 it is faster to use two addqw instructions to
- add a small integer (8 < N <= 16) to a register. */
- asm_fprintf (stream,
- "\taddq" ASM_DOT "w %I8,%Rsp\n"
- "\taddq" ASM_DOT "w %I%wd,%Rsp\n",
- fsize_with_regs - 8);
- }
- else if (fsize_with_regs < 0x8000)
- {
- if (TUNE_68040)
- asm_fprintf (stream, "\tadd" ASM_DOT "w %I%wd,%Rsp\n",
- fsize_with_regs);
- else
- asm_fprintf (stream, (MOTOROLA
- ? "\tlea (%wd,%Rsp),%Rsp\n"
- : "\tlea %Rsp@(%wd),%Rsp\n"),
- fsize_with_regs);
- }
- else
- asm_fprintf (stream, "\tadd" ASM_DOT "l %I%wd,%Rsp\n", fsize_with_regs);
- }
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (fsize_with_regs)));
+
if (current_function_calls_eh_return)
- asm_fprintf (stream, "\tadd" ASM_DOT "l %Ra0,%Rsp\n");
- if (m68k_interrupt_function_p (current_function_decl))
- fprintf (stream, "\trte\n");
- else if (current_function_pops_args)
- asm_fprintf (stream, "\trtd %I%d\n", current_function_pops_args);
- else
- fprintf (stream, "\trts\n");
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ EH_RETURN_STACKADJ_RTX));
+
+ if (!sibcall_p)
+ emit_insn (gen_rtx_RETURN (VOIDmode));
}
/* Return true if X is a valid comparison operator for the dbcc
@@ -1362,6 +1232,16 @@ flags_in_68881 (void)
return cc_status.flags & CC_IN_68881;
}
+/* Implement TARGET_FUNCTION_OK_FOR_SIBCALL_P. We cannot use sibcalls
+ for nested functions because we use the static chain register for
+ indirect calls. */
+
+static bool
+m68k_ok_for_sibcall_p (tree decl ATTRIBUTE_UNUSED, tree exp)
+{
+ return TREE_OPERAND (exp, 2) == NULL;
+}
+
/* Convert X to a legitimate function call memory reference and return the
result. */
@@ -1374,6 +1254,19 @@ m68k_legitimize_call_address (rtx x)
return replace_equiv_address (x, force_reg (Pmode, XEXP (x, 0)));
}
+/* Likewise for sibling calls. */
+
+rtx
+m68k_legitimize_sibcall_address (rtx x)
+{
+ gcc_assert (MEM_P (x));
+ if (sibcall_operand (XEXP (x, 0), VOIDmode))
+ return x;
+
+ emit_move_insn (gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM), XEXP (x, 0));
+ return replace_equiv_address (x, gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM));
+}
+
/* Output a dbCC; jCC sequence. Note we do not handle the
floating point version of this sequence (Fdbcc). We also
do not handle alternative conditions when CC_NO_OVERFLOW is
@@ -1663,6 +1556,338 @@ output_btst (rtx *operands, rtx countop, rtx dataop, rtx insn, int signpos)
return "btst %0,%1";
}
+/* Return true if X is a legitimate base register. STRICT_P says
+ whether we need strict checking. */
+
+bool
+m68k_legitimate_base_reg_p (rtx x, bool strict_p)
+{
+ /* Allow SUBREG everywhere we allow REG. This results in better code. */
+ if (!strict_p && GET_CODE (x) == SUBREG)
+ x = SUBREG_REG (x);
+
+ return (REG_P (x)
+ && (strict_p
+ ? REGNO_OK_FOR_BASE_P (REGNO (x))
+ : !DATA_REGNO_P (REGNO (x)) && !FP_REGNO_P (REGNO (x))));
+}
+
+/* Return true if X is a legitimate index register. STRICT_P says
+ whether we need strict checking. */
+
+bool
+m68k_legitimate_index_reg_p (rtx x, bool strict_p)
+{
+ if (!strict_p && GET_CODE (x) == SUBREG)
+ x = SUBREG_REG (x);
+
+ return (REG_P (x)
+ && (strict_p
+ ? REGNO_OK_FOR_INDEX_P (REGNO (x))
+ : !FP_REGNO_P (REGNO (x))));
+}
+
+/* Return true if X is a legitimate index expression for a (d8,An,Xn) or
+ (bd,An,Xn) addressing mode. Fill in the INDEX and SCALE fields of
+ ADDRESS if so. STRICT_P says whether we need strict checking. */
+
+static bool
+m68k_decompose_index (rtx x, bool strict_p, struct m68k_address *address)
+{
+ int scale;
+
+ /* Check for a scale factor. */
+ scale = 1;
+ if ((TARGET_68020 || TARGET_COLDFIRE)
+ && GET_CODE (x) == MULT
+ && GET_CODE (XEXP (x, 1)) == CONST_INT
+ && (INTVAL (XEXP (x, 1)) == 2
+ || INTVAL (XEXP (x, 1)) == 4
+ || (INTVAL (XEXP (x, 1)) == 8
+ && (TARGET_COLDFIRE_FPU || !TARGET_COLDFIRE))))
+ {
+ scale = INTVAL (XEXP (x, 1));
+ x = XEXP (x, 0);
+ }
+
+ /* Check for a word extension. */
+ if (!TARGET_COLDFIRE
+ && GET_CODE (x) == SIGN_EXTEND
+ && GET_MODE (XEXP (x, 0)) == HImode)
+ x = XEXP (x, 0);
+
+ if (m68k_legitimate_index_reg_p (x, strict_p))
+ {
+ address->scale = scale;
+ address->index = x;
+ return true;
+ }
+
+ return false;
+}
+
+/* Return true if X is an illegitimate symbolic constant. */
+
+bool
+m68k_illegitimate_symbolic_constant_p (rtx x)
+{
+ rtx base, offset;
+
+ if (M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P)
+ {
+ split_const (x, &base, &offset);
+ if (GET_CODE (base) == SYMBOL_REF
+ && !offset_within_block_p (base, INTVAL (offset)))
+ return true;
+ }
+ return false;
+}
+
+/* Return true if X is a legitimate constant address that can reach
+ bytes in the range [X, X + REACH). STRICT_P says whether we need
+ strict checking. */
+
+static bool
+m68k_legitimate_constant_address_p (rtx x, unsigned int reach, bool strict_p)
+{
+ rtx base, offset;
+
+ if (!CONSTANT_ADDRESS_P (x))
+ return false;
+
+ if (flag_pic
+ && !(strict_p && TARGET_PCREL)
+ && symbolic_operand (x, VOIDmode))
+ return false;
+
+ if (M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P && reach > 1)
+ {
+ split_const (x, &base, &offset);
+ if (GET_CODE (base) == SYMBOL_REF
+ && !offset_within_block_p (base, INTVAL (offset) + reach - 1))
+ return false;
+ }
+
+ return true;
+}
+
+/* Return true if X is a LABEL_REF for a jump table. Assume that unplaced
+ labels will become jump tables. */
+
+static bool
+m68k_jump_table_ref_p (rtx x)
+{
+ if (GET_CODE (x) != LABEL_REF)
+ return false;
+
+ x = XEXP (x, 0);
+ if (!NEXT_INSN (x) && !PREV_INSN (x))
+ return true;
+
+ x = next_nonnote_insn (x);
+ return x && JUMP_TABLE_DATA_P (x);
+}
+
+/* Return true if X is a legitimate address for values of mode MODE.
+ STRICT_P says whether strict checking is needed. If the address
+ is valid, describe its components in *ADDRESS. */
+
+static bool
+m68k_decompose_address (enum machine_mode mode, rtx x,
+ bool strict_p, struct m68k_address *address)
+{
+ unsigned int reach;
+
+ memset (address, 0, sizeof (*address));
+
+ if (mode == BLKmode)
+ reach = 1;
+ else
+ reach = GET_MODE_SIZE (mode);
+
+ /* Check for (An) (mode 2). */
+ if (m68k_legitimate_base_reg_p (x, strict_p))
+ {
+ address->base = x;
+ return true;
+ }
+
+ /* Check for -(An) and (An)+ (modes 3 and 4). */
+ if ((GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC)
+ && m68k_legitimate_base_reg_p (XEXP (x, 0), strict_p))
+ {
+ address->code = GET_CODE (x);
+ address->base = XEXP (x, 0);
+ return true;
+ }
+
+ /* Check for (d16,An) (mode 5). */
+ if (GET_CODE (x) == PLUS
+ && GET_CODE (XEXP (x, 1)) == CONST_INT
+ && IN_RANGE (INTVAL (XEXP (x, 1)), -0x8000, 0x8000 - reach)
+ && m68k_legitimate_base_reg_p (XEXP (x, 0), strict_p))
+ {
+ address->base = XEXP (x, 0);
+ address->offset = XEXP (x, 1);
+ return true;
+ }
+
+ /* Check for GOT loads. These are (bd,An,Xn) addresses if
+ TARGET_68020 && flag_pic == 2, otherwise they are (d16,An)
+ addresses. */
+ if (flag_pic
+ && GET_CODE (x) == PLUS
+ && XEXP (x, 0) == pic_offset_table_rtx
+ && (GET_CODE (XEXP (x, 1)) == SYMBOL_REF
+ || GET_CODE (XEXP (x, 1)) == LABEL_REF))
+ {
+ address->base = XEXP (x, 0);
+ address->offset = XEXP (x, 1);
+ return true;
+ }
+
+ /* The ColdFire FPU only accepts addressing modes 2-5. */
+ if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (mode) == MODE_FLOAT)
+ return false;
+
+ /* Check for (xxx).w and (xxx).l. Also, in the TARGET_PCREL case,
+ check for (d16,PC) or (bd,PC,Xn) with a suppressed index register.
+ All these modes are variations of mode 7. */
+ if (m68k_legitimate_constant_address_p (x, reach, strict_p))
+ {
+ address->offset = x;
+ return true;
+ }
+
+ /* Check for (d8,PC,Xn), a mode 7 form. This case is needed for
+ tablejumps.
+
+ ??? do_tablejump creates these addresses before placing the target
+ label, so we have to assume that unplaced labels are jump table
+ references. It seems unlikely that we would ever generate indexed
+ accesses to unplaced labels in other cases. */
+ if (GET_CODE (x) == PLUS
+ && m68k_jump_table_ref_p (XEXP (x, 1))
+ && m68k_decompose_index (XEXP (x, 0), strict_p, address))
+ {
+ address->offset = XEXP (x, 1);
+ return true;
+ }
+
+ /* Everything hereafter deals with (d8,An,Xn.SIZE*SCALE) or
+ (bd,An,Xn.SIZE*SCALE) addresses. */
+
+ if (TARGET_68020)
+ {
+ /* Check for a nonzero base displacement. */
+ if (GET_CODE (x) == PLUS
+ && m68k_legitimate_constant_address_p (XEXP (x, 1), reach, strict_p))
+ {
+ address->offset = XEXP (x, 1);
+ x = XEXP (x, 0);
+ }
+
+ /* Check for a suppressed index register. */
+ if (m68k_legitimate_base_reg_p (x, strict_p))
+ {
+ address->base = x;
+ return true;
+ }
+
+ /* Check for a suppressed base register. Do not allow this case
+ for non-symbolic offsets as it effectively gives gcc freedom
+ to treat data registers as base registers, which can generate
+ worse code. */
+ if (address->offset
+ && symbolic_operand (address->offset, VOIDmode)
+ && m68k_decompose_index (x, strict_p, address))
+ return true;
+ }
+ else
+ {
+ /* Check for a nonzero base displacement. */
+ if (GET_CODE (x) == PLUS
+ && GET_CODE (XEXP (x, 1)) == CONST_INT
+ && IN_RANGE (INTVAL (XEXP (x, 1)), -0x80, 0x80 - reach))
+ {
+ address->offset = XEXP (x, 1);
+ x = XEXP (x, 0);
+ }
+ }
+
+ /* We now expect the sum of a base and an index. */
+ if (GET_CODE (x) == PLUS)
+ {
+ if (m68k_legitimate_base_reg_p (XEXP (x, 0), strict_p)
+ && m68k_decompose_index (XEXP (x, 1), strict_p, address))
+ {
+ address->base = XEXP (x, 0);
+ return true;
+ }
+
+ if (m68k_legitimate_base_reg_p (XEXP (x, 1), strict_p)
+ && m68k_decompose_index (XEXP (x, 0), strict_p, address))
+ {
+ address->base = XEXP (x, 1);
+ return true;
+ }
+ }
+ return false;
+}
+
+/* Return true if X is a legitimate address for values of mode MODE.
+ STRICT_P says whether strict checking is needed. */
+
+bool
+m68k_legitimate_address_p (enum machine_mode mode, rtx x, bool strict_p)
+{
+ struct m68k_address address;
+
+ return m68k_decompose_address (mode, x, strict_p, &address);
+}
+
+/* Return true if X is a memory, describing its address in ADDRESS if so.
+ Apply strict checking if called during or after reload. */
+
+static bool
+m68k_legitimate_mem_p (rtx x, struct m68k_address *address)
+{
+ return (MEM_P (x)
+ && m68k_decompose_address (GET_MODE (x), XEXP (x, 0),
+ reload_in_progress || reload_completed,
+ address));
+}
+
+/* Return true if X matches the 'Q' constraint. It must be a memory
+ with a base address and no constant offset or index. */
+
+bool
+m68k_matches_q_p (rtx x)
+{
+ struct m68k_address address;
+
+ return (m68k_legitimate_mem_p (x, &address)
+ && address.code == UNKNOWN
+ && address.base
+ && !address.offset
+ && !address.index);
+}
+
+/* Return true if X matches the 'U' constraint. It must be a base address
+ with a constant offset and no index. */
+
+bool
+m68k_matches_u_p (rtx x)
+{
+ struct m68k_address address;
+
+ return (m68k_legitimate_mem_p (x, &address)
+ && address.code == UNKNOWN
+ && address.base
+ && address.offset
+ && !address.index);
+}
+
/* Legitimize PIC addresses. If the address is already
position-independent, we return ORIG. Newly generated
position-independent addresses go to REG. If we need more
@@ -2754,6 +2979,204 @@ split_di (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
}
}
+/* Split X into a base and a constant offset, storing them in *BASE
+ and *OFFSET respectively. */
+
+static void
+m68k_split_offset (rtx x, rtx *base, HOST_WIDE_INT *offset)
+{
+ *offset = 0;
+ if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
+ {
+ *offset += INTVAL (XEXP (x, 1));
+ x = XEXP (x, 0);
+ }
+ *base = x;
+}
+
+/* Return true if PATTERN is a PARALLEL suitable for a movem or fmovem
+ instruction. STORE_P says whether the move is a load or store.
+
+ If the instruction uses post-increment or pre-decrement addressing,
+ AUTOMOD_BASE is the base register and AUTOMOD_OFFSET is the total
+ adjustment. This adjustment will be made by the first element of
+ PARALLEL, with the loads or stores starting at element 1. If the
+ instruction does not use post-increment or pre-decrement addressing,
+ AUTOMOD_BASE is null, AUTOMOD_OFFSET is 0, and the loads or stores
+ start at element 0. */
+
+bool
+m68k_movem_pattern_p (rtx pattern, rtx automod_base,
+ HOST_WIDE_INT automod_offset, bool store_p)
+{
+ rtx base, mem_base, set, mem, reg, last_reg;
+ HOST_WIDE_INT offset, mem_offset;
+ int i, first, len;
+ enum reg_class rclass;
+
+ len = XVECLEN (pattern, 0);
+ first = (automod_base != NULL);
+
+ if (automod_base)
+ {
+ /* Stores must be pre-decrement and loads must be post-increment. */
+ if (store_p != (automod_offset < 0))
+ return false;
+
+ /* Work out the base and offset for lowest memory location. */
+ base = automod_base;
+ offset = (automod_offset < 0 ? automod_offset : 0);
+ }
+ else
+ {
+ /* Allow any valid base and offset in the first access. */
+ base = NULL;
+ offset = 0;
+ }
+
+ last_reg = NULL;
+ rclass = NO_REGS;
+ for (i = first; i < len; i++)
+ {
+ /* We need a plain SET. */
+ set = XVECEXP (pattern, 0, i);
+ if (GET_CODE (set) != SET)
+ return false;
+
+ /* Check that we have a memory location... */
+ mem = XEXP (set, !store_p);
+ if (!MEM_P (mem) || !memory_operand (mem, VOIDmode))
+ return false;
+
+ /* ...with the right address. */
+ if (base == NULL)
+ {
+ m68k_split_offset (XEXP (mem, 0), &base, &offset);
+ /* The ColdFire instruction only allows (An) and (d16,An) modes.
+ There are no mode restrictions for 680x0 besides the
+ automodification rules enforced above. */
+ if (TARGET_COLDFIRE
+ && !m68k_legitimate_base_reg_p (base, reload_completed))
+ return false;
+ }
+ else
+ {
+ m68k_split_offset (XEXP (mem, 0), &mem_base, &mem_offset);
+ if (!rtx_equal_p (base, mem_base) || offset != mem_offset)
+ return false;
+ }
+
+ /* Check that we have a register of the required mode and class. */
+ reg = XEXP (set, store_p);
+ if (!REG_P (reg)
+ || !HARD_REGISTER_P (reg)
+ || GET_MODE (reg) != reg_raw_mode[REGNO (reg)])
+ return false;
+
+ if (last_reg)
+ {
+ /* The register must belong to RCLASS and have a higher number
+ than the register in the previous SET. */
+ if (!TEST_HARD_REG_BIT (reg_class_contents[rclass], REGNO (reg))
+ || REGNO (last_reg) >= REGNO (reg))
+ return false;
+ }
+ else
+ {
+ /* Work out which register class we need. */
+ if (INT_REGNO_P (REGNO (reg)))
+ rclass = GENERAL_REGS;
+ else if (FP_REGNO_P (REGNO (reg)))
+ rclass = FP_REGS;
+ else
+ return false;
+ }
+
+ last_reg = reg;
+ offset += GET_MODE_SIZE (GET_MODE (reg));
+ }
+
+ /* If we have an automodification, check whether the final offset is OK. */
+ if (automod_base && offset != (automod_offset < 0 ? 0 : automod_offset))
+ return false;
+
+ /* Reject unprofitable cases. */
+ if (len < first + (rclass == FP_REGS ? MIN_FMOVEM_REGS : MIN_MOVEM_REGS))
+ return false;
+
+ return true;
+}
+
+/* Return the assembly code template for a movem or fmovem instruction
+ whose pattern is given by PATTERN. Store the template's operands
+ in OPERANDS.
+
+ If the instruction uses post-increment or pre-decrement addressing,
+ AUTOMOD_OFFSET is the total adjustment, otherwise it is 0. STORE_P
+ is true if this is a store instruction. */
+
+const char *
+m68k_output_movem (rtx *operands, rtx pattern,
+ HOST_WIDE_INT automod_offset, bool store_p)
+{
+ unsigned int mask;
+ int i, first;
+
+ gcc_assert (GET_CODE (pattern) == PARALLEL);
+ mask = 0;
+ first = (automod_offset != 0);
+ for (i = first; i < XVECLEN (pattern, 0); i++)
+ {
+ /* When using movem with pre-decrement addressing, register X + D0_REG
+ is controlled by bit 15 - X. For all other addressing modes,
+ register X + D0_REG is controlled by bit X. Confusingly, the
+ register mask for fmovem is in the opposite order to that for
+ movem. */
+ unsigned int regno;
+
+ gcc_assert (MEM_P (XEXP (XVECEXP (pattern, 0, i), !store_p)));
+ gcc_assert (REG_P (XEXP (XVECEXP (pattern, 0, i), store_p)));
+ regno = REGNO (XEXP (XVECEXP (pattern, 0, i), store_p));
+ if (automod_offset < 0)
+ {
+ if (FP_REGNO_P (regno))
+ mask |= 1 << (regno - FP0_REG);
+ else
+ mask |= 1 << (15 - (regno - D0_REG));
+ }
+ else
+ {
+ if (FP_REGNO_P (regno))
+ mask |= 1 << (7 - (regno - FP0_REG));
+ else
+ mask |= 1 << (regno - D0_REG);
+ }
+ }
+ CC_STATUS_INIT;
+
+ if (automod_offset == 0)
+ operands[0] = XEXP (XEXP (XVECEXP (pattern, 0, first), !store_p), 0);
+ else if (automod_offset < 0)
+ operands[0] = gen_rtx_PRE_DEC (Pmode, SET_DEST (XVECEXP (pattern, 0, 0)));
+ else
+ operands[0] = gen_rtx_POST_INC (Pmode, SET_DEST (XVECEXP (pattern, 0, 0)));
+ operands[1] = GEN_INT (mask);
+ if (FP_REGNO_P (REGNO (XEXP (XVECEXP (pattern, 0, first), store_p))))
+ {
+ if (store_p)
+ return MOTOROLA ? "fmovm %1,%a0" : "fmovem %1,%a0";
+ else
+ return MOTOROLA ? "fmovm %a0,%1" : "fmovem %a0,%1";
+ }
+ else
+ {
+ if (store_p)
+ return MOTOROLA ? "movm.l %1,%a0" : "moveml %1,%a0";
+ else
+ return MOTOROLA ? "movm.l %a0,%1" : "moveml %a0,%1";
+ }
+}
+
/* Return a REG that occurs in ADDR with coefficient 1.
ADDR can be effectively incremented by incrementing REG. */
@@ -3125,6 +3548,7 @@ floating_exact_log2 (rtx x)
'$' for the letter `s' in an op code, but only on the 68040.
'&' for the letter `d' in an op code, but only on the 68040.
'/' for register prefix needed by longlong.h.
+ '?' for m68k_library_id_string
'b' for byte insn (no effect, on the Sun; this is for the ISI).
'd' to force memory addressing to be absolute, not relative.
@@ -3164,6 +3588,8 @@ print_operand (FILE *file, rtx op, int letter)
}
else if (letter == '/')
asm_fprintf (file, "%R");
+ else if (letter == '?')
+ asm_fprintf (file, m68k_library_id_string);
else if (letter == 'p')
{
output_addr_const (file, op);
@@ -3251,265 +3677,142 @@ print_operand (FILE *file, rtx op, int letter)
offset is output in word mode (e.g. movel a5@(_foo:w), a0). When generating
-fPIC code the offset is output in long mode (e.g. movel a5@(_foo:l), a0) */
-#if MOTOROLA
-# define ASM_OUTPUT_CASE_FETCH(file, labelno, regname) \
- asm_fprintf (file, "%LL%d-%LLI%d.b(%Rpc,%s.", labelno, labelno, regname)
-#else /* !MOTOROLA */
-# define ASM_OUTPUT_CASE_FETCH(file, labelno, regname) \
- asm_fprintf (file, "%Rpc@(%LL%d-%LLI%d-2:b,%s:", labelno, labelno, regname)
-#endif /* !MOTOROLA */
-
void
print_operand_address (FILE *file, rtx addr)
{
- register rtx reg1, reg2, breg, ireg;
- rtx offset;
-
- switch (GET_CODE (addr))
- {
- case REG:
- fprintf (file, MOTOROLA ? "(%s)" : "%s@", M68K_REGNAME (REGNO (addr)));
- break;
- case PRE_DEC:
- fprintf (file, MOTOROLA ? "-(%s)" : "%s@-",
- M68K_REGNAME (REGNO (XEXP (addr, 0))));
- break;
- case POST_INC:
- fprintf (file, MOTOROLA ? "(%s)+" : "%s@+",
- M68K_REGNAME (REGNO (XEXP (addr, 0))));
- break;
- case PLUS:
- reg1 = reg2 = ireg = breg = offset = 0;
- if (CONSTANT_ADDRESS_P (XEXP (addr, 0)))
- {
- offset = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
- else if (CONSTANT_ADDRESS_P (XEXP (addr, 1)))
- {
- offset = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
- if (GET_CODE (addr) != PLUS)
- {
- ;
- }
- else if (GET_CODE (XEXP (addr, 0)) == SIGN_EXTEND)
- {
- reg1 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
- else if (GET_CODE (XEXP (addr, 1)) == SIGN_EXTEND)
- {
- reg1 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
- else if (GET_CODE (XEXP (addr, 0)) == MULT)
- {
- reg1 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
- else if (GET_CODE (XEXP (addr, 1)) == MULT)
- {
- reg1 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
- else if (GET_CODE (XEXP (addr, 0)) == REG)
- {
- reg1 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
- else if (GET_CODE (XEXP (addr, 1)) == REG)
- {
- reg1 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
- if (GET_CODE (addr) == REG || GET_CODE (addr) == MULT
- || GET_CODE (addr) == SIGN_EXTEND)
+ struct m68k_address address;
+
+ if (!m68k_decompose_address (QImode, addr, true, &address))
+ gcc_unreachable ();
+
+ if (address.code == PRE_DEC)
+ fprintf (file, MOTOROLA ? "-(%s)" : "%s@-",
+ M68K_REGNAME (REGNO (address.base)));
+ else if (address.code == POST_INC)
+ fprintf (file, MOTOROLA ? "(%s)+" : "%s@+",
+ M68K_REGNAME (REGNO (address.base)));
+ else if (!address.base && !address.index)
+ {
+ /* A constant address. */
+ gcc_assert (address.offset == addr);
+ if (GET_CODE (addr) == CONST_INT)
{
- if (reg1 == 0)
- reg1 = addr;
+ /* (xxx).w or (xxx).l. */
+ if (IN_RANGE (INTVAL (addr), -0x8000, 0x7fff))
+ fprintf (file, MOTOROLA ? "%d.w" : "%d:w", (int) INTVAL (addr));
else
- reg2 = addr;
- addr = 0;
- }
-#if 0 /* for OLD_INDEXING */
- else if (GET_CODE (addr) == PLUS)
- {
- if (GET_CODE (XEXP (addr, 0)) == REG)
- {
- reg2 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
- else if (GET_CODE (XEXP (addr, 1)) == REG)
- {
- reg2 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
- }
-#endif
- if (offset != 0)
- {
- gcc_assert (!addr);
- addr = offset;
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (addr));
}
- if ((reg1 && (GET_CODE (reg1) == SIGN_EXTEND
- || GET_CODE (reg1) == MULT))
- || (reg2 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg2))))
- {
- breg = reg2;
- ireg = reg1;
- }
- else if (reg1 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg1)))
+ else if (TARGET_PCREL)
{
- breg = reg1;
- ireg = reg2;
+ /* (d16,PC) or (bd,PC,Xn) (with suppressed index register). */
+ fputc ('(', file);
+ output_addr_const (file, addr);
+ asm_fprintf (file, flag_pic == 1 ? ":w,%Rpc)" : ":l,%Rpc)");
}
- if (ireg != 0 && breg == 0 && GET_CODE (addr) == LABEL_REF
- && ! (flag_pic && ireg == pic_offset_table_rtx))
+ else
{
- int scale = 1;
- if (GET_CODE (ireg) == MULT)
- {
- scale = INTVAL (XEXP (ireg, 1));
- ireg = XEXP (ireg, 0);
- }
- if (GET_CODE (ireg) == SIGN_EXTEND)
+ /* (xxx).l. We need a special case for SYMBOL_REF if the symbol
+ name ends in `.<letter>', as the last 2 characters can be
+ mistaken as a size suffix. Put the name in parentheses. */
+ if (GET_CODE (addr) == SYMBOL_REF
+ && strlen (XSTR (addr, 0)) > 2
+ && XSTR (addr, 0)[strlen (XSTR (addr, 0)) - 2] == '.')
{
- ASM_OUTPUT_CASE_FETCH (file,
- CODE_LABEL_NUMBER (XEXP (addr, 0)),
- M68K_REGNAME (REGNO (XEXP (ireg, 0))));
- fprintf (file, "w");
+ putc ('(', file);
+ output_addr_const (file, addr);
+ putc (')', file);
}
else
- {
- ASM_OUTPUT_CASE_FETCH (file,
- CODE_LABEL_NUMBER (XEXP (addr, 0)),
- M68K_REGNAME (REGNO (ireg)));
- fprintf (file, "l");
- }
- if (scale != 1)
- fprintf (file, MOTOROLA ? "*%d" : ":%d", scale);
- putc (')', file);
- break;
- }
- if (breg != 0 && ireg == 0 && GET_CODE (addr) == LABEL_REF
- && ! (flag_pic && breg == pic_offset_table_rtx))
- {
- ASM_OUTPUT_CASE_FETCH (file,
- CODE_LABEL_NUMBER (XEXP (addr, 0)),
- M68K_REGNAME (REGNO (breg)));
- fprintf (file, "l)");
- break;
+ output_addr_const (file, addr);
}
- if (ireg != 0 || breg != 0)
+ }
+ else
+ {
+ int labelno;
+
+ /* If ADDR is a (d8,pc,Xn) address, this is the number of the
+ label being acceesed, otherwise it is -1. */
+ labelno = (address.offset
+ && !address.base
+ && GET_CODE (address.offset) == LABEL_REF
+ ? CODE_LABEL_NUMBER (XEXP (address.offset, 0))
+ : -1);
+ if (MOTOROLA)
{
- int scale = 1;
-
- gcc_assert (breg);
- gcc_assert (flag_pic || !addr || GET_CODE (addr) != LABEL_REF);
-
- if (MOTOROLA)
+ /* Print the "offset(base" component. */
+ if (labelno >= 0)
+ asm_fprintf (file, "%LL%d-%LLI%d.b(%Rpc,", labelno, labelno);
+ else
{
- if (addr != 0)
+ if (address.offset)
{
- output_addr_const (file, addr);
- if (flag_pic && (breg == pic_offset_table_rtx))
+ output_addr_const (file, address.offset);
+ if (flag_pic && address.base == pic_offset_table_rtx)
{
fprintf (file, "@GOT");
- if (flag_pic == 1)
+ if (flag_pic == 1 && TARGET_68020)
fprintf (file, ".w");
}
}
- fprintf (file, "(%s", M68K_REGNAME (REGNO (breg)));
- if (ireg != 0)
- putc (',', file);
+ putc ('(', file);
+ if (address.base)
+ fputs (M68K_REGNAME (REGNO (address.base)), file);
}
- else /* !MOTOROLA */
- {
- fprintf (file, "%s@(", M68K_REGNAME (REGNO (breg)));
- if (addr != 0)
- {
- output_addr_const (file, addr);
- if (breg == pic_offset_table_rtx)
- switch (flag_pic)
- {
- case 1:
- fprintf (file, ":w");
- break;
- case 2:
- fprintf (file, ":l");
- break;
- default:
- break;
- }
- if (ireg != 0)
- putc (',', file);
- }
- } /* !MOTOROLA */
- if (ireg != 0 && GET_CODE (ireg) == MULT)
+ /* Print the ",index" component, if any. */
+ if (address.index)
{
- scale = INTVAL (XEXP (ireg, 1));
- ireg = XEXP (ireg, 0);
+ if (address.base)
+ putc (',', file);
+ fprintf (file, "%s.%c",
+ M68K_REGNAME (REGNO (address.index)),
+ GET_MODE (address.index) == HImode ? 'w' : 'l');
+ if (address.scale != 1)
+ fprintf (file, "*%d", address.scale);
}
- if (ireg != 0 && GET_CODE (ireg) == SIGN_EXTEND)
- fprintf (file, MOTOROLA ? "%s.w" : "%s:w",
- M68K_REGNAME (REGNO (XEXP (ireg, 0))));
- else if (ireg != 0)
- fprintf (file, MOTOROLA ? "%s.l" : "%s:l",
- M68K_REGNAME (REGNO (ireg)));
- if (scale != 1)
- fprintf (file, MOTOROLA ? "*%d" : ":%d", scale);
putc (')', file);
- break;
- }
- else if (reg1 != 0 && GET_CODE (addr) == LABEL_REF
- && ! (flag_pic && reg1 == pic_offset_table_rtx))
- {
- ASM_OUTPUT_CASE_FETCH (file,
- CODE_LABEL_NUMBER (XEXP (addr, 0)),
- M68K_REGNAME (REGNO (reg1)));
- fprintf (file, "l)");
- break;
- }
- /* FALL-THROUGH (is this really what we want?) */
- default:
- if (GET_CODE (addr) == CONST_INT
- && INTVAL (addr) < 0x8000
- && INTVAL (addr) >= -0x8000)
- {
- fprintf (file, MOTOROLA ? "%d.w" : "%d:w", (int) INTVAL (addr));
}
- else if (GET_CODE (addr) == CONST_INT)
+ else /* !MOTOROLA */
{
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (addr));
- }
- else if (TARGET_PCREL)
- {
- fputc ('(', file);
- output_addr_const (file, addr);
- if (flag_pic == 1)
- asm_fprintf (file, ":w,%Rpc)");
+ if (!address.offset && !address.index)
+ fprintf (file, "%s@", M68K_REGNAME (REGNO (address.base)));
else
- asm_fprintf (file, ":l,%Rpc)");
- }
- else
- {
- /* Special case for SYMBOL_REF if the symbol name ends in
- `.<letter>', this can be mistaken as a size suffix. Put
- the name in parentheses. */
- if (GET_CODE (addr) == SYMBOL_REF
- && strlen (XSTR (addr, 0)) > 2
- && XSTR (addr, 0)[strlen (XSTR (addr, 0)) - 2] == '.')
{
- putc ('(', file);
- output_addr_const (file, addr);
+ /* Print the "base@(offset" component. */
+ if (labelno >= 0)
+ asm_fprintf (file, "%Rpc@(%LL%d-%LLI%d-2:b", labelno, labelno);
+ else
+ {
+ if (address.base)
+ fputs (M68K_REGNAME (REGNO (address.base)), file);
+ fprintf (file, "@(");
+ if (address.offset)
+ {
+ output_addr_const (file, address.offset);
+ if (address.base == pic_offset_table_rtx && TARGET_68020)
+ switch (flag_pic)
+ {
+ case 1:
+ fprintf (file, ":w"); break;
+ case 2:
+ fprintf (file, ":l"); break;
+ default:
+ break;
+ }
+ }
+ }
+ /* Print the ",index" component, if any. */
+ if (address.index)
+ {
+ fprintf (file, ",%s:%c",
+ M68K_REGNAME (REGNO (address.index)),
+ GET_MODE (address.index) == HImode ? 'w' : 'l');
+ if (address.scale != 1)
+ fprintf (file, ":%d", address.scale);
+ }
putc (')', file);
}
- else
- output_addr_const (file, addr);
}
- break;
}
}
@@ -3747,6 +4050,17 @@ output_call (rtx x)
return "jsr %a0";
}
+/* Likewise sibling calls. */
+
+const char *
+output_sibcall (rtx x)
+{
+ if (symbolic_operand (x, VOIDmode))
+ return m68k_symbolic_jump;
+ else
+ return "jmp %a0";
+}
+
#ifdef M68K_TARGET_COFF
/* Output assembly to switch to section NAME with attribute FLAGS. */
@@ -3769,59 +4083,93 @@ m68k_coff_asm_named_section (const char *name, unsigned int flags,
static void
m68k_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED,
- HOST_WIDE_INT delta,
- HOST_WIDE_INT vcall_offset ATTRIBUTE_UNUSED,
+ HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
tree function)
{
- rtx xops[1];
- const char *fmt;
-
- if (delta > 0 && delta <= 8)
- asm_fprintf (file, (MOTOROLA
- ? "\taddq.l %I%d,4(%Rsp)\n"
- : "\taddql %I%d,%Rsp@(4)\n"),
- (int) delta);
- else if (delta < 0 && delta >= -8)
- asm_fprintf (file, (MOTOROLA
- ? "\tsubq.l %I%d,4(%Rsp)\n"
- : "\tsubql %I%d,%Rsp@(4)\n"),
- (int) -delta);
- else if (TARGET_COLDFIRE)
- {
- /* ColdFire can't add/sub a constant to memory unless it is in
- the range of addq/subq. So load the value into %d0 and
- then add it to 4(%sp). */
- if (delta >= -128 && delta <= 127)
- asm_fprintf (file, (MOTOROLA
- ? "\tmoveq.l %I%wd,%Rd0\n"
- : "\tmoveql %I%wd,%Rd0\n"),
- delta);
- else
- asm_fprintf (file, (MOTOROLA
- ? "\tmove.l %I%wd,%Rd0\n"
- : "\tmovel %I%wd,%Rd0\n"),
- delta);
- asm_fprintf (file, (MOTOROLA
- ? "\tadd.l %Rd0,4(%Rsp)\n"
- : "\taddl %Rd0,%Rsp@(4)\n"));
+ rtx this_slot, offset, addr, mem, insn;
+
+ /* Pretend to be a post-reload pass while generating rtl. */
+ no_new_pseudos = 1;
+ reload_completed = 1;
+ reset_block_changes ();
+ allocate_reg_info (FIRST_PSEUDO_REGISTER, true, true);
+
+ /* The "this" pointer is stored at 4(%sp). */
+ this_slot = gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, 4));
+
+ /* Add DELTA to THIS. */
+ if (delta != 0)
+ {
+ /* Make the offset a legitimate operand for memory addition. */
+ offset = GEN_INT (delta);
+ if ((delta < -8 || delta > 8)
+ && (TARGET_COLDFIRE || USE_MOVQ (delta)))
+ {
+ emit_move_insn (gen_rtx_REG (Pmode, D0_REG), offset);
+ offset = gen_rtx_REG (Pmode, D0_REG);
+ }
+ emit_insn (gen_add3_insn (copy_rtx (this_slot),
+ copy_rtx (this_slot), offset));
}
- else
- asm_fprintf (file, (MOTOROLA
- ? "\tadd.l %I%wd,4(%Rsp)\n"
- : "\taddl %I%wd,%Rsp@(4)\n"),
- delta);
- xops[0] = DECL_RTL (function);
+ /* If needed, add *(*THIS + VCALL_OFFSET) to THIS. */
+ if (vcall_offset != 0)
+ {
+ /* Set the static chain register to *THIS. */
+ emit_move_insn (static_chain_rtx, this_slot);
+ emit_move_insn (static_chain_rtx, gen_rtx_MEM (Pmode, static_chain_rtx));
+
+ /* Set ADDR to a legitimate address for *THIS + VCALL_OFFSET. */
+ addr = plus_constant (static_chain_rtx, vcall_offset);
+ if (!m68k_legitimate_address_p (Pmode, addr, true))
+ {
+ emit_insn (gen_rtx_SET (VOIDmode, static_chain_rtx, addr));
+ addr = static_chain_rtx;
+ }
- gcc_assert (MEM_P (xops[0])
- && symbolic_operand (XEXP (xops[0], 0), VOIDmode));
- xops[0] = XEXP (xops[0], 0);
+ /* Load the offset into %d0 and add it to THIS. */
+ emit_move_insn (gen_rtx_REG (Pmode, D0_REG),
+ gen_rtx_MEM (Pmode, addr));
+ emit_insn (gen_add3_insn (copy_rtx (this_slot),
+ copy_rtx (this_slot),
+ gen_rtx_REG (Pmode, D0_REG)));
+ }
- fmt = m68k_symbolic_jump;
- if (m68k_symbolic_jump == NULL)
- fmt = "move.l %%a1@GOT(%%a5), %%a1\n\tjmp (%%a1)";
+ /* Jump to the target function. Use a sibcall if direct jumps are
+ allowed, otherwise load the address into a register first. */
+ mem = DECL_RTL (function);
+ if (!sibcall_operand (XEXP (mem, 0), VOIDmode))
+ {
+ gcc_assert (flag_pic);
- output_asm_insn (fmt, xops);
+ if (!TARGET_SEP_DATA)
+ {
+ /* Use the static chain register as a temporary (call-clobbered)
+ GOT pointer for this function. We can use the static chain
+ register because it isn't live on entry to the thunk. */
+ REGNO (pic_offset_table_rtx) = STATIC_CHAIN_REGNUM;
+ emit_insn (gen_load_got (pic_offset_table_rtx));
+ }
+ legitimize_pic_address (XEXP (mem, 0), Pmode, static_chain_rtx);
+ mem = replace_equiv_address (mem, static_chain_rtx);
+ }
+ insn = emit_call_insn (gen_sibcall (mem, const0_rtx));
+ SIBLING_CALL_P (insn) = 1;
+
+ /* Run just enough of rest_of_compilation. */
+ insn = get_insns ();
+ split_all_insns_noflow ();
+ final_start_function (insn, file, 1);
+ final (insn, file, 1);
+ final_end_function ();
+
+ /* Clean up the vars set above. */
+ reload_completed = 0;
+ no_new_pseudos = 0;
+
+ /* Restore the original PIC register. */
+ if (flag_pic)
+ REGNO (pic_offset_table_rtx) = PIC_REG;
}
/* Worker function for TARGET_STRUCT_VALUE_RTX. */
@@ -3850,9 +4198,10 @@ m68k_hard_regno_rename_ok (unsigned int old_reg ATTRIBUTE_UNUSED,
return 1;
}
-/* Value is true if hard register REGNO can hold a value of machine-mode MODE.
- On the 68000, the cpu registers can hold any mode except bytes in address
- registers, but the 68881 registers can hold only SFmode or DFmode. */
+/* Value is true if hard register REGNO can hold a value of machine-mode
+ MODE. On the 68000, we let the cpu registers can hold any mode, but
+ restrict the 68881 registers to floating-point modes. */
+
bool
m68k_regno_mode_ok (int regno, enum machine_mode mode)
{
@@ -3864,10 +4213,6 @@ m68k_regno_mode_ok (int regno, enum machine_mode mode)
}
else if (ADDRESS_REGNO_P (regno))
{
- /* Address Registers, can't hold bytes, can hold aggregate if
- fits in. */
- if (GET_MODE_SIZE (mode) == 1)
- return false;
if (regno + GET_MODE_SIZE (mode) / 4 <= 16)
return true;
}
@@ -3883,6 +4228,66 @@ m68k_regno_mode_ok (int regno, enum machine_mode mode)
return false;
}
+/* Implement SECONDARY_RELOAD_CLASS. */
+
+enum reg_class
+m68k_secondary_reload_class (enum reg_class rclass,
+ enum machine_mode mode, rtx x)
+{
+ int regno;
+
+ regno = true_regnum (x);
+
+ /* If one operand of a movqi is an address register, the other
+ operand must be a general register or constant. Other types
+ of operand must be reloaded through a data register. */
+ if (GET_MODE_SIZE (mode) == 1
+ && reg_classes_intersect_p (rclass, ADDR_REGS)
+ && !(INT_REGNO_P (regno) || CONSTANT_P (x)))
+ return DATA_REGS;
+
+ /* PC-relative addresses must be loaded into an address register first. */
+ if (TARGET_PCREL
+ && !reg_class_subset_p (rclass, ADDR_REGS)
+ && symbolic_operand (x, VOIDmode))
+ return ADDR_REGS;
+
+ return NO_REGS;
+}
+
+/* Implement PREFERRED_RELOAD_CLASS. */
+
+enum reg_class
+m68k_preferred_reload_class (rtx x, enum reg_class rclass)
+{
+ enum reg_class secondary_class;
+
+ /* If RCLASS might need a secondary reload, try restricting it to
+ a class that doesn't. */
+ secondary_class = m68k_secondary_reload_class (rclass, GET_MODE (x), x);
+ if (secondary_class != NO_REGS
+ && reg_class_subset_p (secondary_class, rclass))
+ return secondary_class;
+
+ /* Prefer to use moveq for in-range constants. */
+ if (GET_CODE (x) == CONST_INT
+ && reg_class_subset_p (DATA_REGS, rclass)
+ && IN_RANGE (INTVAL (x), -0x80, 0x7f))
+ return DATA_REGS;
+
+ /* ??? Do we really need this now? */
+ if (GET_CODE (x) == CONST_DOUBLE
+ && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
+ {
+ if (TARGET_HARD_FLOAT && reg_class_subset_p (FP_REGS, rclass))
+ return FP_REGS;
+
+ return NO_REGS;
+ }
+
+ return rclass;
+}
+
/* Return floating point values in a 68881 register. This makes 68881 code
a little bit faster. It also makes -msoft-float code incompatible with
hard-float code, so people have to be careful not to mix the two.
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index d8325641475..5c5d59ebfb7 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -316,7 +316,10 @@ Boston, MA 02110-1301, USA. */
#define FIRST_PSEUDO_REGISTER 25
/* All m68k targets (except AmigaOS) use %a5 as the PIC register */
-#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 13 : INVALID_REGNUM)
+#define PIC_OFFSET_TABLE_REGNUM \
+ (!flag_pic ? INVALID_REGNUM \
+ : reload_completed ? REGNO (pic_offset_table_rtx) \
+ : PIC_REG)
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
@@ -383,9 +386,8 @@ Boston, MA 02110-1301, USA. */
if (TEST_HARD_REG_BIT (x, i)) \
fixed_regs[i] = call_used_regs[i] = 1; \
} \
- if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] \
- = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
+ if (flag_pic) \
+ fixed_regs[PIC_REG] = call_used_regs[PIC_REG] = 1; \
}
/* On the m68k, ordinary registers hold 32 bits worth;
@@ -401,13 +403,12 @@ Boston, MA 02110-1301, USA. */
#define HARD_REGNO_RENAME_OK(OLD_REG, NEW_REG) \
m68k_hard_regno_rename_ok (OLD_REG, NEW_REG)
-/* Value is true if hard register REGNO can hold a value of machine-mode MODE.
- On the 68000, the cpu registers can hold any mode except bytes in
- address registers, the 68881 registers can hold only SFmode or DFmode. */
-
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
m68k_regno_mode_ok ((REGNO), (MODE))
+#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
+ m68k_secondary_reload_class (CLASS, MODE, X)
+
#define MODES_TIEABLE_P(MODE1, MODE2) \
(! TARGET_HARD_FLOAT \
|| ((GET_MODE_CLASS (MODE1) == MODE_FLOAT \
@@ -535,47 +536,17 @@ extern enum reg_class regno_reg_class[];
|| GET_CODE (OP) == CONST)) \
: \
(CODE) == 'Q' \
- ? (GET_CODE (OP) == MEM \
- && GET_CODE (XEXP (OP, 0)) == REG) \
+ ? m68k_matches_q_p (OP) \
: \
(CODE) == 'U' \
- ? (GET_CODE (OP) == MEM \
- && GET_CODE (XEXP (OP, 0)) == PLUS \
- && GET_CODE (XEXP (XEXP (OP, 0), 0)) == REG \
- && GET_CODE (XEXP (XEXP (OP, 0), 1)) == CONST_INT) \
+ ? m68k_matches_u_p (OP) \
: \
(CODE) == 'W' \
? const_call_operand (OP, VOIDmode) \
: 0)
-/* On the m68k, use a data reg if possible when the
- value is a constant in the range where moveq could be used
- and we ensure that QImodes are reloaded into data regs. */
-#define PREFERRED_RELOAD_CLASS(X,CLASS) \
- ((GET_CODE (X) == CONST_INT \
- && (unsigned) (INTVAL (X) + 0x80) < 0x100 \
- && (CLASS) != ADDR_REGS) \
- ? DATA_REGS \
- : (GET_MODE (X) == QImode && (CLASS) != ADDR_REGS) \
- ? DATA_REGS \
- : (GET_CODE (X) == CONST_DOUBLE \
- && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
- ? (TARGET_HARD_FLOAT && (CLASS == FP_REGS || CLASS == DATA_OR_FP_REGS) \
- ? FP_REGS : NO_REGS) \
- : (TARGET_PCREL \
- && (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \
- || GET_CODE (X) == LABEL_REF)) \
- ? ADDR_REGS \
- : (CLASS))
-
-/* Force QImode output reloads from subregs to be allocated to data regs,
- since QImode stores from address regs are not supported. We make the
- assumption that if the class is not ADDR_REGS, then it must be a superset
- of DATA_REGS. */
-#define LIMIT_RELOAD_CLASS(MODE, CLASS) \
- (((MODE) == QImode && (CLASS) != ADDR_REGS) \
- ? DATA_REGS \
- : (CLASS))
+#define PREFERRED_RELOAD_CLASS(X,CLASS) \
+ m68k_preferred_reload_class (X, CLASS)
/* On the m68k, this is the size of MODE in words,
except in the FP regs, where a single reg is always enough. */
@@ -786,166 +757,52 @@ __transfer_from_trampoline () \
/* 1 if X is an address register */
#define ADDRESS_REG_P(X) (REG_P (X) && REGNO_OK_FOR_BASE_P (REGNO (X)))
+/* True if SYMBOL + OFFSET constants must refer to something within
+ SYMBOL's section. */
+#ifndef M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P
+#define M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 0
+#endif
#define MAX_REGS_PER_ADDRESS 2
-#define CONSTANT_ADDRESS_P(X) \
- (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
- || GET_CODE (X) == HIGH)
+#define CONSTANT_ADDRESS_P(X) \
+ ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
+ || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
+ || GET_CODE (X) == HIGH) \
+ && LEGITIMATE_CONSTANT_P (X))
/* Nonzero if the constant value X is a legitimate general operand.
It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-#define LEGITIMATE_CONSTANT_P(X) (GET_MODE (X) != XFmode)
+#define LEGITIMATE_CONSTANT_P(X) \
+ (GET_MODE (X) != XFmode \
+ && !m68k_illegitimate_symbolic_constant_p (X))
#ifndef REG_OK_STRICT
-#define PCREL_GENERAL_OPERAND_OK 0
+#define REG_STRICT_P 0
#else
-#define PCREL_GENERAL_OPERAND_OK (TARGET_PCREL)
+#define REG_STRICT_P 1
#endif
-#define LEGITIMATE_PIC_OPERAND_P(X) \
- (! symbolic_operand (X, VOIDmode) \
- || PCREL_GENERAL_OPERAND_OK)
+#define LEGITIMATE_PIC_OPERAND_P(X) \
+ (!symbolic_operand (X, VOIDmode) \
+ || (TARGET_PCREL && REG_STRICT_P))
-#ifndef REG_OK_STRICT
-
-/* Nonzero if X is a hard reg that can be used as an index
- or if it is a pseudo reg. */
-#define REG_OK_FOR_INDEX_P(X) !FP_REGNO_P (REGNO (X))
-/* Nonzero if X is a hard reg that can be used as a base reg
- or if it is a pseudo reg. */
#define REG_OK_FOR_BASE_P(X) \
- (!DATA_REGNO_P (REGNO (X)) && !FP_REGNO_P (REGNO (X)))
-
-#else
+ m68k_legitimate_base_reg_p (X, REG_STRICT_P)
-/* Nonzero if X is a hard reg that can be used as an index. */
-#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
-/* Nonzero if X is a hard reg that can be used as a base reg. */
-#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+#define REG_OK_FOR_INDEX_P(X) \
+ m68k_legitimate_index_reg_p (X, REG_STRICT_P)
-#endif
-
-/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
- that is a valid memory address for an instruction.
- The MODE argument is the machine mode for the MEM expression
- that wants to use this address.
-
- When generating PIC, an address involving a SYMBOL_REF is legitimate
- if and only if it is the sum of pic_offset_table_rtx and the SYMBOL_REF.
- We use LEGITIMATE_PIC_OPERAND_P to throw out the illegitimate addresses,
- and we explicitly check for the sum of pic_offset_table_rtx and a SYMBOL_REF.
-
- Likewise for a LABEL_REF when generating PIC.
-
- The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS. */
-
-/* Allow SUBREG everywhere we allow REG. This results in better code. It
- also makes function inlining work when inline functions are called with
- arguments that are SUBREGs. */
-
-#define LEGITIMATE_BASE_REG_P(X) \
- ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
- || (GET_CODE (X) == SUBREG \
- && GET_CODE (SUBREG_REG (X)) == REG \
- && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
-
-#define INDIRECTABLE_1_ADDRESS_P(X) \
- ((CONSTANT_ADDRESS_P (X) && (!flag_pic || LEGITIMATE_PIC_OPERAND_P (X))) \
- || LEGITIMATE_BASE_REG_P (X) \
- || ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \
- && LEGITIMATE_BASE_REG_P (XEXP (X, 0))) \
- || (GET_CODE (X) == PLUS \
- && LEGITIMATE_BASE_REG_P (XEXP (X, 0)) \
- && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (TARGET_68020 \
- || ((unsigned) INTVAL (XEXP (X, 1)) + 0x8000) < 0x10000)) \
- || (GET_CODE (X) == PLUS && XEXP (X, 0) == pic_offset_table_rtx \
- && flag_pic && GET_CODE (XEXP (X, 1)) == SYMBOL_REF) \
- || (GET_CODE (X) == PLUS && XEXP (X, 0) == pic_offset_table_rtx \
- && flag_pic && GET_CODE (XEXP (X, 1)) == LABEL_REF))
-
-#define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \
-{ if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; }
-
-/* Only labels on dispatch tables are valid for indexing from. */
-#define GO_IF_INDEXABLE_BASE(X, ADDR) \
-{ rtx temp; \
- if (GET_CODE (X) == LABEL_REF \
- && (temp = next_nonnote_insn (XEXP (X, 0))) != 0 \
- && GET_CODE (temp) == JUMP_INSN \
- && (GET_CODE (PATTERN (temp)) == ADDR_VEC \
- || GET_CODE (PATTERN (temp)) == ADDR_DIFF_VEC)) \
- goto ADDR; \
- if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; }
-
-#define GO_IF_INDEXING(X, ADDR) \
-{ if (GET_CODE (X) == PLUS && LEGITIMATE_INDEX_P (XEXP (X, 0))) \
- { GO_IF_INDEXABLE_BASE (XEXP (X, 1), ADDR); } \
- if (GET_CODE (X) == PLUS && LEGITIMATE_INDEX_P (XEXP (X, 1))) \
- { GO_IF_INDEXABLE_BASE (XEXP (X, 0), ADDR); } }
-
-#define GO_IF_INDEXED_ADDRESS(X, ADDR) \
-{ GO_IF_INDEXING (X, ADDR); \
- if (GET_CODE (X) == PLUS) \
- { if (GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (TARGET_68020 || (unsigned) INTVAL (XEXP (X, 1)) + 0x80 < 0x100)) \
- { rtx go_temp = XEXP (X, 0); GO_IF_INDEXING (go_temp, ADDR); } \
- if (GET_CODE (XEXP (X, 0)) == CONST_INT \
- && (TARGET_68020 || (unsigned) INTVAL (XEXP (X, 0)) + 0x80 < 0x100)) \
- { rtx go_temp = XEXP (X, 1); GO_IF_INDEXING (go_temp, ADDR); } } }
-
-/* ColdFire/5200 does not allow HImode index registers. */
-#define LEGITIMATE_INDEX_REG_P(X) \
- ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X)) \
- || (! TARGET_COLDFIRE \
- && GET_CODE (X) == SIGN_EXTEND \
- && GET_CODE (XEXP (X, 0)) == REG \
- && GET_MODE (XEXP (X, 0)) == HImode \
- && REG_OK_FOR_INDEX_P (XEXP (X, 0))) \
- || (GET_CODE (X) == SUBREG \
- && GET_CODE (SUBREG_REG (X)) == REG \
- && REG_OK_FOR_INDEX_P (SUBREG_REG (X))))
-
-#define LEGITIMATE_INDEX_P(X) \
- (LEGITIMATE_INDEX_REG_P (X) \
- || ((TARGET_68020 || TARGET_COLDFIRE) && GET_CODE (X) == MULT \
- && LEGITIMATE_INDEX_REG_P (XEXP (X, 0)) \
- && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && (INTVAL (XEXP (X, 1)) == 2 \
- || INTVAL (XEXP (X, 1)) == 4 \
- || (INTVAL (XEXP (X, 1)) == 8 \
- && (TARGET_COLDFIRE_FPU || !TARGET_COLDFIRE)))))
-
-/* ColdFire FPU only accepts addressing modes 2-5. */
-#define GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-{ if (LEGITIMATE_BASE_REG_P (X) \
- || ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \
- && LEGITIMATE_BASE_REG_P (XEXP (X, 0))) \
- || ((GET_CODE (X) == PLUS) && LEGITIMATE_BASE_REG_P (XEXP (X, 0)) \
- && (GET_CODE (XEXP (X, 1)) == CONST_INT) \
- && ((((unsigned) INTVAL (XEXP (X, 1)) + 0x8000) < 0x10000)))) \
- goto ADDR;}
-
-/* If pic, we accept INDEX+LABEL, which is what do_tablejump makes. */
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-{ if (TARGET_COLDFIRE_FPU && (GET_MODE_CLASS (MODE) == MODE_FLOAT)) \
+ do \
{ \
- GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS (MODE, X, ADDR); \
+ if (m68k_legitimate_address_p (MODE, X, REG_STRICT_P)) \
+ goto ADDR; \
} \
- else \
- { \
- GO_IF_NONINDEXED_ADDRESS (X, ADDR); \
- GO_IF_INDEXED_ADDRESS (X, ADDR); \
- if (flag_pic && MODE == CASE_VECTOR_MODE && GET_CODE (X) == PLUS \
- && LEGITIMATE_INDEX_P (XEXP (X, 0)) \
- && GET_CODE (XEXP (X, 1)) == LABEL_REF) \
- goto ADDR; \
- }}
+ while (0)
/* Don't call memory_address_noforce for the address to fetch
- the switch offset. This address is ok as it stands (see above),
+ the switch offset. This address is ok as it stands,
but memory_address_noforce would alter it. */
#define PIC_CASE_VECTOR_ADDRESS(index) index
@@ -1105,6 +962,10 @@ do { if (cc_prev_status.flags & CC_IN_68881) \
/* Before the prologue, the top of the frame is at 4(%sp). */
#define INCOMING_FRAME_SP_OFFSET 4
+/* All registers are live on exit from an interrupt routine. */
+#define EPILOGUE_USES(REGNO) \
+ (reload_completed && m68k_interrupt_function_p (current_function_decl))
+
/* Describe how we implement __builtin_eh_return. */
#define EH_RETURN_DATA_REGNO(N) \
((N) < 2 ? (N) : INVALID_REGNUM)
@@ -1241,6 +1102,7 @@ do { if (cc_prev_status.flags & CC_IN_68881) \
'$' for the letter `s' in an op code, but only on the 68040.
'&' for the letter `d' in an op code, but only on the 68040.
'/' for register prefix needed by longlong.h.
+ '?' for m68k_library_id_string
'b' for byte insn (no effect, on the Sun; this is for the ISI).
'd' to force memory addressing to be absolute, not relative.
@@ -1251,7 +1113,7 @@ do { if (cc_prev_status.flags & CC_IN_68881) \
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
((CODE) == '.' || (CODE) == '#' || (CODE) == '-' \
|| (CODE) == '+' || (CODE) == '@' || (CODE) == '!' \
- || (CODE) == '$' || (CODE) == '&' || (CODE) == '/')
+ || (CODE) == '$' || (CODE) == '&' || (CODE) == '/' || (CODE) == '?')
/* See m68k.c for the m68k specific codes. */
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 42e5f21dfce..f983d39cd32 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -112,8 +112,9 @@
;; UNSPEC usage:
(define_constants
- [(UNSPEC_SIN 1)
- (UNSPEC_COS 2)
+ [(UNSPEC_SIN 1)
+ (UNSPEC_COS 2)
+ (UNSPEC_GOT 3)
])
;; UNSPEC_VOLATILE usage:
@@ -126,7 +127,10 @@
(define_constants
[(D0_REG 0)
(A0_REG 8)
+ (A1_REG 9)
+ (PIC_REG 13)
(SP_REG 15)
+ (FP0_REG 16)
])
(include "predicates.md")
@@ -627,10 +631,12 @@
;; In both the PIC and non-PIC cases the patterns generated will
;; matched by the next define_insn.
(define_expand "movsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "")
- (match_operand:SI 1 "general_operand" ""))]
+ [(set (match_operand:SI 0 "" "")
+ (match_operand:SI 1 "" ""))]
""
{
+ rtx tmp, base, offset;
+
if (flag_pic && !TARGET_PCREL && symbolic_operand (operands[1], SImode))
{
/* The source is an address which requires PIC relocation.
@@ -651,6 +657,18 @@
operands[0] = gen_rtx_MEM (SImode,
force_reg (SImode, XEXP (operands[0], 0)));
}
+ if (M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P)
+ {
+ split_const (operands[1], &base, &offset);
+ if (GET_CODE (base) == SYMBOL_REF
+ && !offset_within_block_p (base, INTVAL (offset)))
+ {
+ tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (SImode);
+ emit_move_insn (tmp, base);
+ emit_insn (gen_addsi3 (operands[0], tmp, offset));
+ DONE;
+ }
+ }
})
;; General case of fullword move. The register constraints
@@ -842,13 +860,15 @@
})
(define_insn "movsf_cf_soft"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,g")
- (match_operand:SF 1 "general_operand" "g,r"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=r<Q>,g,U")
+ (match_operand:SF 1 "general_operand" "g,r<Q>,U"))]
"TARGET_COLDFIRE && !TARGET_COLDFIRE_FPU"
{
return "move%.l %1,%0";
})
+;; SFmode MEMs are restricted to modes 2-4 if TARGET_COLDFIRE_FPU.
+;; The move instructions can handle all combinations.
(define_insn "movsf_cf_hard"
[(set (match_operand:SF 0 "nonimmediate_operand" "=r<Q>U, f, f,mr,f,r<Q>,f
,m")
@@ -6659,6 +6679,41 @@
"subql #1,%0\;cmpl #-1,%0\;jne %l1";
})
+(define_expand "sibcall"
+ [(call (match_operand:QI 0 "memory_operand" "")
+ (match_operand:SI 1 "general_operand" ""))]
+ ""
+{
+ operands[0] = m68k_legitimize_sibcall_address (operands[0]);
+})
+
+(define_insn "*sibcall"
+ [(call (mem:QI (match_operand:SI 0 "sibcall_operand" ""))
+ (match_operand:SI 1 "general_operand" ""))]
+ "SIBLING_CALL_P (insn)"
+{
+ return output_sibcall (operands[0]);
+})
+
+(define_expand "sibcall_value"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "memory_operand" "")
+ (match_operand:SI 2 "general_operand" "")))]
+ ""
+{
+ operands[1] = m68k_legitimize_sibcall_address (operands[1]);
+})
+
+(define_insn "*sibcall_value"
+ [(set (match_operand 0 "" "=rf,rf")
+ (call (mem:QI (match_operand:SI 1 "sibcall_operand" ""))
+ (match_operand:SI 2 "general_operand" "")))]
+ "SIBLING_CALL_P (insn)"
+{
+ operands[0] = operands[1];
+ return output_sibcall (operands[0]);
+})
+
;; Call subroutine with no return value.
(define_expand "call"
[(call (match_operand:QI 0 "memory_operand" "")
@@ -6673,7 +6728,7 @@
[(call (mem:QI (match_operand:SI 0 "call_operand" "a,W"))
(match_operand:SI 1 "general_operand" "g,g"))]
;; Operand 1 not really used on the m68000.
- ""
+ "!SIBLING_CALL_P (insn)"
{
return output_call (operands[0]);
})
@@ -6695,7 +6750,7 @@
(call (mem:QI (match_operand:SI 1 "call_operand" "a,W"))
(match_operand:SI 2 "general_operand" "g,g")))]
;; Operand 2 not really used on the m68000.
- ""
+ "!SIBLING_CALL_P (insn)"
{
operands[0] = operands[1];
return output_call (operands[0]);
@@ -6742,15 +6797,166 @@
""
"nop")
+(define_expand "prologue"
+ [(const_int 0)]
+ ""
+{
+ m68k_expand_prologue ();
+ DONE;
+})
+
+(define_expand "epilogue"
+ [(return)]
+ ""
+{
+ m68k_expand_epilogue (false);
+ DONE;
+})
+
+(define_expand "sibcall_epilogue"
+ [(return)]
+ ""
+{
+ m68k_expand_epilogue (true);
+ DONE;
+})
+
;; Used for frameless functions which save no regs and allocate no locals.
-(define_insn "return"
+(define_expand "return"
[(return)]
"m68k_use_return_insn ()"
+ "")
+
+(define_insn "*return"
+ [(return)]
+ ""
{
- if (current_function_pops_args == 0)
+ if (m68k_interrupt_function_p (current_function_decl))
+ return "rte";
+ else if (current_function_pops_args)
+ {
+ operands[0] = GEN_INT (current_function_pops_args);
+ return "rtd %0";
+ }
+ else
return "rts";
- operands[0] = GEN_INT (current_function_pops_args);
- return "rtd %0";
+})
+
+(define_insn "*m68k_store_multiple"
+ [(match_parallel 0 "" [(match_operand 1 "")])]
+ "m68k_movem_pattern_p (operands[0], NULL, 0, true)"
+{
+ return m68k_output_movem (operands, operands[0], 0, true);
+})
+
+(define_insn "*m68k_store_multiple_automod"
+ [(match_parallel 0 ""
+ [(set (match_operand:SI 1 "register_operand" "=a")
+ (plus:SI (match_operand:SI 2 "register_operand" "1")
+ (match_operand:SI 3 "const_int_operand")))])]
+ "m68k_movem_pattern_p (operands[0], operands[1], INTVAL (operands[3]), true)"
+{
+ return m68k_output_movem (operands, operands[0], INTVAL (operands[3]), true);
+})
+
+(define_insn "*m68k_load_multiple"
+ [(match_parallel 0 "" [(match_operand 1 "")])]
+ "m68k_movem_pattern_p (operands[0], NULL, 0, false)"
+{
+ return m68k_output_movem (operands, operands[0], 0, false);
+})
+
+(define_insn "*m68k_load_multiple_automod"
+ [(match_parallel 0 ""
+ [(set (match_operand:SI 1 "register_operand" "=a")
+ (plus:SI (match_operand:SI 2 "register_operand" "1")
+ (match_operand:SI 3 "const_int_operand")))])]
+ "m68k_movem_pattern_p (operands[0], operands[1],
+ INTVAL (operands[3]), false)"
+{
+ return m68k_output_movem (operands, operands[0],
+ INTVAL (operands[3]), false);
+})
+
+(define_expand "link"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand")
+ (plus:SI (reg:SI SP_REG) (const_int -4)))
+ (set (match_dup 2)
+ (match_dup 0))
+ (set (reg:SI SP_REG)
+ (plus:SI (reg:SI SP_REG)
+ (match_operand:SI 1 "const_int_operand")))])]
+ "TARGET_68020 || INTVAL (operands[1]) >= -0x8004"
+{
+ operands[2] = gen_frame_mem (SImode, plus_constant (stack_pointer_rtx, -4));
+})
+
+(define_insn "*link"
+ [(set (match_operand:SI 0 "register_operand" "+r")
+ (plus:SI (reg:SI SP_REG) (const_int -4)))
+ (set (mem:SI (plus:SI (reg:SI SP_REG) (const_int -4)))
+ (match_dup 0))
+ (set (reg:SI SP_REG)
+ (plus:SI (reg:SI SP_REG)
+ (match_operand:SI 1 "const_int_operand")))]
+ "TARGET_68020 || INTVAL (operands[1]) >= -0x8004"
+{
+ operands[1] = GEN_INT (INTVAL (operands[1]) + 4);
+ if (!MOTOROLA)
+ return "link %0,%1";
+ else if (INTVAL (operands[1]) >= -0x8000)
+ return "link.w %0,%1";
+ else
+ return "link.l %0,%1";
+})
+
+(define_expand "unlink"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand")
+ (match_dup 1))
+ (set (reg:SI SP_REG)
+ (plus:SI (match_dup 0)
+ (const_int 4)))])]
+ ""
+{
+ operands[1] = gen_frame_mem (SImode, copy_rtx (operands[0]));
+})
+
+(define_insn "*unlink"
+ [(set (match_operand:SI 0 "register_operand" "+r")
+ (mem:SI (match_dup 0)))
+ (set (reg:SI SP_REG)
+ (plus:SI (match_dup 0)
+ (const_int 4)))]
+ ""
+ "unlk %0")
+
+(define_insn "load_got"
+ [(set (match_operand:SI 0 "register_operand" "=a")
+ (unspec:SI [(const_int 0)] UNSPEC_GOT))]
+ ""
+{
+ if (TARGET_ID_SHARED_LIBRARY)
+ {
+ operands[1] = gen_rtx_REG (Pmode, PIC_REG);
+ return MOTOROLA ? "move.l %?(%1),%0" : "movel %1@(%?), %0";
+ }
+ else if (MOTOROLA)
+ {
+ if (TARGET_COLDFIRE)
+ /* Load the full 32-bit PC-relative offset of
+ _GLOBAL_OFFSET_TABLE_ into the PIC register, then use it to
+ calculate the absolute value. The offset and "lea"
+ operation word together occupy 6 bytes. */
+ return ("move.l #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t"
+ "lea (-6, %%pc, %0), %0");
+ else
+ return "lea (%%pc, _GLOBAL_OFFSET_TABLE_@GOTPC), %0";
+ }
+ else
+ return ("movel #_GLOBAL_OFFSET_TABLE_, %0\n\t"
+ "lea %%pc@(0,%0:l),%0");
})
(define_insn "indirect_jump"
diff --git a/gcc/config/m68k/predicates.md b/gcc/config/m68k/predicates.md
index 11e10f189b6..ae091f181ed 100644
--- a/gcc/config/m68k/predicates.md
+++ b/gcc/config/m68k/predicates.md
@@ -159,7 +159,7 @@
}
})
-;; A constant that can be used the address in a call insn.
+;; A constant that can be used the address in a call or sibcall insn.
(define_predicate "const_call_operand"
(ior (match_operand 0 "const_int_operand")
(and (match_test "m68k_symbolic_call != NULL")
@@ -170,6 +170,12 @@
(ior (match_operand 0 "const_call_operand")
(match_operand 0 "register_operand")))
+;; An operand that can be used as the address in a sibcall insn.
+(define_predicate "sibcall_operand"
+ (ior (match_operand 0 "const_call_operand")
+ (and (match_code "reg")
+ (match_test "REGNO (op) == STATIC_CHAIN_REGNUM"))))
+
;; TODO: Add a comment here.
(define_predicate "post_inc_operand"
diff --git a/gcc/config/m68k/print-sysroot-suffix.sh b/gcc/config/m68k/print-sysroot-suffix.sh
new file mode 100644
index 00000000000..ff83ddd107f
--- /dev/null
+++ b/gcc/config/m68k/print-sysroot-suffix.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Copyright (C) 2006 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, 51 Franklin Street, Fifth Floor,
+# Boston MA 02110-1301, USA.
+
+# This script takes the following arguments:
+#
+# - the target sysroot
+# - the value of $(MULTILIB_MATCHES)
+# - the value of $(MULTILIB_OPTIONS)
+#
+# It uses these arguments to construct a definition of SYSROOT_SUFFIX_SPEC,
+# which it prints to the standard output. For each multilib directory FOO,
+# the script checks whether $sysroot has a subdirectory FOO, and if so will
+# use /FOO for all compatible command-line options. It will not add a
+# suffix for /FOO's options otherwise. These suffixes are concatenated,
+# with one subspec for each space-separated entry in $(MULTILIB_OPTIONS).
+set -e
+sysroot=$1
+matches=$2
+options=$3
+
+# For each multilib option OPT, add to $substs a sed command of the
+# form "-e 's/OPT/OPT/'".
+substs=""
+for option in `echo "$options" | tr '/' ' '`
+do
+ substs="$substs -e 's/$option/$option/g'"
+done
+
+# For each ALIAS=CANONICAL entry in $MULTILIB_MATCHES, look for sed
+# arguments in $substs of the form "-e 's/CANONICAL/.../'". Replace
+# such entries with "-e 's/CANONICAL/ALIAS|.../'". Both the ALIAS and
+# CANONICAL parts of $MULTILIB_MATCHES use '?' to stand for '='.
+#
+# After this loop, a command of the form "echo FOO | eval sed $substs"
+# will replace a canonical option FOO with a %{...}-style spec pattern.
+for match in $matches
+do
+ canonical=`echo "$match" | sed -e 's/=.*//' -e 's/?/=/g'`
+ alias=`echo "$match" | sed -e 's/.*=//' -e 's/?/=/g'`
+ substs=`echo "$substs" | sed -e "s,s/$canonical/,&$alias|,"`
+done
+
+# Build up the final SYSROOT_SUFFIX_SPEC in $spec.
+spec=
+for combo in $options
+do
+ # See which option alternatives in $combo have their own sysroot
+ # directory. Create a subspec of the form "%{PAT1:/DIR1;...;PATn:DIRn}"
+ # from each such option OPTi, where DIRi is the directory associated
+ # with OPTi and PATi is the result of passing OPTi through $substs.
+ subspec=
+ for option in `echo "$combo" | tr '/' ' '`
+ do
+ dir=`echo "$option" | sed 's/cpu=//'`
+ if test -d "$sysroot/$dir"; then
+ test -z "$subspec" || subspec="$subspec;"
+ subspec="$subspec"`echo "$option" | eval sed $substs`":/$dir"
+ fi
+ done
+ # Concatenate all the subspecs.
+ test -z "$subspec" || spec="$spec%{$subspec}"
+done
+if test -n "$spec"; then
+ echo "#undef SYSROOT_SUFFIX_SPEC"
+ echo "#define SYSROOT_SUFFIX_SPEC \"$spec\""
+fi
diff --git a/gcc/config/m68k/t-uclinux b/gcc/config/m68k/t-uclinux
index f7053646c32..3ee359d790f 100644
--- a/gcc/config/m68k/t-uclinux
+++ b/gcc/config/m68k/t-uclinux
@@ -7,3 +7,10 @@ M68K_MLIB_CPU += && (MLIB == "68020" || !match(FLAGS, "FL_MMU"))
# Add multilibs for execute-in-place and shared-library code.
M68K_MLIB_OPTIONS += msep-data/mid-shared-library
M68K_MLIB_DIRNAMES += msep-data mid-shared-library
+
+# This rule uses MULTILIB_MATCHES to generate a definition of
+# SYSROOT_SUFFIX_SPEC.
+sysroot-suffix.h: $(srcdir)/config/m68k/print-sysroot-suffix.sh
+ $(SHELL) $(srcdir)/config/m68k/print-sysroot-suffix.sh \
+ "$(SYSTEM_HEADER_DIR)/../.." "$(MULTILIB_MATCHES)" \
+ "$(MULTILIB_OPTIONS)" > $@
diff --git a/gcc/config/m68k/uclinux.h b/gcc/config/m68k/uclinux.h
index 992c465ce10..93a9d829187 100644
--- a/gcc/config/m68k/uclinux.h
+++ b/gcc/config/m68k/uclinux.h
@@ -65,3 +65,9 @@ Boston, MA 02110-1301, USA. */
/* -msep-data is the default PIC mode on this target. */
#define DRIVER_SELF_SPECS \
"%{fpie|fPIE|fpic|fPIC:%{!msep-data:%{!mid-shared-library: -msep-data}}}"
+
+/* The uclinux binary format relies on relocations against a segment being
+ within that segment. Conservatively apply this rule to individual
+ sections. */
+#undef M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P
+#define M68K_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 1
diff --git a/gcc/config/mips/mips-dspr2.md b/gcc/config/mips/mips-dspr2.md
new file mode 100644
index 00000000000..948c693c7d8
--- /dev/null
+++ b/gcc/config/mips/mips-dspr2.md
@@ -0,0 +1,626 @@
+; MIPS DSP ASE REV 2 Revision 0.02 11/24/2006
+
+(define_insn "mips_absq_s_qb"
+ [(parallel
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")]
+ UNSPEC_ABSQ_S_QB))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1)] UNSPEC_ABSQ_S_QB))])]
+ "TARGET_DSPR2"
+ "absq_s.qb\t%0,%z1"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addu_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (plus:V2HI (match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDU_PH))])]
+ "TARGET_DSPR2"
+ "addu.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addu_s_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_ADDU_S_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDU_S_PH))])]
+ "TARGET_DSPR2"
+ "addu_s.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_adduh_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_ADDUH_QB))]
+ "TARGET_DSPR2"
+ "adduh.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_adduh_r_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_ADDUH_R_QB))]
+ "TARGET_DSPR2"
+ "adduh_r.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_append"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")
+ (match_operand:SI 3 "const_int_operand" "n")]
+ UNSPEC_APPEND))]
+ "TARGET_DSPR2"
+{
+ if (INTVAL (operands[3]) & ~(unsigned HOST_WIDE_INT) 31)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+ return "append\t%0,%z2,%3";
+}
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_balign"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")
+ (match_operand:SI 3 "const_int_operand" "n")]
+ UNSPEC_BALIGN))]
+ "TARGET_DSPR2"
+{
+ if (INTVAL (operands[3]) & ~(unsigned HOST_WIDE_INT) 3)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 3);
+ return "balign\t%0,%z2,%3";
+}
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_cmpgdu_eq_qb"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_CMPGDU_EQ_QB))
+ (set (reg:CCDSP CCDSP_CC_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)
+ (reg:CCDSP CCDSP_CC_REGNUM)]
+ UNSPEC_CMPGDU_EQ_QB))])]
+ "TARGET_DSPR2"
+ "cmpgdu.eq.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_cmpgdu_lt_qb"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_CMPGDU_LT_QB))
+ (set (reg:CCDSP CCDSP_CC_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)
+ (reg:CCDSP CCDSP_CC_REGNUM)]
+ UNSPEC_CMPGDU_LT_QB))])]
+ "TARGET_DSPR2"
+ "cmpgdu.lt.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_cmpgdu_le_qb"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_CMPGDU_LE_QB))
+ (set (reg:CCDSP CCDSP_CC_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)
+ (reg:CCDSP CCDSP_CC_REGNUM)]
+ UNSPEC_CMPGDU_LE_QB))])]
+ "TARGET_DSPR2"
+ "cmpgdu.le.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpa_w_ph"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPA_W_PH))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpa.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dps_w_ph"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPS_W_PH))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dps.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_madd"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (plus:DI
+ (mult:DI (sign_extend:DI
+ (match_operand:SI 2 "register_operand" "d"))
+ (sign_extend:DI
+ (match_operand:SI 3 "register_operand" "d")))
+ (match_operand:DI 1 "register_operand" "0")))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "madd\t%q0,%2,%3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_maddu"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (plus:DI
+ (mult:DI (zero_extend:DI
+ (match_operand:SI 2 "register_operand" "d"))
+ (zero_extend:DI
+ (match_operand:SI 3 "register_operand" "d")))
+ (match_operand:DI 1 "register_operand" "0")))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "maddu\t%q0,%2,%3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_msub"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (minus:DI
+ (match_operand:DI 1 "register_operand" "0")
+ (mult:DI (sign_extend:DI
+ (match_operand:SI 2 "register_operand" "d"))
+ (sign_extend:DI
+ (match_operand:SI 3 "register_operand" "d")))))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "msub\t%q0,%2,%3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_msubu"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (minus:DI
+ (match_operand:DI 1 "register_operand" "0")
+ (mult:DI (zero_extend:DI
+ (match_operand:SI 2 "register_operand" "d"))
+ (zero_extend:DI
+ (match_operand:SI 3 "register_operand" "d")))))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "msubu\t%q0,%2,%3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mulv2hi3"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (mult:V2HI (match_operand:V2HI 1 "register_operand" "d")
+ (match_operand:V2HI 2 "register_operand" "d")))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MUL_PH))
+ (clobber (match_scratch:DI 3 "=x"))])]
+ "TARGET_DSPR2"
+ "mul.ph\t%0,%1,%2"
+ [(set_attr "type" "imul3")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mul_s_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_MUL_S_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MUL_S_PH))
+ (clobber (match_scratch:DI 3 "=x"))])]
+ "TARGET_DSPR2"
+ "mul_s.ph\t%0,%z1,%z2"
+ [(set_attr "type" "imul3")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mulq_rs_w"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_MULQ_RS_W))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULQ_RS_W))
+ (clobber (match_scratch:DI 3 "=x"))])]
+ "TARGET_DSPR2"
+ "mulq_rs.w\t%0,%z1,%z2"
+ [(set_attr "type" "imul3")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mulq_s_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_MULQ_S_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULQ_S_PH))
+ (clobber (match_scratch:DI 3 "=x"))])]
+ "TARGET_DSPR2"
+ "mulq_s.ph\t%0,%z1,%z2"
+ [(set_attr "type" "imul3")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mulq_s_w"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_MULQ_S_W))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULQ_S_W))
+ (clobber (match_scratch:DI 3 "=x"))])]
+ "TARGET_DSPR2"
+ "mulq_s.w\t%0,%z1,%z2"
+ [(set_attr "type" "imul3")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mulsa_w_ph"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_MULSA_W_PH))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "mulsa.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_mult"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (mult:DI
+ (sign_extend:DI (match_operand:SI 1 "register_operand" "d"))
+ (sign_extend:DI (match_operand:SI 2 "register_operand" "d"))))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "mult\t%q0,%1,%2"
+ [(set_attr "type" "imul")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_multu"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (mult:DI
+ (zero_extend:DI (match_operand:SI 1 "register_operand" "d"))
+ (zero_extend:DI (match_operand:SI 2 "register_operand" "d"))))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "multu\t%q0,%1,%2"
+ [(set_attr "type" "imul")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_precr_qb_ph"
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_PRECR_QB_PH))]
+ "TARGET_DSPR2"
+ "precr.qb.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_precr_sra_ph_w"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")
+ (match_operand:SI 3 "const_int_operand" "n")]
+ UNSPEC_PRECR_SRA_PH_W))]
+ "TARGET_DSPR2"
+{
+ if (INTVAL (operands[3]) & ~(unsigned HOST_WIDE_INT) 31)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+ return "precr_sra.ph.w\t%0,%z2,%3";
+}
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_precr_sra_r_ph_w"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")
+ (match_operand:SI 3 "const_int_operand" "n")]
+ UNSPEC_PRECR_SRA_R_PH_W))]
+ "TARGET_DSPR2"
+{
+ if (INTVAL (operands[3]) & ~(unsigned HOST_WIDE_INT) 31)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+ return "precr_sra_r.ph.w\t%0,%z2,%3";
+}
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_prepend"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")
+ (match_operand:SI 3 "const_int_operand" "n")]
+ UNSPEC_PREPEND))]
+ "TARGET_DSPR2"
+{
+ if (INTVAL (operands[3]) & ~(unsigned HOST_WIDE_INT) 31)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 31);
+ return "prepend\t%0,%z2,%3";
+}
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_shra_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d,d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG,dYG")
+ (match_operand:SI 2 "arith_operand" "I,d")]
+ UNSPEC_SHRA_QB))]
+ "TARGET_DSPR2"
+{
+ if (which_alternative == 0)
+ {
+ if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 7)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 7);
+ return "shra.qb\t%0,%z1,%2";
+ }
+ return "shrav.qb\t%0,%z1,%2";
+}
+ [(set_attr "type" "shift")
+ (set_attr "mode" "SI")])
+
+
+(define_insn "mips_shra_r_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d,d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG,dYG")
+ (match_operand:SI 2 "arith_operand" "I,d")]
+ UNSPEC_SHRA_R_QB))]
+ "TARGET_DSPR2"
+{
+ if (which_alternative == 0)
+ {
+ if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 7)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 7);
+ return "shra_r.qb\t%0,%z1,%2";
+ }
+ return "shrav_r.qb\t%0,%z1,%2";
+}
+ [(set_attr "type" "shift")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_shrl_ph"
+ [(set (match_operand:V2HI 0 "register_operand" "=d,d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG,dYG")
+ (match_operand:SI 2 "arith_operand" "I,d")]
+ UNSPEC_SHRL_PH))]
+ "TARGET_DSPR2"
+{
+ if (which_alternative == 0)
+ {
+ if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 15)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 15);
+ return "shrl.ph\t%0,%z1,%2";
+ }
+ return "shrlv.ph\t%0,%z1,%2";
+}
+ [(set_attr "type" "shift")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subu_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBU_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBU_PH))])]
+ "TARGET_DSPR2"
+ "subu.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subu_s_ph"
+ [(parallel
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBU_S_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBU_S_PH))])]
+ "TARGET_DSPR2"
+ "subu_s.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subuh_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBUH_QB))]
+ "TARGET_DSPR2"
+ "subuh.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subuh_r_qb"
+ [(set (match_operand:V4QI 0 "register_operand" "=d")
+ (unspec:V4QI [(match_operand:V4QI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V4QI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBUH_R_QB))]
+ "TARGET_DSPR2"
+ "subuh_r.qb\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addqh_ph"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_ADDQH_PH))]
+ "TARGET_DSPR2"
+ "addqh.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addqh_r_ph"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_ADDQH_R_PH))]
+ "TARGET_DSPR2"
+ "addqh_r.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addqh_w"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_ADDQH_W))]
+ "TARGET_DSPR2"
+ "addqh.w\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_addqh_r_w"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_ADDQH_R_W))]
+ "TARGET_DSPR2"
+ "addqh_r.w\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subqh_ph"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBQH_PH))]
+ "TARGET_DSPR2"
+ "subqh.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subqh_r_ph"
+ [(set (match_operand:V2HI 0 "register_operand" "=d")
+ (unspec:V2HI [(match_operand:V2HI 1 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")]
+ UNSPEC_SUBQH_R_PH))]
+ "TARGET_DSPR2"
+ "subqh_r.ph\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subqh_w"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_SUBQH_W))]
+ "TARGET_DSPR2"
+ "subqh.w\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_subqh_r_w"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "dJ")
+ (match_operand:SI 2 "reg_or_0_operand" "dJ")]
+ UNSPEC_SUBQH_R_W))]
+ "TARGET_DSPR2"
+ "subqh_r.w\t%0,%z1,%z2"
+ [(set_attr "type" "arith")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpax_w_ph"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPAX_W_PH))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpax.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpsx_w_ph"
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPSX_W_PH))]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpsx.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpaqx_s_w_ph"
+ [(parallel
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPAQX_S_W_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)]
+ UNSPEC_DPAQX_S_W_PH))])]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpaqx_s.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpaqx_sa_w_ph"
+ [(parallel
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPAQX_SA_W_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)]
+ UNSPEC_DPAQX_SA_W_PH))])]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpaqx_sa.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpsqx_s_w_ph"
+ [(parallel
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPSQX_S_W_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)]
+ UNSPEC_DPSQX_S_W_PH))])]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpsqx_s.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
+(define_insn "mips_dpsqx_sa_w_ph"
+ [(parallel
+ [(set (match_operand:DI 0 "register_operand" "=a")
+ (unspec:DI [(match_operand:DI 1 "register_operand" "0")
+ (match_operand:V2HI 2 "reg_or_0_operand" "dYG")
+ (match_operand:V2HI 3 "reg_or_0_operand" "dYG")]
+ UNSPEC_DPSQX_SA_W_PH))
+ (set (reg:CCDSP CCDSP_OU_REGNUM)
+ (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)]
+ UNSPEC_DPSQX_SA_W_PH))])]
+ "TARGET_DSPR2 && !TARGET_64BIT"
+ "dpsqx_sa.w.ph\t%q0,%z2,%z3"
+ [(set_attr "type" "imadd")
+ (set_attr "mode" "SI")])
+
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 37035aad58f..7203a83a7cc 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -180,6 +180,14 @@ enum mips_function_type
MIPS_VOID_FTYPE_V2HI_V2HI,
MIPS_VOID_FTYPE_V4QI_V4QI,
+ /* For MIPS DSP REV 2 ASE. */
+ MIPS_V4QI_FTYPE_V4QI,
+ MIPS_SI_FTYPE_SI_SI_SI,
+ MIPS_DI_FTYPE_DI_USI_USI,
+ MIPS_DI_FTYPE_SI_SI,
+ MIPS_DI_FTYPE_USI_USI,
+ MIPS_V2HI_FTYPE_SI_SI_SI,
+
/* The last type. */
MIPS_MAX_FTYPE_MAX
};
@@ -267,8 +275,6 @@ struct mips_integer_op;
struct mips_sim;
static enum mips_symbol_type mips_classify_symbol (rtx);
-static void mips_split_const (rtx, rtx *, HOST_WIDE_INT *);
-static bool mips_offset_within_object_p (rtx, HOST_WIDE_INT);
static bool mips_valid_base_register_p (rtx, enum machine_mode, int);
static bool mips_symbolic_address_p (enum mips_symbol_type, enum machine_mode);
static bool mips_classify_address (struct mips_address_info *, rtx,
@@ -1292,58 +1298,6 @@ mips_classify_symbol (rtx x)
return SYMBOL_GENERAL;
}
-
-/* Split X into a base and a constant offset, storing them in *BASE
- and *OFFSET respectively. */
-
-static void
-mips_split_const (rtx x, rtx *base, HOST_WIDE_INT *offset)
-{
- *offset = 0;
-
- if (GET_CODE (x) == CONST)
- {
- x = XEXP (x, 0);
- if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
- {
- *offset += INTVAL (XEXP (x, 1));
- x = XEXP (x, 0);
- }
- }
- *base = x;
-}
-
-
-/* Return true if SYMBOL is a SYMBOL_REF and OFFSET + SYMBOL points
- to the same object as SYMBOL, or to the same object_block. */
-
-static bool
-mips_offset_within_object_p (rtx symbol, HOST_WIDE_INT offset)
-{
- if (GET_CODE (symbol) != SYMBOL_REF)
- return false;
-
- if (CONSTANT_POOL_ADDRESS_P (symbol)
- && offset >= 0
- && offset < (int) GET_MODE_SIZE (get_pool_mode (symbol)))
- return true;
-
- if (SYMBOL_REF_DECL (symbol) != 0
- && offset >= 0
- && offset < int_size_in_bytes (TREE_TYPE (SYMBOL_REF_DECL (symbol))))
- return true;
-
- if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol)
- && SYMBOL_REF_BLOCK (symbol)
- && SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0
- && ((unsigned HOST_WIDE_INT) offset + SYMBOL_REF_BLOCK_OFFSET (symbol)
- < (unsigned HOST_WIDE_INT) SYMBOL_REF_BLOCK (symbol)->size))
- return true;
-
- return false;
-}
-
-
/* Return true if X is a symbolic constant that can be calculated in
the same way as a bare symbol. If it is, store the type of the
symbol in *SYMBOL_TYPE. */
@@ -1351,9 +1305,9 @@ mips_offset_within_object_p (rtx symbol, HOST_WIDE_INT offset)
bool
mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
{
- HOST_WIDE_INT offset;
+ rtx offset;
- mips_split_const (x, &x, &offset);
+ split_const (x, &x, &offset);
if (UNSPEC_ADDRESS_P (x))
*symbol_type = UNSPEC_ADDRESS_TYPE (x);
else if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF)
@@ -1365,7 +1319,7 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
else
return false;
- if (offset == 0)
+ if (offset == const0_rtx)
return true;
/* Check whether a nonzero offset is valid for the underlying
@@ -1381,7 +1335,7 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
sign-extended. In this case we can't allow an arbitrary offset
in case the 32-bit value X + OFFSET has a different sign from X. */
if (Pmode == DImode && !ABI_HAS_64BIT_SYMBOLS)
- return mips_offset_within_object_p (x, offset);
+ return offset_within_block_p (x, INTVAL (offset));
/* In other cases the relocations can handle any offset. */
return true;
@@ -1397,15 +1351,15 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
case SYMBOL_SMALL_DATA:
/* Make sure that the offset refers to something within the
- underlying object. This should guarantee that the final
+ same object block. This should guarantee that the final
PC- or GP-relative offset is within the 16-bit limit. */
- return mips_offset_within_object_p (x, offset);
+ return offset_within_block_p (x, INTVAL (offset));
case SYMBOL_GOT_LOCAL:
case SYMBOL_GOTOFF_PAGE:
/* The linker should provide enough local GOT entries for a
16-bit offset. Larger offsets may lead to GOT overflow. */
- return SMALL_OPERAND (offset);
+ return SMALL_INT (offset);
case SYMBOL_GOT_GLOBAL:
case SYMBOL_GOTOFF_GLOBAL:
@@ -1595,8 +1549,7 @@ mips_tls_symbol_ref_1 (rtx *x, void *data ATTRIBUTE_UNUSED)
static bool
mips_cannot_force_const_mem (rtx x)
{
- rtx base;
- HOST_WIDE_INT offset;
+ rtx base, offset;
if (!TARGET_MIPS16)
{
@@ -1612,8 +1565,8 @@ mips_cannot_force_const_mem (rtx x)
if (GET_CODE (x) == CONST_INT)
return true;
- mips_split_const (x, &base, &offset);
- if (symbolic_operand (base, VOIDmode) && SMALL_OPERAND (offset))
+ split_const (x, &base, &offset);
+ if (symbolic_operand (base, VOIDmode) && SMALL_INT (offset))
return true;
}
@@ -1800,7 +1753,7 @@ mips_const_insns (rtx x)
{
struct mips_integer_op codes[MIPS_MAX_INTEGER_OPS];
enum mips_symbol_type symbol_type;
- HOST_WIDE_INT offset;
+ rtx offset;
switch (GET_CODE (x))
{
@@ -1841,16 +1794,16 @@ mips_const_insns (rtx x)
/* Otherwise try splitting the constant into a base and offset.
16-bit offsets can be added using an extra addiu. Larger offsets
must be calculated separately and then added to the base. */
- mips_split_const (x, &x, &offset);
+ split_const (x, &x, &offset);
if (offset != 0)
{
int n = mips_const_insns (x);
if (n != 0)
{
- if (SMALL_OPERAND (offset))
+ if (SMALL_INT (offset))
return n + 1;
else
- return n + 1 + mips_build_integer (codes, offset);
+ return n + 1 + mips_build_integer (codes, INTVAL (offset));
}
}
return 0;
@@ -1949,13 +1902,14 @@ mips_split_symbol (rtx temp, rtx addr)
rtx
mips_unspec_address (rtx address, enum mips_symbol_type symbol_type)
{
- rtx base;
- HOST_WIDE_INT offset;
+ rtx base, offset;
- mips_split_const (address, &base, &offset);
+ split_const (address, &base, &offset);
base = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, base),
UNSPEC_ADDRESS_FIRST + symbol_type);
- return plus_constant (gen_rtx_CONST (Pmode, base), offset);
+ if (offset != const0_rtx)
+ base = gen_rtx_PLUS (Pmode, base, offset);
+ return gen_rtx_CONST (Pmode, base);
}
@@ -2303,8 +2257,7 @@ mips_move_integer (rtx dest, rtx temp, unsigned HOST_WIDE_INT value)
static void
mips_legitimize_const_move (enum machine_mode mode, rtx dest, rtx src)
{
- rtx base;
- HOST_WIDE_INT offset;
+ rtx base, offset;
/* Split moves of big integers into smaller pieces. */
if (splittable_const_int_operand (src, mode))
@@ -2329,13 +2282,13 @@ mips_legitimize_const_move (enum machine_mode mode, rtx dest, rtx src)
/* If we have (const (plus symbol offset)), load the symbol first
and then add in the offset. This is usually better than forcing
the constant into memory, at least in non-mips16 code. */
- mips_split_const (src, &base, &offset);
+ split_const (src, &base, &offset);
if (!TARGET_MIPS16
- && offset != 0
- && (!no_new_pseudos || SMALL_OPERAND (offset)))
+ && offset != const0_rtx
+ && (!no_new_pseudos || SMALL_INT (offset)))
{
base = mips_force_temporary (dest, base);
- emit_move_insn (dest, mips_add_offset (0, base, offset));
+ emit_move_insn (dest, mips_add_offset (0, base, INTVAL (offset)));
return;
}
@@ -4984,6 +4937,10 @@ override_options (void)
if (TARGET_PAIRED_SINGLE_FLOAT && !ISA_MIPS64)
error ("-mips3d/-mpaired-single must be used with -mips64");
+ /* If TARGET_DSPR2, enable MASK_DSP. */
+ if (TARGET_DSPR2)
+ target_flags |= MASK_DSP;
+
if (TARGET_MIPS16 && TARGET_DSP)
error ("-mips16 and -mdsp cannot be used together");
@@ -5709,16 +5666,15 @@ print_operand_reloc (FILE *file, rtx op, const char **relocs)
{
enum mips_symbol_type symbol_type;
const char *p;
- rtx base;
- HOST_WIDE_INT offset;
+ rtx base, offset;
if (!mips_symbolic_constant_p (op, &symbol_type) || relocs[symbol_type] == 0)
fatal_insn ("PRINT_OPERAND, invalid operand for relocation", op);
/* If OP uses an UNSPEC address, we want to print the inner symbol. */
- mips_split_const (op, &base, &offset);
+ split_const (op, &base, &offset);
if (UNSPEC_ADDRESS_P (base))
- op = plus_constant (UNSPEC_ADDRESS (base), offset);
+ op = plus_constant (UNSPEC_ADDRESS (base), INTVAL (offset));
fputs (relocs[symbol_type], file);
output_addr_const (file, op);
@@ -7640,12 +7596,12 @@ mips_cannot_change_mode_class (enum machine_mode from,
bool
mips_dangerous_for_la25_p (rtx x)
{
- HOST_WIDE_INT offset;
+ rtx offset;
if (TARGET_EXPLICIT_RELOCS)
return false;
- mips_split_const (x, &x, &offset);
+ split_const (x, &x, &offset);
return global_got_operand (x, VOIDmode);
}
@@ -10152,6 +10108,7 @@ static const struct builtin_description sb1_bdesc[] =
#define CODE_FOR_mips_addu_qb CODE_FOR_addv4qi3
#define CODE_FOR_mips_subq_ph CODE_FOR_subv2hi3
#define CODE_FOR_mips_subu_qb CODE_FOR_subv4qi3
+#define CODE_FOR_mips_mul_ph CODE_FOR_mulv2hi3
/* Define a MIPS_BUILTIN_DIRECT_NO_TARGET function for instruction
CODE_FOR_mips_<INSN>. FUNCTION_TYPE and TARGET_FLAGS are
@@ -10211,19 +10168,6 @@ static const struct builtin_description dsp_bdesc[] =
DIRECT_BUILTIN (mulq_rs_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSP),
DIRECT_BUILTIN (muleq_s_w_phl, MIPS_SI_FTYPE_V2HI_V2HI, MASK_DSP),
DIRECT_BUILTIN (muleq_s_w_phr, MIPS_SI_FTYPE_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (dpau_h_qbl, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
- DIRECT_BUILTIN (dpau_h_qbr, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
- DIRECT_BUILTIN (dpsu_h_qbl, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
- DIRECT_BUILTIN (dpsu_h_qbr, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
- DIRECT_BUILTIN (dpaq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (dpsq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (mulsaq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (dpaq_sa_l_w, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSP),
- DIRECT_BUILTIN (dpsq_sa_l_w, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSP),
- DIRECT_BUILTIN (maq_s_w_phl, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (maq_s_w_phr, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (maq_sa_w_phl, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
- DIRECT_BUILTIN (maq_sa_w_phr, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
DIRECT_BUILTIN (bitrev, MIPS_SI_FTYPE_SI, MASK_DSP),
DIRECT_BUILTIN (insv, MIPS_SI_FTYPE_SI_SI, MASK_DSP),
DIRECT_BUILTIN (repl_qb, MIPS_V4QI_FTYPE_SI, MASK_DSP),
@@ -10240,6 +10184,65 @@ static const struct builtin_description dsp_bdesc[] =
DIRECT_BUILTIN (pick_qb, MIPS_V4QI_FTYPE_V4QI_V4QI, MASK_DSP),
DIRECT_BUILTIN (pick_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSP),
DIRECT_BUILTIN (packrl_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSP),
+ DIRECT_NO_TARGET_BUILTIN (wrdsp, MIPS_VOID_FTYPE_SI_SI, MASK_DSP),
+ DIRECT_BUILTIN (rddsp, MIPS_SI_FTYPE_SI, MASK_DSP),
+ DIRECT_BUILTIN (lbux, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
+ DIRECT_BUILTIN (lhx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
+ DIRECT_BUILTIN (lwx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
+ BPOSGE_BUILTIN (32, MASK_DSP),
+
+ /* The following are for the MIPS DSP ASE REV 2. */
+ DIRECT_BUILTIN (absq_s_qb, MIPS_V4QI_FTYPE_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (addu_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (addu_s_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (adduh_qb, MIPS_V4QI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (adduh_r_qb, MIPS_V4QI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (append, MIPS_SI_FTYPE_SI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (balign, MIPS_SI_FTYPE_SI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (cmpgdu_eq_qb, MIPS_SI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (cmpgdu_lt_qb, MIPS_SI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (cmpgdu_le_qb, MIPS_SI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (mul_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (mul_s_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (mulq_rs_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (mulq_s_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (mulq_s_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (precr_qb_ph, MIPS_V4QI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (precr_sra_ph_w, MIPS_V2HI_FTYPE_SI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (precr_sra_r_ph_w, MIPS_V2HI_FTYPE_SI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (prepend, MIPS_SI_FTYPE_SI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (shra_qb, MIPS_V4QI_FTYPE_V4QI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (shra_r_qb, MIPS_V4QI_FTYPE_V4QI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (shrl_ph, MIPS_V2HI_FTYPE_V2HI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (subu_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (subu_s_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (subuh_qb, MIPS_V4QI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (subuh_r_qb, MIPS_V4QI_FTYPE_V4QI_V4QI, MASK_DSPR2),
+ DIRECT_BUILTIN (addqh_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (addqh_r_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (addqh_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (addqh_r_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (subqh_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (subqh_r_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (subqh_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (subqh_r_w, MIPS_SI_FTYPE_SI_SI, MASK_DSPR2)
+};
+
+static const struct builtin_description dsp_32only_bdesc[] =
+{
+ DIRECT_BUILTIN (dpau_h_qbl, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
+ DIRECT_BUILTIN (dpau_h_qbr, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
+ DIRECT_BUILTIN (dpsu_h_qbl, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
+ DIRECT_BUILTIN (dpsu_h_qbr, MIPS_DI_FTYPE_DI_V4QI_V4QI, MASK_DSP),
+ DIRECT_BUILTIN (dpaq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (dpsq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (mulsaq_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (dpaq_sa_l_w, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSP),
+ DIRECT_BUILTIN (dpsq_sa_l_w, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSP),
+ DIRECT_BUILTIN (maq_s_w_phl, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (maq_s_w_phr, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (maq_sa_w_phl, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
+ DIRECT_BUILTIN (maq_sa_w_phr, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSP),
DIRECT_BUILTIN (extr_w, MIPS_SI_FTYPE_DI_SI, MASK_DSP),
DIRECT_BUILTIN (extr_r_w, MIPS_SI_FTYPE_DI_SI, MASK_DSP),
DIRECT_BUILTIN (extr_rs_w, MIPS_SI_FTYPE_DI_SI, MASK_DSP),
@@ -10248,12 +10251,23 @@ static const struct builtin_description dsp_bdesc[] =
DIRECT_BUILTIN (extpdp, MIPS_SI_FTYPE_DI_SI, MASK_DSP),
DIRECT_BUILTIN (shilo, MIPS_DI_FTYPE_DI_SI, MASK_DSP),
DIRECT_BUILTIN (mthlip, MIPS_DI_FTYPE_DI_SI, MASK_DSP),
- DIRECT_NO_TARGET_BUILTIN (wrdsp, MIPS_VOID_FTYPE_SI_SI, MASK_DSP),
- DIRECT_BUILTIN (rddsp, MIPS_SI_FTYPE_SI, MASK_DSP),
- DIRECT_BUILTIN (lbux, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
- DIRECT_BUILTIN (lhx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
- DIRECT_BUILTIN (lwx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP),
- BPOSGE_BUILTIN (32, MASK_DSP)
+
+ /* The following are for the MIPS DSP ASE REV 2. */
+ DIRECT_BUILTIN (dpa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dps_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (madd, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (maddu, MIPS_DI_FTYPE_DI_USI_USI, MASK_DSPR2),
+ DIRECT_BUILTIN (msub, MIPS_DI_FTYPE_DI_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (msubu, MIPS_DI_FTYPE_DI_USI_USI, MASK_DSPR2),
+ DIRECT_BUILTIN (mulsa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (mult, MIPS_DI_FTYPE_SI_SI, MASK_DSPR2),
+ DIRECT_BUILTIN (multu, MIPS_DI_FTYPE_USI_USI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpax_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpsx_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpaqx_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpaqx_sa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpsqx_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2),
+ DIRECT_BUILTIN (dpsqx_sa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, MASK_DSPR2)
};
/* This helps provide a mapping from builtin function codes to bdesc
@@ -10270,13 +10284,19 @@ struct bdesc_map
/* The target processor that supports these builtin functions.
PROCESSOR_MAX means we enable them for all processors. */
enum processor_type proc;
+
+ /* If the target has these flags, this builtin function table
+ will not be supported. */
+ int unsupported_target_flags;
};
static const struct bdesc_map bdesc_arrays[] =
{
- { mips_bdesc, ARRAY_SIZE (mips_bdesc), PROCESSOR_MAX },
- { sb1_bdesc, ARRAY_SIZE (sb1_bdesc), PROCESSOR_SB1 },
- { dsp_bdesc, ARRAY_SIZE (dsp_bdesc), PROCESSOR_MAX }
+ { mips_bdesc, ARRAY_SIZE (mips_bdesc), PROCESSOR_MAX, 0 },
+ { sb1_bdesc, ARRAY_SIZE (sb1_bdesc), PROCESSOR_SB1, 0 },
+ { dsp_bdesc, ARRAY_SIZE (dsp_bdesc), PROCESSOR_MAX, 0 },
+ { dsp_32only_bdesc, ARRAY_SIZE (dsp_32only_bdesc), PROCESSOR_MAX,
+ MASK_64BIT }
};
/* Take the argument ARGNUM of the arglist of EXP and convert it into a form
@@ -10597,6 +10617,41 @@ mips_init_builtins (void)
types[MIPS_SI_FTYPE_VOID]
= build_function_type (intSI_type_node, void_list_node);
+
+ if (TARGET_DSPR2)
+ {
+ types[MIPS_V4QI_FTYPE_V4QI]
+ = build_function_type_list (V4QI_type_node,
+ V4QI_type_node,
+ NULL_TREE);
+
+ types[MIPS_SI_FTYPE_SI_SI_SI]
+ = build_function_type_list (intSI_type_node,
+ intSI_type_node, intSI_type_node,
+ intSI_type_node, NULL_TREE);
+
+ types[MIPS_DI_FTYPE_DI_USI_USI]
+ = build_function_type_list (intDI_type_node,
+ intDI_type_node,
+ unsigned_intSI_type_node,
+ unsigned_intSI_type_node, NULL_TREE);
+
+ types[MIPS_DI_FTYPE_SI_SI]
+ = build_function_type_list (intDI_type_node,
+ intSI_type_node, intSI_type_node,
+ NULL_TREE);
+
+ types[MIPS_DI_FTYPE_USI_USI]
+ = build_function_type_list (intDI_type_node,
+ unsigned_intSI_type_node,
+ unsigned_intSI_type_node, NULL_TREE);
+
+ types[MIPS_V2HI_FTYPE_SI_SI_SI]
+ = build_function_type_list (V2HI_type_node,
+ intSI_type_node, intSI_type_node,
+ intSI_type_node, NULL_TREE);
+
+ }
}
/* Iterate through all of the bdesc arrays, initializing all of the
@@ -10605,7 +10660,8 @@ mips_init_builtins (void)
offset = 0;
for (m = bdesc_arrays; m < &bdesc_arrays[ARRAY_SIZE (bdesc_arrays)]; m++)
{
- if (m->proc == PROCESSOR_MAX || (m->proc == mips_arch))
+ if ((m->proc == PROCESSOR_MAX || (m->proc == mips_arch))
+ && (m->unsupported_target_flags & target_flags) == 0)
for (d = m->bdesc; d < &m->bdesc[m->size]; d++)
if ((d->target_flags & target_flags) == d->target_flags)
add_builtin_function (d->name, types[d->function_type],
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index de926be4fd8..ef6b02c4186 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -340,6 +340,9 @@ extern const struct mips_rtx_cost_data *mips_cost;
if (TARGET_DSP) \
builtin_define ("__mips_dsp"); \
\
+ if (TARGET_DSPR2) \
+ builtin_define ("__mips_dspr2"); \
+ \
MIPS_CPP_SET_PROCESSOR ("_MIPS_ARCH", mips_arch_info); \
MIPS_CPP_SET_PROCESSOR ("_MIPS_TUNE", mips_tune_info); \
\
@@ -820,6 +823,7 @@ extern const struct mips_rtx_cost_data *mips_cost;
%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \
%{mips3d:-mips3d} \
%{mdsp} \
+%{mdspr2} \
%{mfix-vr4120} %{mfix-vr4130} \
%(subtarget_asm_optimizing_spec) \
%(subtarget_asm_debugging_spec) \
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index a14b449a11d..149c7f4f040 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -147,6 +147,57 @@
(UNSPEC_MTHLIP 365)
(UNSPEC_WRDSP 366)
(UNSPEC_RDDSP 367)
+
+ ;; MIPS DSP ASE REV 2 Revision 0.02 11/24/2006
+ (UNSPEC_ABSQ_S_QB 400)
+ (UNSPEC_ADDU_PH 401)
+ (UNSPEC_ADDU_S_PH 402)
+ (UNSPEC_ADDUH_QB 403)
+ (UNSPEC_ADDUH_R_QB 404)
+ (UNSPEC_APPEND 405)
+ (UNSPEC_BALIGN 406)
+ (UNSPEC_CMPGDU_EQ_QB 407)
+ (UNSPEC_CMPGDU_LT_QB 408)
+ (UNSPEC_CMPGDU_LE_QB 409)
+ (UNSPEC_DPA_W_PH 410)
+ (UNSPEC_DPS_W_PH 411)
+ (UNSPEC_MADD 412)
+ (UNSPEC_MADDU 413)
+ (UNSPEC_MSUB 414)
+ (UNSPEC_MSUBU 415)
+ (UNSPEC_MUL_PH 416)
+ (UNSPEC_MUL_S_PH 417)
+ (UNSPEC_MULQ_RS_W 418)
+ (UNSPEC_MULQ_S_PH 419)
+ (UNSPEC_MULQ_S_W 420)
+ (UNSPEC_MULSA_W_PH 421)
+ (UNSPEC_MULT 422)
+ (UNSPEC_MULTU 423)
+ (UNSPEC_PRECR_QB_PH 424)
+ (UNSPEC_PRECR_SRA_PH_W 425)
+ (UNSPEC_PRECR_SRA_R_PH_W 426)
+ (UNSPEC_PREPEND 427)
+ (UNSPEC_SHRA_QB 428)
+ (UNSPEC_SHRA_R_QB 429)
+ (UNSPEC_SHRL_PH 430)
+ (UNSPEC_SUBU_PH 431)
+ (UNSPEC_SUBU_S_PH 432)
+ (UNSPEC_SUBUH_QB 433)
+ (UNSPEC_SUBUH_R_QB 434)
+ (UNSPEC_ADDQH_PH 435)
+ (UNSPEC_ADDQH_R_PH 436)
+ (UNSPEC_ADDQH_W 437)
+ (UNSPEC_ADDQH_R_W 438)
+ (UNSPEC_SUBQH_PH 439)
+ (UNSPEC_SUBQH_R_PH 440)
+ (UNSPEC_SUBQH_W 441)
+ (UNSPEC_SUBQH_R_W 442)
+ (UNSPEC_DPAX_W_PH 443)
+ (UNSPEC_DPSX_W_PH 444)
+ (UNSPEC_DPAQX_S_W_PH 445)
+ (UNSPEC_DPAQX_SA_W_PH 446)
+ (UNSPEC_DPSQX_S_W_PH 447)
+ (UNSPEC_DPSQX_SA_W_PH 448)
]
)
@@ -1505,7 +1556,7 @@
[(set (match_operand:DI 0 "register_operand" "=x")
(mult:DI (any_extend:DI (match_operand:SI 1 "register_operand" "d"))
(any_extend:DI (match_operand:SI 2 "register_operand" "d"))))]
- "!TARGET_64BIT && !TARGET_FIX_R4000"
+ "!TARGET_64BIT && !TARGET_FIX_R4000 && !TARGET_DSPR2"
"mult<u>\t%1,%2"
[(set_attr "type" "imul")
(set_attr "mode" "SI")])
@@ -5514,3 +5565,7 @@
; The MIPS DSP Instructions.
(include "mips-dsp.md")
+
+; The MIPS DSP REV 2 Instructions.
+
+(include "mips-dspr2.md")
diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt
index 7f8214bb146..db6055ce7a9 100644
--- a/gcc/config/mips/mips.opt
+++ b/gcc/config/mips/mips.opt
@@ -59,6 +59,10 @@ mdsp
Target Report Mask(DSP)
Use MIPS-DSP instructions
+mdspr2
+Target Report Mask(DSPR2)
+Use MIPS-DSP REV 2 instructions
+
mdebug
Target Var(TARGET_DEBUG_MODE) Undocumented
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index e39ddc79a32..c69652020cb 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -7273,9 +7273,10 @@ attr_length_call (rtx insn, int sibcall)
length += 12;
/* long pc-relative branch sequence. */
- else if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+ else if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
|| (TARGET_64BIT && !TARGET_GAS)
- || (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
+ || (TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
{
length += 20;
@@ -7385,8 +7386,9 @@ output_call (rtx insn, rtx call_dest, int sibcall)
of increasing length and complexity. In most cases,
they don't allow an instruction in the delay slot. */
if (!((TARGET_LONG_ABS_CALL || local_call) && !flag_pic)
- && !(TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
- && !(TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+ && !(TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
+ && !(TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call))
&& !TARGET_64BIT)
indirect_call = 1;
@@ -7432,7 +7434,7 @@ output_call (rtx insn, rtx call_dest, int sibcall)
}
else
{
- if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+ if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
|| (TARGET_64BIT && !TARGET_GAS))
{
/* The HP assembler and linker can handle relocations
@@ -7446,7 +7448,8 @@ output_call (rtx insn, rtx call_dest, int sibcall)
CODE_LABEL_NUMBER (xoperands[1]));
output_asm_insn ("ldo R'%0-%l1(%%r1),%%r1", xoperands);
}
- else if (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+ else if (TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call))
{
/* GAS currently can't generate the relocations that
are needed for the SOM linker under HP-UX using this
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index d686cb82b57..5ea229916f4 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -2481,9 +2481,9 @@
(define_insn ""
[(set (match_operand:SI 0 "move_dest_operand"
- "=r,r,r,r,r,r,Q,!*q,!r,!*f,*f,T,!r,!f")
+ "=r,r,r,r,r,r,Q,!*q,!r,!*f,*f,T,?r,?*f")
(match_operand:SI 1 "move_src_operand"
- "A,r,J,N,K,RQ,rM,!rM,!*q,!*fM,RT,*f,!f,!r"))]
+ "A,r,J,N,K,RQ,rM,!rM,!*q,!*fM,RT,*f,*f,r"))]
"(register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))
&& !TARGET_SOFT_FLOAT
@@ -3123,9 +3123,9 @@
(define_insn ""
[(set (match_operand:HI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!r,!*f,!r,!f")
+ "=r,r,r,r,r,Q,!*q,!r,!*f,?r,?*f")
(match_operand:HI 1 "move_src_operand"
- "r,J,N,K,RQ,rM,!rM,!*q,!*fM,!f,!r"))]
+ "r,J,N,K,RQ,rM,!rM,!*q,!*fM,*f,r"))]
"(register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode))
&& !TARGET_SOFT_FLOAT
@@ -3296,9 +3296,9 @@
(define_insn ""
[(set (match_operand:QI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!r,!*f,!r,!f")
+ "=r,r,r,r,r,Q,!*q,!r,!*f,?r,?*f")
(match_operand:QI 1 "move_src_operand"
- "r,J,N,K,RQ,rM,!rM,!*q,!*fM,!f,!r"))]
+ "r,J,N,K,RQ,rM,!rM,!*q,!*fM,*f,r"))]
"(register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode))
&& !TARGET_SOFT_FLOAT
@@ -4098,17 +4098,19 @@
""
"
{
- if (TARGET_64BIT
- && GET_CODE (operands[1]) == CONST_DOUBLE
+ if (GET_CODE (operands[1]) == CONST_DOUBLE
&& operands[1] != CONST0_RTX (DFmode))
{
- /* We rely on reload to legitimize the insn generated after
- we force the CONST_DOUBLE to memory. This doesn't happen
- if OPERANDS[0] is a hard register. */
- if (REG_P (operands[0]) && HARD_REGISTER_P (operands[0]))
+ /* Reject CONST_DOUBLE loads to all hard registers when
+ generating 64-bit code and to floating point registers
+ when generating 32-bit code. */
+ if (REG_P (operands[0])
+ && HARD_REGISTER_P (operands[0])
+ && (TARGET_64BIT || REGNO (operands[0]) >= 32))
FAIL;
- operands[1] = force_const_mem (DFmode, operands[1]);
+ if (TARGET_64BIT)
+ operands[1] = force_const_mem (DFmode, operands[1]);
}
if (emit_move_sequence (operands, DFmode, 0))
@@ -4151,9 +4153,9 @@
(define_insn ""
[(set (match_operand:DF 0 "move_dest_operand"
- "=f,*r,Q,?o,?Q,f,*r,*r,!r,!f")
+ "=f,*r,Q,?o,?Q,f,*r,*r,?*r,?f")
(match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,*rG,f,*r,*r,RQ,o,RQ,!f,!r"))]
+ "fG,*rG,f,*r,*r,RQ,o,RQ,f,*r"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& !(GET_CODE (operands[1]) == CONST_DOUBLE
@@ -4325,9 +4327,9 @@
(define_insn ""
[(set (match_operand:DF 0 "move_dest_operand"
- "=r,?o,?Q,r,r,!r,!f")
+ "=r,?o,?Q,r,r")
(match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
- "rG,r,r,o,RQ,!f,!r"))]
+ "rG,r,r,o,RQ"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& !TARGET_64BIT
@@ -4336,14 +4338,14 @@
{
return output_move_double (operands);
}"
- [(set_attr "type" "move,store,store,load,load,move,move")
- (set_attr "length" "8,8,16,8,16,12,12")])
+ [(set_attr "type" "move,store,store,load,load")
+ (set_attr "length" "8,8,16,8,16")])
(define_insn ""
[(set (match_operand:DF 0 "move_dest_operand"
"=!*r,*r,*r,*r,*r,Q,f,f,T")
(match_operand:DF 1 "move_src_operand"
- "!*r,J,N,K,RQ,*rM,fM,RT,f"))]
+ "!*r,J,N,K,RQ,*rG,fG,RT,f"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& !TARGET_SOFT_FLOAT && TARGET_64BIT"
@@ -4486,9 +4488,9 @@
(define_insn ""
[(set (match_operand:DI 0 "move_dest_operand"
- "=r,o,Q,r,r,r,*f,*f,T,!r,!f")
+ "=r,o,Q,r,r,r,*f,*f,T,?r,?*f")
(match_operand:DI 1 "general_operand"
- "rM,r,r,o*R,Q,i,*fM,RT,*f,!f,!r"))]
+ "rM,r,r,o*R,Q,i,*fM,RT,*f,*f,r"))]
"(register_operand (operands[0], DImode)
|| reg_or_0_operand (operands[1], DImode))
&& !TARGET_64BIT
@@ -4678,6 +4680,14 @@
""
"
{
+ /* Reject CONST_DOUBLE loads to floating point registers. */
+ if (GET_CODE (operands[1]) == CONST_DOUBLE
+ && operands[1] != CONST0_RTX (SFmode)
+ && REG_P (operands[0])
+ && HARD_REGISTER_P (operands[0])
+ && REGNO (operands[0]) >= 32)
+ FAIL;
+
if (emit_move_sequence (operands, SFmode, 0))
DONE;
}")
@@ -4718,9 +4728,9 @@
(define_insn ""
[(set (match_operand:SF 0 "move_dest_operand"
- "=f,!*r,f,*r,Q,Q,!r,!f")
+ "=f,!*r,f,*r,Q,Q,?*r,?f")
(match_operand:SF 1 "reg_or_0_or_nonsymb_mem_operand"
- "fG,!*rG,RQ,RQ,f,*rG,!f,!r"))]
+ "fG,!*rG,RQ,RQ,f,*rG,f,*r"))]
"(register_operand (operands[0], SFmode)
|| reg_or_0_operand (operands[1], SFmode))
&& !TARGET_SOFT_FLOAT
@@ -5771,10 +5781,10 @@
GEN_INT (32)));
emit_move_insn (op2shifted, gen_rtx_LSHIFTRT (DImode, operands[2],
GEN_INT (32)));
- op1r = gen_rtx_SUBREG (SImode, operands[1], 4);
- op2r = gen_rtx_SUBREG (SImode, operands[2], 4);
- op1l = gen_rtx_SUBREG (SImode, op1shifted, 4);
- op2l = gen_rtx_SUBREG (SImode, op2shifted, 4);
+ op1r = force_reg (SImode, gen_rtx_SUBREG (SImode, operands[1], 4));
+ op2r = force_reg (SImode, gen_rtx_SUBREG (SImode, operands[2], 4));
+ op1l = force_reg (SImode, gen_rtx_SUBREG (SImode, op1shifted, 4));
+ op2l = force_reg (SImode, gen_rtx_SUBREG (SImode, op2shifted, 4));
/* Emit multiplies for the cross products. */
emit_insn (gen_umulsidi3 (cross_product1, op2r, op1l));
@@ -6964,7 +6974,7 @@
(match_operand:SI 2 "register_operand" "q")))
(match_operand:SI 3 "register_operand" "0")))]
; accept ...0001...1, can this be generalized?
- "exact_log2 (INTVAL (operands[1]) + 1) >= 0"
+ "exact_log2 (INTVAL (operands[1]) + 1) > 0"
"*
{
int x = INTVAL (operands[1]);
@@ -7063,7 +7073,7 @@
(match_operand:DI 2 "register_operand" "q")))
(match_operand:DI 3 "register_operand" "0")))]
; accept ...0001...1, can this be generalized?
- "TARGET_64BIT && exact_log2 (INTVAL (operands[1]) + 1) >= 0"
+ "TARGET_64BIT && exact_log2 (INTVAL (operands[1]) + 1) > 0"
"*
{
int x = INTVAL (operands[1]);
@@ -7259,7 +7269,7 @@
(and:SI (ashift:SI (match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "const_int_operand" ""))
(match_operand:SI 3 "const_int_operand" "")))]
- "exact_log2 (1 + (INTVAL (operands[3]) >> (INTVAL (operands[2]) & 31))) >= 0"
+ "exact_log2 (1 + (INTVAL (operands[3]) >> (INTVAL (operands[2]) & 31))) > 0"
"*
{
int cnt = INTVAL (operands[2]) & 31;
diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md
index 685a4941991..ff9ebacf1c9 100644
--- a/gcc/config/pa/predicates.md
+++ b/gcc/config/pa/predicates.md
@@ -207,11 +207,14 @@
;; instruction.
(define_predicate "move_src_operand"
- (match_code "subreg,reg,const_int,mem")
+ (match_code "subreg,reg,const_int,const_double,mem")
{
if (register_operand (op, mode))
return 1;
+ if (op == CONST0_RTX (mode))
+ return 1;
+
if (GET_CODE (op) == CONST_INT)
return cint_ok_for_move (INTVAL (op));
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 006fcfbe369..f477979811e 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -131,13 +131,6 @@
(UNSPEC_INTERLO_V8HI 233)
(UNSPEC_INTERLO_V16QI 234)
(UNSPEC_INTERLO_V4SF 235)
- (UNSPEC_VCOND_V4SI 301)
- (UNSPEC_VCOND_V4SF 302)
- (UNSPEC_VCOND_V8HI 303)
- (UNSPEC_VCOND_V16QI 304)
- (UNSPEC_VCONDU_V4SI 305)
- (UNSPEC_VCONDU_V8HI 306)
- (UNSPEC_VCONDU_V16QI 307)
(UNSPEC_VMULWHUB 308)
(UNSPEC_VMULWLUB 309)
(UNSPEC_VMULWHSB 310)
@@ -1485,13 +1478,13 @@
[(set_attr "type" "vecfloat")])
(define_expand "vcondv4si"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")
- (match_operand:V4SI 3 "comparison_operator" "")
- (match_operand:V4SI 4 "register_operand" "v")
- (match_operand:V4SI 5 "register_operand" "v")
- ] UNSPEC_VCOND_V4SI))]
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (if_then_else:V4SI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V4SI 4 "register_operand" "v")
+ (match_operand:V4SI 5 "register_operand" "v")])
+ (match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1504,13 +1497,13 @@
")
(define_expand "vconduv4si"
- [(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SI 2 "register_operand" "v")
- (match_operand:V4SI 3 "comparison_operator" "")
- (match_operand:V4SI 4 "register_operand" "v")
- (match_operand:V4SI 5 "register_operand" "v")
- ] UNSPEC_VCONDU_V4SI))]
+ [(set (match_operand:V4SI 0 "register_operand" "=v")
+ (if_then_else:V4SI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V4SI 4 "register_operand" "v")
+ (match_operand:V4SI 5 "register_operand" "v")])
+ (match_operand:V4SI 1 "register_operand" "v")
+ (match_operand:V4SI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1523,13 +1516,13 @@
")
(define_expand "vcondv4sf"
- [(set (match_operand:V4SF 0 "register_operand" "=v")
- (unspec:V4SF [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V4SF 2 "register_operand" "v")
- (match_operand:V4SF 3 "comparison_operator" "")
- (match_operand:V4SF 4 "register_operand" "v")
- (match_operand:V4SF 5 "register_operand" "v")
- ] UNSPEC_VCOND_V4SF))]
+ [(set (match_operand:V4SF 0 "register_operand" "=v")
+ (if_then_else:V4SF
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V4SF 4 "register_operand" "v")
+ (match_operand:V4SF 5 "register_operand" "v")])
+ (match_operand:V4SF 1 "register_operand" "v")
+ (match_operand:V4SF 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1542,13 +1535,13 @@
")
(define_expand "vcondv8hi"
- [(set (match_operand:V4SF 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")
- (match_operand:V8HI 3 "comparison_operator" "")
- (match_operand:V8HI 4 "register_operand" "v")
- (match_operand:V8HI 5 "register_operand" "v")
- ] UNSPEC_VCOND_V8HI))]
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (if_then_else:V8HI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V8HI 4 "register_operand" "v")
+ (match_operand:V8HI 5 "register_operand" "v")])
+ (match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1561,13 +1554,13 @@
")
(define_expand "vconduv8hi"
- [(set (match_operand:V4SF 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V8HI 2 "register_operand" "v")
- (match_operand:V8HI 3 "comparison_operator" "")
- (match_operand:V8HI 4 "register_operand" "v")
- (match_operand:V8HI 5 "register_operand" "v")
- ] UNSPEC_VCONDU_V8HI))]
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (if_then_else:V8HI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V8HI 4 "register_operand" "v")
+ (match_operand:V8HI 5 "register_operand" "v")])
+ (match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1580,13 +1573,13 @@
")
(define_expand "vcondv16qi"
- [(set (match_operand:V4SF 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V16QI 2 "register_operand" "v")
- (match_operand:V16QI 3 "comparison_operator" "")
- (match_operand:V16QI 4 "register_operand" "v")
- (match_operand:V16QI 5 "register_operand" "v")
- ] UNSPEC_VCOND_V16QI))]
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (if_then_else:V16QI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V16QI 4 "register_operand" "v")
+ (match_operand:V16QI 5 "register_operand" "v")])
+ (match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
@@ -1599,13 +1592,13 @@
")
(define_expand "vconduv16qi"
- [(set (match_operand:V4SF 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:V4SI 1 "register_operand" "v")
- (match_operand:V16QI 2 "register_operand" "v")
- (match_operand:V16QI 3 "comparison_operator" "")
- (match_operand:V16QI 4 "register_operand" "v")
- (match_operand:V16QI 5 "register_operand" "v")
- ] UNSPEC_VCONDU_V16QI))]
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (if_then_else:V16QI
+ (match_operator 3 "comparison_operator"
+ [(match_operand:V16QI 4 "register_operand" "v")
+ (match_operand:V16QI 5 "register_operand" "v")])
+ (match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")))]
"TARGET_ALTIVEC"
"
{
diff --git a/gcc/config/rs6000/darwin-fallback.c b/gcc/config/rs6000/darwin-fallback.c
index c3a59c3ff5a..0fc56b0c445 100644
--- a/gcc/config/rs6000/darwin-fallback.c
+++ b/gcc/config/rs6000/darwin-fallback.c
@@ -1,5 +1,5 @@
/* Fallback frame-state unwinder for Darwin.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -27,6 +27,8 @@
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
+#ifdef __ppc__
+
#include "tconfig.h"
#include "tsystem.h"
#include "coretypes.h"
@@ -327,9 +329,9 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
static _Unwind_Ptr return_addr;
/* Yay! We're in a Libc that we understand, and it's made a
- system call. It'll be one of two kinds: either a Jaguar-style
- SYS_sigreturn, or a Panther-style 'syscall' call with 184, which
- is also SYS_sigreturn. */
+ system call. In Jaguar, this is a direct system call with value 103;
+ in Panther and Tiger it is a SYS_syscall call for system call number 184,
+ and in Leopard it is a direct syscall with number 184. */
if (gprs[0] == 0x67 /* SYS_SIGRETURN */)
{
@@ -339,7 +341,7 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
is_64 = (uctx->mcsize == UC_FLAVOR64_VEC_SIZE
|| uctx->mcsize == UC_FLAVOR64_SIZE);
}
- else if (gprs[0] == 0 && gprs[3] == 184)
+ else if (gprs[0] == 0 /* SYS_syscall */ && gprs[3] == 184)
{
int ctxstyle = gprs[5];
uctx = (struct gcc_ucontext *) gprs[4];
@@ -348,6 +350,15 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
|| ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
}
+ else if (gprs[0] == 184 /* SYS_sigreturn */)
+ {
+ int ctxstyle = gprs[4];
+ uctx = (struct gcc_ucontext *) gprs[3];
+ is_vector = (ctxstyle == UC_FLAVOR_VEC || ctxstyle == UC_FLAVOR64_VEC
+ || ctxstyle == UC_TRAD_VEC || ctxstyle == UC_TRAD64_VEC);
+ is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
+ || ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
+ }
else
return false;
@@ -469,3 +480,4 @@ _Unwind_fallback_frame_state_for (struct _Unwind_Context *context,
return false;
return handle_syscall (fs, gprs, _Unwind_GetCFA (context));
}
+#endif
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index 6aa7d65a40b..6608481fe5f 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -122,9 +122,12 @@
"%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}"
/* Determine a minimum version based on compiler options. */
-#define DARWIN_MINVERSION_SPEC \
- "%{m64:10.4; \
- shared-libgcc:10.3; \
+#define DARWIN_MINVERSION_SPEC \
+ "%{m64:%{fgnu-runtime:10.4; \
+ ,objective-c|,objc-cpp-output:10.5; \
+ ,objective-c++|,objective-c++-cpp-output:10.5; \
+ :10.4}; \
+ shared-libgcc:10.3; \
:10.1}"
#undef SUBTARGET_EXTRA_SPECS
@@ -409,8 +412,6 @@
#define MD_UNWIND_SUPPORT "config/rs6000/darwin-unwind.h"
#endif
-#define HAS_MD_FALLBACK_FRAME_STATE_FOR 1
-
/* True, iff we're generating fast turn around debugging code. When
true, we arrange for function prologues to start with 5 nops so
that gdb may insert code to redirect them, and for data to be
diff --git a/gcc/config/rs6000/dfp.md b/gcc/config/rs6000/dfp.md
new file mode 100644
index 00000000000..28f7b93eef1
--- /dev/null
+++ b/gcc/config/rs6000/dfp.md
@@ -0,0 +1,316 @@
+;; Decimal Floating Point (DFP) patterns.
+;; Copyright (C) 2007
+;; Free Software Foundation, Inc.
+;; Contributed by Ben Elliston (bje@au.ibm.com) and Peter Bergner
+;; (bergner@vnet.ibm.com).
+
+;; This file is part of GCC.
+
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 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, 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
+
+(define_expand "movdd"
+ [(set (match_operand:DD 0 "nonimmediate_operand" "")
+ (match_operand:DD 1 "any_operand" ""))]
+ ""
+ "{ rs6000_emit_move (operands[0], operands[1], DDmode); DONE; }")
+
+(define_split
+ [(set (match_operand:DD 0 "gpc_reg_operand" "")
+ (match_operand:DD 1 "const_int_operand" ""))]
+ "! TARGET_POWERPC64 && reload_completed
+ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) <= 31))"
+ [(set (match_dup 2) (match_dup 4))
+ (set (match_dup 3) (match_dup 1))]
+ "
+{
+ int endian = (WORDS_BIG_ENDIAN == 0);
+ HOST_WIDE_INT value = INTVAL (operands[1]);
+
+ operands[2] = operand_subword (operands[0], endian, 0, DDmode);
+ operands[3] = operand_subword (operands[0], 1 - endian, 0, DDmode);
+#if HOST_BITS_PER_WIDE_INT == 32
+ operands[4] = (value & 0x80000000) ? constm1_rtx : const0_rtx;
+#else
+ operands[4] = GEN_INT (value >> 32);
+ operands[1] = GEN_INT (((value & 0xffffffff) ^ 0x80000000) - 0x80000000);
+#endif
+}")
+
+(define_split
+ [(set (match_operand:DD 0 "gpc_reg_operand" "")
+ (match_operand:DD 1 "const_double_operand" ""))]
+ "! TARGET_POWERPC64 && reload_completed
+ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) <= 31))"
+ [(set (match_dup 2) (match_dup 4))
+ (set (match_dup 3) (match_dup 5))]
+ "
+{
+ int endian = (WORDS_BIG_ENDIAN == 0);
+ long l[2];
+ REAL_VALUE_TYPE rv;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DECIMAL64 (rv, l);
+
+ operands[2] = operand_subword (operands[0], endian, 0, DDmode);
+ operands[3] = operand_subword (operands[0], 1 - endian, 0, DDmode);
+ operands[4] = gen_int_mode (l[endian], SImode);
+ operands[5] = gen_int_mode (l[1 - endian], SImode);
+}")
+
+(define_split
+ [(set (match_operand:DD 0 "gpc_reg_operand" "")
+ (match_operand:DD 1 "const_double_operand" ""))]
+ "TARGET_POWERPC64 && reload_completed
+ && ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) <= 31))"
+ [(set (match_dup 2) (match_dup 3))]
+ "
+{
+ int endian = (WORDS_BIG_ENDIAN == 0);
+ long l[2];
+ REAL_VALUE_TYPE rv;
+#if HOST_BITS_PER_WIDE_INT >= 64
+ HOST_WIDE_INT val;
+#endif
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DECIMAL64 (rv, l);
+
+ operands[2] = gen_lowpart (DImode, operands[0]);
+ /* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
+#if HOST_BITS_PER_WIDE_INT >= 64
+ val = ((HOST_WIDE_INT)(unsigned long)l[endian] << 32
+ | ((HOST_WIDE_INT)(unsigned long)l[1 - endian]));
+
+ operands[3] = gen_int_mode (val, DImode);
+#else
+ operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
+#endif
+}")
+
+;; Don't have reload use general registers to load a constant. First,
+;; it might not work if the output operand is the equivalent of
+;; a non-offsettable memref, but also it is less efficient than loading
+;; the constant into an FP register, since it will probably be used there.
+;; The "??" is a kludge until we can figure out a more reasonable way
+;; of handling these non-offsettable values.
+(define_insn "*movdd_hardfloat32"
+ [(set (match_operand:DD 0 "nonimmediate_operand" "=!r,??r,m,f,f,m,!r,!r,!r")
+ (match_operand:DD 1 "input_operand" "r,m,r,f,m,f,G,H,F"))]
+ "! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
+ && (gpc_reg_operand (operands[0], DDmode)
+ || gpc_reg_operand (operands[1], DDmode))"
+ "*
+{
+ switch (which_alternative)
+ {
+ default:
+ gcc_unreachable ();
+ case 0:
+ /* We normally copy the low-numbered register first. However, if
+ the first register operand 0 is the same as the second register
+ of operand 1, we must copy in the opposite order. */
+ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+ return \"mr %L0,%L1\;mr %0,%1\";
+ else
+ return \"mr %0,%1\;mr %L0,%L1\";
+ case 1:
+ if (rs6000_offsettable_memref_p (operands[1])
+ || (GET_CODE (operands[1]) == MEM
+ && (GET_CODE (XEXP (operands[1], 0)) == LO_SUM
+ || GET_CODE (XEXP (operands[1], 0)) == PRE_INC
+ || GET_CODE (XEXP (operands[1], 0)) == PRE_DEC)))
+ {
+ /* If the low-address word is used in the address, we must load
+ it last. Otherwise, load it first. Note that we cannot have
+ auto-increment in that case since the address register is
+ known to be dead. */
+ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+ operands[1], 0))
+ return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
+ else
+ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
+ }
+ else
+ {
+ rtx addreg;
+
+ addreg = find_addr_reg (XEXP (operands[1], 0));
+ if (refers_to_regno_p (REGNO (operands[0]),
+ REGNO (operands[0]) + 1,
+ operands[1], 0))
+ {
+ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
+ output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
+ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
+ return \"{lx|lwzx} %0,%1\";
+ }
+ else
+ {
+ output_asm_insn (\"{lx|lwzx} %0,%1\", operands);
+ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
+ output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
+ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
+ return \"\";
+ }
+ }
+ case 2:
+ if (rs6000_offsettable_memref_p (operands[0])
+ || (GET_CODE (operands[0]) == MEM
+ && (GET_CODE (XEXP (operands[0], 0)) == LO_SUM
+ || GET_CODE (XEXP (operands[0], 0)) == PRE_INC
+ || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)))
+ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
+ else
+ {
+ rtx addreg;
+
+ addreg = find_addr_reg (XEXP (operands[0], 0));
+ output_asm_insn (\"{stx|stwx} %1,%0\", operands);
+ output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
+ output_asm_insn (\"{stx|stwx} %L1,%0\", operands);
+ output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
+ return \"\";
+ }
+ case 3:
+ return \"fmr %0,%1\";
+ case 4:
+ return \"lfd%U1%X1 %0,%1\";
+ case 5:
+ return \"stfd%U0%X0 %1,%0\";
+ case 6:
+ case 7:
+ case 8:
+ return \"#\";
+ }
+}"
+ [(set_attr "type" "two,load,store,fp,fpload,fpstore,*,*,*")
+ (set_attr "length" "8,16,16,4,4,4,8,12,16")])
+
+(define_insn "*movdd_softfloat32"
+ [(set (match_operand:DD 0 "nonimmediate_operand" "=r,r,m,r,r,r")
+ (match_operand:DD 1 "input_operand" "r,m,r,G,H,F"))]
+ "! TARGET_POWERPC64 && TARGET_SOFT_FLOAT
+ && (gpc_reg_operand (operands[0], DDmode)
+ || gpc_reg_operand (operands[1], DDmode))"
+ "*
+{
+ switch (which_alternative)
+ {
+ default:
+ gcc_unreachable ();
+ case 0:
+ /* We normally copy the low-numbered register first. However, if
+ the first register operand 0 is the same as the second register of
+ operand 1, we must copy in the opposite order. */
+ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+ return \"mr %L0,%L1\;mr %0,%1\";
+ else
+ return \"mr %0,%1\;mr %L0,%L1\";
+ case 1:
+ /* If the low-address word is used in the address, we must load
+ it last. Otherwise, load it first. Note that we cannot have
+ auto-increment in that case since the address register is
+ known to be dead. */
+ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+ operands[1], 0))
+ return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
+ else
+ return \"{l%U1|lwz%U1} %0,%1\;{l|lwz} %L0,%L1\";
+ case 2:
+ return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
+ case 3:
+ case 4:
+ case 5:
+ return \"#\";
+ }
+}"
+ [(set_attr "type" "two,load,store,*,*,*")
+ (set_attr "length" "8,8,8,8,12,16")])
+
+; ld/std require word-aligned displacements -> 'Y' constraint.
+; List Y->r and r->Y before r->r for reload.
+(define_insn "*movdd_hardfloat64"
+ [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,f,f,m,*c*l,!r,*h,!r,!r,!r")
+ (match_operand:DD 1 "input_operand" "r,Y,r,f,m,f,r,h,0,G,H,F"))]
+ "TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
+ && (gpc_reg_operand (operands[0], DDmode)
+ || gpc_reg_operand (operands[1], DDmode))"
+ "@
+ std%U0%X0 %1,%0
+ ld%U1%X1 %0,%1
+ mr %0,%1
+ fmr %0,%1
+ lfd%U1%X1 %0,%1
+ stfd%U0%X0 %1,%0
+ mt%0 %1
+ mf%1 %0
+ {cror 0,0,0|nop}
+ #
+ #
+ #"
+ [(set_attr "type" "store,load,*,fp,fpload,fpstore,mtjmpr,mfjmpr,*,*,*,*")
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,8,12,16")])
+
+(define_insn "*movdd_softfloat64"
+ [(set (match_operand:DD 0 "nonimmediate_operand" "=r,Y,r,cl,r,r,r,r,*h")
+ (match_operand:DD 1 "input_operand" "Y,r,r,r,h,G,H,F,0"))]
+ "TARGET_POWERPC64 && (TARGET_SOFT_FLOAT || !TARGET_FPRS)
+ && (gpc_reg_operand (operands[0], DDmode)
+ || gpc_reg_operand (operands[1], DDmode))"
+ "@
+ ld%U1%X1 %0,%1
+ std%U0%X0 %1,%0
+ mr %0,%1
+ mt%0 %1
+ mf%1 %0
+ #
+ #
+ #
+ {cror 0,0,0|nop}"
+ [(set_attr "type" "load,store,*,mtjmpr,mfjmpr,*,*,*,*")
+ (set_attr "length" "4,4,4,4,4,8,12,16,4")])
+
+(define_expand "movtd"
+ [(set (match_operand:TD 0 "general_operand" "")
+ (match_operand:TD 1 "any_operand" ""))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS"
+ "{ rs6000_emit_move (operands[0], operands[1], TDmode); DONE; }")
+
+; It's important to list the o->f and f->o moves before f->f because
+; otherwise reload, given m->f, will try to pick f->f and reload it,
+; which doesn't make progress. Likewise r->Y must be before r->r.
+(define_insn_and_split "*movtd_internal"
+ [(set (match_operand:TD 0 "nonimmediate_operand" "=o,f,f,r,Y,r")
+ (match_operand:TD 1 "input_operand" "f,o,f,YGHF,r,r"))]
+ "TARGET_HARD_FLOAT && TARGET_FPRS
+ && (gpc_reg_operand (operands[0], TDmode)
+ || gpc_reg_operand (operands[1], TDmode))"
+ "#"
+ "&& reload_completed"
+ [(pc)]
+{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
+ [(set_attr "length" "8,8,8,20,20,16")])
+
diff --git a/gcc/config/rs6000/linux-unwind.h b/gcc/config/rs6000/linux-unwind.h
index 182bb6d9f34..b6262510a7b 100644
--- a/gcc/config/rs6000/linux-unwind.h
+++ b/gcc/config/rs6000/linux-unwind.h
@@ -301,6 +301,17 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
fs->regs.reg[VRSAVE_REGNO].loc.offset = (long) &vregs->vsave - new_cfa;
}
+ /* If we have SPE register high-parts... we check at compile-time to
+ avoid expanding the code for all other PowerPC. */
+#ifdef __SPE__
+ for (i = 0; i < 32; i++)
+ {
+ fs->regs.reg[i + FIRST_PSEUDO_REGISTER - 1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + FIRST_PSEUDO_REGISTER - 1].loc.offset
+ = (long) &regs->vregs - new_cfa + 4 * i;
+ }
+#endif
+
return _URC_NO_REASON;
}
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 8937dcd7b72..00853fe34d7 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -165,7 +165,7 @@ extern int dot_symbols;
#define ASM_SPEC64 "-a64"
#define ASM_SPEC_COMMON "%(asm_cpu) \
-%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
+%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
%{v:-V} %{Qy:} %{!Qn:-Qy} %{Wa,*:%*} \
%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}"
diff --git a/gcc/config/rs6000/lynx.h b/gcc/config/rs6000/lynx.h
index ab2d16f24ca..0dbd747aab5 100644
--- a/gcc/config/rs6000/lynx.h
+++ b/gcc/config/rs6000/lynx.h
@@ -54,8 +54,7 @@
#undef ASM_SPEC
#define ASM_SPEC \
"%(asm_cpu) \
- %{.s: %{mregnames} %{mno-regnames}} \
- %{.S: %{mregnames} %{mno-regnames}}"
+ %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}"
#undef STARTFILE_SPEC
#undef ENDFILE_SPEC
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 7a61d6c4b6f..d80d061c857 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -656,13 +656,11 @@ static rtx rs6000_emit_set_long_const (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
static bool rs6000_return_in_memory (tree, tree);
static void rs6000_file_start (void);
#if TARGET_ELF
-static unsigned int rs6000_elf_section_type_flags (tree, const char *, int);
+static int rs6000_elf_reloc_rw_mask (void);
static void rs6000_elf_asm_out_constructor (rtx, int);
static void rs6000_elf_asm_out_destructor (rtx, int);
static void rs6000_elf_end_indicate_exec_stack (void) ATTRIBUTE_UNUSED;
static void rs6000_elf_asm_init_sections (void);
-static section *rs6000_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
-static void rs6000_elf_unique_section (tree, int);
static section *rs6000_elf_select_rtx_section (enum machine_mode, rtx,
unsigned HOST_WIDE_INT);
static void rs6000_elf_encode_section_info (tree, rtx, int)
@@ -673,6 +671,7 @@ static bool rs6000_use_blocks_for_constant_p (enum machine_mode, rtx);
static void rs6000_xcoff_asm_output_anchor (rtx);
static void rs6000_xcoff_asm_globalize_label (FILE *, const char *);
static void rs6000_xcoff_asm_init_sections (void);
+static int rs6000_xcoff_reloc_rw_mask (void);
static void rs6000_xcoff_asm_named_section (const char *, unsigned int, tree);
static section *rs6000_xcoff_select_section (tree, int,
unsigned HOST_WIDE_INT);
@@ -765,6 +764,7 @@ static rtx generate_set_vrsave (rtx, rs6000_stack_t *, int);
int easy_vector_constant (rtx, enum machine_mode);
static bool rs6000_is_opaque_type (tree);
static rtx rs6000_dwarf_register_span (rtx);
+static void rs6000_init_dwarf_reg_sizes_extra (tree);
static rtx rs6000_legitimize_tls_address (rtx, enum tls_model);
static void rs6000_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
static rtx rs6000_tls_get_addr (void);
@@ -1028,6 +1028,9 @@ static const char alt_reg_names[][8] =
#undef TARGET_DWARF_REGISTER_SPAN
#define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span
+#undef TARGET_INIT_DWARF_REG_SIZES_EXTRA
+#define TARGET_INIT_DWARF_REG_SIZES_EXTRA rs6000_init_dwarf_reg_sizes_extra
+
/* On rs6000, function arguments are promoted, as are function return
values. */
#undef TARGET_PROMOTE_FUNCTION_ARGS
@@ -1127,11 +1130,11 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
return INT_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1);
/* The float registers can only hold floating modes and DImode.
- This also excludes decimal float modes. */
+ This excludes the 32-bit decimal float mode for now. */
if (FP_REGNO_P (regno))
return
(SCALAR_FLOAT_MODE_P (mode)
- && !DECIMAL_FLOAT_MODE_P (mode)
+ && mode != SDmode
&& FP_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1))
|| (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD);
@@ -2310,7 +2313,10 @@ num_insns_constant (rtx op, enum machine_mode mode)
REAL_VALUE_TYPE rv;
REAL_VALUE_FROM_CONST_DOUBLE (rv, op);
- REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ if (DECIMAL_FLOAT_MODE_P (mode))
+ REAL_VALUE_TO_TARGET_DECIMAL64 (rv, l);
+ else
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
high = l[WORDS_BIG_ENDIAN == 0];
low = l[WORDS_BIG_ENDIAN != 0];
}
@@ -3050,6 +3056,7 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
return SPE_CONST_OFFSET_OK (offset);
case DFmode:
+ case DDmode:
if (TARGET_E500_DOUBLE)
return SPE_CONST_OFFSET_OK (offset);
@@ -3062,7 +3069,7 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
if (TARGET_E500_DOUBLE)
return SPE_CONST_OFFSET_OK (offset);
- if (mode == DFmode || !TARGET_POWERPC64)
+ if (mode == DFmode || mode == DDmode || !TARGET_POWERPC64)
extra = 4;
else if (offset & 3)
return false;
@@ -3074,7 +3081,8 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, int strict)
&& SPE_CONST_OFFSET_OK (offset + 8));
case TImode:
- if (mode == TFmode || !TARGET_POWERPC64)
+ case TDmode:
+ if (mode == TFmode || mode == TDmode || !TARGET_POWERPC64)
extra = 12;
else if (offset & 3)
return false;
@@ -3229,8 +3237,9 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
&& GET_MODE_NUNITS (mode) == 1
&& ((TARGET_HARD_FLOAT && TARGET_FPRS)
|| TARGET_POWERPC64
- || (((mode != DImode && mode != DFmode) || TARGET_E500_DOUBLE)
- && mode != TFmode))
+ || (((mode != DImode && mode != DFmode && mode != DDmode)
+ || TARGET_E500_DOUBLE)
+ && mode != TFmode && mode != TDmode))
&& (TARGET_POWERPC64 || mode != DImode)
&& mode != TImode)
{
@@ -3251,6 +3260,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
}
else if (SPE_VECTOR_MODE (mode)
|| (TARGET_E500_DOUBLE && (mode == DFmode || mode == TFmode
+ || mode == DDmode || mode == TDmode
|| mode == DImode)))
{
if (mode == DImode)
@@ -3696,10 +3706,11 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
&& DEFAULT_ABI == ABI_V4
&& !flag_pic
#endif
- /* Don't do this for TFmode, since the result isn't offsettable.
+ /* Don't do this for TFmode or TDmode, since the result isn't offsettable.
The same goes for DImode without 64-bit gprs and DFmode
without fprs. */
&& mode != TFmode
+ && mode != TDmode
&& (mode != DImode || TARGET_POWERPC64)
&& (mode != DFmode || TARGET_POWERPC64
|| (TARGET_FPRS && TARGET_HARD_FLOAT)))
@@ -3769,8 +3780,8 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
word aligned.
For modes spanning multiple registers (DFmode in 32-bit GPRs,
- 32-bit DImode, TImode, TFmode), indexed addressing cannot be used because
- adjacent memory cells are accessed by adding word-sized offsets
+ 32-bit DImode, TImode, TFmode, TDmode), indexed addressing cannot be used
+ because adjacent memory cells are accessed by adding word-sized offsets
during assembly output. */
int
rs6000_legitimate_address (enum machine_mode mode, rtx x, int reg_ok_strict)
@@ -3791,6 +3802,7 @@ rs6000_legitimate_address (enum machine_mode mode, rtx x, int reg_ok_strict)
&& !ALTIVEC_VECTOR_MODE (mode)
&& !SPE_VECTOR_MODE (mode)
&& mode != TFmode
+ && mode != TDmode
/* Restrict addressing for DI because of our SUBREG hackery. */
&& !(TARGET_E500_DOUBLE && (mode == DFmode || mode == TFmode
|| mode == DImode))
@@ -3813,6 +3825,7 @@ rs6000_legitimate_address (enum machine_mode mode, rtx x, int reg_ok_strict)
return 1;
if (mode != TImode
&& mode != TFmode
+ && mode != TDmode
&& ((TARGET_HARD_FLOAT && TARGET_FPRS)
|| TARGET_POWERPC64
|| ((mode != DFmode || TARGET_E500_DOUBLE) && mode != TFmode))
@@ -4169,7 +4182,7 @@ rs6000_emit_set_long_const (rtx dest, HOST_WIDE_INT c1, HOST_WIDE_INT c2)
}
/* Helper for the following. Get rid of [r+r] memory refs
- in cases where it won't work (TImode, TFmode). */
+ in cases where it won't work (TImode, TFmode, TDmode). */
static void
rs6000_eliminate_indexed_memrefs (rtx operands[2])
@@ -4333,10 +4346,12 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
break;
case TFmode:
+ case TDmode:
rs6000_eliminate_indexed_memrefs (operands);
/* fall through */
case DFmode:
+ case DDmode:
case SFmode:
if (CONSTANT_P (operands[1])
&& ! easy_fp_constant (operands[1], mode))
@@ -4548,7 +4563,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
/* Nonzero if we can use a floating-point register to pass this arg. */
#define USE_FP_FOR_ARG_P(CUM,MODE,TYPE) \
(SCALAR_FLOAT_MODE_P (MODE) \
- && !DECIMAL_FLOAT_MODE_P (MODE) \
+ && (MODE) != SDmode \
&& (CUM)->fregno <= FP_ARG_MAX_REG \
&& TARGET_HARD_FLOAT && TARGET_FPRS)
@@ -4790,7 +4805,7 @@ function_arg_boundary (enum machine_mode mode, tree type)
&& (GET_MODE_SIZE (mode) == 8
|| (TARGET_HARD_FLOAT
&& TARGET_FPRS
- && mode == TFmode)))
+ && (mode == TFmode || mode == TDmode))))
return 64;
else if (SPE_VECTOR_MODE (mode)
|| (type && TREE_CODE (type) == VECTOR_TYPE
@@ -5028,14 +5043,20 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
{
if (TARGET_HARD_FLOAT && TARGET_FPRS
&& (mode == SFmode || mode == DFmode
+ || mode == DDmode || mode == TDmode
|| (mode == TFmode && !TARGET_IEEEQUAD)))
{
- if (cum->fregno + (mode == TFmode ? 1 : 0) <= FP_ARG_V4_MAX_REG)
+ /* _Decimal128 must use an even/odd register pair. */
+ if (mode == TDmode && cum->fregno % 2)
+ cum->fregno++;
+
+ if (cum->fregno + (mode == TFmode || mode == TDmode ? 1 : 0)
+ <= FP_ARG_V4_MAX_REG)
cum->fregno += (GET_MODE_SIZE (mode) + 7) >> 3;
else
{
cum->fregno = FP_ARG_V4_MAX_REG + 1;
- if (mode == DFmode || mode == TFmode)
+ if (mode == DFmode || mode == TFmode || mode == DDmode || mode == TDmode)
cum->words += cum->words & 1;
cum->words += rs6000_arg_size (mode, type);
}
@@ -5087,7 +5108,7 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
cum->words = align_words + n_words;
if (SCALAR_FLOAT_MODE_P (mode)
- && !DECIMAL_FLOAT_MODE_P (mode)
+ && mode != SDmode
&& TARGET_HARD_FLOAT && TARGET_FPRS)
cum->fregno += (GET_MODE_SIZE (mode) + 7) >> 3;
@@ -5306,7 +5327,7 @@ rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *cum, tree type,
= gen_rtx_EXPR_LIST (VOIDmode,
gen_rtx_REG (mode, cum->fregno++),
GEN_INT (bitpos / BITS_PER_UNIT));
- if (mode == TFmode)
+ if (mode == TFmode || mode == TDmode)
cum->fregno++;
}
else if (cum->named && USE_ALTIVEC_FOR_ARG_P (cum, mode, ftype, 1))
@@ -5567,8 +5588,10 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
else if (TARGET_SPE_ABI && TARGET_SPE
&& (SPE_VECTOR_MODE (mode)
|| (TARGET_E500_DOUBLE && (mode == DFmode
+ || mode == DDmode
|| mode == DCmode
|| mode == TFmode
+ || mode == TDmode
|| mode == TCmode))))
return rs6000_spe_function_arg (cum, mode, type);
@@ -5576,9 +5599,15 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
{
if (TARGET_HARD_FLOAT && TARGET_FPRS
&& (mode == SFmode || mode == DFmode
- || (mode == TFmode && !TARGET_IEEEQUAD)))
+ || (mode == TFmode && !TARGET_IEEEQUAD)
+ || mode == DDmode || mode == TDmode))
{
- if (cum->fregno + (mode == TFmode ? 1 : 0) <= FP_ARG_V4_MAX_REG)
+ /* _Decimal128 must use an even/odd register pair. */
+ if (mode == TDmode && cum->fregno % 2)
+ cum->fregno++;
+
+ if (cum->fregno + (mode == TFmode || mode == TDmode ? 1 : 0)
+ <= FP_ARG_V4_MAX_REG)
return gen_rtx_REG (mode, cum->fregno);
else
return NULL_RTX;
@@ -5621,10 +5650,11 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
{
/* Currently, we only ever need one reg here because complex
doubles are split. */
- gcc_assert (cum->fregno == FP_ARG_MAX_REG && fmode == TFmode);
+ gcc_assert (cum->fregno == FP_ARG_MAX_REG
+ && (fmode == TFmode || fmode == TDmode));
- /* Long double split over regs and memory. */
- fmode = DFmode;
+ /* Long double or _Decimal128 split over regs and memory. */
+ fmode = DECIMAL_FLOAT_MODE_P (fmode) ? DDmode : DFmode;
}
/* Do we also need to pass this arg in the parameter save
@@ -6179,6 +6209,7 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
tree lab_false, lab_over, addr;
int align;
tree ptrtype = build_pointer_type (type);
+ int regalign = 0;
if (pass_by_reference (NULL, TYPE_MODE (type), type, false))
{
@@ -6235,7 +6266,9 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
if (TARGET_HARD_FLOAT && TARGET_FPRS
&& (TYPE_MODE (type) == SFmode
|| TYPE_MODE (type) == DFmode
- || TYPE_MODE (type) == TFmode))
+ || TYPE_MODE (type) == TFmode
+ || TYPE_MODE (type) == DDmode
+ || TYPE_MODE (type) == TDmode))
{
/* FP args go in FP registers, if present. */
reg = fpr;
@@ -6276,10 +6309,19 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
u = reg;
if (n_reg == 2 && reg == gpr)
{
+ regalign = 1;
u = build2 (BIT_AND_EXPR, TREE_TYPE (reg), reg,
size_int (n_reg - 1));
u = build2 (POSTINCREMENT_EXPR, TREE_TYPE (reg), reg, u);
}
+ /* _Decimal128 is passed in even/odd fpr pairs; the stored
+ reg number is 0 for f1, so we want to make it odd. */
+ else if (reg == fpr && TYPE_MODE (type) == TDmode)
+ {
+ regalign = 1;
+ t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg, size_int (1));
+ u = build2 (MODIFY_EXPR, void_type_node, reg, t);
+ }
t = fold_convert (TREE_TYPE (reg), size_int (8 - n_reg + 1));
t = build2 (GE_EXPR, boolean_type_node, u, t);
@@ -6305,10 +6347,10 @@ rs6000_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
t = build1 (LABEL_EXPR, void_type_node, lab_false);
append_to_statement_list (t, pre_p);
- if ((n_reg == 2 && reg != gpr) || n_reg > 2)
+ if ((n_reg == 2 && !regalign) || n_reg > 2)
{
/* Ensure that we don't find any more args in regs.
- Alignment has taken care of the n_reg == 2 gpr case. */
+ Alignment has taken care of for special cases. */
t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (reg), reg, size_int (8));
gimplify_and_add (t, pre_p);
}
@@ -12919,7 +12961,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
mode = GET_MODE (dst);
nregs = hard_regno_nregs[reg][mode];
if (FP_REGNO_P (reg))
- reg_mode = DFmode;
+ reg_mode = DECIMAL_FLOAT_MODE_P (mode) ? DDmode : DFmode;
else if (ALTIVEC_REGNO_P (reg))
reg_mode = V16QImode;
else if (TARGET_E500_DOUBLE && mode == TFmode)
@@ -15853,7 +15895,9 @@ rs6000_output_function_epilogue (FILE *file,
break;
case DFmode:
+ case DDmode:
case TFmode:
+ case TDmode:
bits = 0x3;
break;
@@ -18883,37 +18927,6 @@ rs6000_elf_select_rtx_section (enum machine_mode mode, rtx x,
else
return default_elf_select_rtx_section (mode, x, align);
}
-
-/* Implement TARGET_ASM_SELECT_SECTION for ELF targets. */
-
-static section *
-rs6000_elf_select_section (tree decl, int reloc,
- unsigned HOST_WIDE_INT align)
-{
- /* Pretend that we're always building for a shared library when
- ABI_AIX, because otherwise we end up with dynamic relocations
- in read-only sections. This happens for function pointers,
- references to vtables in typeinfo, and probably other cases. */
- return default_elf_select_section_1 (decl, reloc, align,
- flag_pic || DEFAULT_ABI == ABI_AIX);
-}
-
-/* A C statement to build up a unique section name, expressed as a
- STRING_CST node, and assign it to DECL_SECTION_NAME (decl).
- RELOC indicates whether the initial value of EXP requires
- link-time relocations. If you do not define this macro, GCC will use
- the symbol name prefixed by `.' as the section name. Note - this
- macro can now be called for uninitialized data items as well as
- initialized data and functions. */
-
-static void
-rs6000_elf_unique_section (tree decl, int reloc)
-{
- /* As above, pretend that we're always building for a shared library
- when ABI_AIX, to avoid dynamic relocations in read-only sections. */
- default_unique_section_1 (decl, reloc,
- flag_pic || DEFAULT_ABI == ABI_AIX);
-}
/* For a SYMBOL_REF, set generic flags and then perform some
target-specific processing.
@@ -19392,11 +19405,15 @@ rs6000_darwin_file_start (void)
#endif /* TARGET_MACHO */
#if TARGET_ELF
-static unsigned int
-rs6000_elf_section_type_flags (tree decl, const char *name, int reloc)
+static int
+rs6000_elf_reloc_rw_mask (void)
{
- return default_section_type_flags_1 (decl, name, reloc,
- flag_pic || DEFAULT_ABI == ABI_AIX);
+ if (flag_pic)
+ return 3;
+ else if (DEFAULT_ABI == ABI_AIX)
+ return 2;
+ else
+ return 0;
}
/* Record an element in the table of global constructors. SYMBOL is
@@ -19634,6 +19651,12 @@ rs6000_xcoff_asm_init_sections (void)
exception_section = data_section;
}
+static int
+rs6000_xcoff_reloc_rw_mask (void)
+{
+ return 3;
+}
+
static void
rs6000_xcoff_asm_named_section (const char *name, unsigned int flags,
tree decl ATTRIBUTE_UNUSED)
@@ -19657,7 +19680,7 @@ static section *
rs6000_xcoff_select_section (tree decl, int reloc,
unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
{
- if (decl_readonly_section_1 (decl, reloc, 1))
+ if (decl_readonly_section (decl, reloc))
{
if (TREE_PUBLIC (decl))
return read_only_data_section;
@@ -19729,7 +19752,7 @@ static unsigned int
rs6000_xcoff_section_type_flags (tree decl, const char *name, int reloc)
{
unsigned int align;
- unsigned int flags = default_section_type_flags_1 (decl, name, reloc, 1);
+ unsigned int flags = default_section_type_flags (decl, name, reloc);
/* Align to at least UNIT size. */
if (flags & SECTION_CODE)
@@ -20192,7 +20215,7 @@ rs6000_register_move_cost (enum machine_mode mode,
/* Moving between two similar registers is just one instruction. */
else if (reg_classes_intersect_p (to, from))
- return mode == TFmode ? 4 : 2;
+ return (mode == TFmode || mode == TDmode) ? 4 : 2;
/* Everything else has to go through GENERAL_REGS. */
else
@@ -20517,15 +20540,34 @@ rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
GEN_INT (12))));
}
- if ((INTEGRAL_TYPE_P (valtype)
- && TYPE_PRECISION (valtype) < BITS_PER_WORD)
+ mode = TYPE_MODE (valtype);
+ if ((INTEGRAL_TYPE_P (valtype) && GET_MODE_BITSIZE (mode) < BITS_PER_WORD)
|| POINTER_TYPE_P (valtype))
mode = TARGET_32BIT ? SImode : DImode;
- else
- mode = TYPE_MODE (valtype);
if (DECIMAL_FLOAT_MODE_P (mode))
- regno = GP_ARG_RETURN;
+ {
+ if (TARGET_HARD_FLOAT && TARGET_FPRS)
+ {
+ switch (mode)
+ {
+ default:
+ gcc_unreachable ();
+ case SDmode:
+ regno = GP_ARG_RETURN;
+ break;
+ case DDmode:
+ regno = FP_ARG_RETURN;
+ break;
+ case TDmode:
+ /* Use f2:f3 specified by the ABI. */
+ regno = FP_ARG_RETURN + 1;
+ break;
+ }
+ }
+ else
+ regno = GP_ARG_RETURN;
+ }
else if (SCALAR_FLOAT_TYPE_P (valtype) && TARGET_HARD_FLOAT && TARGET_FPRS)
regno = FP_ARG_RETURN;
else if (TREE_CODE (valtype) == COMPLEX_TYPE
@@ -20567,7 +20609,28 @@ rs6000_libcall_value (enum machine_mode mode)
}
if (DECIMAL_FLOAT_MODE_P (mode))
- regno = GP_ARG_RETURN;
+ {
+ if (TARGET_HARD_FLOAT && TARGET_FPRS)
+ {
+ switch (mode)
+ {
+ default:
+ gcc_unreachable ();
+ case SDmode:
+ regno = GP_ARG_RETURN;
+ break;
+ case DDmode:
+ regno = FP_ARG_RETURN;
+ break;
+ case TDmode:
+ /* Use f2:f3 specified by the ABI. */
+ regno = FP_ARG_RETURN + 1;
+ break;
+ }
+ }
+ else
+ regno = GP_ARG_RETURN;
+ }
else if (SCALAR_FLOAT_MODE_P (mode)
&& TARGET_HARD_FLOAT && TARGET_FPRS)
regno = FP_ARG_RETURN;
@@ -20657,6 +20720,30 @@ rs6000_dwarf_register_span (rtx reg)
gen_rtx_REG (SImode, regno + 1200)));
}
+/* Fill in sizes for SPE register high parts in table used by unwinder. */
+
+static void
+rs6000_init_dwarf_reg_sizes_extra (tree address)
+{
+ if (TARGET_SPE)
+ {
+ int i;
+ enum machine_mode mode = TYPE_MODE (char_type_node);
+ rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
+ rtx mem = gen_rtx_MEM (BLKmode, addr);
+ rtx value = gen_int_mode (4, mode);
+
+ for (i = 1201; i < 1232; i++)
+ {
+ int column = DWARF_REG_TO_UNWIND_COLUMN (i);
+ HOST_WIDE_INT offset
+ = DWARF_FRAME_REGNUM (column) * GET_MODE_SIZE (mode);
+
+ emit_move_insn (adjust_address (mem, mode, offset), value);
+ }
+ }
+}
+
/* Map internal gcc register numbers to DWARF2 register numbers. */
unsigned int
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 54202e489f4..75f064a7780 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -1493,7 +1493,7 @@
[(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r,?r,r")
(plus:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r,b,r,b")
(match_operand:GPR 2 "add_operand" "r,I,I,L")))]
- ""
+ "!DECIMAL_FLOAT_MODE_P (GET_MODE (operands[0])) && !DECIMAL_FLOAT_MODE_P (GET_MODE (operands[1]))"
"@
{cax|add} %0,%1,%2
{cal %0,%2(%1)|addi %0,%1,%2}
@@ -14531,3 +14531,4 @@
(include "sync.md")
(include "altivec.md")
(include "spe.md")
+(include "dfp.md")
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index d7c10028a79..1aad6afe6d7 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -1,6 +1,6 @@
/* Target definitions for GNU compiler for PowerPC running System V.4
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Cygnus Support.
This file is part of GCC.
@@ -364,11 +364,10 @@ do { \
/* Override default elf definitions. */
#define TARGET_ASM_INIT_SECTIONS rs6000_elf_asm_init_sections
+#undef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK rs6000_elf_reloc_rw_mask
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION rs6000_elf_select_rtx_section
-#undef TARGET_ASM_SELECT_SECTION
-#define TARGET_ASM_SELECT_SECTION rs6000_elf_select_section
-#define TARGET_ASM_UNIQUE_SECTION rs6000_elf_unique_section
/* Return nonzero if this entry is to be written into the constant pool
in a special way. We do so if this is a SYMBOL_REF, LABEL_REF or a CONST
@@ -533,7 +532,6 @@ extern int fixuplabelno;
#define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info
#define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p
-#define TARGET_SECTION_TYPE_FLAGS rs6000_elf_section_type_flags
/* The ELF version doesn't encode [DS] or whatever at the end of symbols. */
@@ -580,7 +578,7 @@ extern int fixuplabelno;
/* Override svr4.h definition. */
#undef ASM_SPEC
#define ASM_SPEC "%(asm_cpu) \
-%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
+%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
%{memb|msdata|msdata=eabi: -memb} \
diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index f15369c7ab2..2bd7872f8c3 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -84,7 +84,7 @@ VXWORKS_ADDITIONAL_CPP_SPEC
#define ASM_SPEC \
"%(asm_cpu) \
- %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
+ %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
%{v:-v} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} -mbig"
diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h
index 6a954655b04..ebf79b51e9d 100644
--- a/gcc/config/rs6000/xcoff.h
+++ b/gcc/config/rs6000/xcoff.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for some generic XCOFF file format
- Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -88,6 +88,7 @@
#define TARGET_ASM_OUTPUT_ANCHOR rs6000_xcoff_asm_output_anchor
#define TARGET_ASM_GLOBALIZE_LABEL rs6000_xcoff_asm_globalize_label
#define TARGET_ASM_INIT_SECTIONS rs6000_xcoff_asm_init_sections
+#define TARGET_ASM_RELOC_RW_MASK rs6000_xcoff_reloc_rw_mask
#define TARGET_ASM_NAMED_SECTION rs6000_xcoff_asm_named_section
#define TARGET_ASM_SELECT_SECTION rs6000_xcoff_select_section
#define TARGET_ASM_SELECT_RTX_SECTION rs6000_xcoff_select_rtx_section
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index ad73869888c..784b846f521 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -1437,9 +1437,7 @@ override_options (void)
if (s390_stack_size)
{
- if (!s390_stack_guard)
- error ("-mstack-size implies use of -mstack-guard");
- else if (s390_stack_guard >= s390_stack_size)
+ if (s390_stack_guard >= s390_stack_size)
error ("stack size must be greater than the stack guard value");
else if (s390_stack_size > 1 << 16)
error ("stack size must not be greater than 64k");
@@ -7245,21 +7243,47 @@ s390_emit_prologue (void)
if (s390_stack_size)
{
- HOST_WIDE_INT stack_check_mask = ((s390_stack_size - 1)
- & ~(s390_stack_guard - 1));
- rtx t = gen_rtx_AND (Pmode, stack_pointer_rtx,
- GEN_INT (stack_check_mask));
+ HOST_WIDE_INT stack_guard;
- if (TARGET_64BIT)
- gen_cmpdi (t, const0_rtx);
+ if (s390_stack_guard)
+ stack_guard = s390_stack_guard;
else
- gen_cmpsi (t, const0_rtx);
+ {
+ /* If no value for stack guard is provided the smallest power of 2
+ larger than the current frame size is chosen. */
+ stack_guard = 1;
+ while (stack_guard < cfun_frame_layout.frame_size)
+ stack_guard <<= 1;
+ }
- emit_insn (gen_conditional_trap (gen_rtx_EQ (CCmode,
- gen_rtx_REG (CCmode,
- CC_REGNUM),
- const0_rtx),
- const0_rtx));
+ if (cfun_frame_layout.frame_size >= s390_stack_size)
+ {
+ warning (0, "frame size of function %qs is "
+ HOST_WIDE_INT_PRINT_DEC
+ " bytes exceeding user provided stack limit of "
+ HOST_WIDE_INT_PRINT_DEC " bytes. "
+ "An unconditional trap is added.",
+ current_function_name(), cfun_frame_layout.frame_size,
+ s390_stack_size);
+ emit_insn (gen_trap ());
+ }
+ else
+ {
+ HOST_WIDE_INT stack_check_mask = ((s390_stack_size - 1)
+ & ~(stack_guard - 1));
+ rtx t = gen_rtx_AND (Pmode, stack_pointer_rtx,
+ GEN_INT (stack_check_mask));
+ if (TARGET_64BIT)
+ gen_cmpdi (t, const0_rtx);
+ else
+ gen_cmpsi (t, const0_rtx);
+
+ emit_insn (gen_conditional_trap (gen_rtx_EQ (CCmode,
+ gen_rtx_REG (CCmode,
+ CC_REGNUM),
+ const0_rtx),
+ const0_rtx));
+ }
}
if (s390_warn_framesize > 0
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index bb2776f1c89..68f8ec1fa1f 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -8594,7 +8594,7 @@ sh_insn_length_adjustment (rtx insn)
template = XSTR (body, 0);
else if (asm_noperands (body) >= 0)
template
- = decode_asm_operands (body, NULL, NULL, NULL, NULL);
+ = decode_asm_operands (body, NULL, NULL, NULL, NULL, NULL);
else
return 0;
do
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 764beb946ea..9b881e1176d 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -5673,18 +5673,18 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
incr = valist;
if (align)
{
- incr = fold (build2 (PLUS_EXPR, ptr_type_node, incr,
- ssize_int (align - 1)));
- incr = fold (build2 (BIT_AND_EXPR, ptr_type_node, incr,
- ssize_int (-align)));
+ incr = fold_build2 (PLUS_EXPR, ptr_type_node, incr,
+ ssize_int (align - 1));
+ incr = fold_build2 (BIT_AND_EXPR, ptr_type_node, incr,
+ ssize_int (-align));
}
gimplify_expr (&incr, pre_p, post_p, is_gimple_val, fb_rvalue);
addr = incr;
if (BYTES_BIG_ENDIAN && size < rsize)
- addr = fold (build2 (PLUS_EXPR, ptr_type_node, incr,
- ssize_int (rsize - size)));
+ addr = fold_build2 (PLUS_EXPR, ptr_type_node, incr,
+ ssize_int (rsize - size));
if (indirect)
{
@@ -5712,7 +5712,7 @@ sparc_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
else
addr = fold_convert (ptrtype, addr);
- incr = fold (build2 (PLUS_EXPR, ptr_type_node, incr, ssize_int (rsize)));
+ incr = fold_build2 (PLUS_EXPR, ptr_type_node, incr, ssize_int (rsize));
incr = build2 (GIMPLE_MODIFY_STMT, ptr_type_node, valist, incr);
gimplify_and_add (incr, post_p);
diff --git a/gcc/config/spu/constraints.md b/gcc/config/spu/constraints.md
index abc319b4ff5..1006b07ecaf 100644
--- a/gcc/config/spu/constraints.md
+++ b/gcc/config/spu/constraints.md
@@ -53,7 +53,7 @@
(define_constraint "W"
"An immediate for shift and rotate instructions. const_int is treated as a 32-bit value."
(and (match_code "const_int,const_double,const_vector")
- (match_test "arith_immediate_p (op, SImode, -0x40, 0x3f)")))
+ (match_test "arith_immediate_p (op, SImode, -0x80000000ll, 0x7fffffffll)")))
(define_constraint "Y"
"An immediate for and/xor/or instructions. const_int is sign extended as a 128 bit."
@@ -131,7 +131,7 @@
(define_constraint "O"
"An unsigned 7-bit constant whose 3 least significant bits are 0."
(and (match_code "const_int")
- (match_test "ival >= 0 && ival <= 0x7f && (ival & 7) == 0")))
+ (match_test "(ival & 7) == 0")))
(define_constraint "P"
"An unsigned 3-bit constant for 16-byte rotates and shifts"
diff --git a/gcc/config/spu/predicates.md b/gcc/config/spu/predicates.md
index 9d343e6b48d..8b31e65e6f5 100644
--- a/gcc/config/spu/predicates.md
+++ b/gcc/config/spu/predicates.md
@@ -85,15 +85,9 @@
return 0;
})
-(define_predicate "spu_shift_operand"
- (match_code "reg,subreg,const_int,const_vector")
- {
- if (spu_reg_operand (op, mode))
- return 1;
- if (GET_CODE (op) == CONST_INT || GET_CODE (op) == CONST_VECTOR)
- return arith_immediate_p (op, mode, -0x40, 0x3f);
- return 0;
- })
+(define_predicate "imm_K_operand"
+ (and (match_code "const_int")
+ (match_test "arith_immediate_p (op, mode, -0x200, 0x1ff)")))
;; Return 1 if OP is a comparison operation that is valid for a branch insn.
;; We only check the opcode against the mode of the register value here.
diff --git a/gcc/config/spu/spu-builtins.def b/gcc/config/spu/spu-builtins.def
index c8b7851ab67..6ae382fdd9b 100644
--- a/gcc/config/spu/spu-builtins.def
+++ b/gcc/config/spu/spu-builtins.def
@@ -163,6 +163,9 @@ DEF_BUILTIN (SI_CLGTH, CODE_FOR_clgt_v8hi, "si_clgth", B_INSN,
DEF_BUILTIN (SI_CLGTHI, CODE_FOR_clgt_v8hi, "si_clgthi", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_S10))
DEF_BUILTIN (SI_CLGT, CODE_FOR_clgt_v4si, "si_clgt", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_QUADWORD))
DEF_BUILTIN (SI_CLGTI, CODE_FOR_clgt_v4si, "si_clgti", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_S10))
+DEF_BUILTIN (SI_BISLED, CODE_FOR_spu_bisled, "si_bisled", B_BISLED, _A3(SPU_BTI_VOID, SPU_BTI_QUADWORD, SPU_BTI_PTR))
+DEF_BUILTIN (SI_BISLEDD, CODE_FOR_spu_bisledd, "si_bisledd", B_BISLED, _A3(SPU_BTI_VOID, SPU_BTI_QUADWORD, SPU_BTI_PTR))
+DEF_BUILTIN (SI_BISLEDE, CODE_FOR_spu_bislede, "si_bislede", B_BISLED, _A3(SPU_BTI_VOID, SPU_BTI_QUADWORD, SPU_BTI_PTR))
DEF_BUILTIN (SI_FA, CODE_FOR_addv4sf3, "si_fa", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_QUADWORD))
DEF_BUILTIN (SI_DFA, CODE_FOR_addv2df3, "si_dfa", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_QUADWORD))
DEF_BUILTIN (SI_FS, CODE_FOR_subv4sf3, "si_fs", B_INSN, _A3(SPU_BTI_QUADWORD, SPU_BTI_QUADWORD, SPU_BTI_QUADWORD))
diff --git a/gcc/config/spu/spu-builtins.md b/gcc/config/spu/spu-builtins.md
index 9b9a21b61d7..5cd3b54b9e2 100644
--- a/gcc/config/spu/spu-builtins.md
+++ b/gcc/config/spu/spu-builtins.md
@@ -213,7 +213,7 @@
""
"@
mpy\t%0,%1,%2
- mpyi\t%0,%1,%H2"
+ mpyi\t%0,%1,%2"
[(set_attr "type" "fp7")])
(define_insn "spu_mpyu"
@@ -230,7 +230,7 @@
""
"@
mpyu\t%0,%1,%2
- mpyui\t%0,%1,%H2"
+ mpyui\t%0,%1,%2"
[(set_attr "type" "fp7")])
(define_insn "spu_mpya"
@@ -607,12 +607,9 @@
[(set_attr "type" "br")])
;; interrupt disable/enable
-;; Register 131 is used exclusively for enabling/disabling interrupts.
-;; It is marked as a global reg and the instructions clobber mem, so it will
-;; not be incorrectly optimized.
(define_expand "spu_idisable"
[(parallel
- [(set (reg:INTR 131) (const_int 0))
+ [(unspec_volatile [(const_int 0)] UNSPEC_SET_INTR)
(clobber (match_dup:SI 0))
(clobber (mem:BLK (scratch)))])]
""
@@ -620,14 +617,14 @@
(define_expand "spu_ienable"
[(parallel
- [(set (reg:INTR 131) (const_int 1))
+ [(unspec_volatile [(const_int 1)] UNSPEC_SET_INTR)
(clobber (match_dup:SI 0))
(clobber (mem:BLK (scratch)))])]
""
"operands[0] = gen_reg_rtx (SImode);")
(define_insn "set_intr"
- [(set (reg:INTR 131) (match_operand 1 "const_int_operand" "i"))
+ [(unspec_volatile [(match_operand 1 "const_int_operand" "i")] UNSPEC_SET_INTR)
(clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
(clobber (mem:BLK (scratch)))]
"! flag_pic"
@@ -636,7 +633,7 @@
(set_attr "type" "multi0")])
(define_insn "set_intr_pic"
- [(set (reg:INTR 131) (match_operand 1 "const_int_operand" "i"))
+ [(unspec_volatile [(match_operand 1 "const_int_operand" "i")] UNSPEC_SET_INTR)
(clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
(clobber (mem:BLK (scratch)))]
"flag_pic"
@@ -644,53 +641,32 @@
[(set_attr "length" "12")
(set_attr "type" "multi1")])
-(define_expand "movintrcc"
- [(parallel
- [(set (match_operand:INTR 0 "spu_reg_operand" "")
- (if_then_else:INTR (match_operand 1 "branch_comparison_operator" "")
- (match_operand 3 "const_int_operand" "")
- (match_operand:INTR 2 "spu_reg_operand" "")))
- (clobber (match_dup:SI 4))
- (clobber (mem:BLK (scratch)))])]
- ""
- { /* We've swapped operands 2 and 3 in the pattern, reverse the
- condition code too. */
- PUT_CODE (operands[1], reverse_condition (GET_CODE (operands[1])));
- operands[4] = gen_reg_rtx (SImode);
- })
-
(define_insn "set_intr_cc"
- [(set (reg:INTR 131)
- (if_then_else:INTR
- (match_operator 1 "branch_comparison_operator"
- [(match_operand 2 "spu_reg_operand" "r")
- (const_int 0)])
- (match_operand:SI 3 "const_int_operand" "i")
- (reg:INTR 131)))
- (clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
- (clobber (mem:BLK (scratch)))]
+ [(cond_exec (match_operator 1 "branch_comparison_operator"
+ [(match_operand 2 "spu_reg_operand" "r")
+ (const_int 0)])
+ (parallel [(unspec_volatile [(match_operand:SI 3 "const_int_operand" "i")] UNSPEC_SET_INTR)
+ (clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
+ (clobber (mem:BLK (scratch)))]))]
"! flag_pic"
"ila\t%0,.+8\;bi%b2%b1z%I3\t%2,%0"
[(set_attr "length" "8")
(set_attr "type" "multi0")])
(define_insn "set_intr_cc_pic"
- [(set (reg:INTR 131)
- (if_then_else:INTR
- (match_operator 1 "branch_comparison_operator"
- [(match_operand 2 "spu_reg_operand" "r")
- (const_int 0)])
- (match_operand:SI 3 "const_int_operand" "i")
- (reg:INTR 131)))
- (clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
- (clobber (mem:BLK (scratch)))]
+ [(cond_exec (match_operator 1 "branch_comparison_operator"
+ [(match_operand 2 "spu_reg_operand" "r")
+ (const_int 0)])
+ (parallel [(unspec_volatile [(match_operand:SI 3 "const_int_operand" "i")] UNSPEC_SET_INTR)
+ (clobber (match_operand:SI 0 "spu_reg_operand" "=&r"))
+ (clobber (mem:BLK (scratch)))]))]
"flag_pic"
- "brsl\t%0,.+4\;ai\t%0,%0,8\;%b2%b1z%I3\t%2,%0"
+ "brsl\t%0,.+4\;ai\t%0,%0,8\;bi%b2%b1z%I3\t%2,%0"
[(set_attr "length" "12")
(set_attr "type" "multi1")])
(define_insn "set_intr_return"
- [(set (reg:INTR 131) (match_operand 0 "const_int_operand" "i"))
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "i")] UNSPEC_SET_INTR)
(return)]
""
"bi%I0\t$lr"
@@ -698,7 +674,7 @@
(define_peephole2
[(parallel
- [(set (reg:INTR 131) (match_operand 0 "const_int_operand"))
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand")] UNSPEC_SET_INTR)
(clobber (match_operand:SI 1 "spu_reg_operand"))
(clobber (mem:BLK (scratch)))])
(use (reg:SI 0))
@@ -706,7 +682,7 @@
""
[(use (reg:SI 0))
(parallel
- [(set (reg:INTR 131) (match_dup 0))
+ [(unspec_volatile [(match_dup:SI 0)] UNSPEC_SET_INTR)
(return)])]
"")
diff --git a/gcc/config/spu/spu-modes.def b/gcc/config/spu/spu-modes.def
index 49d577b63ea..9d33fefb92d 100644
--- a/gcc/config/spu/spu-modes.def
+++ b/gcc/config/spu/spu-modes.def
@@ -25,10 +25,6 @@ VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
-/* A special mode for the intr register so we can treat it differently
- for conditional moves. */
-RANDOM_MODE (INTR);
-
/* cse_insn needs an INT_MODE larger than WORD_MODE, otherwise some
parts of it will go into an infinite loop. */
INT_MODE (OI, 32);
diff --git a/gcc/config/spu/spu-protos.h b/gcc/config/spu/spu-protos.h
index 6f87ec02581..4caaf1b8a69 100644
--- a/gcc/config/spu/spu-protos.h
+++ b/gcc/config/spu/spu-protos.h
@@ -23,6 +23,7 @@
extern enum machine_mode spu_eh_return_filter_mode (void);
extern void spu_cpu_cpp_builtins (struct cpp_reader * pfile);
extern void builtin_define_std (const char *);
+extern void spu_optimization_options (int level, int size);
extern void spu_override_options (void);
extern void spu_c_common_override_options (void);
extern int valid_subreg (rtx op);
@@ -88,6 +89,7 @@ extern void spu_builtin_promote (rtx ops[]);
extern void spu_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt);
extern void spu_expand_sign_extend (rtx ops[]);
extern void spu_expand_vector_init (rtx target, rtx vals);
+extern void spu_init_expanders (void);
/* spu-c.c */
extern tree spu_resolve_overloaded_builtin (tree fndecl, tree fnargs);
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index 9adeacf2088..252183b8b78 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -157,6 +157,7 @@ enum immediate_class
IC_IL2s, /* both ilhu and iohl instructions */
IC_FSMBI, /* the fsmbi instruction */
IC_CPAT, /* one of the c*d instructions */
+ IC_FSMBI2 /* fsmbi plus 1 other instruction */
};
static enum spu_immediate which_immediate_load (HOST_WIDE_INT val);
@@ -262,6 +263,22 @@ const struct attribute_spec spu_attribute_table[];
struct gcc_target targetm = TARGET_INITIALIZER;
+void
+spu_optimization_options (int level ATTRIBUTE_UNUSED, int size ATTRIBUTE_UNUSED)
+{
+ /* Small loops will be unpeeled at -O3. For SPU it is more important
+ to keep code small by default. */
+ if (!flag_unroll_loops && !flag_peel_loops)
+ PARAM_VALUE (PARAM_MAX_COMPLETELY_PEEL_TIMES) = 1;
+
+ /* Override some of the default param values. With so many registers
+ larger values are better for these params. */
+ MAX_PENDING_LIST_LENGTH = 128;
+
+ /* With so many registers this is better on by default. */
+ flag_rename_registers = 1;
+}
+
/* Sometimes certain combinations of command options do not make sense
on a particular target machine. You can define a macro
OVERRIDE_OPTIONS to take account of this. This macro, if defined, is
@@ -269,13 +286,6 @@ struct gcc_target targetm = TARGET_INITIALIZER;
void
spu_override_options (void)
{
- /* Override some of the default param values. With so many registers
- larger values are better for these params. */
- if (MAX_UNROLLED_INSNS == 100)
- MAX_UNROLLED_INSNS = 250;
- if (MAX_PENDING_LIST_LENGTH == 32)
- MAX_PENDING_LIST_LENGTH = 128;
-
flag_omit_frame_pointer = 1;
if (align_functions < 8)
@@ -1142,6 +1152,7 @@ print_operand (FILE * file, rtx x, int code)
fprintf (file, "hu");
break;
case IC_FSMBI:
+ case IC_FSMBI2:
case IC_IL2:
case IC_IL2s:
case IC_POOL:
@@ -1194,21 +1205,17 @@ print_operand (FILE * file, rtx x, int code)
fprintf (file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT)info);
break;
case IC_IL1s:
- if (xcode == CONST_VECTOR)
- {
- x = CONST_VECTOR_ELT (x, 0);
- xcode = GET_CODE (x);
- }
if (xcode == HIGH)
- {
- output_addr_const (file, XEXP (x, 0));
- fprintf (file, "@h");
- }
- else
- output_addr_const (file, x);
+ x = XEXP (x, 0);
+ if (GET_CODE (x) == CONST_VECTOR)
+ x = CONST_VECTOR_ELT (x, 0);
+ output_addr_const (file, x);
+ if (xcode == HIGH)
+ fprintf (file, "@h");
break;
case IC_IL2:
case IC_IL2s:
+ case IC_FSMBI2:
case IC_POOL:
abort ();
}
@@ -1307,6 +1314,58 @@ print_operand (FILE * file, rtx x, int code)
}
return;
+ case 'e':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val &= 0x7;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'f':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val &= 0x1f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'g':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val &= 0x3f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'h':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val = (val >> 3) & 0x1f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'E':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val = -val;
+ val &= 0x7;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'F':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val = -val;
+ val &= 0x1f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'G':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val = -val;
+ val &= 0x3f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
+ case 'H':
+ val = xcode == CONST_INT ? INTVAL (x) : INTVAL (CONST_VECTOR_ELT (x, 0));
+ val = -(val & -8ll);
+ val = (val >> 3) & 0x1f;
+ output_addr_const (file, GEN_INT (val));
+ return;
+
case 0:
if (xcode == REG)
fprintf (file, "%s", reg_names[REGNO (x)]);
@@ -1318,6 +1377,9 @@ print_operand (FILE * file, rtx x, int code)
output_addr_const (file, x);
return;
+ /* unsed letters
+ o qr uvw yz
+ AB OPQR UVWXYZ */
default:
output_operand_lossage ("invalid %%xn code");
}
@@ -1341,8 +1403,9 @@ get_pic_reg (void)
return pic_reg;
}
-/* Split constant addresses to handle cases that are too large. Also, add in
- the pic register when in PIC mode. */
+/* Split constant addresses to handle cases that are too large.
+ Add in the pic register when in PIC mode.
+ Split immediates that require more than 1 instruction. */
int
spu_split_immediate (rtx * ops)
{
@@ -1373,6 +1436,36 @@ spu_split_immediate (rtx * ops)
(VOIDmode, ops[0], gen_rtx_IOR (mode, to, lo)));
return 1;
}
+ case IC_FSMBI2:
+ {
+ unsigned char arr_fsmbi[16];
+ unsigned char arr_andbi[16];
+ rtx to, reg_fsmbi, reg_and;
+ int i;
+ enum machine_mode imode = mode;
+ /* We need to do reals as ints because the constant used in the
+ * AND might not be a legitimate real constant. */
+ imode = int_mode_for_mode (mode);
+ constant_to_array (mode, ops[1], arr_fsmbi);
+ if (imode != mode)
+ to = simplify_gen_subreg(imode, ops[0], GET_MODE (ops[0]), 0);
+ else
+ to = ops[0];
+ for (i = 0; i < 16; i++)
+ if (arr_fsmbi[i] != 0)
+ {
+ arr_andbi[0] = arr_fsmbi[i];
+ arr_fsmbi[i] = 0xff;
+ }
+ for (i = 1; i < 16; i++)
+ arr_andbi[i] = arr_andbi[0];
+ reg_fsmbi = array_to_constant (imode, arr_fsmbi);
+ reg_and = array_to_constant (imode, arr_andbi);
+ emit_move_insn (to, reg_fsmbi);
+ emit_insn (gen_rtx_SET
+ (VOIDmode, to, gen_rtx_AND (imode, to, reg_and)));
+ return 1;
+ }
case IC_POOL:
if (reload_in_progress || reload_completed)
{
@@ -1393,8 +1486,8 @@ spu_split_immediate (rtx * ops)
{
if (c == IC_IL2s)
{
- emit_insn (gen_high (ops[0], ops[1]));
- emit_insn (gen_low (ops[0], ops[0], ops[1]));
+ emit_move_insn (ops[0], gen_rtx_HIGH (mode, ops[1]));
+ emit_move_insn (ops[0], gen_rtx_LO_SUM (mode, ops[0], ops[1]));
}
else if (flag_pic)
emit_insn (gen_pic (ops[0], ops[1]));
@@ -1667,6 +1760,7 @@ spu_expand_prologue (void)
REG_NOTES (insn) =
gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
real, REG_NOTES (insn));
+ REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
}
}
@@ -2329,7 +2423,8 @@ immediate_load_p (rtx op, enum machine_mode mode)
if (CONSTANT_P (op))
{
enum immediate_class c = classify_immediate (op, mode);
- return c == IC_IL1 || (!flow2_completed && c == IC_IL2);
+ return c == IC_IL1 || c == IC_IL1s
+ || (!flow2_completed && (c == IC_IL2 || c == IC_IL2s));
}
return 0;
}
@@ -2390,7 +2485,7 @@ classify_immediate (rtx op, enum machine_mode mode)
{
HOST_WIDE_INT val;
unsigned char arr[16];
- int i, j, repeated, fsmbi;
+ int i, j, repeated, fsmbi, repeat;
gcc_assert (CONSTANT_P (op));
@@ -2398,7 +2493,8 @@ classify_immediate (rtx op, enum machine_mode mode)
mode = GET_MODE (op);
/* A V4SI const_vector with all identical symbols is ok. */
- if (mode == V4SImode
+ if (!flag_pic
+ && mode == V4SImode
&& GET_CODE (op) == CONST_VECTOR
&& GET_CODE (CONST_VECTOR_ELT (op, 0)) != CONST_INT
&& GET_CODE (CONST_VECTOR_ELT (op, 0)) != CONST_DOUBLE
@@ -2452,11 +2548,14 @@ classify_immediate (rtx op, enum machine_mode mode)
gcc_assert (GET_MODE_SIZE (mode) > 2);
fsmbi = 1;
+ repeat = 0;
for (i = 0; i < 16 && fsmbi; i++)
- if (arr[i] != 0 && arr[i] != 0xff)
+ if (arr[i] != 0 && repeat == 0)
+ repeat = arr[i];
+ else if (arr[i] != 0 && arr[i] != repeat)
fsmbi = 0;
if (fsmbi)
- return IC_FSMBI;
+ return repeat == 0xff ? IC_FSMBI : IC_FSMBI2;
if (cpat_info (arr, GET_MODE_SIZE (mode), 0, 0))
return IC_CPAT;
@@ -2495,6 +2594,20 @@ which_logical_immediate (HOST_WIDE_INT val)
return SPU_NONE;
}
+/* Return TRUE when X, a CONST_VECTOR, only contains CONST_INTs or
+ CONST_DOUBLEs. */
+static int
+const_vector_immediate_p (rtx x)
+{
+ int i;
+ gcc_assert (GET_CODE (x) == CONST_VECTOR);
+ for (i = 0; i < GET_MODE_NUNITS (GET_MODE (x)); i++)
+ if (GET_CODE (CONST_VECTOR_ELT (x, i)) != CONST_INT
+ && GET_CODE (CONST_VECTOR_ELT (x, i)) != CONST_DOUBLE)
+ return 0;
+ return 1;
+}
+
int
logical_immediate_p (rtx op, enum machine_mode mode)
{
@@ -2505,6 +2618,10 @@ logical_immediate_p (rtx op, enum machine_mode mode)
gcc_assert (GET_CODE (op) == CONST_INT || GET_CODE (op) == CONST_DOUBLE
|| GET_CODE (op) == CONST_VECTOR);
+ if (GET_CODE (op) == CONST_VECTOR
+ && !const_vector_immediate_p (op))
+ return 0;
+
if (GET_MODE (op) != VOIDmode)
mode = GET_MODE (op);
@@ -2533,6 +2650,10 @@ iohl_immediate_p (rtx op, enum machine_mode mode)
gcc_assert (GET_CODE (op) == CONST_INT || GET_CODE (op) == CONST_DOUBLE
|| GET_CODE (op) == CONST_VECTOR);
+ if (GET_CODE (op) == CONST_VECTOR
+ && !const_vector_immediate_p (op))
+ return 0;
+
if (GET_MODE (op) != VOIDmode)
mode = GET_MODE (op);
@@ -2561,6 +2682,10 @@ arith_immediate_p (rtx op, enum machine_mode mode,
gcc_assert (GET_CODE (op) == CONST_INT || GET_CODE (op) == CONST_DOUBLE
|| GET_CODE (op) == CONST_VECTOR);
+ if (GET_CODE (op) == CONST_VECTOR
+ && !const_vector_immediate_p (op))
+ return 0;
+
if (GET_MODE (op) != VOIDmode)
mode = GET_MODE (op);
@@ -2596,22 +2721,21 @@ arith_immediate_p (rtx op, enum machine_mode mode,
int
spu_legitimate_constant_p (rtx x)
{
- int i;
+ if (GET_CODE (x) == HIGH)
+ x = XEXP (x, 0);
/* V4SI with all identical symbols is valid. */
- if (GET_MODE (x) == V4SImode
+ if (!flag_pic
+ && GET_MODE (x) == V4SImode
&& (GET_CODE (CONST_VECTOR_ELT (x, 0)) == SYMBOL_REF
|| GET_CODE (CONST_VECTOR_ELT (x, 0)) == LABEL_REF
- || GET_CODE (CONST_VECTOR_ELT (x, 0)) == CONST
- || GET_CODE (CONST_VECTOR_ELT (x, 0)) == HIGH))
+ || GET_CODE (CONST_VECTOR_ELT (x, 0)) == CONST))
return CONST_VECTOR_ELT (x, 0) == CONST_VECTOR_ELT (x, 1)
&& CONST_VECTOR_ELT (x, 1) == CONST_VECTOR_ELT (x, 2)
&& CONST_VECTOR_ELT (x, 2) == CONST_VECTOR_ELT (x, 3);
- if (VECTOR_MODE_P (GET_MODE (x)))
- for (i = 0; i < GET_MODE_NUNITS (GET_MODE (x)); i++)
- if (GET_CODE (CONST_VECTOR_ELT (x, i)) != CONST_INT
- && GET_CODE (CONST_VECTOR_ELT (x, i)) != CONST_DOUBLE)
- return 0;
+ if (GET_CODE (x) == CONST_VECTOR
+ && !const_vector_immediate_p (x))
+ return 0;
return 1;
}
@@ -2668,7 +2792,7 @@ spu_legitimate_address (enum machine_mode mode ATTRIBUTE_UNUSED,
&& GET_CODE (op1) == CONST_INT
&& INTVAL (op1) >= -0x2000
&& INTVAL (op1) <= 0x1fff
- && (REGNO_PTR_FRAME_P (REGNO (op0)) || (INTVAL (op1) & 15) == 0))
+ && (regno_aligned_for_load (REGNO (op0)) || (INTVAL (op1) & 15) == 0))
return 1;
if (GET_CODE (op0) == REG
&& INT_REG_OK_FOR_BASE_P (op0, reg_ok_strict)
@@ -3135,7 +3259,6 @@ spu_conditional_register_usage (void)
fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
}
- global_regs[INTR_REGNUM] = 1;
}
/* This is called to decide when we can simplify a load instruction. We
@@ -3149,9 +3272,10 @@ static int
regno_aligned_for_load (int regno)
{
return regno == FRAME_POINTER_REGNUM
- || regno == HARD_FRAME_POINTER_REGNUM
+ || (frame_pointer_needed && regno == HARD_FRAME_POINTER_REGNUM)
|| regno == STACK_POINTER_REGNUM
- || (regno >= FIRST_VIRTUAL_REGISTER && regno <= LAST_VIRTUAL_REGISTER);
+ || (regno >= FIRST_VIRTUAL_REGISTER
+ && regno <= LAST_VIRTUAL_REGISTER);
}
/* Return TRUE when mem is known to be 16-byte aligned. */
@@ -3706,10 +3830,10 @@ fsmbi_const_p (rtx x)
{
if (CONSTANT_P (x))
{
- /* We can always choose DImode for CONST_INT because the high bits
+ /* We can always choose TImode for CONST_INT because the high bits
of an SImode will always be all 1s, i.e., valid for fsmbi. */
- enum immediate_class c = classify_immediate (x, DImode);
- return c == IC_FSMBI;
+ enum immediate_class c = classify_immediate (x, TImode);
+ return c == IC_FSMBI || (!flow2_completed && c == IC_FSMBI2);
}
return 0;
}
@@ -3929,7 +4053,7 @@ reloc_diagnostic (rtx x)
/* We use last_assemble_variable_decl to get line information. It's
not always going to be right and might not even be close, but will
be right for the more common cases. */
- if (!last_assemble_variable_decl)
+ if (!last_assemble_variable_decl || in_section == ctors_section)
loc_decl = decl;
else
loc_decl = last_assemble_variable_decl;
@@ -4346,7 +4470,7 @@ spu_builtin_splats (rtx ops[])
constant_to_array (GET_MODE_INNER (mode), ops[1], arr);
emit_move_insn (ops[0], array_to_constant (mode, arr));
}
- else if (GET_MODE (ops[0]) == V4SImode && CONSTANT_P (ops[1]))
+ else if (!flag_pic && GET_MODE (ops[0]) == V4SImode && CONSTANT_P (ops[1]))
{
rtvec v = rtvec_alloc (4);
RTVEC_ELT (v, 0) = ops[1];
@@ -4773,10 +4897,8 @@ spu_check_builtin_parm (struct spu_builtin_description *d, rtx op, int p)
if (p >= SPU_BTI_7 && p <= SPU_BTI_U18)
{
int range = p - SPU_BTI_7;
- if (!CONSTANT_P (op)
- || (GET_CODE (op) == CONST_INT
- && (INTVAL (op) < spu_builtin_range[range].low
- || INTVAL (op) > spu_builtin_range[range].high)))
+
+ if (!CONSTANT_P (op))
error ("%s expects an integer literal in the range [%d, %d].",
d->name,
spu_builtin_range[range].low, spu_builtin_range[range].high);
@@ -4790,6 +4912,18 @@ spu_check_builtin_parm (struct spu_builtin_description *d, rtx op, int p)
}
else if (GET_CODE (op) == CONST_INT)
v = INTVAL (op);
+ else if (GET_CODE (op) == CONST_VECTOR
+ && GET_CODE (CONST_VECTOR_ELT (op, 0)) == CONST_INT)
+ v = INTVAL (CONST_VECTOR_ELT (op, 0));
+
+ /* The default for v is 0 which is valid in every range. */
+ if (v < spu_builtin_range[range].low
+ || v > spu_builtin_range[range].high)
+ error ("%s expects an integer literal in the range [%d, %d]. ("
+ HOST_WIDE_INT_PRINT_DEC ")",
+ d->name,
+ spu_builtin_range[range].low, spu_builtin_range[range].high,
+ v);
switch (p)
{
@@ -4814,7 +4948,7 @@ spu_check_builtin_parm (struct spu_builtin_description *d, rtx op, int p)
if (GET_CODE (op) == LABEL_REF
|| (GET_CODE (op) == SYMBOL_REF
&& SYMBOL_REF_FUNCTION_P (op))
- || (INTVAL (op) & ((1 << lsbits) - 1)) != 0)
+ || (v & ((1 << lsbits) - 1)) != 0)
warning (0, "%d least significant bits of %s are ignored.", lsbits,
d->name);
}
@@ -4822,30 +4956,29 @@ spu_check_builtin_parm (struct spu_builtin_description *d, rtx op, int p)
static void
-expand_builtin_args (struct spu_builtin_description *d, tree arglist,
+expand_builtin_args (struct spu_builtin_description *d, tree exp,
rtx target, rtx ops[])
{
enum insn_code icode = d->icode;
- int i = 0;
+ int i = 0, a;
/* Expand the arguments into rtl. */
if (d->parm[0] != SPU_BTI_VOID)
ops[i++] = target;
- for (; i < insn_data[icode].n_operands; i++)
+ for (a = 0; i < insn_data[icode].n_operands; i++, a++)
{
- tree arg = TREE_VALUE (arglist);
+ tree arg = CALL_EXPR_ARG (exp, a);
if (arg == 0)
abort ();
ops[i] = expand_expr (arg, NULL_RTX, VOIDmode, 0);
- arglist = TREE_CHAIN (arglist);
}
}
static rtx
spu_expand_builtin_1 (struct spu_builtin_description *d,
- tree arglist, rtx target)
+ tree exp, rtx target)
{
rtx pat;
rtx ops[8];
@@ -4855,7 +4988,7 @@ spu_expand_builtin_1 (struct spu_builtin_description *d,
tree return_type;
/* Set up ops[] with values from arglist. */
- expand_builtin_args (d, arglist, target, ops);
+ expand_builtin_args (d, exp, target, ops);
/* Handle the target operand which must be operand 0. */
i = 0;
@@ -4889,7 +5022,7 @@ spu_expand_builtin_1 (struct spu_builtin_description *d,
rtx addr, op, pat;
/* get addr */
- arg = TREE_VALUE (arglist);
+ arg = CALL_EXPR_ARG (exp, 0);
gcc_assert (TREE_CODE (TREE_TYPE (arg)) == POINTER_TYPE);
op = expand_expr (arg, NULL_RTX, Pmode, EXPAND_NORMAL);
addr = memory_address (mode, op);
@@ -4947,10 +5080,10 @@ spu_expand_builtin_1 (struct spu_builtin_description *d,
}
}
+ spu_check_builtin_parm (d, ops[i], d->parm[p]);
+
if (!(*insn_data[icode].operand[i].predicate) (ops[i], mode))
ops[i] = spu_force_reg (mode, ops[i]);
-
- spu_check_builtin_parm (d, ops[i], d->parm[p]);
}
switch (insn_data[icode].n_operands)
@@ -5012,16 +5145,15 @@ spu_expand_builtin (tree exp,
enum machine_mode mode ATTRIBUTE_UNUSED,
int ignore ATTRIBUTE_UNUSED)
{
- tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
+ tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
unsigned int fcode = DECL_FUNCTION_CODE (fndecl) - END_BUILTINS;
- tree arglist = TREE_OPERAND (exp, 1);
struct spu_builtin_description *d;
if (fcode < NUM_SPU_BUILTINS)
{
d = &spu_builtins[fcode];
- return spu_expand_builtin_1 (d, arglist, target);
+ return spu_expand_builtin_1 (d, exp, target);
}
abort ();
}
@@ -5068,3 +5200,13 @@ spu_builtin_mask_for_load (void)
gcc_assert (d);
return d->fndecl;
}
+
+void
+spu_init_expanders (void)
+{
+ /* HARD_FRAME_REGISTER is only 128 bit aligned when
+ * frame_pointer_needed is true. We don't know that until we're
+ * expanding the prologue. */
+ if (cfun)
+ REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = 8;
+}
diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h
index 240d2458995..1fcc2349fac 100644
--- a/gcc/config/spu/spu.h
+++ b/gcc/config/spu/spu.h
@@ -24,6 +24,11 @@
#define OVERRIDE_OPTIONS spu_override_options()
#define C_COMMON_OVERRIDE_OPTIONS spu_c_common_override_options()
+#define OPTIMIZATION_OPTIONS(level,size) \
+ spu_optimization_options(level,size)
+
+#define INIT_EXPANDERS spu_init_expanders()
+
extern int target_flags;
extern const char *spu_fixed_range_string;
@@ -152,7 +157,7 @@ extern const char *spu_fixed_range_string;
/* Register Basics */
/* 128-130 are special registers that never appear in assembly code. */
-#define FIRST_PSEUDO_REGISTER 132
+#define FIRST_PSEUDO_REGISTER 131
#define FIXED_REGISTERS { \
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -163,7 +168,7 @@ extern const char *spu_fixed_range_string;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 1, 1, 1 \
+ 1, 1, 1 \
}
#define CALL_USED_REGISTERS { \
@@ -175,7 +180,7 @@ extern const char *spu_fixed_range_string;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 1, 1, 1, 1 \
+ 1, 1, 1 \
}
#define CONDITIONAL_REGISTER_USAGE \
@@ -299,9 +304,6 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \
* buffer. Users can also specify it in inline asm. */
#define HBR_REGNUM 130
-/* Used to keep track of enabling and disabling interrupts. */
-#define INTR_REGNUM 131
-
#define MAX_REGISTER_ARGS 72
#define FIRST_ARG_REGNUM 3
#define LAST_ARG_REGNUM (FIRST_ARG_REGNUM + MAX_REGISTER_ARGS - 1)
@@ -512,7 +514,7 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \
"$80", "$81", "$82", "$83", "$84", "$85", "$86", "$87", "$88", "$89", "$90", "$91", "$92", "$93", "$94", "$95", \
"$96", "$97", "$98", "$99", "$100", "$101", "$102", "$103", "$104", "$105", "$106", "$107", "$108", "$109", "$110", "$111", \
"$112", "$113", "$114", "$115", "$116", "$117", "$118", "$119", "$120", "$121", "$122", "$123", "$124", "$125", "$126", "$127", \
- "$vfp", "$vap", "hbr", "intr" \
+ "$vfp", "$vap", "hbr" \
}
#define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE, X, CODE)
diff --git a/gcc/config/spu/spu.md b/gcc/config/spu/spu.md
index 523ecec5798..ccaf485e166 100644
--- a/gcc/config/spu/spu.md
+++ b/gcc/config/spu/spu.md
@@ -134,8 +134,7 @@
(UNSPEC_CFLTU 37)
(UNSPEC_STOP 38)
(UNSPEC_STOPD 39)
- (UNSPEC_IDISABLE 40)
- (UNSPEC_IENABLE 41)
+ (UNSPEC_SET_INTR 40)
(UNSPEC_FSCRRD 42)
(UNSPEC_FSCRWR 43)
(UNSPEC_MFSPR 44)
@@ -204,6 +203,11 @@
(define_mode_attr f2i [(SF "SI") (V4SF "V4SI")
(DF "DI") (V2DF "V2DI")])
+(define_mode_attr umask [(HI "f") (V8HI "f")
+ (SI "g") (V4SI "g")])
+(define_mode_attr nmask [(HI "F") (V8HI "F")
+ (SI "G") (V4SI "G")])
+
;; Used for carry and borrow instructions.
(define_mode_macro CBOP [SI DI V4SI V2DI])
@@ -293,16 +297,10 @@
stq%p0\t%1,%0"
[(set_attr "type" "fx2,fx2,shuf,shuf,load,store")])
-(define_insn "high"
- [(set (match_operand:SI 0 "spu_reg_operand" "=r")
- (high:SI (match_operand:SI 1 "immediate_operand" "i")))]
- ""
- "ilhu\t%0,%1@h")
-
-(define_insn "low"
- [(set (match_operand:SI 0 "spu_reg_operand" "=r")
- (lo_sum:SI (match_operand:SI 1 "spu_reg_operand" "0")
- (match_operand:SI 2 "immediate_operand" "i")))]
+(define_insn "low_<mode>"
+ [(set (match_operand:VSI 0 "spu_reg_operand" "=r")
+ (lo_sum:VSI (match_operand:VSI 1 "spu_reg_operand" "0")
+ (match_operand:VSI 2 "immediate_operand" "i")))]
""
"iohl\t%0,%2@l")
@@ -1193,7 +1191,7 @@
(define_insn "mulhisi3_imm"
[(set (match_operand:SI 0 "spu_reg_operand" "=r")
(mult:SI (sign_extend:SI (match_operand:HI 1 "spu_reg_operand" "r"))
- (match_operand:SI 2 "immediate_operand" "K")))]
+ (match_operand:SI 2 "imm_K_operand" "K")))]
""
"mpyi\t%0,%1,%2"
[(set_attr "type" "fp7")])
@@ -1209,7 +1207,7 @@
(define_insn "umulhisi3_imm"
[(set (match_operand:SI 0 "spu_reg_operand" "=r")
(mult:SI (zero_extend:SI (match_operand:HI 1 "spu_reg_operand" "r"))
- (and:SI (match_operand:SI 2 "immediate_operand" "K") (const_int 65535))))]
+ (and:SI (match_operand:SI 2 "imm_K_operand" "K") (const_int 65535))))]
""
"mpyui\t%0,%1,%2"
[(set_attr "type" "fp7")])
@@ -1753,7 +1751,7 @@
""
"@
xor\t%0,%1,%2
- xor%j2i\t%0,%1,%S2")
+ xor%j2i\t%0,%1,%J2")
(define_insn "xordi3"
[(set (match_operand:DI 0 "spu_reg_operand" "=r,r")
@@ -1912,17 +1910,17 @@
(define_insn "ashl<mode>3"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(ashift:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (match_operand:VHSI 2 "spu_shift_operand" "r,W")))]
+ (match_operand:VHSI 2 "spu_nonmem_operand" "r,W")))]
""
"@
shl<bh>\t%0,%1,%2
- shl<bh>i\t%0,%1,%2"
+ shl<bh>i\t%0,%1,%<umask>2"
[(set_attr "type" "fx3")])
(define_insn_and_split "ashldi3"
[(set (match_operand:DI 0 "spu_reg_operand" "=r,r")
(ashift:DI (match_operand:DI 1 "spu_reg_operand" "r,r")
- (match_operand:SI 2 "spu_shift_operand" "r,I")))
+ (match_operand:SI 2 "spu_nonmem_operand" "r,I")))
(clobber (match_scratch:SI 3 "=&r,X"))]
""
"#"
@@ -1973,8 +1971,8 @@
(match_operand:SI 2 "immediate_operand" "O,P")))]
""
"@
- shlqbyi\t%0,%1,%2/8
- shlqbii\t%0,%1,%2"
+ shlqbyi\t%0,%1,%h2
+ shlqbii\t%0,%1,%e2"
"!satisfies_constraint_O (operands[2]) && !satisfies_constraint_P (operands[2])"
[(set (match_dup:TI 0)
(ashift:TI (match_dup:TI 1)
@@ -1985,7 +1983,7 @@
{
HOST_WIDE_INT val = INTVAL(operands[2]);
operands[3] = GEN_INT (val&7);
- operands[4] = GEN_INT (val&0x78);
+ operands[4] = GEN_INT (val&-8);
}
[(set_attr "type" "shuf,shuf")])
@@ -2015,7 +2013,7 @@
""
"@
shlqbybi\t%0,%1,%2
- shlqbyi\t%0,%1,%2/8"
+ shlqbyi\t%0,%1,%h2"
[(set_attr "type" "shuf,shuf")])
(define_insn "shlqbi_ti"
@@ -2026,7 +2024,7 @@
""
"@
shlqbi\t%0,%1,%2
- shlqbii\t%0,%1,%2"
+ shlqbii\t%0,%1,%e2"
[(set_attr "type" "shuf,shuf")])
(define_insn "shlqby_ti"
@@ -2037,7 +2035,7 @@
""
"@
shlqby\t%0,%1,%2
- shlqbyi\t%0,%1,%2"
+ shlqbyi\t%0,%1,%f2"
[(set_attr "type" "shuf,shuf")])
@@ -2046,12 +2044,12 @@
(define_insn_and_split "lshr<mode>3"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(lshiftrt:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (match_operand:VHSI 2 "spu_shift_operand" "r,W")))
+ (match_operand:VHSI 2 "spu_nonmem_operand" "r,W")))
(clobber (match_scratch:VHSI 3 "=&r,X"))]
""
"@
#
- rot<bh>mi\t%0,%1,%N2"
+ rot<bh>mi\t%0,%1,-%<umask>2"
"reload_completed && GET_CODE (operands[2]) == REG"
[(set (match_dup:VHSI 3)
(neg:VHSI (match_dup:VHSI 2)))
@@ -2065,11 +2063,11 @@
(define_insn "rotm_<mode>"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(lshiftrt:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (neg:VHSI (match_operand:VHSI 2 "spu_shift_operand" "r,W"))))]
+ (neg:VHSI (match_operand:VHSI 2 "spu_nonmem_operand" "r,W"))))]
""
"@
rot<bh>m\t%0,%1,%2
- rot<bh>mi\t%0,%1,%2"
+ rot<bh>mi\t%0,%1,-%<nmask>2"
[(set_attr "type" "fx3")])
(define_expand "lshr<mode>3"
@@ -2095,8 +2093,8 @@
(match_operand:SI 2 "immediate_operand" "O,P")))]
""
"@
- rotqmbyi\t%0,%1,%N2/8
- rotqmbii\t%0,%1,%N2"
+ rotqmbyi\t%0,%1,-%h2
+ rotqmbii\t%0,%1,-%e2"
"!satisfies_constraint_O (operands[2]) && !satisfies_constraint_P (operands[2])"
[(set (match_dup:DTI 0)
(lshiftrt:DTI (match_dup:DTI 1)
@@ -2107,7 +2105,7 @@
{
HOST_WIDE_INT val = INTVAL(operands[2]);
operands[4] = GEN_INT (val&7);
- operands[5] = GEN_INT (val&0x78);
+ operands[5] = GEN_INT (val&-8);
}
[(set_attr "type" "shuf,shuf")])
@@ -2127,7 +2125,8 @@
(const_int 7))))
(set (match_dup:DTI 0)
(lshiftrt:DTI (match_dup:DTI 3)
- (and:SI (neg:SI (match_dup:SI 5))
+ (and:SI (neg:SI (and:SI (match_dup:SI 5)
+ (const_int -8)))
(const_int -8))))]
{
emit_insn(gen_subsi3(operands[4], GEN_INT(0), operands[2]));
@@ -2137,12 +2136,13 @@
(define_insn "rotqmbybi_<mode>"
[(set (match_operand:DTI 0 "spu_reg_operand" "=r,r")
(lshiftrt:DTI (match_operand:DTI 1 "spu_reg_operand" "r,r")
- (and:SI (neg:SI (match_operand:SI 2 "spu_nonmem_operand" "r,I"))
+ (and:SI (neg:SI (and:SI (match_operand:SI 2 "spu_nonmem_operand" "r,I")
+ (const_int -8)))
(const_int -8))))]
""
"@
rotqmbybi\t%0,%1,%2
- rotqmbyi\t%0,%1,%2/8"
+ rotqmbyi\t%0,%1,-%H2"
[(set_attr "type" "shuf")])
(define_insn "rotqmbi_<mode>"
@@ -2153,7 +2153,7 @@
""
"@
rotqmbi\t%0,%1,%2
- rotqmbii\t%0,%1,%2"
+ rotqmbii\t%0,%1,-%E2"
[(set_attr "type" "shuf")])
(define_insn "rotqmby_<mode>"
@@ -2164,7 +2164,7 @@
""
"@
rotqmby\t%0,%1,%2
- rotqmbyi\t%0,%1,%2"
+ rotqmbyi\t%0,%1,-%F2"
[(set_attr "type" "shuf")])
@@ -2173,12 +2173,12 @@
(define_insn_and_split "ashr<mode>3"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(ashiftrt:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (match_operand:VHSI 2 "spu_shift_operand" "r,W")))
+ (match_operand:VHSI 2 "spu_nonmem_operand" "r,W")))
(clobber (match_scratch:VHSI 3 "=&r,X"))]
""
"@
#
- rotma<bh>i\t%0,%1,%N2"
+ rotma<bh>i\t%0,%1,-%<umask>2"
"reload_completed && GET_CODE (operands[2]) == REG"
[(set (match_dup:VHSI 3)
(neg:VHSI (match_dup:VHSI 2)))
@@ -2192,11 +2192,11 @@
(define_insn "rotma_<mode>"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(ashiftrt:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (neg:VHSI (match_operand:VHSI 2 "spu_shift_operand" "r,W"))))]
+ (neg:VHSI (match_operand:VHSI 2 "spu_nonmem_operand" "r,W"))))]
""
"@
rotma<bh>\t%0,%1,%2
- rotma<bh>i\t%0,%1,%2"
+ rotma<bh>i\t%0,%1,-%<nmask>2"
[(set_attr "type" "fx3")])
(define_insn_and_split "ashrdi3"
@@ -2306,11 +2306,11 @@
(define_insn "rotl<mode>3"
[(set (match_operand:VHSI 0 "spu_reg_operand" "=r,r")
(rotate:VHSI (match_operand:VHSI 1 "spu_reg_operand" "r,r")
- (match_operand:VHSI 2 "spu_shift_operand" "r,W")))]
+ (match_operand:VHSI 2 "spu_nonmem_operand" "r,W")))]
""
"@
rot<bh>\t%0,%1,%2
- rot<bh>i\t%0,%1,%2"
+ rot<bh>i\t%0,%1,%<umask>2"
[(set_attr "type" "fx3")])
(define_insn "rotlti3"
@@ -2320,9 +2320,9 @@
""
"@
rotqbybi\t%0,%1,%2\;rotqbi\t%0,%0,%2
- rotqbyi\t%0,%1,%2/8
- rotqbii\t%0,%1,%2
- rotqbyi\t%0,%1,%2/8\;rotqbii\t%0,%0,%2%%8"
+ rotqbyi\t%0,%1,%h2
+ rotqbii\t%0,%1,%e2
+ rotqbyi\t%0,%1,%h2\;rotqbii\t%0,%0,%e2"
[(set_attr "length" "8,4,4,8")
(set_attr "type" "multi1,shuf,shuf,multi1")])
@@ -2334,7 +2334,7 @@
""
"@
rotqbybi\t%0,%1,%2
- rotqbyi\t%0,%1,%2/8"
+ rotqbyi\t%0,%1,%h2"
[(set_attr "type" "shuf,shuf")])
(define_insn "rotqby_ti"
@@ -2345,7 +2345,7 @@
""
"@
rotqby\t%0,%1,%2
- rotqbyi\t%0,%1,%2"
+ rotqbyi\t%0,%1,%f2"
[(set_attr "type" "shuf,shuf")])
(define_insn "rotqbi_ti"
@@ -2356,7 +2356,7 @@
""
"@
rotqbi\t%0,%1,%2
- rotqbii\t%0,%1,%2%%8"
+ rotqbii\t%0,%1,%e2"
[(set_attr "type" "shuf,shuf")])
@@ -3090,7 +3090,8 @@ selb\t%0,%4,%0,%3"
[(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)]
""
""
- [(set_attr "length" "0")])
+ [(set_attr "type" "convert")
+ (set_attr "length" "0")])
(define_expand "epilogue"
[(const_int 2)]
@@ -3234,6 +3235,14 @@ selb\t%0,%4,%0,%3"
"rotqbyi\t%0,%1,(%2*<vmult>+<voff>)%%16"
[(set_attr "type" "shuf")])
+(define_insn "_vec_extractv8hi_ze"
+ [(set (match_operand:SI 0 "spu_reg_operand" "=r")
+ (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "spu_reg_operand" "r")
+ (parallel [(const_int 0)]))))]
+ ""
+ "rotqmbyi\t%0,%1,-2"
+ [(set_attr "type" "shuf")])
+
;; misc
@@ -3285,7 +3294,7 @@ selb\t%0,%4,%0,%3"
(define_insn "hbr"
[(set (reg:SI 130)
- (unspec:SI [(match_operand:SI 0 "immediate_operand" "s,s,s")
+ (unspec:SI [(match_operand:SI 0 "immediate_operand" "i,i,i")
(match_operand:SI 1 "nonmemory_operand" "r,s,i")] UNSPEC_HBR))
(unspec [(const_int 0)] UNSPEC_HBR)]
""
diff --git a/gcc/config/spu/spu_internals.h b/gcc/config/spu/spu_internals.h
index 6a71f279819..ecc8dc552ae 100644
--- a/gcc/config/spu/spu_internals.h
+++ b/gcc/config/spu/spu_internals.h
@@ -189,6 +189,9 @@
#define si_clgthi(ra,imm) __builtin_si_clgthi(ra,imm)
#define si_clgt(ra,rb) __builtin_si_clgt(ra,rb)
#define si_clgti(ra,imm) __builtin_si_clgti(ra,imm)
+#define si_bisled(ra) __builtin_si_bisled(ra,0)
+#define si_bisledd(ra) __builtin_si_bisledd(ra,0)
+#define si_bislede(ra) __builtin_si_bislede(ra,0)
#define si_fa(ra,rb) __builtin_si_fa(ra,rb)
#define si_dfa(ra,rb) __builtin_si_dfa(ra,rb)
#define si_fs(ra,rb) __builtin_si_fs(ra,rb)
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
index 1eac999d870..c9d69e0edce 100644
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -21,7 +21,17 @@ EXTRA_HEADERS += $(srcdir)/gthr-vxworks.h gthr-default.h
# This ensures that the correct target headers are used; some
# VxWorks system headers have names that collide with GCC's
# internal (host) headers, e.g. regs.h.
-# FIXME: May not be necessary anymore.
-LIBGCC2_INCLUDES="-I$(SYSTEM_HEADER_DIR)"
+LIBGCC2_INCLUDES = -nostdinc -I \
+ `case "/$$(MULTIDIR)" in \
+ */mrtp*) echo $(WIND_USR)/h ;; \
+ *) echo $(WIND_BASE)/target/h ;; \
+ esac`
+
+# Both the kernel and RTP headers provide limits.h.
+LIMITS_H_TEST = true
EXTRA_MULTILIB_PARTS =
+
+vxworks.o: $(srcdir)/config/vxworks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TARGET_H) toplev.h output.h $(TM_H)
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/config/vxworks-dummy.h b/gcc/config/vxworks-dummy.h
new file mode 100644
index 00000000000..f9098555ea4
--- /dev/null
+++ b/gcc/config/vxworks-dummy.h
@@ -0,0 +1,31 @@
+/* Dummy definitions of VxWorks-related macros
+ Copyright (C) 2007 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, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
+
+/* True if generating code for a VxWorks RTP. */
+#ifndef TARGET_VXWORKS_RTP
+#define TARGET_VXWORKS_RTP false
+#endif
+
+/* The symbol that points to an RTP's table of GOTs. */
+#define VXWORKS_GOTT_BASE (gcc_unreachable (), "")
+
+/* The symbol that holds the index of the current module's GOT in
+ VXWORKS_GOTT_BASE. */
+#define VXWORKS_GOTT_INDEX (gcc_unreachable (), "")
diff --git a/gcc/config/vxworks.c b/gcc/config/vxworks.c
new file mode 100644
index 00000000000..16dbc092bff
--- /dev/null
+++ b/gcc/config/vxworks.c
@@ -0,0 +1,71 @@
+/* Common VxWorks target definitions for GNU compiler.
+ Copyright (C) 2007
+ Free Software Foundation, Inc.
+ Contributed by CodeSourcery, 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, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "target.h"
+#include "toplev.h"
+#include "output.h"
+#include "tm.h"
+
+/* Like default_named_section_asm_out_constructor, except that even
+ constructors with DEFAULT_INIT_PRIORITY must go in a numbered
+ section on VxWorks. The VxWorks runtime uses a clever trick to get
+ the sentinel entry (-1) inserted at the beginning of the .ctors
+ segment. This trick will not work if we ever generate any entries
+ in plain .ctors sections; we must always use .ctors.PRIORITY. */
+
+void
+vxworks_asm_out_constructor (rtx symbol, int priority)
+{
+ section *sec;
+
+ sec = get_cdtor_priority_section (priority,
+ /*constructor_p=*/true);
+ assemble_addr_to_section (symbol, sec);
+}
+
+/* See comment for vxworks_asm_out_constructor. */
+
+void
+vxworks_asm_out_destructor (rtx symbol, int priority)
+{
+ section *sec;
+
+ sec = get_cdtor_priority_section (priority,
+ /*constructor_p=*/false);
+ assemble_addr_to_section (symbol, sec);
+}
+
+/* Do VxWorks-specific parts of OVERRIDE_OPTIONS. */
+
+void
+vxworks_override_options (void)
+{
+ /* We can use .ctors/.dtors sections only in RTP mode. */
+ targetm.have_ctors_dtors = TARGET_VXWORKS_RTP;
+
+ /* PIC is only supported for RTPs. */
+ if (flag_pic && !TARGET_VXWORKS_RTP)
+ error ("PIC is only supported for RTPs");
+}
diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h
index 70345e24608..2d8bfbd8c86 100644
--- a/gcc/config/vxworks.h
+++ b/gcc/config/vxworks.h
@@ -26,8 +26,11 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
like a traditional Unix, with more external files. Most of our specs
must be aware of the difference. */
-/* The directory containing the VxWorks target headers. */
-#define VXWORKS_TARGET_DIR "/home/tornado/base6/target"
+/* We look for the VxWorks header files using the environment
+ variables that are set in VxWorks to indicate the location of the
+ system header files. We use -idirafter so that the GCC's own
+ header-file directories (containing <stddef.h>, etc.) come before
+ the VxWorks system header directories. */
/* Since we provide a default -isystem, expand -isystem on the command
line early. */
@@ -35,9 +38,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#define VXWORKS_ADDITIONAL_CPP_SPEC " \
%{!nostdinc:%{isystem*}} \
%{mrtp: -D__RTP__=1 \
- %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/usr/h}} \
+ %{!nostdinc:-idirafter %:getenv(WIND_USR /h)}} \
%{!mrtp:-D_WRS_KERNEL=1 \
- %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/h}}"
+ %{!nostdinc:-idirafter %:getenv(WIND_BASE /target/h)}}"
/* The references to __init and __fini will be satisfied by
libc_internal.a. */
@@ -79,25 +82,23 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#define VXWORKS_STARTFILE_SPEC "%{mrtp:%{!shared:crt0.o%s}}"
#define VXWORKS_ENDFILE_SPEC ""
-/* We can use .ctors/.dtors sections only in RTP mode.
- Unfortunately this must be an integer constant expression;
- fix up in override_options. */
+/* Do VxWorks-specific parts of OVERRIDE_OPTIONS. */
#undef VXWORKS_OVERRIDE_OPTIONS
-#define VXWORKS_OVERRIDE_OPTIONS do { \
- targetm.have_ctors_dtors = TARGET_VXWORKS_RTP; \
-} while (0)
+#define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
+extern void vxworks_override_options (void);
-/* The VxWorks runtime uses a clever trick to get the sentinel entry
- (-1) inserted at the beginning of the .ctors segment. This trick
- will not work if we ever generate any entries in plain .ctors
- sections; we must always use .ctors.PRIORITY. */
-#define ALWAYS_NUMBER_CTORS_SECTIONS 1
+/* VxWorks requires special handling of constructors and destructors.
+ All VxWorks configurations must use these functions. */
+#define TARGET_ASM_CONSTRUCTOR vxworks_asm_out_constructor
+#define TARGET_ASM_DESTRUCTOR vxworks_asm_out_destructor
+extern void vxworks_asm_out_constructor (rtx symbol, int priority);
+extern void vxworks_asm_out_destructor (rtx symbol, int priority);
-/* The name of the symbol for the table of GOTs in a particular
- RTP. */
+/* Override the vxworks-dummy.h definitions. TARGET_VXWORKS_RTP
+ is defined by vxworks.opt. */
+#undef VXWORKS_GOTT_BASE
#define VXWORKS_GOTT_BASE "__GOTT_BASE__"
-/* The name of the symbol for the index into the table of GOTs for the
- GOT associated with the current shared library. */
+#undef VXWORKS_GOTT_INDEX
#define VXWORKS_GOTT_INDEX "__GOTT_INDEX__"
#define VXWORKS_KIND VXWORKS_KIND_NORMAL
diff --git a/gcc/configure b/gcc/configure
index a2abfccbbc1..de3f6289b9e 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -7128,7 +7128,7 @@ if test "${with_sysroot+set}" = set; then
esac
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
- CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
if test "x$exec_prefix" = xNONE; then
if test "x$prefix" = xNONE; then
@@ -12292,6 +12292,7 @@ if test "${gcc_cv_mcontext_underscores+set}" = set; then
else
cat >conftest.$ac_ext <<_ACEOF
+#include <sys/cdefs.h>
#include <sys/signal.h>
#include <ucontext.h>
int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
@@ -13026,6 +13027,11 @@ tm_file_list="options.h"
tm_include_list="options.h"
for f in $tm_file; do
case $f in
+ ./* )
+ f=`echo $f | sed 's/^..//'`
+ tm_file_list="${tm_file_list} $f"
+ tm_include_list="${tm_include_list} $f"
+ ;;
defaults.h )
tm_file_list="${tm_file_list} \$(srcdir)/$f"
tm_include_list="${tm_include_list} $f"
@@ -13115,7 +13121,7 @@ ALL=all.internal
SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
if test "x$with_build_sysroot" != x; then
- build_system_header_dir=$with_build_sysroot'$(NATIVE_SYSTEM_HEADER_DIR)'
+ build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
else
# This value is used, even on a native system, because
# CROSS_SYSTEM_HEADER_DIR is just
@@ -15231,6 +15237,39 @@ _ACEOF
fi
+ echo "$as_me:$LINENO: checking assembler for sahf mnemonic" >&5
+echo $ECHO_N "checking assembler for sahf mnemonic... $ECHO_C" >&6
+if test "${gcc_cv_as_ix86_sahf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gcc_cv_as_ix86_sahf=no
+ if test x$gcc_cv_as != x; then
+ echo 'sahf' > conftest.s
+ if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }
+ then
+ gcc_cv_as_ix86_sahf=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ fi
+ rm -f conftest.o conftest.s
+ fi
+fi
+echo "$as_me:$LINENO: result: $gcc_cv_as_ix86_sahf" >&5
+echo "${ECHO_T}$gcc_cv_as_ix86_sahf" >&6
+if test $gcc_cv_as_ix86_sahf = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_AS_IX86_SAHF 1
+_ACEOF
+
+fi
+
echo "$as_me:$LINENO: checking assembler for different section symbol subtraction" >&5
echo $ECHO_N "checking assembler for different section symbol subtraction... $ECHO_C" >&6
if test "${gcc_cv_as_ix86_diff_sect_delta+set}" = set; then
@@ -15588,6 +15627,43 @@ LCF0:
addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
esac
+ echo "$as_me:$LINENO: checking assembler for rel16 relocs" >&5
+echo $ECHO_N "checking assembler for rel16 relocs... $ECHO_C" >&6
+if test "${gcc_cv_as_powerpc_rel16+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gcc_cv_as_powerpc_rel16=no
+ if test $in_tree_gas = yes; then
+ if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 17 \) \* 1000 + 0`
+ then gcc_cv_as_powerpc_rel16=yes
+fi
+ elif test x$gcc_cv_as != x; then
+ echo "$conftest_s" > conftest.s
+ if { ac_try='$gcc_cv_as -a32 -o conftest.o conftest.s >&5'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }
+ then
+ gcc_cv_as_powerpc_rel16=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ fi
+ rm -f conftest.o conftest.s
+ fi
+fi
+echo "$as_me:$LINENO: result: $gcc_cv_as_powerpc_rel16" >&5
+echo "${ECHO_T}$gcc_cv_as_powerpc_rel16" >&6
+if test $gcc_cv_as_powerpc_rel16 = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_AS_REL16 1
+_ACEOF
+
+fi
+
case $target in
*-*-aix*) conftest_s=' .machine "pwr6"
.csect .text[PR]
@@ -15679,43 +15755,6 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
fi
-
- echo "$as_me:$LINENO: checking assembler for rel16 relocs" >&5
-echo $ECHO_N "checking assembler for rel16 relocs... $ECHO_C" >&6
-if test "${gcc_cv_as_powerpc_rel16+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- gcc_cv_as_powerpc_rel16=no
- if test $in_tree_gas = yes; then
- if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 17 \) \* 1000 + 0`
- then gcc_cv_as_powerpc_rel16=yes
-fi
- elif test x$gcc_cv_as != x; then
- echo "$conftest_s" > conftest.s
- if { ac_try='$gcc_cv_as -a32 -o conftest.o conftest.s >&5'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }
- then
- gcc_cv_as_powerpc_rel16=yes
- else
- echo "configure: failed program was" >&5
- cat conftest.s >&5
- fi
- rm -f conftest.o conftest.s
- fi
-fi
-echo "$as_me:$LINENO: result: $gcc_cv_as_powerpc_rel16" >&5
-echo "${ECHO_T}$gcc_cv_as_powerpc_rel16" >&6
-if test $gcc_cv_as_powerpc_rel16 = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_AS_REL16 1
-_ACEOF
-
-fi
;;
mips*-*-*)
@@ -15999,6 +16038,46 @@ _ACEOF
fi
fi
+echo "$as_me:$LINENO: checking assembler for tolerance to line number 0" >&5
+echo $ECHO_N "checking assembler for tolerance to line number 0... $ECHO_C" >&6
+if test "${gcc_cv_as_line_zero+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gcc_cv_as_line_zero=no
+ if test $in_tree_gas = yes; then
+ if test $gcc_cv_gas_vers -ge `expr \( \( elf,2,16,91 \* 1000 \) + gcc_cv_as_line_zero=yes \) \* 1000 + `
+ then :
+fi
+ elif test "x$gcc_cv_as" != x; then
+ { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
+ if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5 2>conftest.out'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ test "x`cat conftest.out`" = x
+ then
+ gcc_cv_as_line_zero=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ echo "configure: error output was" >&5
+ cat conftest.out >&5
+ fi
+ rm -f conftest.o conftest.s conftest.out
+ fi
+fi
+echo "$as_me:$LINENO: result: $gcc_cv_as_line_zero" >&5
+echo "${ECHO_T}$gcc_cv_as_line_zero" >&6
+if test "x$gcc_cv_as_line_zero" = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_AS_LINE_ZERO 1
+_ACEOF
+
+fi
+
echo "$as_me:$LINENO: checking linker read-only and read-write section mixing" >&5
echo $ECHO_N "checking linker read-only and read-write section mixing... $ECHO_C" >&6
gcc_cv_ld_ro_rw_mix=unknown
@@ -16303,6 +16382,8 @@ else
if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
if test "x$with_sysroot" = x; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_build_sysroot" != "x"; then
+ glibc_header_dir="${with_build_sysroot}/usr/include"
elif test "x$with_sysroot" = xyes; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
else
@@ -16457,6 +16538,8 @@ else
if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
if test "x$with_sysroot" = x; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_build_sysroot" != "x"; then
+ glibc_header_dir="${with_build_sysroot}/usr/include"
elif test "x$with_sysroot" = xyes; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
else
@@ -16673,8 +16756,8 @@ done
rm -f Make-hooks
touch Make-hooks
target_list="all.cross start.encap rest.encap tags \
- install-common install-man install-info dvi pdf html \
- uninstall info man srcextra srcman srcinfo \
+ install-common install-man install-info install-pdf dvi pdf \
+ html uninstall info man srcextra srcman srcinfo \
mostlyclean clean distclean maintainer-clean"
for t in $target_list
diff --git a/gcc/configure.ac b/gcc/configure.ac
index db9a0c3d02f..18134cae8fb 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1,7 +1,7 @@
# configure.ac for GCC
# Process this file with autoconf to generate a configuration script.
-# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
# Free Software Foundation, Inc.
#This file is part of GCC.
@@ -754,7 +754,7 @@ AC_ARG_WITH(sysroot,
esac
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
- CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
+ CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
if test "x$exec_prefix" = xNONE; then
if test "x$prefix" = xNONE; then
@@ -1334,6 +1334,7 @@ case ${host} in
AC_CACHE_CHECK([whether mcontext_t fields have underscores],
gcc_cv_mcontext_underscores,
AC_COMPILE_IFELSE([
+#include <sys/cdefs.h>
#include <sys/signal.h>
#include <ucontext.h>
int main() { mcontext_t m; if (m->ss.srr0) return 0; return 0; }
@@ -1609,6 +1610,11 @@ tm_file_list="options.h"
tm_include_list="options.h"
for f in $tm_file; do
case $f in
+ ./* )
+ f=`echo $f | sed 's/^..//'`
+ tm_file_list="${tm_file_list} $f"
+ tm_include_list="${tm_include_list} $f"
+ ;;
defaults.h )
tm_file_list="${tm_file_list} \$(srcdir)/$f"
tm_include_list="${tm_include_list} $f"
@@ -1698,7 +1704,7 @@ ALL=all.internal AC_SUBST(ALL)
SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)' AC_SUBST(SYSTEM_HEADER_DIR)
if test "x$with_build_sysroot" != x; then
- build_system_header_dir=$with_build_sysroot'$(NATIVE_SYSTEM_HEADER_DIR)'
+ build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
else
# This value is used, even on a native system, because
# CROSS_SYSTEM_HEADER_DIR is just
@@ -2802,6 +2808,12 @@ foo: nop
[AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
[Define if your assembler supports the ffreep mnemonic.])])
+ gcc_GAS_CHECK_FEATURE([sahf mnemonic],
+ gcc_cv_as_ix86_sahf,,,
+ [sahf],,
+ [AC_DEFINE(HAVE_AS_IX86_SAHF, 1,
+ [Define if your assembler supports the sahf mnemonic.])])
+
gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
gcc_cv_as_ix86_diff_sect_delta,,,
[.section .rodata
@@ -2925,6 +2937,12 @@ LCF0:
addis 11,30,_GLOBAL_OFFSET_TABLE_-.LCF0@ha';;
esac
+ gcc_GAS_CHECK_FEATURE([rel16 relocs],
+ gcc_cv_as_powerpc_rel16, [2,17,0], -a32,
+ [$conftest_s],,
+ [AC_DEFINE(HAVE_AS_REL16, 1,
+ [Define if your assembler supports R_PPC_REL16 relocs.])])
+
case $target in
*-*-aix*) conftest_s=' .machine "pwr6"
.csect .text[[PR]]
@@ -2954,12 +2972,6 @@ LCF0:
[$conftest_s],,
[AC_DEFINE(HAVE_AS_DFP, 1,
[Define if your assembler supports DFP instructions.])])
-
- gcc_GAS_CHECK_FEATURE([rel16 relocs],
- gcc_cv_as_powerpc_rel16, [2,17,0], -a32,
- [$conftest_s],,
- [AC_DEFINE(HAVE_AS_REL16, 1,
- [Define if your assembler supports R_PPC_REL16 relocs.])])
;;
mips*-*-*)
@@ -3063,6 +3075,30 @@ if test x"$insn" != x; then
[Define if your assembler supports the --gstabs option.])])
fi
+AC_CACHE_CHECK([assembler for tolerance to line number 0],
+ [gcc_cv_as_line_zero],
+ [gcc_cv_as_line_zero=no
+ if test $in_tree_gas = yes; then
+ gcc_GAS_VERSION_GTE_IFELSE([elf,2,16,91], [gcc_cv_as_line_zero=yes])
+ elif test "x$gcc_cv_as" != x; then
+ { echo '# 1 "test.s" 1'; echo '# 0 "" 2'; } > conftest.s
+ if AC_TRY_COMMAND([$gcc_cv_as -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD 2>conftest.out]) &&
+ test "x`cat conftest.out`" = x
+ then
+ gcc_cv_as_line_zero=yes
+ else
+ echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
+ cat conftest.s >&AS_MESSAGE_LOG_FD
+ echo "configure: error output was" >&AS_MESSAGE_LOG_FD
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.o conftest.s conftest.out
+ fi])
+if test "x$gcc_cv_as_line_zero" = xyes; then
+ AC_DEFINE([HAVE_AS_LINE_ZERO], 1,
+[Define if the assembler won't complain about a line such as # 0 "" 2.])
+fi
+
AC_MSG_CHECKING(linker read-only and read-write section mixing)
gcc_cv_ld_ro_rw_mix=unknown
if test $in_tree_ld = yes ; then
@@ -3318,6 +3354,8 @@ AC_CACHE_CHECK(__stack_chk_fail in target C library,
if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
if test "x$with_sysroot" = x; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_build_sysroot" != "x"; then
+ glibc_header_dir="${with_build_sysroot}/usr/include"
elif test "x$with_sysroot" = xyes; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
else
@@ -3369,6 +3407,8 @@ case "$target" in
if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
if test "x$with_sysroot" = x; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_build_sysroot" != "x"; then
+ glibc_header_dir="${with_build_sysroot}/usr/include"
elif test "x$with_sysroot" = xyes; then
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
else
@@ -3573,8 +3613,8 @@ done
rm -f Make-hooks
touch Make-hooks
target_list="all.cross start.encap rest.encap tags \
- install-common install-man install-info dvi pdf html \
- uninstall info man srcextra srcman srcinfo \
+ install-common install-man install-info install-pdf dvi pdf \
+ html uninstall info man srcextra srcman srcinfo \
mostlyclean clean distclean maintainer-clean"
for t in $target_list
diff --git a/gcc/convert.c b/gcc/convert.c
index b6c6d0fcf75..82b40bad0a7 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -413,12 +413,12 @@ convert_to_integer (tree type, tree expr)
fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
break;
- CASE_FLT_FN (BUILT_IN_RINT):
- /* Only convert rint* if we can ignore math exceptions. */
+ CASE_FLT_FN (BUILT_IN_NEARBYINT):
+ /* Only convert nearbyint* if we can ignore math exceptions. */
if (flag_trapping_math)
break;
/* ... Fall through ... */
- CASE_FLT_FN (BUILT_IN_NEARBYINT):
+ CASE_FLT_FN (BUILT_IN_RINT):
if (outprec < TYPE_PRECISION (long_integer_type_node)
|| (outprec == TYPE_PRECISION (long_integer_type_node)
&& !TYPE_UNSIGNED (type)))
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c3263933a46..2142ac4082b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,416 @@
+2007-03-15 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/30860
+ * call.c (convert_conversion_warnings): New..
+ (convert_like_real): .. factored out from here.
+ (convert_conversion_warnings): Add warning about
+ false being converted to NULL in argument passing.
+
+2007-03-14 Dirk Mueller <dmueller@suse.de>
+
+ * cp/semantics.c (c_finish_if_stmt): Call empty_if_body_warning.
+ (finish_do_body): Warn about empty body in do/while statement.
+
+2007-03-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * class.c (warn_hidden): Add OPT_Woverloaded_virtual to warning.
+
+2007-03-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c/21438
+ * typeck.c (build_binary_op): Call warn_for_div_zero instead of
+ warning.
+
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ * cp/repo.c (init_repo): Initialize random_seed saved options.
+ (finish_repo): Adjust.
+
+2007-03-13 Mark Mitchell <mark@codesourcery.com>
+
+ PR bootstrap/30899
+ * Make-lang.in (doc/g++.1): Use $< to specify the location from
+ which to copy.
+
+2007-03-12 Seongbae Park <seongbae.park@gmail.com>
+
+ * decl.c (compute_array_index_type): New warning flag warn_vla.
+
+2007-03-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/30108
+ * call.c (convert_default_arg): Copy non-constant arguments.
+
+2007-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/31038
+ * parser.c (cp_parser_postfix_expression): Disallow compound
+ literals in constant expressions.
+
+ PR c++/30328
+ * semantics.c (finish_typeof): Use unlowered_expr_type.
+
+2007-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/30274
+ * cp-tree.h (unlowered_expr_type): New function.
+ * typeck.c (is_bitfield_expr_with_lowered_type): Handle
+ COMPOUND_EXPR, MODIFY_EXPR, and SAVE_EXPR.
+ (unlowered_expr_type): New function.
+ (build_unary_op): Disallow predecrements of bool bitfields.
+ * call.c (build_conditional_expr): Use unlowered_expr_type.
+ * pt.c (type_unification_real): Likewise.
+
+2007-03-09 Douglas Gregor <doug.gregor@gmail.com>
+
+ PR c++/20599
+ * typeck.c (check_return_expr): Check for bare parameter packs.
+ (comptypes): Compare template parameter packs and
+ type pack expansions.
+ * decl.c (grokdeclarator): Deal with the declaration of function
+ parameter packs.
+ (grokparms): Verify that the (optional) function parameter pack is
+ at the end of the parameter list.
+ (xref_basetypes): Handle pack expansions in the base class.
+ (cp_tree_node_structure): Handle ARGUMENT_PACK_SELECT.
+ * cp-tree.def (TYPE_ARGUMENT_PACK): New.
+ (NONTYPE_ARGUMENT_PACK): New.
+ (TYPE_PACK_EXPANSION): New.
+ (EXPR_PACK_EXPANSION): New.
+ (ARGUMENT_PACK_SELECT): New.
+ * cp-objcp-common.c (cp_tree_size): Compute size of
+ (NON)TYPE_ARGUMENT_PACK, (TYPE|EXPR)_PACK_EXPANSION, and
+ ARGUMENT_PACK_SELECT.
+ * error.c (dump_template_argument): Print template argument packs.
+ (dump_template_argument_list): Ditto.
+ (dump_template_parameter): Dump `...' for template type parameter
+ packs.
+ (dump_type): Dump TYPE_PACK_EXPANSION nodes.
+ (dump_parameters): Print function parameter packs.
+ (dump_template_parms): Print template argument packs.
+ (dump_expr): Dump EXPR_PACK_EXPANSION nodes.
+ (maybe_warn_variadic_templates): New.
+ * operators.def: Add ellipsis operator for EXPR_PACK_EXPANSION.
+ * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
+ NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
+ CAST_EXPR.
+ * mangle.c (write_type): Mangle TYPE_PACK_EXPANSION.
+ (write_template_arg): Write argument packs as separate arguments.
+ * cp-tree.h (struct template_parm_index_s): Add flag that
+ indicates that the template parameter is actually a parameter
+ pack.
+ (struct tree_argument_pack_select): New.
+ (enum cp_tree_node_structure_enum): Add TS_CP_ARGUMENT_PACK_SELECT.
+ (union lang_tree_node): Add argument_pack_select.
+ (FUNCTION_PARAMETER_PACK_P): New.
+ (PACK_EXPANSION_P): New.
+ (PACK_EXPANSION_PATTERN): New.
+ (SET_PACK_EXPANSION_PATTERN): New.
+ (PACK_EXPANSION_PARAMETER_PACKS): New.
+ (ARGUMENT_PACK_P): New.
+ (ARGUMENT_PACK_ARGS): New.
+ (SET_ARGUMENT_PACK_ARGS): New.
+ (ARGUMENT_PACK_INCOMPLETE_P): New.
+ (ARGUMENT_PACK_EXPLICIT_ARGS): New.
+ (TEMPLATE_PARM_PARAMETER_PACK): New.
+ (TEMPLATE_TYPE_PARAMETER_PACK): New.
+ (ARGUMENT_PACK_SELECT_FROM_PACK): New.
+ (ARGUMENT_PACK_SELECT_INDEX): New.
+ (ARGUMENT_PACK_SELECT_ARG): New.
+ (struct cp_declarator): Add parameter_pack_p flag.
+ (maybe_warn_variadic_templates): Declare.
+ (process_template_parm): Add bool parameter IS_PARAMETER_PACK, to
+ indicate a template parameter pack.
+ (uses_parameter_packs): Declare.
+ (template_parameter_pack_p): Declare.
+ (template_parms_variadic_p): Declare.
+ (make_pack_expansion): Declare.
+ (check_for_bare_parameter_packs): Declare.
+ * cxx-pretty-print.c (pp_cxx_unary_expression): Print
+ sizeof... expressions.
+ (pp_cxx_expression): Print pack expansions and non-type argument
+ packs.
+ (pp_cxx_exception_specification): Print pack expansions.
+ (pp_cxx_direct_declarator): Print ellipsis for parameter packs.
+ (pp_cxx_ctor_initializer): Print pack expansions.
+ (pp_cxx_type_id): Print pack expansions.
+ (pp_cxx_template_argument_list): Print argument packs.
+ (pp_cxx_template_parameter): Print ellipsis for template parameter
+ packs.
+ * pt.c (comp_template_parms): Compare template parameter packs.
+ (template_parameter_pack_p): New.
+ (template_parms_variadic_p): New.
+ (template_args_variadic_p): New.
+ (make_ith_pack_parameter_name): New.
+ (struct find_parameter_pack_data): New.
+ (find_parameter_packs_r): New.
+ (uses_parameter_packs): New.
+ (make_pack_expansion): New.
+ (check_for_bare_parameter_packs): New.
+ (expand_template_argument_pack): New.
+ (reduce_template_parm_level): Propagate parameter pack flag.
+ (process_template_parm): Add is_parameter_pack parameter to state
+ when the parameter is actually a parameter pack. Create template
+ parameter packs when is_parameter_pack is true.
+ (current_template_args): The argument for a template parameter
+ pack is an argument pack containing a single pack expansion.
+ (process_partial_specialization): When checking that non-type
+ argument expressions do not involve template parameters, loop over
+ the arguments in argument packs separately.
+ (push_template_decl_real): Check that the type of the declaration
+ does not have any bare parameter packs. Check that primary
+ templates have no more than one parameter pack, and that it comes
+ at the end of the template parameter list.
+ (convert_template_argument): Handle coercions for pack expansion
+ expressions by coercing the pattern then rebuilding the expansion.
+ (coerce_template_parms): When coercing the arguments for a
+ variadic template, pack "extra" arguments into an argument pack.
+ (coerce_template_template_parms): Cannot coerce between parameter
+ packs and non-pack parameters.
+ (template_args_equal): Compare PACK_EXPANSION_P expressions.
+ (comp_template_args): Expand all template arguments packs before
+ comparing template argument lists.
+ (mangle_class_name_for_template): Make argument packs as separate
+ template arguments.
+ (for_each_template_parm_r): No need to handle BASELINK.
+ (instantiate_class_template): Handle pack expansions in the base
+ class list.
+ (tsubst_pack_expansion): New.
+ (tsubst_template_args): Handle substitutions of argument packs and
+ pack expansion into template argument lists.
+ (tsubst_decl): Expand function parameter packs into separate
+ function parameters.
+ (tsubst_arg_types): Expand a type pack expansion into separate
+ argument types.
+ (tsubst_exception_specification): Handle pack expansions in
+ exception specifiers.
+ (tsubst): See through ARGUMENT_PACK_SELECT arguments when
+ replacing a template parameter with its argument. If we encounter
+ a substitution for an argument pack, just return the parameter
+ itself.
+ (tsubst_copy): sizeof(X...) returns the number of elements in
+ parameter pack X. See through ARGUMENT_PACK_SELECT when the
+ PARM_DECL is a parameter pack.
+ (tsubst_expr): Expression pack expansions and argument packs
+ cannot show up here; they will all be handled through function
+ calls, sizeof, and template argument lists.
+ (tsubst_copy_and_build): sizeof(X...) returns the number of
+ elements in parameter pack X. Handle pack expansions in TREE_LIST
+ and CONSTRUCTOR nodes.
+ (fn_type_unification): Handle "incomplete" explicit template
+ argument lists that specify some of the arguments for a template
+ parameter pack.
+ (type_unification_real): Unify arguments against pack expansions.
+ (template_parm_level_and_index): New, helper function.
+ (unify_pack_expansion): New.
+ (unify): Unify argument packs on an argument-by-argument basis,
+ handling variadic argument packs as well.
+ (more_specialized_fn): Handle unification of function parameter
+ packs. All things being equal, prefer non-variadic function
+ templates to variadic function templates.
+ (more_specialized_class): Prefer the variadic class template
+ partial specialization that binds fewer arguments to a parameter
+ pack.
+ (regenerate_decl_from_template): Expand function parameter packs
+ into separate parameters.
+ (instantiate_decl): Ditto.
+ (tsubst_initializer_list): Handle pack expansions for base-class
+ initializers.
+ (dependent_type_p_r): Determine dependent types in argument packs
+ and pack expansions.
+ (value_dependent_expression_p): Determine value-dependence of
+ non-type argument packs.
+ (dependent_template_arg_p): Handle argument packs.
+ * semantics.c (finish_cond): Check for bare parameter packs.
+ (finish_expr_stmt): Ditto.
+ (finish_for_expr): Ditto.
+ (finish_switch_cond): Ditto.
+ (finish_mem_initializers): Ditto.
+ * name-lookup.c (arg_assoc_type): Handle pack expansions and
+ argument packs.
+ * decl2.c (cp_build_parm_decl): Mark function parameter packs.
+ * parser.c (make_declarator): Declarator is not an expansion.
+ (make_pointer_declarator): Transfer parameter pack flag to outer
+ declarator.
+ (make_reference_declarator): Ditto.
+ (make_ptrmem_declarator): Ditto.
+ (make_call_declarator): Ditto.
+ (make_array_declarator): Ditto.
+ (cp_parser_postfix_expression): Allow pack expansion expressions
+ in the argument list for a call expression.
+ (cp_parser_parenthesized_expression_list): Add new parameter
+ ALLOW_EXPANSION_P. When true, parse the ellipsis to mean "expand
+ into separate arguments."
+ (cp_parser_new_placement): Allow pack expansion expressions.
+ (cp_parser_new_initializer): Ditto.
+ (cp_parser_mem_initializer_list): Allow ellipsis to create a
+ base-class initializer expansion.
+ (cp_parser_mem_initializer): Ditto.
+ (cp_parser_template_parameter_list): Keep track of whether the
+ template parameter is a template parameter pack.
+ (cp_parser_template_parameter): Parse the ellipsis to indicate a
+ template parameter pack.
+ (cp_parser_type_parameter): Ditto.
+ (cp_parser_template_argument_list): Parse the ellipsis to indicate
+ a pack expansion.
+ (cp_parser_direct_declarator): Parse the ellipsis to indicate that
+ this declarator is a parameter pack.
+ (cp_parser_parameter_declaration): The ellipsis does not end the
+ parameter declaration, because it might be a parameter pack. Parse
+ the ellipsis to indicate a parameter pack.
+ (cp_parser_initializer): Allow pack expansions.
+ (cp_parser_initializer_list): Allow ellipsis to create an
+ initializer expansion.
+ (cp_parser_base_clause): Allow ellipsis to create a base specifier
+ expansion.
+ (cp_parser_type_id_list): Allow ellipsis to create an exception
+ specifier expansion.
+ (cp_parser_attribute_list): Don't allow pack expansions.
+ (cp_parser_functional_cast): Allow pack expansions.
+ (cp_parser_sizeof_operand): Allow ellipsis following "sizeof" to
+ compute the length of a parameter pack.
+ (cp_parser_next_token_ends_template_argument_p): An ellipsis can
+ end a template argument.
+ * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
+ NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
+ CAST_EXPR.
+
+2007-03-09 Dirk Mueller <dmueller@suse.de>
+
+ * cp/call.c (build_new_op): Call warn_logical_operator.
+
+2007-03-08 Volker Reichelt <reichelt@netcologne.de>
+
+ PR c++/30852
+ * semantics.c (finish_offsetof): Handle COMPOUND_EXPR.
+
+ PR c++/30534
+ * pt.c (any_template_arguments_need_structural_equality_p):
+ Robustify.
+
+2007-03-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * decl.c (grokdeclarator): Disable warnings for anonymous
+ bitfields.
+
+2007-03-05 Volker Reichelt <reichelt@netcologne.de>
+
+ * typeck2.c (readonly_error): Always emit a hard error.
+ Remove last argument.
+ * cp-tree.h (readonly_error): Adjust prototype.
+ * semantics.c (finish_asm_stmt): Adjust call to readonly_error.
+ * typeck.c (build_unary_op): Likewise.
+ (build_modify_expr): Likewise.
+
+2007-03-04 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/30895
+ * tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
+
+2007-03-03 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c++/15787
+ * parser.c (struct cp_parser): New IN_IF_STMT.
+ (cp_parser_statement_seq_opt): Handle an unexpected 'else',
+ returning if parsing the body of an 'if' statement or issuing an
+ error and continuing.
+ (cp_parser_selection_statement): Set IN_IF_STMT bit when parsing
+ body of 'if'.
+ (cp_parser_jump_statement): Mask new IN_IF_STMT bit.
+
+2007-03-02 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/28253
+ * class.c (update_vtable_entry_for_fn): Properly handle invalid overriders
+ for thunks.
+
+2007-03-02 Geoffrey Keating <geoffk@apple.com>
+
+ * g++spec.c (lang_specific_driver): Add -lstdc++ when compiling
+ Objective-C++. Don't exit early if -shared-libgcc needs to be
+ added.
+
+2007-03-02 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * typeck.c (common_base_type): Delete unused function.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add dummy lang.install-pdf target.
+
+2007-03-01 Simon Baldwin <simonb@google.com>
+
+ PR c++/23689
+ * decl.c (check_tag_decl): Added new warning for typedef ignored
+ when it precedes an otherwise valid non-typedef declaration.
+
+2007-02-28 Sandra Loosemore <sandra@codesourcery.com>
+
+ * typeck.c (build_function_call): Store converted arguments
+ in a stack-allocated array instead of building a list.
+ (convert_arguments): Store arguments in the array passed in as an
+ argument, and return the actual number of arguments.
+ * call.c (build_call): Delete, and replace with...
+ (build_call_n, build_call_a): New.
+ (build_op_delete_call): Rewrite to avoid constructing argument lists.
+ (build_over_call): Store converted arguments in a stack-allocated
+ array instead of building a list.
+ (build_cxx_call): Pass arguments in an array instead of as a list.
+ (build_java_interface_fn_ref): Rewrite to avoid constructing
+ argument lists.
+ * tree.h: Update declarations to reflect above changes.
+ * method.c (use_thunk): Use a stack-allocated array to hold
+ the arguments instead of a list.
+ * rtti.c (throw_bad_cast): Update call to cxx_call.
+ (throw_bad_typeid): Likewise.
+ (build_dynamic_cast_1): Likewise.
+ * init.c (build_builtin_delete_call): Use build_call_n.
+ * decl.c (expand_static_init): Likewise.
+ * except.c (cp_protect_cleanup_actions): Likewise.
+ * cp-gimplify.c (genericize_eh_spec_block): Likewise.
+ (gimplify_must_not_throw_expr): Likewise.
+ (cxx_omp_apply_fn): Use build_call_a.
+
+2007-02-26 Mark Mitchell <mark@codesourcery.com>
+
+ * semantics.c (expand_or_defer_fn): Call c_record_cdtor_fn.
+ * decl2.c (cp_write_gloabl_declarations): Call c_build_cdtor_fns.
+
+2007-02-25 Mark Mitchell <mark@codesourcery.com>
+
+ * cp-tree.h (static_ctors): Remove.
+ * cp-tree.h (static_dtors): Likewise.
+ * cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for
+ refactoring of tree_map hierarchy.
+ (decl_shadowed_for_var_insert): Likewise.
+ * semantics.c (expand_body): Use c_expand_body.
+ (expand_or_defer_fn): Don't update static_ctors or static_dtors.
+ * decl2.c (static_ctors): Remove.
+ (static_dtors): Likewise.
+ (generate_ctor_or_dtor_function): Pass NULL_TREE to
+ objc_generate_static_init_call. Do not call static_[cd]tors.
+ (generate_ctor_and_dtor_functions_for_priority): Do not check for
+ static_[cd]tors.
+ (cp_write_global_declarations): Likewise.
+
+2007-02-23 Richard Guenther <rguenther@suse.de>
+
+ * class.c (note_name_declared_in_class): Make declaration
+ changes meaning a pedwarn.
+
+2007-02-22 Michael Matz <matz@suse.de>
+
+ PR c++/29433
+ * cp-tree.h (TFF_UNQUALIFIED_NAME): New formatting flag.
+ * error.c (dump_aggr_type, dump_simple_decl, dump_decl,
+ dump_function_decl): Guard emitting outer scopes by new flag.
+ * cp-lang.c (cxx_dwarf_name): New function.
+ (LANG_HOOKS_DWARF_NAME): Define to cxx_dwarf_name.
+ * pt.c (classtype_mangled_name, mangle_class_name_for_template):
+ Remove functions.
+ (push_template_decl_real, lookup_template_class): Remove calls
+ to above functions.
+
2007-02-19 Mark Mitchell <mark@codesourcery.com>
* call.c (build_new_method_call): Ensure that explicit calls of
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index b16bcc1849c..e2be4bcb764 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -24,8 +24,8 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf
-# foo.uninstall,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -119,6 +119,7 @@ c++.info:
c++.install-info:
c++.dvi:
c++.pdf:
+c++.install-pdf:
c++.html:
c++.srcinfo:
c++.srcextra:
@@ -175,7 +176,7 @@ c++.install-common: installdirs
# We can't use links because not everyone supports them, and we can't use
# .so because Irix 6.5 doesn't support them. So just copy the manpage.
doc/g++.1: doc/gcc.1
- cp doc/gcc.1 doc/g++.1
+ cp $< doc/g++.1
c++.install-man: $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext)
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index f60c59260fd..53129bb881a 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -269,17 +269,38 @@ build_addr_func (tree function)
/* Build a CALL_EXPR, we can handle FUNCTION_TYPEs, METHOD_TYPEs, or
POINTER_TYPE to those. Note, pointer to member function types
- (TYPE_PTRMEMFUNC_P) must be handled by our callers. */
+ (TYPE_PTRMEMFUNC_P) must be handled by our callers. There are
+ two variants. build_call_a is the primitive taking an array of
+ arguments, while build_call_n is a wrapper that handles varargs. */
tree
-build_call (tree function, tree parms)
+build_call_n (tree function, int n, ...)
+{
+ if (n == 0)
+ return build_call_a (function, 0, NULL);
+ else
+ {
+ tree *argarray = (tree *) alloca (n * sizeof (tree));
+ va_list ap;
+ int i;
+
+ va_start (ap, n);
+ for (i = 0; i < n; i++)
+ argarray[i] = va_arg (ap, tree);
+ va_end (ap);
+ return build_call_a (function, n, argarray);
+ }
+}
+
+tree
+build_call_a (tree function, int n, tree *argarray)
{
int is_constructor = 0;
int nothrow;
- tree tmp;
tree decl;
tree result_type;
tree fntype;
+ int i;
function = build_addr_func (function);
@@ -327,16 +348,16 @@ build_call (tree function, tree parms)
for tags in STL, which are used to control overload resolution.
We don't need to handle other cases of copying empty classes. */
if (! decl || ! DECL_BUILT_IN (decl))
- for (tmp = parms; tmp; tmp = TREE_CHAIN (tmp))
- if (is_empty_class (TREE_TYPE (TREE_VALUE (tmp)))
- && ! TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (tmp))))
+ for (i = 0; i < n; i++)
+ if (is_empty_class (TREE_TYPE (argarray[i]))
+ && ! TREE_ADDRESSABLE (TREE_TYPE (argarray[i])))
{
- tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (TREE_VALUE (tmp)));
- TREE_VALUE (tmp) = build2 (COMPOUND_EXPR, TREE_TYPE (t),
- TREE_VALUE (tmp), t);
+ tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (argarray[i]));
+ argarray[i] = build2 (COMPOUND_EXPR, TREE_TYPE (t),
+ argarray[i], t);
}
- function = build_call_list (result_type, function, parms);
+ function = build_call_array (result_type, function, n, argarray);
TREE_HAS_CONSTRUCTOR (function) = is_constructor;
TREE_NOTHROW (function) = nothrow;
@@ -3229,12 +3250,8 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
array-to-pointer (_conv.array_), and function-to-pointer
(_conv.func_) standard conversions are performed on the second
and third operands. */
- arg2_type = is_bitfield_expr_with_lowered_type (arg2);
- if (!arg2_type)
- arg2_type = TREE_TYPE (arg2);
- arg3_type = is_bitfield_expr_with_lowered_type (arg3);
- if (!arg3_type)
- arg3_type = TREE_TYPE (arg3);
+ arg2_type = unlowered_expr_type (arg2);
+ arg3_type = unlowered_expr_type (arg3);
if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type))
{
/* Do the conversions. We don't these for `void' type arguments
@@ -3673,6 +3690,7 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
void *p;
bool strict_p;
bool any_viable_p;
+ bool expl_eq_arg1 = false;
if (error_operand_p (arg1)
|| error_operand_p (arg2)
@@ -3702,6 +3720,12 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
case CALL_EXPR:
return build_object_call (arg1, arg2);
+ case TRUTH_ORIF_EXPR:
+ case TRUTH_ANDIF_EXPR:
+ case TRUTH_AND_EXPR:
+ case TRUTH_OR_EXPR:
+ if (COMPARISON_CLASS_P (arg1))
+ expl_eq_arg1 = true;
default:
break;
}
@@ -3909,6 +3933,12 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
conv = conv->u.next;
arg3 = convert_like (conv, arg3);
}
+
+ if (!expl_eq_arg1)
+ {
+ warn_logical_operator (code, arg1, arg2);
+ expl_eq_arg1 = true;
+ }
}
}
@@ -3929,6 +3959,12 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
case INDIRECT_REF:
return build_indirect_ref (arg1, "unary *");
+ case TRUTH_ANDIF_EXPR:
+ case TRUTH_ORIF_EXPR:
+ case TRUTH_AND_EXPR:
+ case TRUTH_OR_EXPR:
+ if (!expl_eq_arg1)
+ warn_logical_operator (code, arg1, arg2);
case PLUS_EXPR:
case MINUS_EXPR:
case MULT_EXPR:
@@ -3947,8 +3983,6 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
case BIT_AND_EXPR:
case BIT_IOR_EXPR:
case BIT_XOR_EXPR:
- case TRUTH_ANDIF_EXPR:
- case TRUTH_ORIF_EXPR:
return cp_build_binary_op (code, arg1, arg2);
case UNARY_PLUS_EXPR:
@@ -4005,7 +4039,7 @@ build_op_delete_call (enum tree_code code, tree addr, tree size,
tree alloc_fn)
{
tree fn = NULL_TREE;
- tree fns, fnname, argtypes, args, type;
+ tree fns, fnname, argtypes, type;
int pass;
if (addr == error_mark_node)
@@ -4036,25 +4070,22 @@ build_op_delete_call (enum tree_code code, tree addr, tree size,
if (fns == NULL_TREE)
fns = lookup_name_nonclass (fnname);
+ /* Strip const and volatile from addr. */
+ addr = cp_convert (ptr_type_node, addr);
+
if (placement)
{
/* Get the parameter types for the allocation function that is
being called. */
gcc_assert (alloc_fn != NULL_TREE);
argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (alloc_fn)));
- /* Also the second argument. */
- args = TREE_CHAIN (TREE_OPERAND (placement, 1));
}
else
{
/* First try it without the size argument. */
argtypes = void_list_node;
- args = NULL_TREE;
}
- /* Strip const and volatile from addr. */
- addr = cp_convert (ptr_type_node, addr);
-
/* We make two tries at finding a matching `operator delete'. On
the first pass, we look for a one-operator (or placement)
operator delete. If we're not doing placement delete, then on
@@ -4113,21 +4144,29 @@ build_op_delete_call (enum tree_code code, tree addr, tree size,
if (DECL_CLASS_SCOPE_P (fn))
perform_or_defer_access_check (TYPE_BINFO (type), fn, fn);
- if (pass == 0)
- args = tree_cons (NULL_TREE, addr, args);
- else
- args = tree_cons (NULL_TREE, addr,
- build_tree_list (NULL_TREE, size));
-
if (placement)
{
/* The placement args might not be suitable for overload
resolution at this point, so build the call directly. */
+ int nargs = call_expr_nargs (placement);
+ tree *argarray = (tree *) alloca (nargs * sizeof (tree));
+ int i;
+ argarray[0] = addr;
+ for (i = 1; i < nargs; i++)
+ argarray[i] = CALL_EXPR_ARG (placement, i);
mark_used (fn);
- return build_cxx_call (fn, args);
+ return build_cxx_call (fn, nargs, argarray);
}
else
- return build_function_call (fn, args);
+ {
+ tree args;
+ if (pass == 0)
+ args = tree_cons (NULL_TREE, addr, NULL_TREE);
+ else
+ args = tree_cons (NULL_TREE, addr,
+ build_tree_list (NULL_TREE, size));
+ return build_function_call (fn, args);
+ }
}
/* If we are doing placement delete we do nothing if we don't find a
@@ -4206,6 +4245,41 @@ build_temp (tree expr, tree type, int flags,
return expr;
}
+/* Perform warnings about conversion of EXPR to type TOTYPE.
+ FN and ARGNUM are used for diagnostics. */
+
+static void
+convert_conversion_warnings (tree totype, tree expr, tree fn, int argnum)
+{
+ tree t = non_reference (totype);
+
+ /* Issue warnings about peculiar, but valid, uses of NULL. */
+ if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
+ {
+ if (fn)
+ warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
+ argnum, fn);
+ else
+ warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
+ }
+
+ /* Warn about assigning a floating-point type to an integer type. */
+ if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
+ && TREE_CODE (t) == INTEGER_TYPE)
+ {
+ if (fn)
+ warning (OPT_Wconversion, "passing %qT for argument %P to %qD",
+ TREE_TYPE (expr), argnum, fn);
+ else
+ warning (OPT_Wconversion, "converting to %qT from %qT", t, TREE_TYPE (expr));
+ }
+
+ /* Issue warnings if "false" is converted to a NULL pointer */
+ if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
+ warning (OPT_Wconversion,
+ "converting %<false%> to pointer type for argument %P of %qD",
+ argnum, fn);
+}
/* Perform the conversions in CONVS on the expression EXPR. FN and
ARGNUM are used for diagnostics. ARGNUM is zero based, -1
@@ -4254,30 +4328,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
}
if (issue_conversion_warnings)
- {
- tree t = non_reference (totype);
-
- /* Issue warnings about peculiar, but valid, uses of NULL. */
- if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
- {
- if (fn)
- warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
- argnum, fn);
- else
- warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
- }
-
- /* Warn about assigning a floating-point type to an integer type. */
- if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
- && TREE_CODE (t) == INTEGER_TYPE)
- {
- if (fn)
- warning (OPT_Wconversion, "passing %qT for argument %P to %qD",
- TREE_TYPE (expr), argnum, fn);
- else
- warning (OPT_Wconversion, "converting to %qT from %qT", t, TREE_TYPE (expr));
- }
- }
+ convert_conversion_warnings (totype, expr, fn, argnum);
switch (convs->kind)
{
@@ -4494,7 +4545,7 @@ call_builtin_trap (void)
tree fn = implicit_built_in_decls[BUILT_IN_TRAP];
gcc_assert (fn != NULL);
- fn = build_call (fn, NULL_TREE);
+ fn = build_call_n (fn, 0);
return fn;
}
@@ -4625,10 +4676,14 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum)
}
else
{
- /* This could get clobbered by the following call. */
- if (TREE_HAS_CONSTRUCTOR (arg))
+ /* We must make a copy of ARG, in case subsequent processing
+ alters any part of it. For example, during gimplification a
+ cast of the form (T) &X::f (where "f" is a member function)
+ will lead to replacing the PTRMEM_CST for &X::f with a
+ VAR_DECL. We can avoid the copy for constants, since they
+ are never modified in place. */
+ if (!CONSTANT_CLASS_P (arg))
arg = copy_node (arg);
-
arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
"default argument", fn, parmnum);
arg = convert_for_arg_passing (type, arg);
@@ -4725,11 +4780,14 @@ build_over_call (struct z_candidate *cand, int flags)
tree args = cand->args;
conversion **convs = cand->convs;
conversion *conv;
- tree converted_args = NULL_TREE;
tree parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
+ int parmlen;
tree arg, val;
int i = 0;
+ int j = 0;
int is_method = 0;
+ int nargs;
+ tree *argarray;
/* In a template, there is no need to perform all of the work that
is normally done. We are only interested in the type of the call
@@ -4795,11 +4853,18 @@ build_over_call (struct z_candidate *cand, int flags)
args = build_tree_list (NULL_TREE, args);
arg = args;
+ /* Find maximum size of vector to hold converted arguments. */
+ parmlen = list_length (parm);
+ nargs = list_length (args);
+ if (parmlen > nargs)
+ nargs = parmlen;
+ argarray = (tree *) alloca (nargs * sizeof (tree));
+
/* The implicit parameters to a constructor are not considered by overload
resolution, and must be of the proper type. */
if (DECL_CONSTRUCTOR_P (fn))
{
- converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
+ argarray[j++] = TREE_VALUE (arg);
arg = TREE_CHAIN (arg);
parm = TREE_CHAIN (parm);
/* We should never try to call the abstract constructor. */
@@ -4807,8 +4872,7 @@ build_over_call (struct z_candidate *cand, int flags)
if (DECL_HAS_VTT_PARM_P (fn))
{
- converted_args = tree_cons
- (NULL_TREE, TREE_VALUE (arg), converted_args);
+ argarray[j++] = TREE_VALUE (arg);
arg = TREE_CHAIN (arg);
parm = TREE_CHAIN (parm);
}
@@ -4852,7 +4916,7 @@ build_over_call (struct z_candidate *cand, int flags)
converted_arg = build_base_path (PLUS_EXPR, converted_arg,
base_binfo, 1);
- converted_args = tree_cons (NULL_TREE, converted_arg, converted_args);
+ argarray[j++] = converted_arg;
parm = TREE_CHAIN (parm);
arg = TREE_CHAIN (arg);
++i;
@@ -4875,18 +4939,14 @@ build_over_call (struct z_candidate *cand, int flags)
(conv, TREE_VALUE (arg), fn, i - is_method);
val = convert_for_arg_passing (type, val);
- converted_args = tree_cons (NULL_TREE, val, converted_args);
+ argarray[j++] = val;
}
/* Default arguments */
for (; parm && parm != void_list_node; parm = TREE_CHAIN (parm), i++)
- converted_args
- = tree_cons (NULL_TREE,
- convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm),
- fn, i - is_method),
- converted_args);
-
+ argarray[j++] = convert_default_arg (TREE_VALUE (parm),
+ TREE_PURPOSE (parm),
+ fn, i - is_method);
/* Ellipsis */
for (; arg; arg = TREE_CHAIN (arg))
{
@@ -4895,13 +4955,14 @@ build_over_call (struct z_candidate *cand, int flags)
/* Do no conversions for magic varargs. */;
else
a = convert_arg_to_ellipsis (a);
- converted_args = tree_cons (NULL_TREE, a, converted_args);
+ argarray[j++] = a;
}
- converted_args = nreverse (converted_args);
+ gcc_assert (j <= nargs);
+ nargs = j;
check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
- converted_args, TYPE_ARG_TYPES (TREE_TYPE (fn)));
+ nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
/* Avoid actually calling copy constructors and copy assignment operators,
if possible. */
@@ -4911,8 +4972,7 @@ build_over_call (struct z_candidate *cand, int flags)
else if (cand->num_convs == 1 && DECL_COPY_CONSTRUCTOR_P (fn))
{
tree targ;
- arg = skip_artificial_parms_for (fn, converted_args);
- arg = TREE_VALUE (arg);
+ arg = argarray[num_artificial_parms_for (fn)];
/* Pull out the real argument, disregarding const-correctness. */
targ = arg;
@@ -4967,11 +5027,11 @@ build_over_call (struct z_candidate *cand, int flags)
&& TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
{
tree to = stabilize_reference
- (build_indirect_ref (TREE_VALUE (converted_args), 0));
+ (build_indirect_ref (argarray[0], 0));
tree type = TREE_TYPE (to);
tree as_base = CLASSTYPE_AS_BASE (type);
- arg = TREE_VALUE (TREE_CHAIN (converted_args));
+ arg = argarray[1];
if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
{
arg = build_indirect_ref (arg, 0);
@@ -4981,17 +5041,16 @@ build_over_call (struct z_candidate *cand, int flags)
{
/* We must only copy the non-tail padding parts.
Use __builtin_memcpy for the bitwise copy. */
+
+ tree arg0, arg1, arg2, t;
- tree args, t;
-
- args = tree_cons (NULL, TYPE_SIZE_UNIT (as_base), NULL);
- args = tree_cons (NULL, arg, args);
- t = build_unary_op (ADDR_EXPR, to, 0);
- args = tree_cons (NULL, t, args);
+ arg2 = TYPE_SIZE_UNIT (as_base);
+ arg1 = arg;
+ arg0 = build_unary_op (ADDR_EXPR, to, 0);
t = implicit_built_in_decls[BUILT_IN_MEMCPY];
- t = build_call (t, args);
+ t = build_call_n (t, 3, arg0, arg1, arg2);
- t = convert (TREE_TYPE (TREE_VALUE (args)), t);
+ t = convert (TREE_TYPE (arg0), t);
val = build_indirect_ref (t, 0);
}
@@ -5002,20 +5061,20 @@ build_over_call (struct z_candidate *cand, int flags)
if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0)
{
- tree t, *p = &TREE_VALUE (converted_args);
- tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)),
+ tree t;
+ tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (argarray[0])),
DECL_CONTEXT (fn),
ba_any, NULL);
gcc_assert (binfo && binfo != error_mark_node);
- *p = build_base_path (PLUS_EXPR, *p, binfo, 1);
- if (TREE_SIDE_EFFECTS (*p))
- *p = save_expr (*p);
+ argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1);
+ if (TREE_SIDE_EFFECTS (argarray[0]))
+ argarray[0] = save_expr (argarray[0]);
t = build_pointer_type (TREE_TYPE (fn));
if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn)))
- fn = build_java_interface_fn_ref (fn, *p);
+ fn = build_java_interface_fn_ref (fn, argarray[0]);
else
- fn = build_vfn_ref (*p, DECL_VINDEX (fn));
+ fn = build_vfn_ref (argarray[0], DECL_VINDEX (fn));
TREE_TYPE (fn) = t;
}
else if (DECL_INLINE (fn))
@@ -5023,19 +5082,19 @@ build_over_call (struct z_candidate *cand, int flags)
else
fn = build_addr_func (fn);
- return build_cxx_call (fn, converted_args);
+ return build_cxx_call (fn, nargs, argarray);
}
-/* Build and return a call to FN, using ARGS. This function performs
- no overload resolution, conversion, or other high-level
- operations. */
+/* Build and return a call to FN, using NARGS arguments in ARGARRAY.
+ This function performs no overload resolution, conversion, or other
+ high-level operations. */
tree
-build_cxx_call (tree fn, tree args)
+build_cxx_call (tree fn, int nargs, tree *argarray)
{
tree fndecl;
- fn = build_call (fn, args);
+ fn = build_call_a (fn, nargs, argarray);
/* If this call might throw an exception, note that fact. */
fndecl = get_callee_fndecl (fn);
@@ -5069,7 +5128,7 @@ static GTY(()) tree java_iface_lookup_fn;
static tree
build_java_interface_fn_ref (tree fn, tree instance)
{
- tree lookup_args, lookup_fn, method, idx;
+ tree lookup_fn, method, idx;
tree klass_ref, iface, iface_ref;
int i;
@@ -5116,13 +5175,11 @@ build_java_interface_fn_ref (tree fn, tree instance)
}
idx = build_int_cst (NULL_TREE, i);
- lookup_args = tree_cons (NULL_TREE, klass_ref,
- tree_cons (NULL_TREE, iface_ref,
- build_tree_list (NULL_TREE, idx)));
lookup_fn = build1 (ADDR_EXPR,
build_pointer_type (TREE_TYPE (java_iface_lookup_fn)),
java_iface_lookup_fn);
- return build_call_list (ptr_type_node, lookup_fn, lookup_args);
+ return build_call_nary (ptr_type_node, lookup_fn,
+ 3, klass_ref, iface_ref, idx);
}
/* Returns the value to use for the in-charge parameter when making a
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 0f19b67c74f..22c9439aa1a 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -2097,7 +2097,8 @@ update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
fixed_offset, virtual_offset);
}
else
- gcc_assert (!DECL_THUNK_P (fn));
+ gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) ||
+ !DECL_THUNK_P (fn));
/* Assume that we will produce a thunk that convert all the way to
the final overrider, and not to an intermediate virtual base. */
@@ -2420,8 +2421,8 @@ warn_hidden (tree t)
while (base_fndecls)
{
/* Here we know it is a hider, and no overrider exists. */
- warning (0, "%q+D was hidden", TREE_VALUE (base_fndecls));
- warning (0, " by %q+D", fns);
+ warning (OPT_Woverloaded_virtual, "%q+D was hidden", TREE_VALUE (base_fndecls));
+ warning (OPT_Woverloaded_virtual, " by %q+D", fns);
base_fndecls = TREE_CHAIN (base_fndecls);
}
}
@@ -6299,9 +6300,9 @@ note_name_declared_in_class (tree name, tree decl)
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. */
- error ("declaration of %q#D", decl);
- error ("changes meaning of %qD from %q+#D",
- DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
+ pedwarn ("declaration of %q#D", decl);
+ pedwarn ("changes meaning of %qD from %q+#D",
+ DECL_NAME (OVL_CURRENT (decl)), (tree) n->value);
}
}
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index aa1b0ed73c9..bd67ad1b819 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -146,9 +146,7 @@ genericize_eh_spec_block (tree *stmt_p)
{
tree body = EH_SPEC_STMTS (*stmt_p);
tree allowed = EH_SPEC_RAISES (*stmt_p);
- tree failure = build_call (call_unexpected_node,
- tree_cons (NULL_TREE, build_exc_ptr (),
- NULL_TREE));
+ tree failure = build_call_n (call_unexpected_node, 1, build_exc_ptr ());
gimplify_stmt (&body);
*stmt_p = gimple_build_eh_filter (body, allowed, failure);
@@ -432,7 +430,7 @@ gimplify_must_not_throw_expr (tree *expr_p, tree *pre_p)
gimplify_stmt (&body);
stmt = gimple_build_eh_filter (body, NULL_TREE,
- build_call (terminate_node, NULL_TREE));
+ build_call_n (terminate_node, 0));
if (temp)
{
@@ -766,11 +764,16 @@ static tree
cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
{
tree defparm, parm;
- int i;
+ int i = 0;
+ int nargs;
+ tree *argarray;
if (fn == NULL)
return NULL;
+ nargs = list_length (DECL_ARGUMENTS (fn));
+ argarray = (tree *) alloca (nargs * sizeof (tree));
+
defparm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn)));
if (arg2)
defparm = TREE_CHAIN (defparm);
@@ -817,16 +820,14 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
t = build1 (LABEL_EXPR, void_type_node, lab);
append_to_statement_list (t, &ret);
- t = tree_cons (NULL, p1, NULL);
+ argarray[i++] = p1;
if (arg2)
- t = tree_cons (NULL, p2, t);
+ argarray[i++] = p2;
/* Handle default arguments. */
- i = 1 + (arg2 != NULL);
- for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm))
- t = tree_cons (NULL, convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm),
- fn, i++), t);
- t = build_call (fn, nreverse (t));
+ for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm), i++)
+ argarray[i] = convert_default_arg (TREE_VALUE (parm),
+ TREE_PURPOSE (parm), fn, i);
+ t = build_call_a (fn, i, argarray);
append_to_statement_list (t, &ret);
t = fold_convert (TREE_TYPE (p1), TYPE_SIZE_UNIT (inner_type));
@@ -850,16 +851,16 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2)
}
else
{
- tree t = tree_cons (NULL, build_fold_addr_expr (arg1), NULL);
+ argarray[i++] = build_fold_addr_expr (arg1);
if (arg2)
- t = tree_cons (NULL, build_fold_addr_expr (arg2), t);
+ argarray[i++] = build_fold_addr_expr (arg2);
/* Handle default arguments. */
- i = 1 + (arg2 != NULL);
- for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm))
- t = tree_cons (NULL, convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm),
- fn, i++), t);
- return build_call (fn, nreverse (t));
+ for (parm = defparm; parm != void_list_node;
+ parm = TREE_CHAIN (parm), i++)
+ argarray[i] = convert_default_arg (TREE_VALUE (parm),
+ TREE_PURPOSE (parm),
+ fn, i);
+ return build_call_a (fn, i, argarray);
}
}
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index 793046b3469..507641c36bd 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -36,6 +36,7 @@ Boston, MA 02110-1301, USA. */
enum c_language_kind c_language = clk_cxx;
static void cp_init_ts (void);
+static const char * cxx_dwarf_name (tree t, int verbosity);
/* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h;
consequently, there should be very few hooks below. */
@@ -46,6 +47,8 @@ static void cp_init_ts (void);
#define LANG_HOOKS_INIT cxx_init
#undef LANG_HOOKS_DECL_PRINTABLE_NAME
#define LANG_HOOKS_DECL_PRINTABLE_NAME cxx_printable_name
+#undef LANG_HOOKS_DWARF_NAME
+#define LANG_HOOKS_DWARF_NAME cxx_dwarf_name
#undef LANG_HOOKS_FOLD_OBJ_TYPE_REF
#define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref
#undef LANG_HOOKS_INIT_TS
@@ -138,6 +141,17 @@ cp_init_ts (void)
}
+static const char *
+cxx_dwarf_name (tree t, int verbosity)
+{
+ gcc_assert (DECL_P (t));
+
+ if (verbosity >= 2)
+ return decl_as_string (t, TFF_DECL_SPECIFIERS | TFF_UNQUALIFIED_NAME);
+
+ return cxx_printable_name (t, verbosity);
+}
+
void
finish_file (void)
{
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index 2fdea268106..7b1841e3fa7 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -124,6 +124,17 @@ cp_tree_size (enum tree_code code)
case DEFAULT_ARG: return sizeof (struct tree_default_arg);
case OVERLOAD: return sizeof (struct tree_overload);
case STATIC_ASSERT: return sizeof (struct tree_static_assert);
+ case TYPE_ARGUMENT_PACK:
+ case TYPE_PACK_EXPANSION:
+ return sizeof (struct tree_common);
+
+ case NONTYPE_ARGUMENT_PACK:
+ case EXPR_PACK_EXPANSION:
+ return sizeof (struct tree_exp);
+
+ case ARGUMENT_PACK_SELECT:
+ return sizeof (struct tree_argument_pack_select);
+
default:
gcc_unreachable ();
}
@@ -228,7 +239,7 @@ tree
decl_shadowed_for_var_lookup (tree from)
{
struct tree_map *h, in;
- in.from = from;
+ in.base.from = from;
h = (struct tree_map *) htab_find_with_hash (shadowed_var_for_decl, &in,
htab_hash_pointer (from));
@@ -247,7 +258,7 @@ decl_shadowed_for_var_insert (tree from, tree to)
h = GGC_NEW (struct tree_map);
h->hash = htab_hash_pointer (from);
- h->from = from;
+ h->base.from = from;
h->to = to;
loc = htab_find_slot_with_hash (shadowed_var_for_decl, h, h->hash, INSERT);
*(struct tree_map **) loc = h;
diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def
index bcc6b54223c..83e1e53cbc7 100644
--- a/gcc/cp/cp-tree.def
+++ b/gcc/cp/cp-tree.def
@@ -352,6 +352,76 @@ DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)
literal) to be displayed if the condition fails to hold. */
DEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0)
+/* Represents an argument pack of types (or templates). An argument
+ pack stores zero or more arguments that will be used to instantiate
+ a parameter pack.
+
+ ARGUMENT_PACK_ARGS retrieves the arguments stored in the argument
+ pack.
+
+ Example:
+ template<typename... Values>
+ class tuple { ... };
+
+ tuple<int, float, double> t;
+
+ Values is a (template) parameter pack. When tuple<int, float,
+ double> is instantiated, the Values parameter pack is instantiated
+ with the argment pack <int, float, double>. ARGUMENT_PACK_ARGS will
+ be a TREE_VEC containing int, float, and double. */
+DEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0)
+
+/* Represents an argument pack of values, which can be used either for
+ non-type template arguments or function call arguments.
+
+ NONTYPE_ARGUMENT_PACK plays precisely the same role as
+ TYPE_ARGUMENT_PACK, but will be used for packing non-type template
+ arguments (e.g., "int... Dimensions") or function arguments ("const
+ Args&... args"). */
+DEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1)
+
+/* Represents a type expression that will be expanded into a list of
+ types when instantiated with one or more argument packs.
+
+ PACK_EXPANSION_PATTERN retrieves the expansion pattern. This is
+ the type or expression that we will substitute into with each
+ argument in an argument pack.
+
+ SET_PACK_EXPANSION_PATTERN sets the expansion pattern.
+
+ PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameter
+ packs that are used in this pack expansion.
+
+ Example:
+ template<typename... Values>
+ struct tied : tuple<Values&...> {
+ // ...
+ };
+
+ The derivation from tuple contains a TYPE_PACK_EXPANSION for the
+ template arguments. Its EXPR_PACK_EXPANSION is "Values&" and its
+ PACK_EXPANSION_PARAMETER_PACKS will contain "Values". */
+DEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0)
+
+/* Represents an expression that will be expanded into a list of
+ expressions when instantiated with one or more argument packs.
+
+ EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION,
+ but will be used for expressions. */
+DEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 1)
+
+/* Selects the Ith parameter out of an argument pack. This node will
+ be used when instantiating pack expansions; see
+ tsubst_pack_expansion.
+
+ ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK node
+ from which the argument will be selected.
+
+ ARGUMENT_PACK_SELECT_INDEX contains the index into the argument
+ pack that will be returned by this ARGUMENT_PACK_SELECT node. The
+ index is a machine integer. */
+DEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0)
+
/*
Local variables:
mode:c
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index b3857815c2a..2632137eb26 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -103,6 +103,7 @@ struct diagnostic_context;
1: C_TYPEDEF_EXPLICITLY_SIGNED (in TYPE_DECL).
DECL_TEMPLATE_INSTANTIATED (in a VAR_DECL or a FUNCTION_DECL)
DECL_MEMBER_TEMPLATE_P (in TEMPLATE_DECL)
+ FUNCTION_PARAMETER_PACK_P (in PARM_DECL)
2: DECL_THIS_EXTERN (in VAR_DECL or FUNCTION_DECL).
DECL_IMPLICIT_TYPEDEF_P (in a TYPE_DECL)
3: DECL_IN_AGGR_P.
@@ -222,6 +223,10 @@ struct template_parm_index_s GTY(())
HOST_WIDE_INT level;
HOST_WIDE_INT orig_level;
tree decl;
+
+ /* When true, indicates that this parameter is actually a parameter
+ pack, for variadic templates. */
+ BOOL_BITFIELD parameter_pack;
};
typedef struct template_parm_index_s template_parm_index;
@@ -469,6 +474,13 @@ struct tree_static_assert GTY (())
location_t location;
};
+struct tree_argument_pack_select GTY (())
+{
+ struct tree_common common;
+ tree argument_pack;
+ int index;
+};
+
enum cp_tree_node_structure_enum {
TS_CP_GENERIC,
TS_CP_IDENTIFIER,
@@ -481,6 +493,7 @@ enum cp_tree_node_structure_enum {
TS_CP_WRAPPER,
TS_CP_DEFAULT_ARG,
TS_CP_STATIC_ASSERT,
+ TS_CP_ARGUMENT_PACK_SELECT,
LAST_TS_CP_ENUM
};
@@ -499,6 +512,8 @@ union lang_tree_node GTY((desc ("cp_tree_node_structure (&%h)"),
struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier;
struct tree_static_assert GTY ((tag ("TS_CP_STATIC_ASSERT")))
static_assertion;
+ struct tree_argument_pack_select GTY ((tag ("TS_CP_ARGUMENT_PACK_SELECT")))
+ argument_pack_select;
};
@@ -2188,7 +2203,7 @@ extern void decl_shadowed_for_var_insert (tree, tree);
/* Nonzero if the template arguments is actually a vector of vectors,
rather than just a vector. */
#define TMPL_ARGS_HAVE_MULTIPLE_LEVELS(NODE) \
- (NODE && TREE_VEC_ELT (NODE, 0) \
+ (NODE && TREE_VEC_ELT (NODE, 0) \
&& TREE_CODE (TREE_VEC_ELT (NODE, 0)) == TREE_VEC)
/* The depth of a template argument vector. When called directly by
@@ -2295,6 +2310,84 @@ extern void decl_shadowed_for_var_insert (tree, tree);
the class definition is complete. */
#define TEMPLATE_PARMS_FOR_INLINE(NODE) TREE_LANG_FLAG_1 (NODE)
+/* Determine if a parameter (i.e., a PARM_DECL) is a function
+ parameter pack. */
+#define FUNCTION_PARAMETER_PACK_P(NODE) \
+ (DECL_LANG_FLAG_1 (PARM_DECL_CHECK (NODE)))
+
+/* Determines if NODE is an expansion of one or more parameter packs,
+ e.g., a TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION. */
+#define PACK_EXPANSION_P(NODE) \
+ (TREE_CODE (NODE) == TYPE_PACK_EXPANSION \
+ || TREE_CODE (NODE) == EXPR_PACK_EXPANSION)
+
+/* Extracts the type or expression pattern from a TYPE_PACK_EXPANSION or
+ EXPR_PACK_EXPANSION. */
+#define PACK_EXPANSION_PATTERN(NODE) \
+ (TREE_CODE (NODE) == TYPE_PACK_EXPANSION? TREE_TYPE (NODE) \
+ : TREE_OPERAND (NODE, 0))
+
+/* Sets the type or expression pattern for a TYPE_PACK_EXPANSION or
+ EXPR_PACK_EXPANSION. */
+#define SET_PACK_EXPANSION_PATTERN(NODE,VALUE) \
+ if (TREE_CODE (NODE) == TYPE_PACK_EXPANSION) \
+ TREE_TYPE (NODE) = VALUE; \
+ else \
+ TREE_OPERAND (NODE, 0) = VALUE
+
+/* The list of parameter packs used in the PACK_EXPANSION_* node. The
+ TREE_VALUE of each TREE_LIST contains the parameter packs. */
+#define PACK_EXPANSION_PARAMETER_PACKS(NODE) TREE_CHAIN (NODE)
+
+/* Determine if this is an argument pack. */
+#define ARGUMENT_PACK_P(NODE) \
+ (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK \
+ || TREE_CODE (NODE) == NONTYPE_ARGUMENT_PACK)
+
+/* The arguments stored in an argument pack. Arguments are stored in a
+ TREE_VEC, which may have length zero. */
+#define ARGUMENT_PACK_ARGS(NODE) \
+ (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK? TREE_TYPE (NODE) \
+ : TREE_OPERAND (NODE, 0))
+
+/* Set the arguments stored in an argument pack. VALUE must be a
+ TREE_VEC. */
+#define SET_ARGUMENT_PACK_ARGS(NODE,VALUE) \
+ if (TREE_CODE (NODE) == TYPE_ARGUMENT_PACK) \
+ TREE_TYPE (NODE) = VALUE; \
+ else \
+ TREE_OPERAND (NODE, 0) = VALUE
+
+/* Whether the argument pack is "incomplete", meaning that more
+ arguments can still be deduced. Incomplete argument packs are only
+ used when the user has provided an explicit template argument list
+ for a variadic function template. Some of the explicit template
+ arguments will be placed into the beginning of the argument pack,
+ but additional arguments might still be deduced. */
+#define ARGUMENT_PACK_INCOMPLETE_P(NODE) \
+ TREE_LANG_FLAG_0 (ARGUMENT_PACK_ARGS (NODE))
+
+/* When ARGUMENT_PACK_INCOMPLETE_P, stores the explicit template
+ arguments used to fill this pack. */
+#define ARGUMENT_PACK_EXPLICIT_ARGS(NODE) \
+ TREE_TYPE (ARGUMENT_PACK_ARGS (NODE))
+
+/* In an ARGUMENT_PACK_SELECT, the argument pack from which an
+ argument will be selected. */
+#define ARGUMENT_PACK_SELECT_FROM_PACK(NODE) \
+ (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->argument_pack)
+
+/* In an ARGUMENT_PACK_SELECT, the index of the argument we want to
+ select. */
+#define ARGUMENT_PACK_SELECT_INDEX(NODE) \
+ (((struct tree_argument_pack_select *)ARGUMENT_PACK_SELECT_CHECK (NODE))->index)
+
+/* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
+ ARGUMENT_PACK_SELECT represents. */
+#define ARGUMENT_PACK_SELECT_ARG(NODE) \
+ TREE_VEC_ELT (ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (NODE)), \
+ ARGUMENT_PACK_SELECT_INDEX (NODE));
+
/* In a FUNCTION_DECL, the saved language-specific per-function data. */
#define DECL_SAVED_FUNCTION_DATA(NODE) \
(DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE)) \
@@ -3479,11 +3572,6 @@ extern int at_eof;
TREE_PURPOSE slot. */
extern GTY(()) tree static_aggregates;
-/* Functions called along with real static constructors and destructors. */
-
-extern GTY(()) tree static_ctors;
-extern GTY(()) tree static_dtors;
-
enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
/* These are uses as bits in flags passed to various functions to
@@ -3617,6 +3705,7 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
#define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
#define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
#define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
+#define TEMPLATE_PARM_PARAMETER_PACK(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->parameter_pack)
/* These macros are for accessing the fields of TEMPLATE_TYPE_PARM,
TEMPLATE_TEMPLATE_PARM and BOUND_TEMPLATE_TEMPLATE_PARM nodes. */
@@ -3631,6 +3720,8 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
(TEMPLATE_PARM_ORIG_LEVEL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
#define TEMPLATE_TYPE_DECL(NODE) \
(TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (NODE)))
+#define TEMPLATE_TYPE_PARAMETER_PACK(NODE) \
+ (TEMPLATE_PARM_PARAMETER_PACK (TEMPLATE_TYPE_PARM_INDEX (NODE)))
/* These constants can used as bit flags in the process of tree formatting.
@@ -3647,7 +3738,9 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
template-declaration.
TFF_TEMPLATE_NAME: show only template-name.
TFF_EXPR_IN_PARENS: parenthesize expressions.
- TFF_NO_FUNCTION_ARGUMENTS: don't show function arguments. */
+ TFF_NO_FUNCTION_ARGUMENTS: don't show function arguments.
+ TFF_UNQUALIFIED_NAME: do not print the qualifying scope of the
+ top-level entity. */
#define TFF_PLAIN_IDENTIFIER (0)
#define TFF_SCOPE (1)
@@ -3661,6 +3754,7 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
#define TFF_TEMPLATE_NAME (1 << 8)
#define TFF_EXPR_IN_PARENS (1 << 9)
#define TFF_NO_FUNCTION_ARGUMENTS (1 << 10)
+#define TFF_UNQUALIFIED_NAME (1 << 11)
/* Returns the TEMPLATE_DECL associated to a TEMPLATE_TEMPLATE_PARM
node. */
@@ -3814,6 +3908,9 @@ struct cp_declarator {
cdk_id and cdk_error, guaranteed to be NULL. */
cp_declarator *declarator;
location_t id_loc; /* Currently only set for cdk_id. */
+ /* Whether we parsed an ellipsis (`...') just before the declarator,
+ to indicate this is a parameter pack. */
+ bool parameter_pack_p;
union {
/* For identifiers. */
struct {
@@ -3861,7 +3958,8 @@ extern bool check_dtor_name (tree, tree);
extern tree build_vfield_ref (tree, tree);
extern tree build_conditional_expr (tree, tree, tree);
extern tree build_addr_func (tree);
-extern tree build_call (tree, tree);
+extern tree build_call_a (tree, int, tree*);
+extern tree build_call_n (tree, int, ...);
extern bool null_ptr_cst_p (tree);
extern bool sufficient_parms_p (tree);
extern tree type_decays_to (tree);
@@ -3891,7 +3989,7 @@ extern tree strip_top_quals (tree);
extern tree perform_implicit_conversion (tree, tree);
extern tree perform_direct_initialization_if_possible (tree, tree, bool);
extern tree in_charge_arg_for_name (tree);
-extern tree build_cxx_call (tree, tree);
+extern tree build_cxx_call (tree, int, tree *);
#ifdef ENABLE_CHECKING
extern void validate_conversion_obstack (void);
#endif /* ENABLE_CHECKING */
@@ -4105,6 +4203,7 @@ extern const char *lang_decl_name (tree, int);
extern const char *language_to_string (enum languages);
extern const char *class_key_or_enum_as_string (tree);
extern void print_instantiation_context (void);
+extern void maybe_warn_variadic_templates (void);
/* in except.c */
extern void init_exception_processing (void);
@@ -4176,6 +4275,7 @@ extern void synthesize_method (tree);
extern tree lazily_declare_fn (special_function_kind,
tree);
extern tree skip_artificial_parms_for (tree, tree);
+extern int num_artificial_parms_for (tree);
extern tree make_alias_for (tree, tree);
/* In optimize.c */
@@ -4194,7 +4294,7 @@ extern void end_specialization (void);
extern void begin_explicit_instantiation (void);
extern void end_explicit_instantiation (void);
extern tree check_explicit_specialization (tree, tree, int, int);
-extern tree process_template_parm (tree, tree, bool);
+extern tree process_template_parm (tree, tree, bool, bool);
extern tree end_template_parm_list (tree);
extern void end_template_decl (void);
extern tree push_template_decl (tree);
@@ -4215,6 +4315,11 @@ extern void do_decl_instantiation (tree, tree);
extern void do_type_instantiation (tree, tree, tsubst_flags_t);
extern tree instantiate_decl (tree, int, bool);
extern int comp_template_parms (tree, tree);
+extern bool uses_parameter_packs (tree);
+extern bool template_parameter_pack_p (tree);
+extern bool template_parms_variadic_p (tree);
+extern tree make_pack_expansion (tree);
+extern void check_for_bare_parameter_packs (tree);
extern int template_class_depth (tree);
extern int is_specialization_of (tree, tree);
extern bool is_specialization_of_friend (tree, tree);
@@ -4540,6 +4645,7 @@ extern tree cxx_sizeof_or_alignof_type (tree, enum tree_code, bool);
#define cxx_sizeof_nowarn(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, false)
extern tree inline_conversion (tree);
extern tree is_bitfield_expr_with_lowered_type (tree);
+extern tree unlowered_expr_type (tree);
extern tree decay_conversion (tree);
extern tree build_class_member_access_expr (tree, tree, tree, bool);
extern tree finish_class_member_access_expr (tree, tree, bool);
@@ -4602,7 +4708,7 @@ extern void cxx_incomplete_type_error (tree, tree);
(cxx_incomplete_type_diagnostic ((V), (T), 0))
extern tree error_not_base_type (tree, tree);
extern tree binfo_or_else (tree, tree);
-extern void readonly_error (tree, const char *, int);
+extern void readonly_error (tree, const char *);
extern void complete_type_check_abstract (tree);
extern int abstract_virtuals_error (tree, tree);
diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c
index 5c13362df95..e250bf78a2f 100644
--- a/gcc/cp/cxx-pretty-print.c
+++ b/gcc/cp/cxx-pretty-print.c
@@ -659,6 +659,7 @@ pp_cxx_delete_expression (cxx_pretty_printer *pp, tree t)
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-id )
+ sizeof ... ( identifier )
new-expression
delete-expression
@@ -686,6 +687,21 @@ pp_cxx_unary_expression (cxx_pretty_printer *pp, tree t)
break;
case SIZEOF_EXPR:
+ if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
+ {
+ pp_cxx_identifier (pp, "sizeof");
+ pp_cxx_identifier (pp, "...");
+ pp_cxx_whitespace (pp);
+ pp_cxx_left_paren (pp);
+ if (TYPE_P (TREE_OPERAND (t, 0)))
+ pp_cxx_type_id (pp, TREE_OPERAND (t, 0));
+ else
+ pp_unary_expression (pp, TREE_OPERAND (t, 0));
+ pp_cxx_right_paren (pp);
+ break;
+ }
+ /* Fall through */
+
case ALIGNOF_EXPR:
pp_cxx_identifier (pp, code == SIZEOF_EXPR ? "sizeof" : "__alignof__");
pp_cxx_whitespace (pp);
@@ -1000,6 +1016,24 @@ pp_cxx_expression (cxx_pretty_printer *pp, tree t)
pp_cxx_expression (pp, t);
break;
+ case EXPR_PACK_EXPANSION:
+ pp_cxx_expression (pp, PACK_EXPANSION_PATTERN (t));
+ pp_cxx_identifier (pp, "...");
+ break;
+
+ case NONTYPE_ARGUMENT_PACK:
+ {
+ tree args = ARGUMENT_PACK_ARGS (t);
+ int i, len = TREE_VEC_LENGTH (args);
+ for (i = 0; i < len; ++i)
+ {
+ if (i > 0)
+ pp_cxx_separate_with (pp, ',');
+ pp_cxx_expression (pp, TREE_VEC_ELT (args, i));
+ }
+ }
+ break;
+
default:
pp_c_expression (pp_c_base (pp), t);
break;
@@ -1290,6 +1324,7 @@ static void
pp_cxx_exception_specification (cxx_pretty_printer *pp, tree t)
{
tree ex_spec = TYPE_RAISES_EXCEPTIONS (t);
+ bool need_comma = false;
if (!TYPE_NOTHROW_P (t) && ex_spec == NULL)
return;
@@ -1297,9 +1332,28 @@ pp_cxx_exception_specification (cxx_pretty_printer *pp, tree t)
pp_cxx_left_paren (pp);
for (; ex_spec && TREE_VALUE (ex_spec); ex_spec = TREE_CHAIN (ex_spec))
{
- pp_cxx_type_id (pp, TREE_VALUE (ex_spec));
- if (TREE_CHAIN (ex_spec))
- pp_cxx_separate_with (pp, ',');
+ tree type = TREE_VALUE (ex_spec);
+ tree argpack = NULL_TREE;
+ int i, len = 1;
+
+ if (ARGUMENT_PACK_P (type))
+ {
+ argpack = ARGUMENT_PACK_ARGS (type);
+ len = TREE_VEC_LENGTH (argpack);
+ }
+
+ for (i = 0; i < len; ++i)
+ {
+ if (argpack)
+ type = TREE_VEC_ELT (argpack, i);
+
+ if (need_comma)
+ pp_cxx_separate_with (pp, ',');
+ else
+ need_comma = true;
+
+ pp_cxx_type_id (pp, type);
+ }
}
pp_cxx_right_paren (pp);
}
@@ -1323,6 +1377,13 @@ pp_cxx_direct_declarator (cxx_pretty_printer *pp, tree t)
if (DECL_NAME (t))
{
pp_cxx_space_for_pointer_operator (pp, TREE_TYPE (t));
+
+ if ((TREE_CODE (t) == PARM_DECL && FUNCTION_PARAMETER_PACK_P (t))
+ || template_parameter_pack_p (t))
+ /* A function parameter pack or non-type template
+ parameter pack. */
+ pp_cxx_identifier (pp, "...");
+
pp_cxx_id_expression (pp, DECL_NAME (t));
}
pp_cxx_abstract_declarator (pp, TREE_TYPE (t));
@@ -1388,8 +1449,16 @@ pp_cxx_ctor_initializer (cxx_pretty_printer *pp, tree t)
pp_cxx_whitespace (pp);
for (; t; t = TREE_CHAIN (t))
{
- pp_cxx_primary_expression (pp, TREE_PURPOSE (t));
+ tree purpose = TREE_PURPOSE (t);
+ bool is_pack = PACK_EXPANSION_P (purpose);
+
+ if (is_pack)
+ pp_cxx_primary_expression (pp, PACK_EXPANSION_PATTERN (purpose));
+ else
+ pp_cxx_primary_expression (pp, purpose);
pp_cxx_call_argument_list (pp, TREE_VALUE (t));
+ if (is_pack)
+ pp_cxx_identifier (pp, "...");
if (TREE_CHAIN (t))
pp_cxx_separate_with (pp, ',');
}
@@ -1510,6 +1579,11 @@ pp_cxx_type_id (cxx_pretty_printer *pp, tree t)
pp_cxx_type_specifier_seq (pp, t);
break;
+ case TYPE_PACK_EXPANSION:
+ pp_cxx_type_id (pp, PACK_EXPANSION_PATTERN (t));
+ pp_cxx_identifier (pp, "...");
+ break;
+
default:
pp_c_type_id (pp_c_base (pp), t);
break;
@@ -1519,30 +1593,50 @@ pp_cxx_type_id (cxx_pretty_printer *pp, tree t)
}
/* template-argument-list:
- template-argument
- template-argument-list, template-argument
+ template-argument ...(opt)
+ template-argument-list, template-argument ...(opt)
template-argument:
assignment-expression
type-id
- template-name */
+ template-name */
static void
pp_cxx_template_argument_list (cxx_pretty_printer *pp, tree t)
{
int i;
+ bool need_comma = false;
+
if (t == NULL)
return;
for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
{
tree arg = TREE_VEC_ELT (t, i);
- if (i != 0)
- pp_cxx_separate_with (pp, ',');
- if (TYPE_P (arg) || (TREE_CODE (arg) == TEMPLATE_DECL
- && TYPE_P (DECL_TEMPLATE_RESULT (arg))))
- pp_cxx_type_id (pp, arg);
- else
- pp_cxx_expression (pp, arg);
+ tree argpack = NULL_TREE;
+ int idx, len = 1;
+
+ if (ARGUMENT_PACK_P (arg))
+ {
+ argpack = ARGUMENT_PACK_ARGS (arg);
+ len = TREE_VEC_LENGTH (argpack);
+ }
+
+ for (idx = 0; idx < len; idx++)
+ {
+ if (argpack)
+ arg = TREE_VEC_ELT (argpack, idx);
+
+ if (need_comma)
+ pp_cxx_separate_with (pp, ',');
+ else
+ need_comma = true;
+
+ if (TYPE_P (arg) || (TREE_CODE (arg) == TEMPLATE_DECL
+ && TYPE_P (DECL_TEMPLATE_RESULT (arg))))
+ pp_cxx_type_id (pp, arg);
+ else
+ pp_cxx_expression (pp, arg);
+ }
}
}
@@ -1837,11 +1931,11 @@ pp_cxx_template_parameter_list (cxx_pretty_printer *pp, tree t)
parameter-declaration
type-parameter:
- class identifier(opt)
- class identifier(op) = type-id
+ class ...(opt) identifier(opt)
+ class identifier(opt) = type-id
typename identifier(opt)
- typename identifier(opt) = type-id
- template < template-parameter-list > class identifier(opt)
+ typename ...(opt) identifier(opt) = type-id
+ template < template-parameter-list > class ...(opt) identifier(opt)
template < template-parameter-list > class identifier(opt) = template-name */
static void
@@ -1852,6 +1946,8 @@ pp_cxx_template_parameter (cxx_pretty_printer *pp, tree t)
{
case TYPE_DECL:
pp_cxx_identifier (pp, "class");
+ if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
+ pp_cxx_identifier (pp, "...");
if (DECL_NAME (parameter))
pp_cxx_tree_identifier (pp, DECL_NAME (parameter));
/* FIXME: Chech if we should print also default argument. */
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 9ad9e3a0ee2..14d20cec227 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -1,6 +1,6 @@
/* Process declarations and variables for C++ compiler.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GCC.
@@ -3694,6 +3694,8 @@ check_tag_decl (cp_decl_specifier_seq *declspecs)
|| declspecs->specs[(int)ds_thread])
error ("qualifiers can only be specified for objects "
"and functions");
+ else if (saw_typedef)
+ warning (0, "%<typedef%> was ignored in this declaration");
}
return declared_type;
@@ -5641,7 +5643,7 @@ expand_static_init (tree decl, tree init)
/* Emit code to perform this initialization but once. */
tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
- tree guard, guard_addr, guard_addr_list;
+ tree guard, guard_addr;
tree acquire_fn, release_fn, abort_fn;
tree flag, begin;
@@ -5693,7 +5695,6 @@ expand_static_init (tree decl, tree init)
if (flag_threadsafe_statics)
{
guard_addr = build_address (guard);
- guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
acquire_fn = get_identifier ("__cxa_guard_acquire");
release_fn = get_identifier ("__cxa_guard_release");
@@ -5715,7 +5716,7 @@ expand_static_init (tree decl, tree init)
}
inner_if_stmt = begin_if_stmt ();
- finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
+ finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
inner_if_stmt);
inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
@@ -5725,7 +5726,7 @@ expand_static_init (tree decl, tree init)
TARGET_EXPR_CLEANUP (begin)
= build3 (COND_EXPR, void_type_node, flag,
void_zero_node,
- build_call (abort_fn, guard_addr_list));
+ build_call_n (abort_fn, 1, guard_addr));
CLEANUP_EH_ONLY (begin) = 1;
/* Do the initialization itself. */
@@ -5733,7 +5734,7 @@ expand_static_init (tree decl, tree init)
init = add_stmt_to_compound
(init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
init = add_stmt_to_compound
- (init, build_call (release_fn, guard_addr_list));
+ (init, build_call_n (release_fn, 1, guard_addr));
}
else
init = add_stmt_to_compound (init, set_guard (guard));
@@ -6631,12 +6632,21 @@ compute_array_index_type (tree name, tree size)
error ("size of array is not an integral constant-expression");
size = integer_one_node;
}
- else if (pedantic)
+ else if (pedantic && warn_vla != 0)
{
if (name)
- pedwarn ("ISO C++ forbids variable-size array %qD", name);
+ pedwarn ("ISO C++ forbids variable length array %qD", name);
else
- pedwarn ("ISO C++ forbids variable-size array");
+ pedwarn ("ISO C++ forbids variable length array");
+ }
+ else if (warn_vla > 0)
+ {
+ if (name)
+ warning (OPT_Wvla,
+ "variable length array %qD is used", name);
+ else
+ warning (OPT_Wvla,
+ "variable length array is used");
}
if (processing_template_decl && !TREE_CONSTANT (size))
@@ -6966,6 +6976,7 @@ grokdeclarator (const cp_declarator *declarator,
cp_storage_class storage_class;
bool unsigned_p, signed_p, short_p, long_p, thread_p;
bool type_was_error_mark_node = false;
+ bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
bool set_no_warning = false;
signed_p = declspecs->specs[(int)ds_signed];
@@ -7937,6 +7948,16 @@ grokdeclarator (const cp_declarator *declarator,
attrlist = &returned_attrs;
}
+ /* Handle parameter packs. */
+ if (parameter_pack_p)
+ {
+ if (decl_context == PARM)
+ /* Turn the type into a pack expansion.*/
+ type = make_pack_expansion (type);
+ else
+ error ("non-parameter %qs cannot be a parameter pack", name);
+ }
+
/* Did array size calculations overflow? */
if (TREE_CODE (type) == ARRAY_TYPE
@@ -8538,6 +8559,9 @@ grokdeclarator (const cp_declarator *declarator,
{
decl = build_decl (FIELD_DECL, unqualified_id, type);
DECL_NONADDRESSABLE_P (decl) = bitfield;
+ if (bitfield && !unqualified_id)
+ TREE_NO_WARNING (decl) = 1;
+
if (storage_class == sc_mutable)
{
DECL_MUTABLE_P (decl) = 1;
@@ -8936,6 +8960,11 @@ grokparms (cp_parameter_declarator *first_parm, tree *parms)
init = check_default_argument (decl, init);
}
+ if (TREE_CODE (decl) == PARM_DECL
+ && FUNCTION_PARAMETER_PACK_P (decl)
+ && parm->next)
+ error ("parameter packs must be at the end of the parameter list");
+
TREE_CHAIN (decl) = decls;
decls = decl;
result = tree_cons (init, type, result);
@@ -9937,6 +9966,8 @@ xref_basetypes (tree ref, tree base_list)
if (access == access_default_node)
access = default_access;
+ if (PACK_EXPANSION_P (basetype))
+ basetype = PACK_EXPANSION_PATTERN (basetype);
if (TREE_CODE (basetype) == TYPE_DECL)
basetype = TREE_TYPE (basetype);
if (TREE_CODE (basetype) != RECORD_TYPE
@@ -9982,6 +10013,11 @@ xref_basetypes (tree ref, tree base_list)
error ("duplicate base type %qT invalid", basetype);
return false;
}
+
+ if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
+ /* Regenerate the pack expansion for the bases. */
+ basetype = make_pack_expansion (basetype);
+
TYPE_MARKED_P (basetype) = 1;
base_binfo = copy_binfo (base_binfo, basetype, ref,
@@ -11691,6 +11727,7 @@ cp_tree_node_structure (union lang_tree_node * t)
case PTRMEM_CST: return TS_CP_PTRMEM;
case BASELINK: return TS_CP_BASELINK;
case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
+ case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
default: return TS_CP_GENERIC;
}
}
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 68917b68bd9..bd078330b0a 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -97,11 +97,6 @@ static GTY(()) VEC(tree,gc) *deferred_fns;
int at_eof;
-/* Functions called along with real static constructors and destructors. */
-
-tree static_ctors;
-tree static_dtors;
-
/* Return a member function type (a METHOD_TYPE), given FNTYPE (a
@@ -141,6 +136,12 @@ cp_build_parm_decl (tree name, tree type)
sees templates. */
if (!processing_template_decl)
DECL_ARG_TYPE (parm) = type_passed_as (type);
+
+ /* If the type is a pack expansion, then we have a function
+ parameter pack. */
+ if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
+ FUNCTION_PARAMETER_PACK_P (parm) = 1;
+
return parm;
}
@@ -2847,7 +2848,7 @@ generate_ctor_or_dtor_function (bool constructor_p, int priority,
&& constructor_p && objc_static_init_needed_p ())
{
body = start_objects (function_key, priority);
- static_ctors = objc_generate_static_init_call (static_ctors);
+ objc_generate_static_init_call (NULL_TREE);
}
/* Call the static storage duration function with appropriate
@@ -2870,29 +2871,6 @@ generate_ctor_or_dtor_function (bool constructor_p, int priority,
}
}
- /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
- calls to any functions marked with attributes indicating that
- they should be called at initialization- or destruction-time. */
- if (priority == DEFAULT_INIT_PRIORITY)
- {
- tree fns;
-
- for (fns = constructor_p ? static_ctors : static_dtors;
- fns;
- fns = TREE_CHAIN (fns))
- {
- fndecl = TREE_VALUE (fns);
-
- /* Calls to pure/const functions will expand to nothing. */
- if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
- {
- if (! body)
- body = start_objects (function_key, priority);
- finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
- }
- }
- }
-
/* Close out the function. */
if (body)
finish_objects (function_key, priority, body);
@@ -2910,11 +2888,9 @@ generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
/* Generate the functions themselves, but only if they are really
needed. */
- if (pi->initializations_p
- || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
+ if (pi->initializations_p)
generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
- if (pi->destructions_p
- || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
+ if (pi->destructions_p)
generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
/* Keep iterating. */
@@ -3309,22 +3285,18 @@ cp_write_global_declarations (void)
splay_tree_foreach (priority_info_map,
generate_ctor_and_dtor_functions_for_priority,
/*data=*/&locus);
- else
- {
- /* If we have a ctor or this is obj-c++ and we need a static init,
- call generate_ctor_or_dtor_function. */
- if (static_ctors || (c_dialect_objc () && objc_static_init_needed_p ()))
- generate_ctor_or_dtor_function (/*constructor_p=*/true,
- DEFAULT_INIT_PRIORITY, &locus);
- if (static_dtors)
- generate_ctor_or_dtor_function (/*constructor_p=*/false,
- DEFAULT_INIT_PRIORITY, &locus);
- }
+ else if (c_dialect_objc () && objc_static_init_needed_p ())
+ /* If this is obj-c++ and we need a static init, call
+ generate_ctor_or_dtor_function. */
+ generate_ctor_or_dtor_function (/*constructor_p=*/true,
+ DEFAULT_INIT_PRIORITY, &locus);
/* We're done with the splay-tree now. */
if (priority_info_map)
splay_tree_delete (priority_info_map);
+ c_build_cdtor_fns ();
+
/* Generate any missing aliases. */
maybe_apply_pending_pragma_weaks ();
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 6a0eed5e16b..41a7e1d0d20 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -138,7 +138,9 @@ dump_scope (tree scope, int flags)
static void
dump_template_argument (tree arg, int flags)
{
- if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
+ if (ARGUMENT_PACK_P (arg))
+ dump_template_argument_list (ARGUMENT_PACK_ARGS (arg), flags);
+ else if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
dump_type (arg, flags & ~TFF_CLASS_KEY_OR_ENUM);
else
dump_expr (arg, (flags | TFF_EXPR_IN_PARENS) & ~TFF_CLASS_KEY_OR_ENUM);
@@ -156,9 +158,17 @@ dump_template_argument_list (tree args, int flags)
for (i = 0; i< n; ++i)
{
- if (need_comma)
+ tree arg = TREE_VEC_ELT (args, i);
+
+ /* Only print a comma if we know there is an argument coming. In
+ the case of an empty template argument pack, no actual
+ argument will be printed. */
+ if (need_comma
+ && (!ARGUMENT_PACK_P (arg)
+ || TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) > 0))
pp_separate_with_comma (cxx_pp);
- dump_template_argument (TREE_VEC_ELT (args, i), flags);
+
+ dump_template_argument (arg, flags);
need_comma = 1;
}
}
@@ -182,6 +192,8 @@ dump_template_parameter (tree parm, int flags)
if (flags & TFF_DECL_SPECIFIERS)
{
pp_cxx_identifier (cxx_pp, "class");
+ if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (p)))
+ pp_cxx_identifier (cxx_pp, "...");
if (DECL_NAME (p))
pp_cxx_tree_identifier (cxx_pp, DECL_NAME (p));
}
@@ -378,6 +390,11 @@ dump_type (tree t, int flags)
pp_cxx_right_paren (cxx_pp);
break;
+ case TYPE_PACK_EXPANSION:
+ dump_type (PACK_EXPANSION_PATTERN (t), flags);
+ pp_cxx_identifier (cxx_pp, "...");
+ break;
+
default:
pp_unsupported_tree (cxx_pp, t);
/* Fall through to error. */
@@ -447,7 +464,10 @@ dump_aggr_type (tree t, int flags)
&& TYPE_LANG_SPECIFIC (t) && CLASSTYPE_TEMPLATE_INFO (t)
&& (TREE_CODE (CLASSTYPE_TI_TEMPLATE (t)) != TEMPLATE_DECL
|| PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)));
- dump_scope (CP_DECL_CONTEXT (name), flags | TFF_SCOPE);
+
+ if (! (flags & TFF_UNQUALIFIED_NAME))
+ dump_scope (CP_DECL_CONTEXT (name), flags | TFF_SCOPE);
+ flags &= ~TFF_UNQUALIFIED_NAME;
if (tmplate)
{
/* Because the template names are mangled, we have to locate
@@ -697,11 +717,14 @@ dump_simple_decl (tree t, tree type, int flags)
{
if (flags & TFF_DECL_SPECIFIERS)
{
- dump_type_prefix (type, flags);
+ dump_type_prefix (type, flags & ~TFF_UNQUALIFIED_NAME);
pp_maybe_space (cxx_pp);
}
- if (!DECL_INITIAL (t) || TREE_CODE (DECL_INITIAL (t)) != TEMPLATE_PARM_INDEX)
+ if (! (flags & TFF_UNQUALIFIED_NAME)
+ && (!DECL_INITIAL (t)
+ || TREE_CODE (DECL_INITIAL (t)) != TEMPLATE_PARM_INDEX))
dump_scope (CP_DECL_CONTEXT (t), flags);
+ flags &= ~TFF_UNQUALIFIED_NAME;
if (DECL_NAME (t))
dump_decl (DECL_NAME (t), flags);
else
@@ -763,7 +786,9 @@ dump_decl (tree t, int flags)
pp_cxx_declaration (cxx_pp, t);
else
{
- dump_scope (CP_DECL_CONTEXT (t), flags);
+ if (! (flags & TFF_UNQUALIFIED_NAME))
+ dump_scope (CP_DECL_CONTEXT (t), flags);
+ flags &= ~TFF_UNQUALIFIED_NAME;
if (DECL_NAME (t) == NULL_TREE)
pp_identifier (cxx_pp, "<unnamed>");
else
@@ -998,7 +1023,9 @@ dump_function_decl (tree t, int flags)
tree template_args = NULL_TREE;
tree template_parms = NULL_TREE;
int show_return = flags & TFF_RETURN_TYPE || flags & TFF_DECL_SPECIFIERS;
+ int do_outer_scope = ! (flags & TFF_UNQUALIFIED_NAME);
+ flags &= ~TFF_UNQUALIFIED_NAME;
if (TREE_CODE (t) == TEMPLATE_DECL)
t = DECL_TEMPLATE_RESULT (t);
@@ -1040,7 +1067,9 @@ dump_function_decl (tree t, int flags)
dump_type_prefix (TREE_TYPE (fntype), flags);
/* Print the function name. */
- if (cname)
+ if (!do_outer_scope)
+ /* Nothing. */;
+ else if (cname)
{
dump_type (cname, flags);
pp_cxx_colon_colon (cxx_pp);
@@ -1090,8 +1119,7 @@ dump_function_decl (tree t, int flags)
static void
dump_parameters (tree parmtypes, int flags)
{
- int first;
-
+ int first = 1;
pp_cxx_left_paren (cxx_pp);
for (first = 1; parmtypes != void_list_node;
@@ -1105,7 +1133,22 @@ dump_parameters (tree parmtypes, int flags)
pp_cxx_identifier (cxx_pp, "...");
break;
}
- dump_type (TREE_VALUE (parmtypes), flags);
+ if (ARGUMENT_PACK_P (TREE_VALUE (parmtypes)))
+ {
+ tree types = ARGUMENT_PACK_ARGS (TREE_VALUE (parmtypes));
+ int i, len = TREE_VEC_LENGTH (types);
+ first = 1;
+ for (i = 0; i < len; ++i)
+ {
+ if (!first)
+ pp_separate_with_comma (cxx_pp);
+ first = 0;
+
+ dump_type (TREE_VEC_ELT (types, i), flags);
+ }
+ }
+ else
+ dump_type (TREE_VALUE (parmtypes), flags);
if ((flags & TFF_FUNCTION_DEFAULT_ARGUMENTS) && TREE_PURPOSE (parmtypes))
{
@@ -1228,14 +1271,19 @@ dump_template_parms (tree info, int primary, int flags)
{
tree arg = TREE_VEC_ELT (args, ix);
- if (ix)
- pp_separate_with_comma (cxx_pp);
-
- if (!arg)
- pp_identifier (cxx_pp, "<template parameter error>");
- else
- dump_template_argument (arg, flags);
- }
+ /* Only print a comma if we know there is an argument coming. In
+ the case of an empty template argument pack, no actual
+ argument will be printed. */
+ if (ix
+ && (!ARGUMENT_PACK_P (arg)
+ || TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) > 0))
+ pp_separate_with_comma (cxx_pp);
+
+ if (!arg)
+ pp_identifier (cxx_pp, "<template parameter error>");
+ else
+ dump_template_argument (arg, flags);
+ }
}
else if (primary)
{
@@ -1934,6 +1982,11 @@ dump_expr (tree t, int flags)
dump_expr (TREE_OPERAND (t, 0), flags);
break;
+ case EXPR_PACK_EXPANSION:
+ dump_expr (PACK_EXPANSION_PATTERN (t), flags);
+ pp_cxx_identifier (cxx_pp, "...");
+ break;
+
/* This list is incomplete, but should suffice for now.
It is very important that `sorry' does not call
`report_error_function'. That could cause an infinite loop. */
@@ -2452,3 +2505,14 @@ cp_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
input_location, dlevel);
report_diagnostic (&diagnostic);
}
+
+/* Warn about the use of variadic templates when appropriate. */
+void
+maybe_warn_variadic_templates (void)
+{
+ if ((!flag_cpp0x || flag_iso) && !in_system_header)
+ /* We really want to surpress this warning in system headers,
+ because libstdc++ uses variadic templates even when we aren't
+ in C++0x mode. */
+ pedwarn ("ISO C++ does not include variadic templates");
+}
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index f97ab063dde..f500437e970 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -99,7 +99,7 @@ cp_protect_cleanup_actions (void)
When the destruction of an object during stack unwinding exits
using an exception ... void terminate(); is called. */
- return build_call (terminate_node, NULL_TREE);
+ return build_call_n (terminate_node, 0);
}
static tree
diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c
index 2ddc62c1e20..2f452ee5096 100644
--- a/gcc/cp/g++spec.c
+++ b/gcc/cp/g++spec.c
@@ -159,11 +159,19 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
arg = "";
if (library == 0
&& (strcmp (arg, "c++") == 0
- || strcmp (arg, "c++-cpp-output") == 0))
+ || strcmp (arg, "c++-cpp-output") == 0
+ || strcmp (arg, "objective-c++") == 0
+ || strcmp (arg, "objective-c++-cpp-output") == 0))
library = 1;
saw_speclang = 1;
}
+ else if (strcmp (argv[i], "-ObjC++") == 0)
+ {
+ if (library == 0)
+ library = 1;
+ saw_speclang = 1;
+ }
/* Arguments that go directly to the linker might be .o files,
or something, and so might cause libstdc++ to be needed. */
else if (strcmp (argv[i], "-Xlinker") == 0)
@@ -237,13 +245,6 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
if (quote)
fatal ("argument to '%s' missing\n", quote);
- /* If we know we don't have to do anything, bail now. */
- if (! added && library <= 0)
- {
- free (args);
- return;
- }
-
/* There's no point adding -shared-libgcc if we don't have a shared
libgcc. */
#ifndef ENABLE_SHARED_LIBGCC
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 1ca07989bab..679be2067e6 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1540,7 +1540,7 @@ static tree
build_builtin_delete_call (tree addr)
{
mark_used (global_delete_fndecl);
- return build_call (global_delete_fndecl, build_tree_list (NULL_TREE, addr));
+ return build_call_n (global_delete_fndecl, 1, addr);
}
/* Build and return a NEW_EXPR. If NELTS is non-NULL, TYPE[NELTS] is
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 94d7ed5e92c..40c059ad63c 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -1645,6 +1645,11 @@ write_type (tree type)
write_type (TREE_TYPE (type));
break;
+ case TYPE_PACK_EXPANSION:
+ write_string ("U10__variadic");
+ write_type (PACK_EXPANSION_PATTERN (type));
+ break;
+
default:
gcc_unreachable ();
}
@@ -2302,7 +2307,15 @@ write_template_arg (tree node)
G.need_abi_warning = 1;
}
- if (TYPE_P (node))
+ if (ARGUMENT_PACK_P (node))
+ {
+ /* Expand the template argument pack. */
+ tree args = ARGUMENT_PACK_ARGS (node);
+ int i, length = TREE_VEC_LENGTH (args);
+ for (i = 0; i < length; ++i)
+ write_template_arg (TREE_VEC_ELT (args, i));
+ }
+ else if (TYPE_P (node))
write_type (node);
else if (code == TEMPLATE_DECL)
/* A template appearing as a template arg is a template template arg. */
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 7d5c4e8f680..4dff5b9026a 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -452,6 +452,8 @@ use_thunk (tree thunk_fndecl, bool emit_p)
}
else
{
+ int i;
+ tree *argarray = (tree *) alloca (list_length (a) * sizeof (tree));
/* If this is a covariant thunk, or we don't have the necessary
code for efficient thunks, generate a thunk function that
just makes a call to the real function. Unfortunately, this
@@ -475,11 +477,10 @@ use_thunk (tree thunk_fndecl, bool emit_p)
fixed_offset, virtual_offset);
/* Build up the call to the real function. */
- t = tree_cons (NULL_TREE, t, NULL_TREE);
- for (a = TREE_CHAIN (a); a; a = TREE_CHAIN (a))
- t = tree_cons (NULL_TREE, a, t);
- t = nreverse (t);
- t = build_call (alias, t);
+ argarray[0] = t;
+ for (i = 1, a = TREE_CHAIN (a); a; a = TREE_CHAIN (a), i++)
+ argarray[i] = a;
+ t = build_call_a (alias, i, argarray);
CALL_FROM_THUNK_P (t) = 1;
if (VOID_TYPE_P (TREE_TYPE (t)))
@@ -1191,4 +1192,25 @@ skip_artificial_parms_for (tree fn, tree list)
return list;
}
+/* Given a FUNCTION_DECL FN and a chain LIST, return the number of
+ artificial parms in FN. */
+
+int
+num_artificial_parms_for (tree fn)
+{
+ int count = 0;
+
+ if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
+ count++;
+ else
+ return 0;
+
+ if (DECL_HAS_IN_CHARGE_PARM_P (fn))
+ count++;
+ if (DECL_HAS_VTT_PARM_P (fn))
+ count++;
+ return count;
+}
+
+
#include "gt-cp-method.h"
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 08f1c90f7a0..8efcfed28a4 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -4563,6 +4563,18 @@ arg_assoc_type (struct arg_lookup *k, tree type)
case LANG_TYPE:
gcc_assert (type == unknown_type_node);
return false;
+ case TYPE_PACK_EXPANSION:
+ return arg_assoc_type (k, PACK_EXPANSION_PATTERN (type));
+ case TYPE_ARGUMENT_PACK:
+ {
+ tree args = ARGUMENT_PACK_ARGS (type);
+ int i, len = TREE_VEC_LENGTH (args);
+ for (i = 0; i < len; i++)
+ if (arg_assoc_type (k, TREE_VEC_ELT (args, i)))
+ return true;
+ }
+ break;
+
default:
gcc_unreachable ();
}
diff --git a/gcc/cp/operators.def b/gcc/cp/operators.def
index 4518843b38f..b8400cd33c3 100644
--- a/gcc/cp/operators.def
+++ b/gcc/cp/operators.def
@@ -150,3 +150,6 @@ DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
/* Miscellaneous. */
DEF_SIMPLE_OPERATOR ("()", CALL_EXPR, "cl", -1)
+
+/* Variadic templates extension. */
+DEF_SIMPLE_OPERATOR ("...", EXPR_PACK_EXPANSION, "pu", 1)
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index b8af4d288bd..54c7668a50d 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -891,6 +891,7 @@ make_declarator (cp_declarator_kind kind)
declarator->kind = kind;
declarator->attributes = NULL_TREE;
declarator->declarator = NULL;
+ declarator->parameter_pack_p = false;
return declarator;
}
@@ -928,7 +929,7 @@ make_id_declarator (tree qualifying_scope, tree unqualified_name,
declarator->u.id.qualifying_scope = qualifying_scope;
declarator->u.id.unqualified_name = unqualified_name;
declarator->u.id.sfk = sfk;
-
+
return declarator;
}
@@ -945,6 +946,13 @@ make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
declarator->declarator = target;
declarator->u.pointer.qualifiers = cv_qualifiers;
declarator->u.pointer.class_type = NULL_TREE;
+ if (target)
+ {
+ declarator->parameter_pack_p = target->parameter_pack_p;
+ target->parameter_pack_p = false;
+ }
+ else
+ declarator->parameter_pack_p = false;
return declarator;
}
@@ -960,6 +968,13 @@ make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
declarator->declarator = target;
declarator->u.pointer.qualifiers = cv_qualifiers;
declarator->u.pointer.class_type = NULL_TREE;
+ if (target)
+ {
+ declarator->parameter_pack_p = target->parameter_pack_p;
+ target->parameter_pack_p = false;
+ }
+ else
+ declarator->parameter_pack_p = false;
return declarator;
}
@@ -978,6 +993,14 @@ make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
declarator->u.pointer.qualifiers = cv_qualifiers;
declarator->u.pointer.class_type = class_type;
+ if (pointee)
+ {
+ declarator->parameter_pack_p = pointee->parameter_pack_p;
+ pointee->parameter_pack_p = false;
+ }
+ else
+ declarator->parameter_pack_p = false;
+
return declarator;
}
@@ -999,6 +1022,13 @@ make_call_declarator (cp_declarator *target,
declarator->u.function.parameters = parms;
declarator->u.function.qualifiers = cv_qualifiers;
declarator->u.function.exception_specification = exception_specification;
+ if (target)
+ {
+ declarator->parameter_pack_p = target->parameter_pack_p;
+ target->parameter_pack_p = false;
+ }
+ else
+ declarator->parameter_pack_p = false;
return declarator;
}
@@ -1014,6 +1044,13 @@ make_array_declarator (cp_declarator *element, tree bounds)
declarator = make_declarator (cdk_array);
declarator->declarator = element;
declarator->u.array.bounds = bounds;
+ if (element)
+ {
+ declarator->parameter_pack_p = element->parameter_pack_p;
+ element->parameter_pack_p = false;
+ }
+ else
+ declarator->parameter_pack_p = false;
return declarator;
}
@@ -1410,6 +1447,7 @@ typedef struct cp_parser GTY(())
#define IN_ITERATION_STMT 2
#define IN_OMP_BLOCK 4
#define IN_OMP_FOR 8
+#define IN_IF_STMT 16
unsigned char in_statement;
/* TRUE if we are presently parsing the body of a switch statement.
@@ -1517,7 +1555,7 @@ static tree cp_parser_postfix_open_square_expression
static tree cp_parser_postfix_dot_deref_expression
(cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
static tree cp_parser_parenthesized_expression_list
- (cp_parser *, bool, bool, bool *);
+ (cp_parser *, bool, bool, bool, bool *);
static void cp_parser_pseudo_destructor_name
(cp_parser *, tree *, tree *);
static tree cp_parser_unary_expression
@@ -1730,9 +1768,9 @@ static void cp_parser_template_declaration
static tree cp_parser_template_parameter_list
(cp_parser *);
static tree cp_parser_template_parameter
- (cp_parser *, bool *);
+ (cp_parser *, bool *, bool *);
static tree cp_parser_type_parameter
- (cp_parser *);
+ (cp_parser *, bool *);
static tree cp_parser_template_id
(cp_parser *, bool, bool, bool);
static tree cp_parser_template_name
@@ -4305,6 +4343,21 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
allowed in standard C++. */
if (pedantic)
pedwarn ("ISO C++ forbids compound-literals");
+ /* For simplicitly, we disallow compound literals in
+ constant-expressions for simpliicitly. We could
+ allow compound literals of integer type, whose
+ initializer was a constant, in constant
+ expressions. Permitting that usage, as a further
+ extension, would not change the meaning of any
+ currently accepted programs. (Of course, as
+ compound literals are not part of ISO C++, the
+ standard has nothing to say.) */
+ if (cp_parser_non_integral_constant_expression
+ (parser, "non-constant compound literals"))
+ {
+ postfix_expression = error_mark_node;
+ break;
+ }
/* Form the representation of the compound-literal. */
postfix_expression
= finish_compound_literal (type, initializer_list);
@@ -4367,7 +4420,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
}
args = (cp_parser_parenthesized_expression_list
(parser, /*is_attribute_list=*/false,
- /*cast_p=*/false,
+ /*cast_p=*/false, /*allow_expansion_p=*/true,
/*non_constant_p=*/NULL));
if (is_builtin_constant_p)
{
@@ -4763,6 +4816,9 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
CAST_P is true if this expression is the target of a cast.
+ ALLOW_EXPANSION_P is true if this expression allows expansion of an
+ argument pack.
+
Returns a TREE_LIST. The TREE_VALUE of each node is a
representation of an assignment-expression. Note that a TREE_LIST
is returned even if there is only a single expression in the list.
@@ -4777,6 +4833,7 @@ static tree
cp_parser_parenthesized_expression_list (cp_parser* parser,
bool is_attribute_list,
bool cast_p,
+ bool allow_expansion_p,
bool *non_constant_p)
{
tree expression_list = NULL_TREE;
@@ -4826,6 +4883,18 @@ cp_parser_parenthesized_expression_list (cp_parser* parser,
if (fold_expr_p)
expr = fold_non_dependent_expr (expr);
+ /* If we have an ellipsis, then this is an expression
+ expansion. */
+ if (allow_expansion_p
+ && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+
+ /* Build the argument pack. */
+ expr = make_pack_expansion (expr);
+ }
+
/* Add it to the list. We add error_mark_node
expressions to the list, so that we can still tell if
the correct form for a parenthesized expression-list
@@ -5275,7 +5344,7 @@ cp_parser_new_placement (cp_parser* parser)
/* Parse the expression-list. */
expression_list = (cp_parser_parenthesized_expression_list
- (parser, false, /*cast_p=*/false,
+ (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
/*non_constant_p=*/NULL));
return expression_list;
@@ -5480,7 +5549,7 @@ cp_parser_new_initializer (cp_parser* parser)
tree expression_list;
expression_list = (cp_parser_parenthesized_expression_list
- (parser, false, /*cast_p=*/false,
+ (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
/*non_constant_p=*/NULL));
if (!expression_list)
expression_list = void_zero_node;
@@ -6538,6 +6607,19 @@ cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
|| token->type == CPP_EOF
|| token->type == CPP_PRAGMA_EOL)
break;
+
+ /* If we are in a compound statement and find 'else' then
+ something went wrong. */
+ else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
+ {
+ if (parser->in_statement & IN_IF_STMT)
+ break;
+ else
+ {
+ token = cp_lexer_consume_token (parser->lexer);
+ error ("%<else%> without a previous %<if%>");
+ }
+ }
/* Parse the statement. */
cp_parser_statement (parser, in_statement_expr, true, NULL);
@@ -6603,12 +6685,17 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p)
if (keyword == RID_IF)
{
bool nested_if;
+ unsigned char in_statement;
/* Add the condition. */
finish_if_stmt_cond (condition, statement);
/* Parse the then-clause. */
+ in_statement = parser->in_statement;
+ parser->in_statement |= IN_IF_STMT;
cp_parser_implicitly_scoped_statement (parser, &nested_if);
+ parser->in_statement = in_statement;
+
finish_then_clause (statement);
/* If the next token is `else', parse the else-clause. */
@@ -6954,6 +7041,7 @@ cp_parser_jump_statement (cp_parser* parser)
tree statement = error_mark_node;
cp_token *token;
enum rid keyword;
+ unsigned char in_statement;
/* Peek at the next token. */
token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
@@ -6965,14 +7053,15 @@ cp_parser_jump_statement (cp_parser* parser)
switch (keyword)
{
case RID_BREAK:
- switch (parser->in_statement)
+ in_statement = parser->in_statement & ~IN_IF_STMT;
+ switch (in_statement)
{
case 0:
error ("break statement not within loop or switch");
break;
default:
- gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
- || parser->in_statement == IN_ITERATION_STMT);
+ gcc_assert ((in_statement & IN_SWITCH_STMT)
+ || in_statement == IN_ITERATION_STMT);
statement = finish_break_stmt ();
break;
case IN_OMP_BLOCK:
@@ -6986,7 +7075,7 @@ cp_parser_jump_statement (cp_parser* parser)
break;
case RID_CONTINUE:
- switch (parser->in_statement & ~IN_SWITCH_STMT)
+ switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
{
case 0:
error ("continue statement not within a loop");
@@ -8168,8 +8257,8 @@ cp_parser_ctor_initializer_opt (cp_parser* parser)
/* Parse a mem-initializer-list.
mem-initializer-list:
- mem-initializer
- mem-initializer , mem-initializer-list */
+ mem-initializer ... [opt]
+ mem-initializer ... [opt] , mem-initializer-list */
static void
cp_parser_mem_initializer_list (cp_parser* parser)
@@ -8188,6 +8277,26 @@ cp_parser_mem_initializer_list (cp_parser* parser)
/* Parse the mem-initializer. */
mem_initializer = cp_parser_mem_initializer (parser);
+ /* If the next token is a `...', we're expanding member initializers. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+
+ /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
+ can be expanded but members cannot. */
+ if (mem_initializer != error_mark_node
+ && !TYPE_P (TREE_PURPOSE (mem_initializer)))
+ {
+ error ("cannot expand initializer for member %<%D%>",
+ TREE_PURPOSE (mem_initializer));
+ mem_initializer = error_mark_node;
+ }
+
+ /* Construct the pack expansion type. */
+ if (mem_initializer != error_mark_node)
+ mem_initializer = make_pack_expansion (mem_initializer);
+ }
/* Add it to the list, unless it was erroneous. */
if (mem_initializer != error_mark_node)
{
@@ -8243,6 +8352,7 @@ cp_parser_mem_initializer (cp_parser* parser)
expression_list
= cp_parser_parenthesized_expression_list (parser, false,
/*cast_p=*/false,
+ /*allow_expansion_p=*/true,
/*non_constant_p=*/NULL);
if (expression_list == error_mark_node)
return error_mark_node;
@@ -8646,14 +8756,18 @@ cp_parser_template_parameter_list (cp_parser* parser)
tree parameter;
cp_token *token;
bool is_non_type;
+ bool is_parameter_pack;
/* Parse the template-parameter. */
- parameter = cp_parser_template_parameter (parser, &is_non_type);
+ parameter = cp_parser_template_parameter (parser,
+ &is_non_type,
+ &is_parameter_pack);
/* Add it to the list. */
if (parameter != error_mark_node)
parameter_list = process_template_parm (parameter_list,
parameter,
- is_non_type);
+ is_non_type,
+ is_parameter_pack);
else
{
tree err_parm = build_tree_list (parameter, parameter);
@@ -8682,10 +8796,12 @@ cp_parser_template_parameter_list (cp_parser* parser)
If all goes well, returns a TREE_LIST. The TREE_VALUE represents
the parameter. The TREE_PURPOSE is the default value, if any.
Returns ERROR_MARK_NODE on failure. *IS_NON_TYPE is set to true
- iff this parameter is a non-type parameter. */
+ iff this parameter is a non-type parameter. *IS_PARAMETER_PACK is
+ set to true iff this parameter is a parameter pack. */
static tree
-cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
+cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
+ bool *is_parameter_pack)
{
cp_token *token;
cp_parameter_declarator *parameter_declarator;
@@ -8693,11 +8809,13 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
/* Assume it is a type parameter or a template parameter. */
*is_non_type = false;
+ /* Assume it not a parameter pack. */
+ *is_parameter_pack = false;
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
/* If it is `class' or `template', we have a type-parameter. */
if (token->keyword == RID_TEMPLATE)
- return cp_parser_type_parameter (parser);
+ return cp_parser_type_parameter (parser, is_parameter_pack);
/* If it is `class' or `typename' we do not know yet whether it is a
type parameter or a non-type parameter. Consider:
@@ -8715,6 +8833,10 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
{
/* Peek at the token after `class' or `typename'. */
token = cp_lexer_peek_nth_token (parser->lexer, 2);
+ /* If it's an ellipsis, we have a template type parameter
+ pack. */
+ if (token->type == CPP_ELLIPSIS)
+ return cp_parser_type_parameter (parser, is_parameter_pack);
/* If it's an identifier, skip it. */
if (token->type == CPP_NAME)
token = cp_lexer_peek_nth_token (parser->lexer, 3);
@@ -8723,7 +8845,7 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
if (token->type == CPP_COMMA
|| token->type == CPP_EQ
|| token->type == CPP_GREATER)
- return cp_parser_type_parameter (parser);
+ return cp_parser_type_parameter (parser, is_parameter_pack);
}
/* Otherwise, it is a non-type parameter.
@@ -8738,12 +8860,40 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
parameter_declarator
= cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
/*parenthesized_p=*/NULL);
+
+ /* If the parameter declaration is marked as a parameter pack, set
+ *IS_PARAMETER_PACK to notify the caller. Also, unmark the
+ declarator's PACK_EXPANSION_P, otherwise we'll get errors from
+ grokdeclarator. */
+ if (parameter_declarator
+ && parameter_declarator->declarator
+ && parameter_declarator->declarator->parameter_pack_p)
+ {
+ *is_parameter_pack = true;
+ parameter_declarator->declarator->parameter_pack_p = false;
+ }
+
+ /* If the next token is an ellipsis, and we don't already have it
+ marked as a parameter pack, then we have a parameter pack (that
+ has no declarator); */
+ if (!*is_parameter_pack
+ && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+ maybe_warn_variadic_templates ();
+
+ *is_parameter_pack = true;
+ }
+
parm = grokdeclarator (parameter_declarator->declarator,
&parameter_declarator->decl_specifiers,
PARM, /*initialized=*/0,
/*attrlist=*/NULL);
if (parm == error_mark_node)
return error_mark_node;
+
return build_tree_list (parameter_declarator->default_argument, parm);
}
@@ -8758,12 +8908,20 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
template < template-parameter-list > class identifier [opt]
= id-expression
+ GNU Extension (variadic templates):
+
+ type-parameter:
+ class ... identifier [opt]
+ typename ... identifier [opt]
+
Returns a TREE_LIST. The TREE_VALUE is itself a TREE_LIST. The
TREE_PURPOSE is the default-argument, if any. The TREE_VALUE is
- the declaration of the parameter. */
+ the declaration of the parameter.
+
+ Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
static tree
-cp_parser_type_parameter (cp_parser* parser)
+cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
{
cp_token *token;
tree parameter;
@@ -8782,6 +8940,17 @@ cp_parser_type_parameter (cp_parser* parser)
tree identifier;
tree default_argument;
+ /* If the next token is an ellipsis, we have a template
+ argument pack. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...' token. */
+ cp_lexer_consume_token (parser->lexer);
+ maybe_warn_variadic_templates ();
+
+ *is_parameter_pack = true;
+ }
+
/* If the next token is an identifier, then it names the
parameter. */
if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
@@ -8800,6 +8969,18 @@ cp_parser_type_parameter (cp_parser* parser)
/* Parse the default-argument. */
push_deferring_access_checks (dk_no_deferred);
default_argument = cp_parser_type_id (parser);
+
+ /* Template parameter packs cannot have default
+ arguments. */
+ if (*is_parameter_pack)
+ {
+ if (identifier)
+ error ("template parameter pack %qD cannot have a default argument",
+ identifier);
+ else
+ error ("template parameter packs cannot have default arguments");
+ default_argument = NULL_TREE;
+ }
pop_deferring_access_checks ();
}
else
@@ -8825,6 +9006,16 @@ cp_parser_type_parameter (cp_parser* parser)
cp_parser_require (parser, CPP_GREATER, "`>'");
/* Look for the `class' keyword. */
cp_parser_require_keyword (parser, RID_CLASS, "`class'");
+ /* If the next token is an ellipsis, we have a template
+ argument pack. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...' token. */
+ cp_lexer_consume_token (parser->lexer);
+ maybe_warn_variadic_templates ();
+
+ *is_parameter_pack = true;
+ }
/* If the next token is an `=', then there is a
default-argument. If the next token is a `>', we are at
the end of the parameter-list. If the next token is a `,',
@@ -8879,6 +9070,18 @@ cp_parser_type_parameter (cp_parser* parser)
/* See if the default argument is valid. */
default_argument
= check_template_template_default_arg (default_argument);
+
+ /* Template parameter packs cannot have default
+ arguments. */
+ if (*is_parameter_pack)
+ {
+ if (identifier)
+ error ("template parameter pack %qD cannot have a default argument",
+ identifier);
+ else
+ error ("template parameter packs cannot have default arguments");
+ default_argument = NULL_TREE;
+ }
pop_deferring_access_checks ();
}
else
@@ -9295,8 +9498,8 @@ cp_parser_template_name (cp_parser* parser,
/* Parse a template-argument-list.
template-argument-list:
- template-argument
- template-argument-list , template-argument
+ template-argument ... [opt]
+ template-argument-list , template-argument ... [opt]
Returns a TREE_VEC containing the arguments. */
@@ -9332,6 +9535,19 @@ cp_parser_template_argument_list (cp_parser* parser)
/* Parse the template-argument. */
argument = cp_parser_template_argument (parser);
+
+ /* If the next token is an ellipsis, we're expanding a template
+ argument pack. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...' token. */
+ cp_lexer_consume_token (parser->lexer);
+
+ /* Make the argument into a TYPE_PACK_EXPANSION or
+ EXPR_PACK_EXPANSION. */
+ argument = make_pack_expansion (argument);
+ }
+
if (n_args == alloced)
{
alloced *= 2;
@@ -11857,17 +12073,47 @@ cp_parser_direct_declarator (cp_parser* parser,
tree unqualified_name;
special_function_kind sfk;
bool abstract_ok;
+ bool pack_expansion_p = false;
/* Parse a declarator-id */
abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
if (abstract_ok)
- cp_parser_parse_tentatively (parser);
+ {
+ cp_parser_parse_tentatively (parser);
+
+ /* If we see an ellipsis, we should be looking at a
+ parameter pack. */
+ if (token->type == CPP_ELLIPSIS)
+ {
+ /* Consume the `...' */
+ cp_lexer_consume_token (parser->lexer);
+
+ pack_expansion_p = true;
+ }
+ }
+
unqualified_name
= cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
qualifying_scope = parser->scope;
if (abstract_ok)
{
- if (!cp_parser_parse_definitely (parser))
+ bool okay = false;
+
+ if (!unqualified_name && pack_expansion_p)
+ {
+ /* Check whether an error occurred. */
+ okay = !cp_parser_error_occurred (parser);
+
+ /* We already consumed the ellipsis to mark a
+ parameter pack, but we have no way to report it,
+ so abort the tentative parse. We will be exiting
+ immediately anyway. */
+ cp_parser_abort_tentative_parse (parser);
+ }
+ else
+ okay = cp_parser_parse_definitely (parser);
+
+ if (!okay)
unqualified_name = error_mark_node;
else if (unqualified_name
&& (qualifying_scope
@@ -11884,6 +12130,8 @@ cp_parser_direct_declarator (cp_parser* parser,
if (unqualified_name == error_mark_node)
{
declarator = cp_error_declarator;
+ pack_expansion_p = false;
+ declarator->parameter_pack_p = false;
break;
}
@@ -11920,6 +12168,7 @@ cp_parser_direct_declarator (cp_parser* parser,
}
sfk = sfk_none;
+
if (unqualified_name)
{
tree class_type;
@@ -11987,6 +12236,10 @@ cp_parser_direct_declarator (cp_parser* parser,
unqualified_name,
sfk);
declarator->id_loc = token->location;
+ declarator->parameter_pack_p = pack_expansion_p;
+
+ if (pack_expansion_p)
+ maybe_warn_variadic_templates ();
handle_declarator:;
scope = get_scope_of_declarator (declarator);
@@ -12548,9 +12801,9 @@ cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
/* Parse a parameter declaration.
parameter-declaration:
- decl-specifier-seq declarator
+ decl-specifier-seq ... [opt] declarator
decl-specifier-seq declarator = assignment-expression
- decl-specifier-seq abstract-declarator [opt]
+ decl-specifier-seq ... [opt] abstract-declarator [opt]
decl-specifier-seq abstract-declarator [opt] = assignment-expression
If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
@@ -12605,12 +12858,13 @@ cp_parser_parameter_declaration (cp_parser *parser,
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
+
/* If the next token is a `)', `,', `=', `>', or `...', then there
- is no declarator. */
+ is no declarator. However, when variadic templates are enabled,
+ there may be a declarator following `...'. */
if (token->type == CPP_CLOSE_PAREN
|| token->type == CPP_COMMA
|| token->type == CPP_EQ
- || token->type == CPP_ELLIPSIS
|| token->type == CPP_GREATER)
{
declarator = NULL;
@@ -12652,6 +12906,34 @@ cp_parser_parameter_declaration (cp_parser *parser,
cp_parser_attributes_opt (parser));
}
+ /* If the next token is an ellipsis, and the type of the declarator
+ contains parameter packs but it is not a TYPE_PACK_EXPANSION, then
+ we actually have a parameter pack expansion expression. Otherwise,
+ leave the ellipsis for a C-style variadic function. */
+ token = cp_lexer_peek_token (parser->lexer);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ tree type = decl_specifiers.type;
+
+ if (DECL_P (type))
+ type = TREE_TYPE (type);
+
+ if (TREE_CODE (type) != TYPE_PACK_EXPANSION
+ && (!declarator || !declarator->parameter_pack_p)
+ && uses_parameter_packs (type))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+ maybe_warn_variadic_templates ();
+
+ /* Build a pack expansion type */
+ if (declarator)
+ declarator->parameter_pack_p = true;
+ else
+ decl_specifiers.type = make_pack_expansion (type);
+ }
+ }
+
/* The restriction on defining new types applies only to the type
of the parameter, not to the default argument. */
parser->type_definition_forbidden_message = saved_message;
@@ -12883,6 +13165,7 @@ cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
else if (token->type == CPP_OPEN_PAREN)
init = cp_parser_parenthesized_expression_list (parser, false,
/*cast_p=*/false,
+ /*allow_expansion_p=*/true,
non_constant_p);
else
{
@@ -12958,8 +13241,8 @@ cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
/* Parse an initializer-list.
initializer-list:
- initializer-clause
- initializer-list , initializer-clause
+ initializer-clause ... [opt]
+ initializer-list , initializer-clause ... [opt]
GNU Extension:
@@ -13013,6 +13296,17 @@ cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
if (clause_non_constant_p)
*non_constant_p = true;
+ /* If we have an ellipsis, this is an initializer pack
+ expansion. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+
+ /* Turn the initializer into an initializer expansion. */
+ initializer = make_pack_expansion (initializer);
+ }
+
/* Add it to the vector. */
CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
@@ -14314,8 +14608,8 @@ cp_parser_constant_initializer (cp_parser* parser)
: base-specifier-list
base-specifier-list:
- base-specifier
- base-specifier-list , base-specifier
+ base-specifier ... [opt]
+ base-specifier-list , base-specifier ... [opt]
Returns a TREE_LIST representing the base-classes, in the order in
which they were declared. The representation of each node is as
@@ -14337,12 +14631,28 @@ cp_parser_base_clause (cp_parser* parser)
{
cp_token *token;
tree base;
+ bool pack_expansion_p = false;
/* Look for the base-specifier. */
base = cp_parser_base_specifier (parser);
+ /* Look for the (optional) ellipsis. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+
+ pack_expansion_p = true;
+ }
+
/* Add BASE to the front of the list. */
if (base != error_mark_node)
{
+ if (pack_expansion_p)
+ /* Make this a pack expansion type. */
+ TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
+ else
+ check_for_bare_parameter_packs (TREE_VALUE (base));
+
TREE_CHAIN (base) = bases;
bases = base;
}
@@ -14548,8 +14858,8 @@ cp_parser_exception_specification_opt (cp_parser* parser)
/* Parse an (optional) type-id-list.
type-id-list:
- type-id
- type-id-list , type-id
+ type-id ... [opt]
+ type-id-list , type-id ... [opt]
Returns a TREE_LIST. The TREE_VALUE of each node is a TYPE,
in the order that the types were presented. */
@@ -14566,6 +14876,15 @@ cp_parser_type_id_list (cp_parser* parser)
/* Get the next type-id. */
type = cp_parser_type_id (parser);
+ /* Parse the optional ellipsis. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+
+ /* Turn the type into a pack expansion expression. */
+ type = make_pack_expansion (type);
+ }
/* Add it to the list. */
types = add_exception_specifier (types, type, /*complain=*/1);
/* Peek at the next token. */
@@ -14999,6 +15318,7 @@ cp_parser_attribute_list (cp_parser* parser)
{
arguments = cp_parser_parenthesized_expression_list
(parser, true, /*cast_p=*/false,
+ /*allow_expansion_p=*/false,
/*non_constant_p=*/NULL);
/* Save the arguments away. */
TREE_VALUE (attribute) = arguments;
@@ -16081,6 +16401,7 @@ cp_parser_functional_cast (cp_parser* parser, tree type)
expression_list
= cp_parser_parenthesized_expression_list (parser, false,
/*cast_p=*/true,
+ /*allow_expansion_p=*/true,
/*non_constant_p=*/NULL);
cast = build_functional_cast (type, expression_list);
@@ -16430,6 +16751,7 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
const char *saved_message;
bool saved_integral_constant_expression_p;
bool saved_non_integral_constant_expression_p;
+ bool pack_expansion_p = false;
/* Initialize FORMAT the first time we get here. */
if (!format)
@@ -16454,6 +16776,19 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
= parser->non_integral_constant_expression_p;
parser->integral_constant_expression_p = false;
+ /* If it's a `...', then we are computing the length of a parameter
+ pack. */
+ if (keyword == RID_SIZEOF
+ && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
+ {
+ /* Consume the `...'. */
+ cp_lexer_consume_token (parser->lexer);
+ maybe_warn_variadic_templates ();
+
+ /* Note that this is an expansion. */
+ pack_expansion_p = true;
+ }
+
/* Do not actually evaluate the expression. */
++skip_evaluation;
/* If it's a `(', then we might be looking at the type-id
@@ -16498,6 +16833,11 @@ cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
if (!expr)
expr = cp_parser_unary_expression (parser, /*address_p=*/false,
/*cast_p=*/false);
+
+ if (pack_expansion_p)
+ /* Build a pack expansion. */
+ expr = make_pack_expansion (expr);
+
/* Go back to evaluating expressions. */
--skip_evaluation;
@@ -16790,7 +17130,9 @@ cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
cp_token *token;
token = cp_lexer_peek_token (parser->lexer);
- return (token->type == CPP_COMMA || token->type == CPP_GREATER);
+ return (token->type == CPP_COMMA
+ || token->type == CPP_GREATER
+ || token->type == CPP_ELLIPSIS);
}
/* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 31ad46c5052..f947da2b0fa 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -106,8 +106,6 @@ static void add_pending_template (tree);
static int push_tinst_level (tree);
static void pop_tinst_level (void);
static void reopen_tinst_level (tree);
-static tree classtype_mangled_name (tree);
-static char* mangle_class_name_for_template (const char *, tree, tree);
static tree tsubst_initializer_list (tree, tree);
static tree get_class_bindings (tree, tree, tree);
static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
@@ -126,6 +124,7 @@ static tree convert_template_argument (tree, tree, tree,
tsubst_flags_t, int, tree);
static int for_each_template_parm (tree, tree_fn_t, void*,
struct pointer_set_t*);
+static tree expand_template_argument_pack (tree);
static tree build_template_parm_index (int, int, int, tree, tree);
static int inline_needs_template_parms (tree);
static void push_inline_template_parms_recursive (tree, int);
@@ -140,6 +139,8 @@ static int can_complete_type_without_circularity (tree);
static tree get_bindings (tree, tree, tree, bool);
static int template_decl_level (tree);
static int check_cv_quals_for_unify (int, tree, tree);
+static void template_parm_level_and_index (tree, int*, int*);
+static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
@@ -163,11 +164,13 @@ static tree copy_default_args_to_explicit_spec_1 (tree, tree);
static void copy_default_args_to_explicit_spec (tree);
static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
static int eq_local_specializations (const void *, const void *);
+static bool dependent_template_arg_p (tree);
static bool any_template_arguments_need_structural_equality_p (tree);
static bool dependent_type_p_r (tree);
static tree tsubst (tree, tree, tsubst_flags_t, tree);
static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
+static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
/* Make the current scope suitable for access checking when we are
processing T. T can be FUNCTION_DECL for instantiated function
@@ -2264,7 +2267,9 @@ comp_template_parms (tree parms1, tree parms2)
if (TREE_CODE (parm1) != TREE_CODE (parm2))
return 0;
- if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
+ if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
+ && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
+ == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
continue;
else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
return 0;
@@ -2279,6 +2284,402 @@ comp_template_parms (tree parms1, tree parms2)
return 1;
}
+/* Determine whether PARM is a parameter pack. */
+bool
+template_parameter_pack_p (tree parm)
+{
+ /* Determine if we have a non-type template parameter pack. */
+ if (TREE_CODE (parm) == PARM_DECL)
+ return (DECL_TEMPLATE_PARM_P (parm)
+ && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
+
+ /* If this is a list of template parameters, we could get a
+ TYPE_DECL or a TEMPLATE_DECL. */
+ if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
+ parm = TREE_TYPE (parm);
+
+ return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
+ || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
+ && TEMPLATE_TYPE_PARAMETER_PACK (parm));
+}
+
+/* Determine whether PARMS describes a variadic template parameter
+ list, i.e., one that is terminated by a template parameter pack. */
+bool
+template_parms_variadic_p (tree parms)
+{
+ int nparms = TREE_VEC_LENGTH (parms);
+ tree last_parm = TREE_VALUE (TREE_VEC_ELT (parms, nparms - 1));
+
+ return template_parameter_pack_p (last_parm);
+}
+
+/* Determine whether ARGS describes a variadic template args list,
+ i.e., one that is terminated by a template argument pack. */
+static bool
+template_args_variadic_p (tree args)
+{
+ int nargs;
+ tree last_parm;
+
+ if (args == NULL_TREE)
+ return false;
+
+ args = INNERMOST_TEMPLATE_ARGS (args);
+ nargs = TREE_VEC_LENGTH (args);
+
+ if (nargs == 0)
+ return false;
+
+ last_parm = TREE_VEC_ELT (args, nargs - 1);
+
+ return ARGUMENT_PACK_P (last_parm);
+}
+
+/* Generate a new name for the parameter pack name NAME (an
+ IDENTIFIER_NODE) that incorporates its */
+static tree
+make_ith_pack_parameter_name (tree name, int i)
+{
+ /* Munge the name to include the parameter index. */
+ char numbuf[128];
+ char* newname;
+
+ sprintf(numbuf, "%i", i);
+ newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
+ sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
+ return get_identifier (newname);
+}
+
+/* Structure used to track the progress of find_parameter_pack_r. */
+struct find_parameter_pack_data
+{
+ tree* parameter_packs;
+ struct pointer_set_t *visited;
+};
+
+/* Identifiers all of the argument packs that occur in a template
+ argument and appends them to the TREE_LIST inside DATA, which is a
+ find_parameter_pack_Data structure. This is a subroutine of
+ make_pack_expansion and uses_parameter_packs. */
+static tree
+find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
+{
+ tree t = *tp;
+ struct find_parameter_pack_data* ppd =
+ (struct find_parameter_pack_data*)data;
+
+ if (TYPE_P (t))
+ {
+ tree context = TYPE_CONTEXT (t);
+ walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
+ }
+
+ /* This switch statement will return immediately if we don't find a
+ parameter pack. */
+ switch (TREE_CODE (t))
+ {
+ case TEMPLATE_PARM_INDEX:
+ if (TEMPLATE_PARM_PARAMETER_PACK (t))
+ break;
+ return NULL_TREE;
+
+ case BOUND_TEMPLATE_TEMPLATE_PARM:
+ /* Check the template arguments. */
+ walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
+ ppd->visited);
+
+ /* Dig out the underlying TEMPLATE_TEMPLATE_PARM. */
+ t = TYPE_TI_TEMPLATE (t);
+ if (DECL_P (t) && TREE_TYPE (t))
+ t = TREE_TYPE (t);
+ *walk_subtrees = 0;
+
+ /* Fall through. */
+
+ case TEMPLATE_TYPE_PARM:
+ case TEMPLATE_TEMPLATE_PARM:
+ if (TEMPLATE_TYPE_PARAMETER_PACK (t))
+ break;
+ return NULL_TREE;
+
+ case PARM_DECL:
+ if (FUNCTION_PARAMETER_PACK_P (t))
+ {
+ /* We don't want to walk into the type of a PARM_DECL,
+ because we don't want to see the type parameter pack.*/
+ *walk_subtrees = 0;
+ break;
+ }
+ return NULL_TREE;
+
+ case RECORD_TYPE:
+ if (TYPE_PTRMEMFUNC_P (t))
+ return NULL_TREE;
+ /* Fall through. */
+
+ case UNION_TYPE:
+ case ENUMERAL_TYPE:
+ if (TYPE_TEMPLATE_INFO (t))
+ {
+ tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
+ walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
+ }
+
+ *walk_subtrees = 0;
+ return NULL_TREE;
+
+ case TEMPLATE_DECL:
+ if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
+ && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
+ break;
+
+ *walk_subtrees = 0;
+ return NULL_TREE;
+
+ case TYPE_PACK_EXPANSION:
+ case EXPR_PACK_EXPANSION:
+ *walk_subtrees = 0;
+ return NULL_TREE;
+
+ default:
+ return NULL_TREE;
+ }
+
+ /* Add this parameter pack to the list. */
+ *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
+
+ return NULL_TREE;
+}
+
+/* Determines if the expression or type T uses any parameter packs. */
+bool
+uses_parameter_packs (tree t)
+{
+ tree parameter_packs = NULL_TREE;
+ struct find_parameter_pack_data ppd;
+ ppd.parameter_packs = &parameter_packs;
+ ppd.visited = pointer_set_create ();
+ walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
+ return parameter_packs != NULL_TREE;
+}
+
+/* Turn ARG, which may be an expression, type, or a TREE_LIST
+ representation a base-class initializer into a parameter pack
+ expansion. If all goes well, the resulting node will be an
+ EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
+ respectively. */
+tree
+make_pack_expansion (tree arg)
+{
+ tree result;
+ tree parameter_packs = NULL_TREE;
+ bool for_types = false;
+ struct find_parameter_pack_data ppd;
+
+ if (!arg || arg == error_mark_node)
+ return arg;
+
+ if (TREE_CODE (arg) == TREE_LIST)
+ {
+ /* The only time we will see a TREE_LIST here is for a base
+ class initializer. In this case, the TREE_PURPOSE will be a
+ _TYPE node (representing the base class expansion we're
+ initializing) and the TREE_VALUE will be a TREE_LIST
+ containing the initialization arguments.
+
+ The resulting expansion looks somewhat different from most
+ expansions. Rather than returning just one _EXPANSION, we
+ return a TREE_LIST whose TREE_PURPOSE is a
+ TYPE_PACK_EXPANSION containing the bases that will be
+ initialized. The TREE_VALUE will be identical to the
+ original TREE_VALUE, which is a list of arguments that will
+ be passed to each base. We do not introduce any new pack
+ expansion nodes into the TREE_VALUE (although it is possible
+ that some already exist), because the TREE_PURPOSE and
+ TREE_VALUE all need to be expanded together with the same
+ _EXPANSION node. Note that the TYPE_PACK_EXPANSION in the
+ resulting TREE_PURPOSE will mention the parameter packs in
+ both the bases and the arguments to the bases. */
+ tree purpose;
+ tree value;
+ tree parameter_packs = NULL_TREE;
+
+ /* Determine which parameter packs will be used by the base
+ class expansion. */
+ ppd.visited = pointer_set_create ();
+ ppd.parameter_packs = &parameter_packs;
+ walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
+ &ppd, ppd.visited);
+
+ if (parameter_packs == NULL_TREE)
+ {
+ error ("base initializer expansion %<%T%> contains no parameter packs", arg);
+ return error_mark_node;
+ }
+
+ if (TREE_VALUE (arg) != void_type_node)
+ {
+ /* Collect the sets of parameter packs used in each of the
+ initialization arguments. */
+ for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
+ {
+ /* Determine which parameter packs will be expanded in this
+ argument. */
+ walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
+ &ppd, ppd.visited);
+ }
+ }
+
+ /* Create the pack expansion type for the base type. */
+ purpose = make_node (TYPE_PACK_EXPANSION);
+ SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
+ PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
+
+ /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
+ they will rarely be compared to anything. */
+ SET_TYPE_STRUCTURAL_EQUALITY (purpose);
+
+ return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
+ }
+
+ if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
+ for_types = true;
+
+ /* Build the PACK_EXPANSION_* node. */
+ result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
+ SET_PACK_EXPANSION_PATTERN (result, arg);
+ if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
+ {
+ /* Propagate type and const-expression information. */
+ TREE_TYPE (result) = TREE_TYPE (arg);
+ TREE_CONSTANT (result) = TREE_CONSTANT (arg);
+ }
+ else
+ /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
+ they will rarely be compared to anything. */
+ SET_TYPE_STRUCTURAL_EQUALITY (result);
+
+ /* Determine which parameter packs will be expanded. */
+ ppd.parameter_packs = &parameter_packs;
+ ppd.visited = pointer_set_create ();
+ walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
+
+ /* Make sure we found some parameter packs. */
+ if (parameter_packs == NULL_TREE)
+ {
+ if (TYPE_P (arg))
+ error ("expansion pattern %<%T%> contains no argument packs", arg);
+ else
+ error ("expansion pattern %<%E%> contains no argument packs", arg);
+ return error_mark_node;
+ }
+ PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
+
+ return result;
+}
+
+/* Checks T for any "bare" parameter packs, which have not yet been
+ expanded, and issues an error if any are found. This operation can
+ only be done on full expressions or types (e.g., an expression
+ statement, "if" condition, etc.), because we could have expressions like:
+
+ foo(f(g(h(args)))...)
+
+ where "args" is a parameter pack. check_for_bare_parameter_packs
+ should not be called for the subexpressions args, h(args),
+ g(h(args)), or f(g(h(args))), because we would produce erroneous
+ error messages. */
+void
+check_for_bare_parameter_packs (tree t)
+{
+ tree parameter_packs = NULL_TREE;
+ struct find_parameter_pack_data ppd;
+
+ if (!processing_template_decl || !t || t == error_mark_node)
+ return;
+
+ if (TREE_CODE (t) == TYPE_DECL)
+ t = TREE_TYPE (t);
+
+ ppd.parameter_packs = &parameter_packs;
+ ppd.visited = pointer_set_create ();
+ walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
+
+ if (parameter_packs) {
+ error ("parameter packs not expanded with `...':");
+ while (parameter_packs)
+ {
+ tree pack = TREE_VALUE (parameter_packs);
+ tree name = NULL_TREE;
+
+ if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
+ || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
+ name = TYPE_NAME (pack);
+ else
+ name = DECL_NAME (pack);
+ inform (" %qD", name);
+
+ parameter_packs = TREE_CHAIN (parameter_packs);
+ }
+ }
+}
+
+/* Expand any parameter packs that occur in the template arguments in
+ ARGS. */
+tree
+expand_template_argument_pack (tree args)
+{
+ tree result_args = NULL_TREE;
+ int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
+ int num_result_args = -1;
+
+ /* First, determine if we need to expand anything, and the number of
+ slots we'll need. */
+ for (in_arg = 0; in_arg < nargs; ++in_arg)
+ {
+ tree arg = TREE_VEC_ELT (args, in_arg);
+ if (ARGUMENT_PACK_P (arg))
+ {
+ int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
+ if (num_result_args < 0)
+ num_result_args = in_arg + num_packed;
+ else
+ num_result_args += num_packed;
+ }
+ else
+ {
+ if (num_result_args >= 0)
+ num_result_args++;
+ }
+ }
+
+ /* If no expansion is necessary, we're done. */
+ if (num_result_args < 0)
+ return args;
+
+ /* Expand arguments. */
+ result_args = make_tree_vec (num_result_args);
+ for (in_arg = 0; in_arg < nargs; ++in_arg)
+ {
+ tree arg = TREE_VEC_ELT (args, in_arg);
+ if (ARGUMENT_PACK_P (arg))
+ {
+ tree packed = ARGUMENT_PACK_ARGS (arg);
+ int i, num_packed = TREE_VEC_LENGTH (packed);
+ for (i = 0; i < num_packed; ++i, ++out_arg)
+ TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
+ }
+ else
+ {
+ TREE_VEC_ELT (result_args, out_arg) = arg;
+ ++out_arg;
+ }
+ }
+
+ return result_args;
+}
+
/* Complain if DECL shadows a template parameter.
[temp.local]: A template-parameter shall not be redeclared within its
@@ -2401,6 +2802,8 @@ reduce_template_parm_level (tree index, tree type, int levels)
TEMPLATE_PARM_ORIG_LEVEL (index),
decl, type);
TEMPLATE_PARM_DESCENDANTS (index) = t;
+ TEMPLATE_PARM_PARAMETER_PACK (t)
+ = TEMPLATE_PARM_PARAMETER_PACK (index);
/* Template template parameters need this. */
if (TREE_CODE (decl) != CONST_DECL)
@@ -2413,10 +2816,12 @@ reduce_template_parm_level (tree index, tree type, int levels)
/* Process information from new template parameter PARM and append it to the
LIST being built. This new parameter is a non-type parameter iff
- IS_NON_TYPE is true. */
+ IS_NON_TYPE is true. This new parameter is a parameter
+ pack iff IS_PARAMETER_PACK is true. */
tree
-process_template_parm (tree list, tree parm, bool is_non_type)
+process_template_parm (tree list, tree parm, bool is_non_type,
+ bool is_parameter_pack)
{
tree decl = 0;
tree defval;
@@ -2469,6 +2874,16 @@ process_template_parm (tree list, tree parm, bool is_non_type)
TREE_VALUE (err_parm_list) = error_mark_node;
return chainon (list, err_parm_list);
}
+
+ if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
+ {
+ /* This template parameter is not a parameter pack, but it
+ should be. Complain about "bare" parameter packs. */
+ check_for_bare_parameter_packs (TREE_TYPE (parm));
+
+ /* Recover by calling this a parameter pack. */
+ is_parameter_pack = true;
+ }
}
/* A template parameter is not modifiable. */
@@ -2483,6 +2898,9 @@ process_template_parm (tree list, tree parm, bool is_non_type)
= build_template_parm_index (idx, processing_template_decl,
processing_template_decl,
decl, TREE_TYPE (parm));
+
+ TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
+ = is_parameter_pack;
}
else
{
@@ -2512,6 +2930,7 @@ process_template_parm (tree list, tree parm, bool is_non_type)
= build_template_parm_index (idx, processing_template_decl,
processing_template_decl,
decl, TREE_TYPE (parm));
+ TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
TYPE_CANONICAL (t) = canonical_type_parameter (t);
}
DECL_ARTIFICIAL (decl) = 1;
@@ -2604,11 +3023,38 @@ current_template_args (void)
{
if (TREE_CODE (t) == TYPE_DECL
|| TREE_CODE (t) == TEMPLATE_DECL)
- t = TREE_TYPE (t);
- else
- t = DECL_INITIAL (t);
- }
-
+ {
+ t = TREE_TYPE (t);
+
+ if (TEMPLATE_TYPE_PARAMETER_PACK (t))
+ {
+ /* Turn this argument into a TYPE_ARGUMENT_PACK
+ with a single element, which expands T. */
+ tree vec = make_tree_vec (1);
+ TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
+
+ t = make_node (TYPE_ARGUMENT_PACK);
+ SET_ARGUMENT_PACK_ARGS (t, vec);
+ }
+ }
+ else
+ {
+ t = DECL_INITIAL (t);
+
+ if (TEMPLATE_PARM_PARAMETER_PACK (t))
+ {
+ /* Turn this argument into a NONTYPE_ARGUMENT_PACK
+ with a single element, which expands T. */
+ tree vec = make_tree_vec (1);
+ tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
+ TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
+
+ t = make_node (NONTYPE_ARGUMENT_PACK);
+ SET_ARGUMENT_PACK_ARGS (t, vec);
+ TREE_TYPE (t) = type;
+ }
+ }
+ }
TREE_VEC_ELT (a, i) = t;
}
}
@@ -2798,74 +3244,114 @@ process_partial_specialization (tree decl)
The type of a template parameter corresponding to a specialized
non-type argument shall not be dependent on a parameter of the
- specialization. */
+ specialization.
+
+ Also, we verify that pack expansions only occur at the
+ end of the argument list. */
gcc_assert (nargs == DECL_NTPARMS (maintmpl));
tpd2.parms = 0;
for (i = 0; i < nargs; ++i)
{
+ tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
tree arg = TREE_VEC_ELT (inner_args, i);
- if (/* These first two lines are the `non-type' bit. */
- !TYPE_P (arg)
- && TREE_CODE (arg) != TEMPLATE_DECL
- /* This next line is the `argument expression is not just a
- simple identifier' condition and also the `specialized
- non-type argument' bit. */
- && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
- {
- if (tpd.arg_uses_template_parms[i])
- error ("template argument %qE involves template parameter(s)", arg);
- else
- {
- /* Look at the corresponding template parameter,
- marking which template parameters its type depends
- upon. */
- tree type =
- TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
- i)));
-
- if (!tpd2.parms)
- {
- /* We haven't yet initialized TPD2. Do so now. */
- tpd2.arg_uses_template_parms
- = (int *) alloca (sizeof (int) * nargs);
- /* The number of parameters here is the number in the
- main template, which, as checked in the assertion
- above, is NARGS. */
- tpd2.parms = (int *) alloca (sizeof (int) * nargs);
- tpd2.level =
- TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
- }
+ tree packed_args = NULL_TREE;
+ int j, len = 1;
- /* Mark the template parameters. But this time, we're
- looking for the template parameters of the main
- template, not in the specialization. */
- tpd2.current_arg = i;
- tpd2.arg_uses_template_parms[i] = 0;
- memset (tpd2.parms, 0, sizeof (int) * nargs);
- for_each_template_parm (type,
- &mark_template_parm,
- &tpd2,
- NULL);
-
- if (tpd2.arg_uses_template_parms [i])
- {
- /* The type depended on some template parameters.
- If they are fully specialized in the
- specialization, that's OK. */
- int j;
- for (j = 0; j < nargs; ++j)
- if (tpd2.parms[j] != 0
- && tpd.arg_uses_template_parms [j])
- {
- error ("type %qT of template argument %qE depends "
- "on template parameter(s)",
- type,
- arg);
- break;
- }
- }
- }
- }
+ if (ARGUMENT_PACK_P (arg))
+ {
+ /* Extract the arguments from the argument pack. We'll be
+ iterating over these in the following loop. */
+ packed_args = ARGUMENT_PACK_ARGS (arg);
+ len = TREE_VEC_LENGTH (packed_args);
+ }
+
+ for (j = 0; j < len; j++)
+ {
+ if (packed_args)
+ /* Get the Jth argument in the parameter pack. */
+ arg = TREE_VEC_ELT (packed_args, j);
+
+ if (PACK_EXPANSION_P (arg))
+ {
+ /* Pack expansions must come at the end of the
+ argument list. */
+ if ((packed_args && j < len - 1)
+ || (!packed_args && i < nargs - 1))
+ {
+ if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
+ error ("parameter pack argument %qE must be at the end of the template argument list", arg);
+ else
+ error ("parameter pack argument %qT must be at the end of the template argument list", arg);
+ }
+ }
+
+ if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
+ /* We only care about the pattern. */
+ arg = PACK_EXPANSION_PATTERN (arg);
+
+ if (/* These first two lines are the `non-type' bit. */
+ !TYPE_P (arg)
+ && TREE_CODE (arg) != TEMPLATE_DECL
+ /* This next line is the `argument expression is not just a
+ simple identifier' condition and also the `specialized
+ non-type argument' bit. */
+ && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
+ {
+ if ((!packed_args && tpd.arg_uses_template_parms[i])
+ || (packed_args && uses_template_parms (arg)))
+ error ("template argument %qE involves template parameter(s)",
+ arg);
+ else
+ {
+ /* Look at the corresponding template parameter,
+ marking which template parameters its type depends
+ upon. */
+ tree type = TREE_TYPE (parm);
+
+ if (!tpd2.parms)
+ {
+ /* We haven't yet initialized TPD2. Do so now. */
+ tpd2.arg_uses_template_parms
+ = (int *) alloca (sizeof (int) * nargs);
+ /* The number of parameters here is the number in the
+ main template, which, as checked in the assertion
+ above, is NARGS. */
+ tpd2.parms = (int *) alloca (sizeof (int) * nargs);
+ tpd2.level =
+ TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
+ }
+
+ /* Mark the template parameters. But this time, we're
+ looking for the template parameters of the main
+ template, not in the specialization. */
+ tpd2.current_arg = i;
+ tpd2.arg_uses_template_parms[i] = 0;
+ memset (tpd2.parms, 0, sizeof (int) * nargs);
+ for_each_template_parm (type,
+ &mark_template_parm,
+ &tpd2,
+ NULL);
+
+ if (tpd2.arg_uses_template_parms [i])
+ {
+ /* The type depended on some template parameters.
+ If they are fully specialized in the
+ specialization, that's OK. */
+ int j;
+ for (j = 0; j < nargs; ++j)
+ if (tpd2.parms[j] != 0
+ && tpd.arg_uses_template_parms [j])
+ {
+ error ("type %qT of template argument %qE depends "
+ "on template parameter(s)",
+ type,
+ arg);
+ break;
+ }
+ }
+ }
+ }
+ }
}
if (retrieve_specialization (maintmpl, specargs,
@@ -3160,9 +3646,36 @@ push_template_decl_real (tree decl, bool is_friend)
check_default_tmpl_args (decl, current_template_parms,
primary, is_partial);
+ /* Ensure that there are no parameter packs in the type of this
+ declaration that have not been expanded. */
+ check_for_bare_parameter_packs (TREE_TYPE (decl));
+
if (is_partial)
return process_partial_specialization (decl);
+ /* A primary class template can only have one parameter pack, at the
+ end of the template parameter list. */
+ if (primary && TREE_CODE (decl) == TYPE_DECL)
+ {
+ tree inner_parms
+ = INNERMOST_TEMPLATE_PARMS (current_template_parms);
+ int i, len = TREE_VEC_LENGTH (inner_parms);
+ for (i = 0; i < len - 1; i++)
+ {
+ tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
+
+ if (template_parameter_pack_p (parm))
+ {
+ if (TREE_CODE (parm) == PARM_DECL)
+ error ("parameter pack %qE must be at the end of the"
+ " template parameter list", parm);
+ else
+ error ("parameter pack %qT must be at the end of the"
+ " template parameter list", TREE_TYPE (parm));
+ }
+ }
+ }
+
args = current_template_args ();
if (!ctx
@@ -3349,14 +3862,7 @@ push_template_decl_real (tree decl, bool is_friend)
info = tree_cons (tmpl, args, NULL_TREE);
if (DECL_IMPLICIT_TYPEDEF_P (decl))
- {
- SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
- if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
- && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
- /* Don't change the name if we've already set it up. */
- && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
- DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
- }
+ SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
else if (DECL_LANG_SPECIFIC (decl))
DECL_TEMPLATE_INFO (decl) = info;
@@ -3944,9 +4450,6 @@ coerce_template_template_parms (tree parm_parms,
switch (TREE_CODE (parm))
{
- case TYPE_DECL:
- break;
-
case TEMPLATE_DECL:
/* We encounter instantiations of templates like
template <template <template <class> class> class TT>
@@ -3959,6 +4462,13 @@ coerce_template_template_parms (tree parm_parms,
(parmparm, argparm, complain, in_decl, outer_args))
return 0;
}
+ /* Fall through. */
+
+ case TYPE_DECL:
+ if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
+ != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
+ /* One is a parameter pack, the other is not. */
+ return 0;
break;
case PARM_DECL:
@@ -3974,6 +4484,11 @@ coerce_template_template_parms (tree parm_parms,
(tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
TREE_TYPE (arg)))
return 0;
+
+ if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
+ != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
+ /* One is a parameter pack, the other is not. */
+ return 0;
break;
default:
@@ -4000,6 +4515,7 @@ convert_template_argument (tree parm,
{
tree val;
int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
+ tree check_arg = arg;
if (TREE_CODE (arg) == TREE_LIST
&& TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
@@ -4017,10 +4533,16 @@ convert_template_argument (tree parm,
requires_type = (TREE_CODE (parm) == TYPE_DECL
|| requires_tmpl_type);
- is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
- && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
- || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
- || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
+ /* When determining whether a argument pack expansion is a template,
+ look at the pattern. */
+ if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
+ check_arg = PACK_EXPANSION_PATTERN (check_arg);
+
+ is_tmpl_type =
+ ((TREE_CODE (check_arg) == TEMPLATE_DECL
+ && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
+ || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
+ || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
if (is_tmpl_type
&& (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
@@ -4088,7 +4610,15 @@ convert_template_argument (tree parm,
else
{
tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
- tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
+ tree argparm;
+
+ check_arg = arg;
+ /* When determining whether a pack expansion is a template,
+ look at the pattern. */
+ if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
+ check_arg = PACK_EXPANSION_PATTERN (check_arg);
+
+ argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
if (coerce_template_template_parms (parmparm, argparm,
complain, in_decl,
@@ -4098,9 +4628,17 @@ convert_template_argument (tree parm,
/* TEMPLATE_TEMPLATE_PARM node is preferred over
TEMPLATE_DECL. */
- if (val != error_mark_node
- && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
- val = TREE_TYPE (val);
+ if (val != error_mark_node)
+ {
+ if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
+ val = TREE_TYPE (val);
+ else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
+ && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
+ {
+ val = TREE_TYPE (check_arg);
+ val = make_pack_expansion (val);
+ }
+ }
}
else
{
@@ -4184,12 +4722,20 @@ coerce_template_parms (tree parms,
tree new_inner_args;
bool saved_skip_evaluation;
- inner_args = INNERMOST_TEMPLATE_ARGS (args);
+ /* When used as a boolean value, indicates whether this is a
+ variadic template parameter list. Since it's an int, we can also
+ subtract it from nparms to get the number of non-variadic
+ parameters. */
+ int variadic_p = template_parms_variadic_p (parms) ? 1 : 0;
+
+ inner_args
+ = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
+
nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
nparms = TREE_VEC_LENGTH (parms);
- if (nargs > nparms
- || (nargs < nparms
+ if ((nargs > nparms - variadic_p && !variadic_p)
+ || (nargs < nparms - variadic_p
&& require_all_args
&& (!use_default_args
|| (TREE_VEC_ELT (parms, nargs) != error_mark_node
@@ -4197,8 +4743,15 @@ coerce_template_parms (tree parms,
{
if (complain & tf_error)
{
- error ("wrong number of template arguments (%d, should be %d)",
- nargs, nparms);
+ const char *or_more = "";
+ if (variadic_p)
+ {
+ or_more = " or more";
+ --nparms;
+ }
+
+ error ("wrong number of template arguments (%d, should be %d%s)",
+ nargs, nparms, or_more);
if (in_decl)
error ("provided for %q+D", in_decl);
@@ -4213,7 +4766,7 @@ coerce_template_parms (tree parms,
skip_evaluation = false;
new_inner_args = make_tree_vec (nparms);
new_args = add_outermost_template_args (args, new_inner_args);
- for (i = 0; i < nparms; i++)
+ for (i = 0; i < nparms - variadic_p; i++)
{
tree arg;
tree parm;
@@ -4229,7 +4782,29 @@ coerce_template_parms (tree parms,
/* Calculate the Ith argument. */
if (i < nargs)
- arg = TREE_VEC_ELT (inner_args, i);
+ {
+ arg = TREE_VEC_ELT (inner_args, i);
+
+ if (PACK_EXPANSION_P (arg))
+ {
+ /* If ARG is a pack expansion, then PARM must be
+ a template parameter pack. We can't expand into a
+ fixed-length argument list. */
+ tree actual_parm = TREE_VALUE (parm);
+ bool parm_is_parameter_pack
+ = template_parameter_pack_p (actual_parm);
+
+ if (!parm_is_parameter_pack)
+ {
+ if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
+ error ("cannot expand %<%E%> into a fixed-length "
+ "argument list", arg);
+ else
+ error ("cannot expand %<%T%> into a fixed-length "
+ "argument list", arg);
+ }
+ }
+ }
else if (require_all_args)
/* There must be a default arg in this case. */
arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
@@ -4254,6 +4829,101 @@ coerce_template_parms (tree parms,
}
skip_evaluation = saved_skip_evaluation;
+ if (variadic_p)
+ {
+ int expected_len = nargs - nparms + 1;
+ tree parm = TREE_VEC_ELT (parms, nparms - 1);
+ tree packed_args;
+ tree argument_pack;
+ tree packed_types = NULL_TREE;
+
+ packed_args = make_tree_vec (expected_len >= 0 ? expected_len : 0);
+
+ if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
+ && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
+ {
+ /* When the template parameter is a non-type template
+ parameter pack whose type uses parameter packs, we need
+ to look at each of the template arguments
+ separately. Build a vector of the types for these
+ non-type template parameters in PACKED_TYPES. */
+ tree expansion
+ = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
+ packed_types = tsubst_pack_expansion (expansion, args,
+ complain, in_decl);
+
+ if (packed_types == error_mark_node)
+ return error_mark_node;
+
+ /* Check that we have the right number of arguments. */
+ if (i < nargs
+ && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, i))
+ && nargs - i != TREE_VEC_LENGTH (packed_types))
+ {
+ error ("wrong number of template arguments (%d, should be %d)",
+ nargs, nparms - 1 + TREE_VEC_LENGTH (packed_types));
+ return error_mark_node;
+ }
+
+ /* If we aren't able to check the actual arguments now
+ (because they haven't been expanded yet), we can at least
+ verify that all of the types used for the non-type
+ template parameter pack are, in fact, valid for non-type
+ template parameters. */
+ if (i < nargs && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, i)))
+ {
+ int j, len = TREE_VEC_LENGTH (packed_types);
+ for (j = 0; j < len; ++j)
+ {
+ tree t = TREE_VEC_ELT (packed_types, j);
+ if (invalid_nontype_parm_type_p (t, complain))
+ return error_mark_node;
+ }
+ }
+ }
+
+ /* Convert the remaining arguments, which will be a part of the
+ parameter pack "parm". */
+ for (; i < nargs; ++i)
+ {
+ tree arg = TREE_VEC_ELT (inner_args, i);
+ tree actual_parm = TREE_VALUE (parm);
+
+ if (packed_types && !PACK_EXPANSION_P (arg))
+ {
+ /* When we have a vector of types (corresponding to the
+ non-type template parameter pack that uses parameter
+ packs in its type, as mention above), and the
+ argument is not an expansion (which expands to a
+ currently unknown number of arguments), clone the
+ parm and give it the next type in PACKED_TYPES. */
+ actual_parm = copy_node (actual_parm);
+ TREE_TYPE (actual_parm) =
+ TREE_VEC_ELT (packed_types, i - nparms + 1);
+ }
+
+ arg = convert_template_argument (actual_parm,
+ arg, new_args, complain, i,
+ in_decl);
+ if (arg == error_mark_node)
+ lost++;
+ TREE_VEC_ELT (packed_args, i - nparms + 1) = arg;
+ }
+
+ if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
+ || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
+ argument_pack = make_node (TYPE_ARGUMENT_PACK);
+ else
+ {
+ argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
+ TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
+ TREE_CONSTANT (argument_pack) = 1;
+ }
+
+ SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
+ TREE_VEC_ELT (new_inner_args, nparms - 1) = argument_pack;
+ }
+
if (lost)
return error_mark_node;
@@ -4271,6 +4941,10 @@ template_args_equal (tree ot, tree nt)
if (TREE_CODE (nt) == TREE_VEC)
/* For member templates */
return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
+ else if (PACK_EXPANSION_P (ot))
+ return PACK_EXPANSION_P (nt)
+ && template_args_equal (PACK_EXPANSION_PATTERN (ot),
+ PACK_EXPANSION_PATTERN (nt));
else if (TYPE_P (nt))
return TYPE_P (ot) && same_type_p (ot, nt);
else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
@@ -4287,6 +4961,9 @@ comp_template_args (tree oldargs, tree newargs)
{
int i;
+ oldargs = expand_template_argument_pack (oldargs);
+ newargs = expand_template_argument_pack (newargs);
+
if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
return 0;
@@ -4301,124 +4978,6 @@ comp_template_args (tree oldargs, tree newargs)
return 1;
}
-/* Given class template name and parameter list, produce a user-friendly name
- for the instantiation. */
-
-static char *
-mangle_class_name_for_template (const char* name, tree parms, tree arglist)
-{
- static struct obstack scratch_obstack;
- static char *scratch_firstobj;
- int i, nparms;
-
- if (!scratch_firstobj)
- gcc_obstack_init (&scratch_obstack);
- else
- obstack_free (&scratch_obstack, scratch_firstobj);
- scratch_firstobj = (char *) obstack_alloc (&scratch_obstack, 1);
-
-#define ccat(C) obstack_1grow (&scratch_obstack, (C));
-#define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
-
- cat (name);
- ccat ('<');
- nparms = TREE_VEC_LENGTH (parms);
- arglist = INNERMOST_TEMPLATE_ARGS (arglist);
- gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
- for (i = 0; i < nparms; i++)
- {
- tree parm;
- tree arg;
-
- parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
- arg = TREE_VEC_ELT (arglist, i);
-
- if (parm == error_mark_node)
- continue;
-
- if (i)
- ccat (',');
-
- if (TREE_CODE (parm) == TYPE_DECL)
- {
- cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
- continue;
- }
- else if (TREE_CODE (parm) == TEMPLATE_DECL)
- {
- if (TREE_CODE (arg) == TEMPLATE_DECL)
- {
- /* Already substituted with real template. Just output
- the template name here */
- tree context = DECL_CONTEXT (arg);
- if (context)
- {
- /* The template may be defined in a namespace, or
- may be a member template. */
- gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
- || CLASS_TYPE_P (context));
- cat (decl_as_string (DECL_CONTEXT (arg),
- TFF_PLAIN_IDENTIFIER));
- cat ("::");
- }
- cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
- }
- else
- /* Output the parameter declaration. */
- cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
- continue;
- }
- else
- gcc_assert (TREE_CODE (parm) == PARM_DECL);
-
- /* No need to check arglist against parmlist here; we did that
- in coerce_template_parms, called from lookup_template_class. */
- cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
- }
- {
- char *bufp = obstack_next_free (&scratch_obstack);
- int offset = 0;
- while (bufp[offset - 1] == ' ')
- offset--;
- obstack_blank_fast (&scratch_obstack, offset);
-
- /* B<C<char> >, not B<C<char>> */
- if (bufp[offset - 1] == '>')
- ccat (' ');
- }
- ccat ('>');
- ccat ('\0');
- return (char *) obstack_base (&scratch_obstack);
-}
-
-static tree
-classtype_mangled_name (tree t)
-{
- if (CLASSTYPE_TEMPLATE_INFO (t)
- /* Specializations have already had their names set up in
- lookup_template_class. */
- && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
- {
- tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
-
- /* For non-primary templates, the template parameters are
- implicit from their surrounding context. */
- if (PRIMARY_TEMPLATE_P (tmpl))
- {
- tree name = DECL_NAME (tmpl);
- char *mangled_name = mangle_class_name_for_template
- (IDENTIFIER_POINTER (name),
- DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
- CLASSTYPE_TI_ARGS (t));
- tree id = get_identifier (mangled_name);
- IDENTIFIER_TEMPLATE (id) = name;
- return id;
- }
- }
-
- return TYPE_IDENTIFIER (t);
-}
-
static void
add_pending_template (tree d)
{
@@ -4965,10 +5524,6 @@ lookup_template_class (tree d1,
the instantiation and exit above. */
tsubst_enum (template_type, t, arglist);
- /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
- is set up. */
- if (TREE_CODE (t) != ENUMERAL_TYPE)
- DECL_NAME (type_decl) = classtype_mangled_name (t);
if (is_partial_instantiation)
/* If the type makes use of template parameters, the
code that generates debugging information will crash. */
@@ -5149,16 +5704,6 @@ for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
return error_mark_node;
break;
- case BASELINK:
- /* If we do not handle this case specially, we end up walking
- the BINFO hierarchy, which is circular, and therefore
- confuses walk_tree. */
- *walk_subtrees = 0;
- if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
- pfd->visited))
- return error_mark_node;
- break;
-
default:
break;
}
@@ -5851,15 +6396,37 @@ instantiate_class_template (tree type)
{
tree base;
tree access = BINFO_BASE_ACCESS (pbinfo, i);
-
- /* Substitute to figure out the base class. */
- base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
- if (base == error_mark_node)
- continue;
-
- base_list = tree_cons (access, base, base_list);
- if (BINFO_VIRTUAL_P (pbase_binfo))
- TREE_TYPE (base_list) = integer_type_node;
+ tree expanded_bases = NULL_TREE;
+ int idx, len = 1;
+
+ if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
+ {
+ expanded_bases =
+ tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
+ args, tf_error, NULL_TREE);
+ if (expanded_bases == error_mark_node)
+ continue;
+
+ len = TREE_VEC_LENGTH (expanded_bases);
+ }
+
+ for (idx = 0; idx < len; idx++)
+ {
+ if (expanded_bases)
+ /* Extract the already-expanded base class. */
+ base = TREE_VEC_ELT (expanded_bases, idx);
+ else
+ /* Substitute to figure out the base class. */
+ base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
+ NULL_TREE);
+
+ if (base == error_mark_node)
+ continue;
+
+ base_list = tree_cons (access, base, base_list);
+ if (BINFO_VIRTUAL_P (pbase_binfo))
+ TREE_TYPE (base_list) = integer_type_node;
+ }
}
/* The list is now in reverse order; correct that. */
@@ -6208,13 +6775,203 @@ tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
return r;
}
+/* Substitute ARGS into T, which is an pack expansion
+ (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
+ TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
+ (if only a partial substitution could be performed) or
+ ERROR_MARK_NODE if there was an error. */
+tree
+tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
+ tree in_decl)
+{
+ tree pattern;
+ tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
+ tree first_arg_pack; int i, len = -1;
+ tree result;
+ int incomplete = 0;
+
+ gcc_assert (PACK_EXPANSION_P (t));
+ pattern = PACK_EXPANSION_PATTERN (t);
+
+ /* Determine the argument packs that will instantiate the parameter
+ packs used in the expansion expression. While we're at it,
+ compute the number of arguments to be expanded and make sure it
+ is consistent. */
+ for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
+ pack = TREE_CHAIN (pack))
+ {
+ tree parm_pack = TREE_VALUE (pack);
+ tree arg_pack = NULL_TREE;
+ tree orig_arg = NULL_TREE;
+
+ if (TREE_CODE (parm_pack) == PARM_DECL)
+ {
+ if (local_specializations)
+ arg_pack = retrieve_local_specialization (parm_pack);
+ }
+ else
+ {
+ int level, idx, levels;
+ template_parm_level_and_index (parm_pack, &level, &idx);
+
+ levels = TMPL_ARGS_DEPTH (args);
+ if (level <= levels)
+ arg_pack = TMPL_ARG (args, level, idx);
+ }
+
+ orig_arg = arg_pack;
+ if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
+ arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
+
+ if (arg_pack)
+ {
+ int my_len =
+ TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
+
+ /* It's all-or-nothing with incomplete argument packs. */
+ if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
+ return error_mark_node;
+
+ if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
+ incomplete = 1;
+
+ if (len < 0)
+ {
+ len = my_len;
+ first_arg_pack = arg_pack;
+ }
+ else if (len != my_len)
+ {
+ if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
+ error ("mismatched argument pack lengths while expanding "
+ "%<%T%>",
+ pattern);
+ else
+ error ("mismatched argument pack lengths while expanding "
+ "%<%E%>",
+ pattern);
+ return error_mark_node;
+ }
+
+ /* Keep track of the parameter packs and their corresponding
+ argument packs. */
+ packs = tree_cons (parm_pack, arg_pack, packs);
+ TREE_TYPE (packs) = orig_arg;
+ }
+ else
+ /* We can't substitute for this parameter pack. */
+ unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
+ TREE_VALUE (pack),
+ unsubstituted_packs);
+ }
+
+ /* We cannot expand this expansion expression, because we don't have
+ all of the argument packs we need. Substitute into the pattern
+ and return a PACK_EXPANSION_*. The caller will need to deal with
+ that. */
+ if (unsubstituted_packs)
+ return make_pack_expansion (tsubst (pattern, args, complain,
+ in_decl));
+
+ /* We could not find any argument packs that work. */
+ if (len < 0)
+ return error_mark_node;
+
+ /* For each argument in each argument pack, substitute into the
+ pattern. */
+ result = make_tree_vec (len + incomplete);
+ for (i = 0; i < len + incomplete; ++i)
+ {
+ /* For parameter pack, change the substitution of the parameter
+ pack to the ith argument in its argument pack, then expand
+ the pattern. */
+ for (pack = packs; pack; pack = TREE_CHAIN (pack))
+ {
+ tree parm = TREE_PURPOSE (pack);
+
+ if (TREE_CODE (parm) == PARM_DECL)
+ {
+ /* Select the Ith argument from the pack. */
+ tree arg = make_node (ARGUMENT_PACK_SELECT);
+ ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
+ ARGUMENT_PACK_SELECT_INDEX (arg) = i;
+ mark_used (parm);
+ register_local_specialization (arg, parm);
+ }
+ else
+ {
+ tree value = parm;
+ int idx, level;
+ template_parm_level_and_index (parm, &level, &idx);
+
+ if (i < len)
+ {
+ /* Select the Ith argument from the pack. */
+ value = make_node (ARGUMENT_PACK_SELECT);
+ ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
+ ARGUMENT_PACK_SELECT_INDEX (value) = i;
+ }
+
+ /* Update the corresponding argument. */
+ TMPL_ARG (args, level, idx) = value;
+ }
+ }
+
+ /* Substitute into the PATTERN with the altered arguments. */
+ if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
+ TREE_VEC_ELT (result, i) =
+ tsubst_expr (pattern, args, complain, in_decl,
+ /*integral_constant_expression_p=*/false);
+ else
+ TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
+
+ if (i == len)
+ /* When we have incomplete argument packs, the last "expanded"
+ result is itself a pack expansion, which allows us
+ to deduce more arguments. */
+ TREE_VEC_ELT (result, i) =
+ make_pack_expansion (TREE_VEC_ELT (result, i));
+
+ if (TREE_VEC_ELT (result, i) == error_mark_node)
+ {
+ result = error_mark_node;
+ break;
+ }
+ }
+
+ /* Update ARGS to restore the substitution from parameter packs to
+ their argument packs. */
+ for (pack = packs; pack; pack = TREE_CHAIN (pack))
+ {
+ tree parm = TREE_PURPOSE (pack);
+
+ if (TREE_CODE (parm) == PARM_DECL)
+ register_local_specialization (TREE_TYPE (pack), parm);
+ else
+ {
+ int idx, level;
+ template_parm_level_and_index (parm, &level, &idx);
+
+ /* Update the corresponding argument. */
+ if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
+ TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
+ TREE_TYPE (pack);
+ else
+ TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
+ }
+ }
+
+ return result;
+}
+
/* Substitute ARGS into the vector or list of template arguments T. */
static tree
tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
{
+ tree orig_t = t;
int len = TREE_VEC_LENGTH (t);
- int need_new = 0, i;
+ int need_new = 0, i, expanded_len_adjust = 0, out;
tree *elts = (tree *) alloca (len * sizeof (tree));
for (i = 0; i < len; i++)
@@ -6224,6 +6981,42 @@ tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
if (TREE_CODE (orig_arg) == TREE_VEC)
new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
+ else if (PACK_EXPANSION_P (orig_arg))
+ {
+ /* Substitute into an expansion expression. */
+ new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
+
+ if (TREE_CODE (new_arg) == TREE_VEC)
+ /* Add to the expanded length adjustment the number of
+ expanded arguments. We subtract one from this
+ measurement, because the argument pack expression
+ itself is already counted as 1 in
+ LEN. EXPANDED_LEN_ADJUST can actually be negative, if
+ the argument pack is empty. */
+ expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
+ }
+ else if (ARGUMENT_PACK_P (orig_arg))
+ {
+ /* Substitute into each of the arguments. */
+ new_arg = make_node (TREE_CODE (orig_arg));
+
+ SET_ARGUMENT_PACK_ARGS (
+ new_arg,
+ tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
+ args, complain, in_decl));
+
+ if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
+ new_arg = error_mark_node;
+
+ if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
+ TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
+ complain, in_decl);
+ TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
+
+ if (TREE_TYPE (new_arg) == error_mark_node)
+ new_arg = error_mark_node;
+ }
+ }
else
new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
@@ -6238,9 +7031,27 @@ tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
if (!need_new)
return t;
- t = make_tree_vec (len);
- for (i = 0; i < len; i++)
- TREE_VEC_ELT (t, i) = elts[i];
+ /* Make space for the expanded arguments coming from template
+ argument packs. */
+ t = make_tree_vec (len + expanded_len_adjust);
+ for (i = 0, out = 0; i < len; i++)
+ {
+ if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
+ || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
+ && TREE_CODE (elts[i]) == TREE_VEC)
+ {
+ int idx;
+
+ /* Now expand the template argument pack "in place". */
+ for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
+ TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
+ }
+ else
+ {
+ TREE_VEC_ELT (t, out) = elts[i];
+ out++;
+ }
+ }
return t;
}
@@ -6849,33 +7660,112 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
case PARM_DECL:
{
- tree type;
-
- r = copy_node (t);
- if (DECL_TEMPLATE_PARM_P (t))
- 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);
+ tree type = NULL_TREE;
+ int i, len = 1;
+ tree expanded_types = NULL_TREE;
+ tree prev_r = NULL_TREE;
+ tree first_r = NULL_TREE;
- if (DECL_INITIAL (r))
- {
- if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
- DECL_INITIAL (r) = TREE_TYPE (r);
- else
- DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
- complain, in_decl);
- }
+ if (FUNCTION_PARAMETER_PACK_P (t))
+ {
+ /* If there is a local specialization that isn't a
+ parameter pack, it means that we're doing a "simple"
+ substitution from inside tsubst_pack_expansion. Just
+ return the local specialiation (which will be a single
+ parm). */
+ tree spec = NULL_TREE;
+ if (local_specializations)
+ spec = retrieve_local_specialization (t);
+ if (spec
+ && TREE_CODE (spec) == PARM_DECL
+ && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
+ return spec;
+
+ /* Expand the TYPE_PACK_EXPANSION that provides the types for
+ the parameters in this function parameter pack. */
+ expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
+ complain, in_decl);
+ if (TREE_CODE (expanded_types) == TREE_VEC)
+ {
+ len = TREE_VEC_LENGTH (expanded_types);
+
+ /* Zero-length parameter packs are boring. Just substitute
+ into the chain. */
+ if (len == 0)
+ return tsubst (TREE_CHAIN (t), args, complain,
+ TREE_CHAIN (t));
+ }
+ else
+ {
+ /* All we did was update the type. Make a note of that. */
+ type = expanded_types;
+ expanded_types = NULL_TREE;
+ }
+ }
- DECL_CONTEXT (r) = NULL_TREE;
+ /* Loop through all of the parameter's we'll build. When T is
+ a function parameter pack, LEN is the number of expanded
+ types in EXPANDED_TYPES; otherwise, LEN is 1. */
+ r = NULL_TREE;
+ for (i = 0; i < len; ++i)
+ {
+ prev_r = r;
+ r = copy_node (t);
+ if (DECL_TEMPLATE_PARM_P (t))
+ SET_DECL_TEMPLATE_PARM_P (r);
+
+ if (expanded_types)
+ /* We're on the Ith parameter of the function parameter
+ pack. */
+ {
+ /* Get the Ith type. */
+ type = TREE_VEC_ELT (expanded_types, i);
+
+ if (DECL_NAME (r))
+ /* Rename the parameter to include the index. */
+ DECL_NAME (r) =
+ make_ith_pack_parameter_name (DECL_NAME (r), i);
+ }
+ else if (!type)
+ /* We're dealing with a normal parameter. */
+ 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);
+
+ if (DECL_INITIAL (r))
+ {
+ if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
+ DECL_INITIAL (r) = TREE_TYPE (r);
+ else
+ DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
+ complain, in_decl);
+ }
+
+ DECL_CONTEXT (r) = NULL_TREE;
+
+ if (!DECL_TEMPLATE_PARM_P (r))
+ DECL_ARG_TYPE (r) = type_passed_as (type);
+
+ /* Keep track of the first new parameter we
+ generate. That's what will be returned to the
+ caller. */
+ if (!first_r)
+ first_r = r;
+
+ /* Build a proper chain of parameters when substituting
+ into a function parameter pack. */
+ if (prev_r)
+ TREE_CHAIN (prev_r) = r;
+ }
- if (!DECL_TEMPLATE_PARM_P (r))
- DECL_ARG_TYPE (r) = type_passed_as (type);
if (TREE_CHAIN (t))
TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
complain, TREE_CHAIN (t));
+
+ /* FIRST_R contains the start of the chain we've built. */
+ r = first_r;
}
break;
@@ -7117,9 +8007,10 @@ tsubst_arg_types (tree arg_types,
tree in_decl)
{
tree remaining_arg_types;
- tree type;
+ tree type = NULL_TREE;
+ int i = 1;
+ tree expanded_args = NULL_TREE;
tree default_arg;
- tree result = NULL_TREE;
if (!arg_types || arg_types == void_list_node)
return arg_types;
@@ -7129,42 +8020,73 @@ tsubst_arg_types (tree arg_types,
if (remaining_arg_types == error_mark_node)
return error_mark_node;
- type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
- if (type == error_mark_node)
- return error_mark_node;
- if (VOID_TYPE_P (type))
+ if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
{
- if (complain & tf_error)
- {
- error ("invalid parameter type %qT", type);
- if (in_decl)
- error ("in declaration %q+D", in_decl);
- }
- return error_mark_node;
- }
+ /* For a pack expansion, perform substitution on the
+ entire expression. Later on, we'll handle the arguments
+ one-by-one. */
+ expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
+ args, complain, in_decl);
- /* Do array-to-pointer, function-to-pointer conversion, and ignore
- top-level qualifiers as required. */
- type = TYPE_MAIN_VARIANT (type_decays_to (type));
+ if (TREE_CODE (expanded_args) == TREE_VEC)
+ /* So that we'll spin through the parameters, one by one. */
+ i = TREE_VEC_LENGTH (expanded_args);
+ else
+ {
+ /* We only partially substituted into the parameter
+ pack. Our type is TYPE_PACK_EXPANSION. */
+ type = expanded_args;
+ expanded_args = NULL_TREE;
+ }
+ }
- /* We do not substitute into default arguments here. The standard
- mandates that they be instantiated only when needed, which is
- done in build_over_call. */
- default_arg = TREE_PURPOSE (arg_types);
+ while (i > 0) {
+ --i;
+
+ if (expanded_args)
+ type = TREE_VEC_ELT (expanded_args, i);
+ else if (!type)
+ type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
- if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
- {
- /* We've instantiated a template before its default arguments
- have been parsed. This can happen for a nested template
- class, and is not an error unless we require the default
- argument in a call of this function. */
- result = tree_cons (default_arg, type, remaining_arg_types);
- VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
+ if (type == error_mark_node)
+ return error_mark_node;
+ if (VOID_TYPE_P (type))
+ {
+ if (complain & tf_error)
+ {
+ error ("invalid parameter type %qT", type);
+ if (in_decl)
+ error ("in declaration %q+D", in_decl);
+ }
+ return error_mark_node;
}
- else
- result = hash_tree_cons (default_arg, type, remaining_arg_types);
+
+ /* Do array-to-pointer, function-to-pointer conversion, and ignore
+ top-level qualifiers as required. */
+ type = TYPE_MAIN_VARIANT (type_decays_to (type));
- return result;
+ /* We do not substitute into default arguments here. The standard
+ mandates that they be instantiated only when needed, which is
+ done in build_over_call. */
+ default_arg = TREE_PURPOSE (arg_types);
+
+ if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
+ {
+ /* We've instantiated a template before its default arguments
+ have been parsed. This can happen for a nested template
+ class, and is not an error unless we require the default
+ argument in a call of this function. */
+ remaining_arg_types =
+ tree_cons (default_arg, type, remaining_arg_types);
+ VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg),
+ remaining_arg_types);
+ }
+ else
+ remaining_arg_types =
+ hash_tree_cons (default_arg, type, remaining_arg_types);
+ }
+
+ return remaining_arg_types;
}
/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
@@ -7284,11 +8206,31 @@ tsubst_exception_specification (tree fntype,
while (specs)
{
tree spec;
- spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
- if (spec == error_mark_node)
- return spec;
- new_specs = add_exception_specifier (new_specs, spec, complain);
- specs = TREE_CHAIN (specs);
+ int i, len = 1;
+ tree expanded_specs = NULL_TREE;
+
+ if (PACK_EXPANSION_P (TREE_VALUE (specs)))
+ {
+ /* Expand the pack expansion type. */
+ expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
+ args, complain,
+ in_decl);
+ len = TREE_VEC_LENGTH (expanded_specs);
+ }
+
+ for (i = 0; i < len; ++i)
+ {
+ if (expanded_specs)
+ spec = TREE_VEC_ELT (expanded_specs, i);
+ else
+ spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
+ if (spec == error_mark_node)
+ return spec;
+ new_specs = add_exception_specifier (new_specs, spec,
+ complain);
+ }
+
+ specs = TREE_CHAIN (specs);
}
}
return new_specs;
@@ -7438,12 +8380,32 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
levels = TMPL_ARGS_DEPTH (args);
if (level <= levels)
- arg = TMPL_ARG (args, level, idx);
+ {
+ arg = TMPL_ARG (args, level, idx);
+
+ if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
+ /* See through ARGUMENT_PACK_SELECT arguments. */
+ arg = ARGUMENT_PACK_SELECT_ARG (arg);
+ }
if (arg == error_mark_node)
return error_mark_node;
else if (arg != NULL_TREE)
{
+ if (ARGUMENT_PACK_P (arg))
+ /* If ARG is an argument pack, we don't actually want to
+ perform a substitution here, because substitutions
+ for argument packs are only done
+ element-by-element. We can get to this point when
+ substituting the type of a non-type template
+ parameter pack, when that type actually contains
+ template parameter packs from an outer template, e.g.,
+
+ template<typename... Types> struct A {
+ template<Types... Values> struct B { };
+ }; */
+ return t;
+
if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
{
int quals;
@@ -7913,6 +8875,26 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
complain);
}
+ case TYPE_ARGUMENT_PACK:
+ case NONTYPE_ARGUMENT_PACK:
+ {
+ tree r = make_node (TREE_CODE (t));
+ tree packed_out =
+ tsubst_template_args (ARGUMENT_PACK_ARGS (t),
+ args,
+ complain,
+ in_decl);
+ SET_ARGUMENT_PACK_ARGS (r, packed_out);
+
+ /* For template nontype argument packs, also substitute into
+ the type. */
+ if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
+ TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
+
+ return r;
+ }
+ break;
+
default:
sorry ("use of %qs in template",
tree_code_name [(int) TREE_CODE (t)]);
@@ -8122,6 +9104,8 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
case PARM_DECL:
r = retrieve_local_specialization (t);
gcc_assert (r != NULL);
+ if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
+ r = ARGUMENT_PACK_SELECT_ARG (r);
mark_used (r);
return r;
@@ -8241,13 +9225,22 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
(code, tsubst (TREE_TYPE (t), args, complain, in_decl),
tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
+ case SIZEOF_EXPR:
+ if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
+ {
+ /* We only want to compute the number of arguments. */
+ tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
+ complain, in_decl);
+ return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
+ }
+ /* Fall through */
+
case INDIRECT_REF:
case NEGATE_EXPR:
case TRUTH_NOT_EXPR:
case BIT_NOT_EXPR:
case ADDR_EXPR:
case UNARY_PLUS_EXPR: /* Unary + */
- case SIZEOF_EXPR:
case ALIGNOF_EXPR:
case ARROW_EXPR:
case THROW_EXPR:
@@ -8476,6 +9469,14 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
mark_used (TREE_OPERAND (t, 1));
return t;
+ case EXPR_PACK_EXPANSION:
+ error ("invalid use of pack expansion expression");
+ return error_mark_node;
+
+ case NONTYPE_ARGUMENT_PACK:
+ error ("use %<...%> to expand argument pack");
+ return error_mark_node;
+
default:
return t;
}
@@ -8932,6 +9933,14 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
}
break;
+ case EXPR_PACK_EXPANSION:
+ error ("invalid use of pack expansion expression");
+ return error_mark_node;
+
+ case NONTYPE_ARGUMENT_PACK:
+ error ("use %<...%> to expand argument pack");
+ return error_mark_node;
+
default:
gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
@@ -9200,6 +10209,15 @@ tsubst_copy_and_build (tree t,
/*overloaded_p=*/NULL);
case SIZEOF_EXPR:
+ if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
+ {
+ /* We only want to compute the number of arguments. */
+ tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
+ complain, in_decl);
+ return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
+ }
+ /* Fall through */
+
case ALIGNOF_EXPR:
op1 = TREE_OPERAND (t, 0);
if (!args)
@@ -9372,6 +10390,69 @@ tsubst_copy_and_build (tree t,
if (t == void_list_node)
return t;
+ if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
+ || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
+ {
+ /* We have pack expansions, so expand those and
+ create a new list out of it. */
+ tree purposevec = NULL_TREE;
+ tree valuevec = NULL_TREE;
+ tree chain;
+ int i, len = -1;
+
+ /* Expand the argument expressions. */
+ if (TREE_PURPOSE (t))
+ purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
+ complain, in_decl);
+ if (TREE_VALUE (t))
+ valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
+ complain, in_decl);
+
+ /* Build the rest of the list. */
+ chain = TREE_CHAIN (t);
+ if (chain && chain != void_type_node)
+ chain = RECUR (chain);
+
+ /* Determine the number of arguments. */
+ if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
+ {
+ len = TREE_VEC_LENGTH (purposevec);
+ gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
+ }
+ else if (TREE_CODE (valuevec) == TREE_VEC)
+ len = TREE_VEC_LENGTH (valuevec);
+ else
+ {
+ /* Since we only performed a partial substitution into
+ the argument pack, we only return a single list
+ node. */
+ if (purposevec == TREE_PURPOSE (t)
+ && valuevec == TREE_VALUE (t)
+ && chain == TREE_CHAIN (t))
+ return t;
+
+ return tree_cons (purposevec, valuevec, chain);
+ }
+
+ /* Convert the argument vectors into a TREE_LIST */
+ i = len;
+ while (i > 0)
+ {
+ /* Grab the Ith values. */
+ i--;
+ purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
+ : NULL_TREE;
+ value
+ = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
+ : NULL_TREE;
+
+ /* Build the list (backwards). */
+ chain = tree_cons (purpose, value, chain);
+ }
+
+ return chain;
+ }
+
purpose = TREE_PURPOSE (t);
if (purpose)
purpose = RECUR (purpose);
@@ -9484,6 +10565,8 @@ tsubst_copy_and_build (tree t,
unsigned HOST_WIDE_INT idx;
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
bool process_index_p;
+ int newlen;
+ bool need_copy_p = false;
if (type == error_mark_node)
return error_mark_node;
@@ -9498,13 +10581,54 @@ tsubst_copy_and_build (tree t,
process_index_p = !(type && IS_AGGR_TYPE (type));
n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
+ newlen = VEC_length (constructor_elt, n);
for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
{
if (ce->index && process_index_p)
ce->index = RECUR (ce->index);
- ce->value = RECUR (ce->value);
+
+ if (PACK_EXPANSION_P (ce->value))
+ {
+ /* Substitute into the pack expansion. */
+ ce->value = tsubst_pack_expansion (ce->value, args, complain,
+ in_decl);
+
+ if (TREE_VEC_LENGTH (ce->value) == 1)
+ /* Just move the argument into place. */
+ ce->value = TREE_VEC_ELT (ce->value, 0);
+ else
+ {
+ /* Update the length of the final CONSTRUCTOR
+ arguments vector, and note that we will need to
+ copy.*/
+ newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
+ need_copy_p = true;
+ }
+ }
+ else
+ ce->value = RECUR (ce->value);
}
+ if (need_copy_p)
+ {
+ VEC(constructor_elt,gc) *old_n = n;
+
+ n = VEC_alloc (constructor_elt, gc, newlen);
+ for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce);
+ idx++)
+ {
+ if (TREE_CODE (ce->value) == TREE_VEC)
+ {
+ int i, len = TREE_VEC_LENGTH (ce->value);
+ for (i = 0; i < len; ++i)
+ CONSTRUCTOR_APPEND_ELT (n, 0,
+ TREE_VEC_ELT (ce->value, i));
+ }
+ else
+ CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
+ }
+ }
+
if (TREE_HAS_CONSTRUCTOR (t))
return finish_compound_literal (type, n);
@@ -9793,6 +10917,7 @@ fn_type_unification (tree fn,
tree parms;
tree fntype;
int result;
+ bool incomplete_argument_packs_p = false;
gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
@@ -9816,16 +10941,16 @@ fn_type_unification (tree fn,
specified template argument values. If a substitution in a
template parameter or in the function type of the function
template results in an invalid type, type deduction fails. */
- int i;
+ tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
+ int i, len = TREE_VEC_LENGTH (tparms);
tree converted_args;
- bool incomplete;
+ bool incomplete = false;
if (explicit_targs == error_mark_node)
return 1;
converted_args
- = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
- explicit_targs, NULL_TREE, tf_none,
+ = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
/*require_all_args=*/false,
/*use_default_args=*/false));
if (converted_args == error_mark_node)
@@ -9837,7 +10962,49 @@ fn_type_unification (tree fn,
an incomplete set of explicit args, we must not do semantic
processing during substitution as we could create partial
instantiations. */
- incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
+ for (i = 0; i < len; i++)
+ {
+ tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
+ bool parameter_pack = false;
+
+ /* Dig out the actual parm. */
+ if (TREE_CODE (parm) == TYPE_DECL
+ || TREE_CODE (parm) == TEMPLATE_DECL)
+ {
+ parm = TREE_TYPE (parm);
+ parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
+ }
+ else if (TREE_CODE (parm) == PARM_DECL)
+ {
+ parm = DECL_INITIAL (parm);
+ parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
+ }
+
+ if (parameter_pack)
+ {
+ int level, idx;
+ tree targ;
+ template_parm_level_and_index (parm, &level, &idx);
+
+ /* Mark the argument pack as "incomplete". We could
+ still deduce more arguments during unification. */
+ targ = TMPL_ARG (converted_args, level, idx);
+ ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
+ ARGUMENT_PACK_EXPLICIT_ARGS (targ) = ARGUMENT_PACK_ARGS (targ);
+
+ /* We have some incomplete argument packs. */
+ incomplete_argument_packs_p = true;
+ }
+ }
+
+ if (incomplete_argument_packs_p)
+ /* Any substitution is guaranteed to be incomplete if there
+ are incomplete argument packs, because we can still deduce
+ more arguments. */
+ incomplete = 1;
+ else
+ incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
+
processing_template_decl += incomplete;
fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
processing_template_decl -= incomplete;
@@ -9867,6 +11034,22 @@ fn_type_unification (tree fn,
targs, parms, args, /*subr=*/0,
strict, flags);
+ if (result == 0 && incomplete_argument_packs_p)
+ {
+ int i, len = NUM_TMPL_ARGS (targs);
+
+ /* Clear the "incomplete" flags on all argument packs. */
+ for (i = 0; i < len; i++)
+ {
+ tree arg = TREE_VEC_ELT (targs, i);
+ if (ARGUMENT_PACK_P (arg))
+ {
+ ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
+ ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
+ }
+ }
+ }
+
if (result == 0)
/* All is well so far. Now, check:
@@ -10022,6 +11205,9 @@ type_unification_real (tree tparms,
while (parms && parms != void_list_node
&& args && args != void_list_node)
{
+ if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
+ break;
+
parm = TREE_VALUE (parms);
parms = TREE_CHAIN (parms);
arg = TREE_VALUE (args);
@@ -10074,7 +11260,7 @@ type_unification_real (tree tparms,
return 1;
continue;
}
- arg = TREE_TYPE (arg);
+ arg = unlowered_expr_type (arg);
if (arg == error_mark_node)
return 1;
}
@@ -10090,6 +11276,39 @@ type_unification_real (tree tparms,
}
}
+
+ if (parms
+ && parms != void_list_node
+ && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
+ {
+ /* Unify the remaining arguments with the pack expansion type. */
+ tree argvec;
+ tree parmvec = make_tree_vec (1);
+ int len = 0;
+ tree t;
+
+ /* Count the number of arguments that remain. */
+ for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
+ len++;
+
+ /* Allocate a TREE_VEC and copy in all of the arguments */
+ argvec = make_tree_vec (len);
+ for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
+ {
+ TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
+ ++i;
+ }
+
+ /* Copy the parameter into parmvec. */
+ TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
+ if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
+ /*call_args_p=*/true, /*subr=*/subr))
+ return 1;
+
+ /* Advance to the end of the list of parameters. */
+ parms = TREE_CHAIN (parms);
+ }
+
/* Fail if we've reached the end of the parm list, and more args
are present, and the parm list isn't variadic. */
if (args && args != void_list_node && parms == void_list_node)
@@ -10461,6 +11680,246 @@ check_cv_quals_for_unify (int strict, tree arg, tree parm)
return 1;
}
+/* Determines the LEVEL and INDEX for the template parameter PARM. */
+void
+template_parm_level_and_index (tree parm, int* level, int* index)
+{
+ if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
+ || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
+ || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
+ {
+ *index = TEMPLATE_TYPE_IDX (parm);
+ *level = TEMPLATE_TYPE_LEVEL (parm);
+ }
+ else
+ {
+ *index = TEMPLATE_PARM_IDX (parm);
+ *level = TEMPLATE_PARM_LEVEL (parm);
+ }
+}
+
+/* Unifies the remaining arguments in PACKED_ARGS with the pack
+ expansion at the end of PACKED_PARMS. Returns 0 if the type
+ deduction succeeds, 1 otherwise. STRICT is the same as in
+ unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
+ call argument list. We'll need to adjust the arguments to make them
+ types. SUBR tells us if this is from a recursive call to
+ type_unification_real. */
+int
+unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
+ tree packed_args, int strict, bool call_args_p,
+ bool subr)
+{
+ tree parm
+ = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
+ tree pattern = PACK_EXPANSION_PATTERN (parm);
+ tree pack, packs = NULL_TREE;
+ int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
+ int len = TREE_VEC_LENGTH (packed_args);
+
+ /* Determine the parameter packs we will be deducing from the
+ pattern, and record their current deductions. */
+ for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
+ pack; pack = TREE_CHAIN (pack))
+ {
+ tree parm_pack = TREE_VALUE (pack);
+ int idx, level;
+
+ /* Determine the index and level of this parameter pack. */
+ template_parm_level_and_index (parm_pack, &level, &idx);
+
+ /* Keep track of the parameter packs and their corresponding
+ argument packs. */
+ packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
+ TREE_TYPE (packs) = make_tree_vec (len - start);
+ }
+
+ /* Loop through all of the arguments that have not yet been
+ unified and unify each with the pattern. */
+ for (i = start; i < len; i++)
+ {
+ tree parm = pattern;
+
+ /* For each parameter pack, clear out the deduced value so that
+ we can deduce it again. */
+ for (pack = packs; pack; pack = TREE_CHAIN (pack))
+ {
+ int idx, level;
+ template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
+
+ TMPL_ARG (targs, level, idx) = NULL_TREE;
+ }
+
+ /* Unify the pattern with the current argument. */
+ {
+ tree arg = TREE_VEC_ELT (packed_args, i);
+ int arg_strict = strict;
+ bool skip_arg_p = false;
+
+ if (call_args_p)
+ {
+ int sub_strict;
+
+ /* This mirrors what we do in type_unification_real. */
+ switch (strict)
+ {
+ case DEDUCE_CALL:
+ sub_strict = (UNIFY_ALLOW_OUTER_LEVEL
+ | UNIFY_ALLOW_MORE_CV_QUAL
+ | UNIFY_ALLOW_DERIVED);
+ break;
+
+ case DEDUCE_CONV:
+ sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
+ break;
+
+ case DEDUCE_EXACT:
+ sub_strict = UNIFY_ALLOW_NONE;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+
+ if (!TYPE_P (arg))
+ {
+ gcc_assert (TREE_TYPE (arg) != NULL_TREE);
+ if (type_unknown_p (arg))
+ {
+ /* [temp.deduct.type] A template-argument can be
+ deduced from a pointer to function or pointer
+ to member function argument if the set of
+ overloaded functions does not contain function
+ templates and at most one of a set of
+ overloaded functions provides a unique
+ match. */
+
+ if (resolve_overloaded_unification
+ (tparms, targs, parm, arg, strict, sub_strict)
+ != 0)
+ return 1;
+ skip_arg_p = true;
+ }
+
+ if (!skip_arg_p)
+ {
+ arg = TREE_TYPE (arg);
+ if (arg == error_mark_node)
+ return 1;
+ }
+ }
+
+ arg_strict = sub_strict;
+
+ if (!subr)
+ arg_strict |=
+ maybe_adjust_types_for_deduction (strict, &parm, &arg);
+ }
+
+ if (!skip_arg_p)
+ {
+ if (unify (tparms, targs, parm, arg, arg_strict))
+ return 1;
+ }
+ }
+
+ /* For each parameter pack, collect the deduced value. */
+ for (pack = packs; pack; pack = TREE_CHAIN (pack))
+ {
+ int idx, level;
+ template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
+
+ TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
+ TMPL_ARG (targs, level, idx);
+ }
+ }
+
+ /* Verify that the results of unification with the parameter packs
+ produce results consistent with what we've seen before, and make
+ the deduced argument packs available. */
+ for (pack = packs; pack; pack = TREE_CHAIN (pack))
+ {
+ tree old_pack = TREE_VALUE (pack);
+ tree new_args = TREE_TYPE (pack);
+
+ if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
+ {
+ /* Prepend the explicit arguments onto NEW_ARGS. */
+ tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
+ tree old_args = new_args;
+ int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
+ int len = explicit_len + TREE_VEC_LENGTH (old_args);
+
+ /* Copy the explicit arguments. */
+ new_args = make_tree_vec (len);
+ for (i = 0; i < explicit_len; i++)
+ TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
+
+ /* Copy the deduced arguments. */
+ for (; i < len; i++)
+ TREE_VEC_ELT (new_args, i) =
+ TREE_VEC_ELT (old_args, i - explicit_len);
+ }
+
+ if (!old_pack)
+ {
+ tree result;
+ int idx, level;
+
+ template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
+
+ /* Build the deduced *_ARGUMENT_PACK. */
+ if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
+ {
+ result = make_node (NONTYPE_ARGUMENT_PACK);
+ TREE_TYPE (result) =
+ TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
+ TREE_CONSTANT (result) = 1;
+ }
+ else
+ result = make_node (TYPE_ARGUMENT_PACK);
+
+ SET_ARGUMENT_PACK_ARGS (result, new_args);
+
+ /* Note the deduced argument packs for this parameter
+ pack. */
+ TMPL_ARG (targs, level, idx) = result;
+ }
+ else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
+ && (ARGUMENT_PACK_ARGS (old_pack)
+ == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
+ {
+ /* We only had the explicitly-provided arguments before, but
+ now we have a complete set of arguments. */
+ int idx, level;
+ tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
+ template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
+
+ /* Keep the original deduced argument pack. */
+ TMPL_ARG (targs, level, idx) = old_pack;
+
+ SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
+ ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
+ ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
+ }
+ else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
+ new_args))
+ /* Inconsistent unification of this parameter pack. */
+ return 1;
+ else
+ {
+ int idx, level;
+
+ template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
+
+ /* Keep the original deduced argument pack. */
+ TMPL_ARG (targs, level, idx) = old_pack;
+ }
+ }
+
+ return 0;
+}
+
/* Deduce the value of template parameters. TPARMS is the (innermost)
set of template parameters to a template. TARGS is the bindings
for those template parameters, as determined thus far; TARGS may
@@ -10701,6 +12160,12 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
return 1;
}
+ /* If ARG is a parameter pack or an expansion, we cannot unify
+ against it unless PARM is also a parameter pack. */
+ if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
+ && !template_parameter_pack_p (parm))
+ return 1;
+
TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
return 0;
@@ -10751,6 +12216,12 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
else
return 1;
+ /* If ARG is a parameter pack or an expansion, we cannot unify
+ against it unless PARM is also a parameter pack. */
+ if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
+ && !TEMPLATE_PARM_PARAMETER_PACK (parm))
+ return 1;
+
TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
return 0;
@@ -11051,6 +12522,47 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict)
/* Matched cases are handled by the ARG == PARM test above. */
return 1;
+ case TYPE_ARGUMENT_PACK:
+ case NONTYPE_ARGUMENT_PACK:
+ {
+ tree packed_parms = ARGUMENT_PACK_ARGS (parm);
+ tree packed_args = ARGUMENT_PACK_ARGS (arg);
+ int i, len = TREE_VEC_LENGTH (packed_parms);
+ int argslen = TREE_VEC_LENGTH (packed_args);
+ int parm_variadic_p = 0;
+
+ /* Check if the parameters end in a pack, making them variadic. */
+ if (len > 0
+ && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
+ parm_variadic_p = 1;
+
+ /* If we don't have enough arguments to satisfy the parameters
+ (not counting the pack expression at the end), or we have
+ too many arguments for a parameter list that doesn't end in
+ a pack expression, we can't unify. */
+ if (argslen < (len - parm_variadic_p)
+ || (argslen > len && !parm_variadic_p))
+ return 1;
+
+ /* Unify all of the parameters that precede the (optional)
+ pack expression. */
+ for (i = 0; i < len - parm_variadic_p; ++i)
+ {
+ if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
+ TREE_VEC_ELT (packed_args, i), strict))
+ return 1;
+ }
+
+ if (parm_variadic_p)
+ return unify_pack_expansion (tparms, targs,
+ packed_parms, packed_args,
+ strict, /*call_args_p=*/false,
+ /*subr=*/false);
+ return 0;
+ }
+
+ break;
+
default:
gcc_assert (EXPR_P (parm));
@@ -11221,6 +12733,18 @@ more_specialized_fn (tree pat1, tree pat2, int len)
int quals1 = -1;
int quals2 = -1;
+ if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
+ && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
+ {
+ /* When both arguments are pack expansions, we need only
+ unify the patterns themselves. */
+ arg1 = PACK_EXPANSION_PATTERN (arg1);
+ arg2 = PACK_EXPANSION_PATTERN (arg2);
+
+ /* This is the last comparison we need to do. */
+ len = 0;
+ }
+
if (TREE_CODE (arg1) == REFERENCE_TYPE)
{
arg1 = TREE_TYPE (arg1);
@@ -11276,8 +12800,62 @@ more_specialized_fn (tree pat1, tree pat2, int len)
arg1 = TYPE_MAIN_VARIANT (arg1);
arg2 = TYPE_MAIN_VARIANT (arg2);
- deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
- deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
+ if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
+ {
+ int i, len2 = len + 1;
+ tree parmvec = make_tree_vec (1);
+ tree argvec = make_tree_vec (len2);
+ tree ta = args2;
+
+ /* Setup the parameter vector, which contains only ARG1. */
+ TREE_VEC_ELT (parmvec, 0) = arg1;
+
+ /* Setup the argument vector, which contains the remaining
+ arguments. */
+ for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
+ TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
+
+ deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec,
+ argvec, UNIFY_ALLOW_NONE,
+ /*call_args_p=*/false,
+ /*subr=*/0);
+
+ /* We cannot deduce in the other direction, because ARG1 is
+ a pack expansion but ARG2 is not. */
+ deduce2 = 0;
+ }
+ else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
+ {
+ int i, len1 = len + 1;
+ tree parmvec = make_tree_vec (1);
+ tree argvec = make_tree_vec (len1);
+ tree ta = args1;
+
+ /* Setup the parameter vector, which contains only ARG1. */
+ TREE_VEC_ELT (parmvec, 0) = arg2;
+
+ /* Setup the argument vector, which contains the remaining
+ arguments. */
+ for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
+ TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
+
+ deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec,
+ argvec, UNIFY_ALLOW_NONE,
+ /*call_args_p=*/false,
+ /*subr=*/0);
+
+ /* We cannot deduce in the other direction, because ARG2 is
+ a pack expansion but ARG1 is not.*/
+ deduce1 = 0;
+ }
+
+ else
+ {
+ /* The normal case, where neither argument is a pack
+ expansion. */
+ deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
+ deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
+ }
if (!deduce1)
better2 = -1;
@@ -11302,12 +12880,31 @@ more_specialized_fn (tree pat1, tree pat2, int len)
if (deduce2 && !deduce1 && !better1)
better1 = 1;
+ if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
+ || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
+ /* We have already processed all of the arguments in our
+ handing of the pack expansion type. */
+ len = 0;
+
args1 = TREE_CHAIN (args1);
args2 = TREE_CHAIN (args2);
}
processing_template_decl--;
+ /* All things being equal, if the next argument is a pack expansion
+ for one function but not for the other, prefer the
+ non-variadic function. */
+ if ((better1 > 0) - (better2 > 0) == 0
+ && args1 && TREE_VALUE (args1)
+ && args2 && TREE_VALUE (args2))
+ {
+ if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
+ return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
+ else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
+ return 1;
+ }
+
return (better1 > 0) - (better2 > 0);
}
@@ -11331,6 +12928,7 @@ more_specialized_class (tree pat1, tree pat2)
tree targs;
tree tmpl1, tmpl2;
int winner = 0;
+ bool any_deductions = false;
tmpl1 = TREE_TYPE (pat1);
tmpl2 = TREE_TYPE (pat2);
@@ -11344,15 +12942,46 @@ more_specialized_class (tree pat1, tree pat2)
CLASSTYPE_TI_ARGS (tmpl1),
CLASSTYPE_TI_ARGS (tmpl2));
if (targs)
- --winner;
+ {
+ --winner;
+ any_deductions = true;
+ }
targs = get_class_bindings (TREE_VALUE (pat2),
CLASSTYPE_TI_ARGS (tmpl2),
CLASSTYPE_TI_ARGS (tmpl1));
if (targs)
- ++winner;
+ {
+ ++winner;
+ any_deductions = true;
+ }
--processing_template_decl;
+ /* In the case of a tie where at least one of the class templates
+ has a parameter pack at the end, the template with the most
+ non-packed parameters wins. */
+ if (winner == 0
+ && any_deductions
+ && (template_args_variadic_p (TREE_PURPOSE (pat1))
+ || template_args_variadic_p (TREE_PURPOSE (pat2))))
+ {
+ tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
+ tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
+ int len1 = TREE_VEC_LENGTH (args1);
+ int len2 = TREE_VEC_LENGTH (args2);
+
+ /* We don't count the pack expansion at the end. */
+ if (template_args_variadic_p (TREE_PURPOSE (pat1)))
+ --len1;
+ if (template_args_variadic_p (TREE_PURPOSE (pat2)))
+ --len2;
+
+ if (len1 > len2)
+ return 1;
+ else if (len1 < len2)
+ return -1;
+ }
+
return winner;
}
@@ -12041,11 +13670,11 @@ regenerate_decl_from_template (tree decl, tree tmpl)
pattern_parm
= skip_artificial_parms_for (code_pattern,
DECL_ARGUMENTS (code_pattern));
- while (decl_parm)
+ while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_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,
@@ -12062,7 +13691,39 @@ regenerate_decl_from_template (tree decl, tree tmpl)
decl_parm = TREE_CHAIN (decl_parm);
pattern_parm = TREE_CHAIN (pattern_parm);
}
-
+ /* Merge any parameters that match with the function parameter
+ pack. */
+ if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
+ {
+ int i, len;
+ tree expanded_types;
+ /* Expand the TYPE_PACK_EXPANSION that provides the types for
+ the parameters in this function parameter pack. */
+ expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
+ args, tf_error, NULL_TREE);
+ len = TREE_VEC_LENGTH (expanded_types);
+ for (i = 0; i < len; i++)
+ {
+ tree parm_type;
+ tree attributes;
+
+ if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
+ /* Rename the parameter to include the index. */
+ DECL_NAME (decl_parm) =
+ make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
+ parm_type = TREE_VEC_ELT (expanded_types, i);
+ 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);
+ }
+ }
/* Merge additional specifiers from the CODE_PATTERN. */
if (DECL_DECLARED_INLINE_P (code_pattern)
&& !DECL_DECLARED_INLINE_P (decl))
@@ -12269,8 +13930,8 @@ instantiate_decl (tree d, int defer_ok,
if (TREE_CODE (gen) == FUNCTION_DECL)
{
tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
- tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
- tf_warning_or_error, d);
+ tsubst_exception_specification (type, gen_args, tf_warning_or_error,
+ d);
/* Don't simply tsubst the function type, as that will give
duplicate warnings about poor parameter qualifications.
The function arguments are the same as the decl_arguments
@@ -12445,12 +14106,46 @@ instantiate_decl (tree d, int defer_ok,
spec_parm = skip_artificial_parms_for (d, spec_parm);
tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
}
- while (tmpl_parm)
+ while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
{
register_local_specialization (spec_parm, tmpl_parm);
tmpl_parm = TREE_CHAIN (tmpl_parm);
spec_parm = TREE_CHAIN (spec_parm);
}
+ if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
+ {
+ /* Collect all of the extra "packed" parameters into an
+ argument pack. */
+ tree parmvec;
+ tree parmtypevec;
+ tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
+ tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
+ int i, len = 0;
+ tree t;
+
+ /* Count how many parameters remain. */
+ for (t = spec_parm; t; t = TREE_CHAIN (t))
+ len++;
+
+ /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters. */
+ parmvec = make_tree_vec (len);
+ parmtypevec = make_tree_vec (len);
+ for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
+ {
+ TREE_VEC_ELT (parmvec, i) = spec_parm;
+ TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
+ }
+
+ /* Build the argument packs. */
+ SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
+ SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
+ TREE_TYPE (argpack) = argtypepack;
+
+ /* Register the (value) argument pack as a specialization of
+ TMPL_PARM, then move on. */
+ register_local_specialization (argpack, tmpl_parm);
+ tmpl_parm = TREE_CHAIN (tmpl_parm);
+ }
gcc_assert (!spec_parm);
/* Substitute into the body of the function. */
@@ -12602,24 +14297,99 @@ tsubst_initializer_list (tree t, tree argvec)
{
tree decl;
tree init;
+ tree expanded_bases = NULL_TREE;
+ tree expanded_arguments = NULL_TREE;
+ int i, len = 1;
- decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_warning_or_error,
- NULL_TREE);
- decl = expand_member_init (decl);
- if (decl && !DECL_P (decl))
- in_base_initializer = 1;
-
- init = tsubst_expr (TREE_VALUE (t), argvec, tf_warning_or_error,
- NULL_TREE,
- /*integral_constant_expression_p=*/false);
- in_base_initializer = 0;
+ if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
+ {
+ tree expr;
+ tree arg;
+
+ /* Expand the base class expansion type into separate base
+ classes. */
+ expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
+ tf_warning_or_error,
+ NULL_TREE);
+ if (expanded_bases == error_mark_node)
+ continue;
+
+ /* We'll be building separate TREE_LISTs of arguments for
+ each base. */
+ len = TREE_VEC_LENGTH (expanded_bases);
+ expanded_arguments = make_tree_vec (len);
+ for (i = 0; i < len; i++)
+ TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
+
+ /* Build a dummy EXPR_PACK_EXPANSION that will be used to
+ expand each argument in the TREE_VALUE of t. */
+ expr = make_node (EXPR_PACK_EXPANSION);
+ PACK_EXPANSION_PARAMETER_PACKS (expr) =
+ PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
+
+ /* Substitute parameter packs into each argument in the
+ TREE_LIST. */
+ in_base_initializer = 1;
+ for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
+ {
+ tree expanded_exprs;
+
+ /* Expand the argument. */
+ SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
+ expanded_exprs = tsubst_pack_expansion (expr, argvec,
+ tf_warning_or_error,
+ NULL_TREE);
+
+ /* Prepend each of the expanded expressions to the
+ corresponding TREE_LIST in EXPANDED_ARGUMENTS. */
+ for (i = 0; i < len; i++)
+ {
+ TREE_VEC_ELT (expanded_arguments, i) =
+ tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
+ TREE_VEC_ELT (expanded_arguments, i));
+ }
+ }
+ in_base_initializer = 0;
+
+ /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
+ since we built them backwards. */
+ for (i = 0; i < len; i++)
+ {
+ TREE_VEC_ELT (expanded_arguments, i) =
+ nreverse (TREE_VEC_ELT (expanded_arguments, i));
+ }
+ }
- if (decl)
- {
- init = build_tree_list (decl, init);
- TREE_CHAIN (init) = inits;
- inits = init;
- }
+ for (i = 0; i < len; ++i)
+ {
+ if (expanded_bases)
+ {
+ decl = TREE_VEC_ELT (expanded_bases, i);
+ decl = expand_member_init (decl);
+ init = TREE_VEC_ELT (expanded_arguments, i);
+ }
+ else
+ {
+ decl = tsubst_copy (TREE_PURPOSE (t), argvec,
+ tf_warning_or_error, NULL_TREE);
+
+ decl = expand_member_init (decl);
+ if (decl && !DECL_P (decl))
+ in_base_initializer = 1;
+
+ init = tsubst_expr (TREE_VALUE (t), argvec,
+ tf_warning_or_error, NULL_TREE,
+ /*integral_constant_expression_p=*/false);
+ in_base_initializer = 0;
+ }
+
+ if (decl)
+ {
+ init = build_tree_list (decl, init);
+ TREE_CHAIN (init) = inits;
+ inits = init;
+ }
+ }
}
return inits;
}
@@ -12860,6 +14630,22 @@ dependent_type_p_r (tree type)
if (TREE_CODE (type) == TYPEOF_TYPE)
return true;
+ /* A template argument pack is dependent if any of its packed
+ arguments are. */
+ if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
+ {
+ tree args = ARGUMENT_PACK_ARGS (type);
+ int i, len = TREE_VEC_LENGTH (args);
+ for (i = 0; i < len; ++i)
+ if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
+ return true;
+ }
+
+ /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
+ be template parameters. */
+ if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
+ return true;
+
/* The standard does not specifically mention types that are local
to template functions or local classes, but they should be
considered dependent too. For example:
@@ -13031,9 +14817,11 @@ value_dependent_expression_p (tree expression)
case SIZEOF_EXPR:
case ALIGNOF_EXPR:
/* A `sizeof' expression is value-dependent if the operand is
- type-dependent. */
+ type-dependent or is a pack expansion. */
expression = TREE_OPERAND (expression, 0);
- if (TYPE_P (expression))
+ if (PACK_EXPANSION_P (expression))
+ return true;
+ else if (TYPE_P (expression))
return dependent_type_p (expression);
return type_dependent_expression_p (expression);
@@ -13050,6 +14838,20 @@ value_dependent_expression_p (tree expression)
such calls are value-dependent. */
return true;
+ case NONTYPE_ARGUMENT_PACK:
+ /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
+ is value-dependent. */
+ {
+ tree values = ARGUMENT_PACK_ARGS (expression);
+ int i, len = TREE_VEC_LENGTH (values);
+
+ for (i = 0; i < len; ++i)
+ if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
+ return true;
+
+ return false;
+ }
+
default:
/* A constant expression is value-dependent if any subexpression is
value-dependent. */
@@ -13226,7 +15028,7 @@ any_type_dependent_arguments_p (tree args)
/* Returns TRUE if the ARG (a template argument) is dependent. */
-static bool
+bool
dependent_template_arg_p (tree arg)
{
if (!processing_template_decl)
@@ -13235,6 +15037,18 @@ dependent_template_arg_p (tree arg)
if (TREE_CODE (arg) == TEMPLATE_DECL
|| TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
return dependent_template_p (arg);
+ else if (ARGUMENT_PACK_P (arg))
+ {
+ tree args = ARGUMENT_PACK_ARGS (arg);
+ int i, len = TREE_VEC_LENGTH (args);
+ for (i = 0; i < len; ++i)
+ {
+ if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
+ return true;
+ }
+
+ return false;
+ }
else if (TYPE_P (arg))
return dependent_type_p (arg);
else
@@ -13262,14 +15076,32 @@ any_template_arguments_need_structural_equality_p (tree args)
for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
{
tree arg = TREE_VEC_ELT (level, j);
- if (TREE_CODE (arg) == TEMPLATE_DECL
- || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
- continue;
- else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
- return true;
- else if (!TYPE_P (arg) && TREE_TYPE (arg)
- && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
- return true;
+ tree packed_args = NULL_TREE;
+ int k, len = 1;
+
+ if (ARGUMENT_PACK_P (arg))
+ {
+ /* Look inside the argument pack. */
+ packed_args = ARGUMENT_PACK_ARGS (arg);
+ len = TREE_VEC_LENGTH (packed_args);
+ }
+
+ for (k = 0; k < len; ++k)
+ {
+ if (packed_args)
+ arg = TREE_VEC_ELT (packed_args, k);
+
+ if (error_operand_p (arg))
+ return true;
+ else if (TREE_CODE (arg) == TEMPLATE_DECL
+ || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
+ continue;
+ else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
+ return true;
+ else if (!TYPE_P (arg) && TREE_TYPE (arg)
+ && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
+ return true;
+ }
}
}
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index 2bf0303302f..a9b08520d6e 100644
--- a/gcc/cp/repo.c
+++ b/gcc/cp/repo.c
@@ -1,6 +1,6 @@
/* Code to maintain a C++ template repository.
- Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
Contributed by Jason Merrill (jason@cygnus.com)
This file is part of GCC.
@@ -203,6 +203,10 @@ init_repo (void)
obstack_free (&temporary_obstack, buf);
}
fclose (repo_file);
+
+ if (old_args && !get_random_seed (true)
+ && (buf = strstr (old_args, "'-frandom-seed=")))
+ set_random_seed (extract_string (&buf) + strlen ("-frandom-seed="));
}
static FILE *
@@ -250,7 +254,7 @@ finish_repo (void)
anonymous namespaces will get the same mangling when this
file is recompiled. */
if (!strstr (args, "'-frandom-seed="))
- fprintf (repo_file, " '-frandom-seed=%s'", flag_random_seed);
+ fprintf (repo_file, " '-frandom-seed=%s'", get_random_seed (false));
fprintf (repo_file, "\n");
}
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 8549ec07f11..121699f669d 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -196,7 +196,7 @@ throw_bad_cast (void)
fn = push_throw_library_fn (fn, build_function_type (ptr_type_node,
void_list_node));
- return build_cxx_call (fn, NULL_TREE);
+ return build_cxx_call (fn, 0, NULL);
}
/* Return an expression for "__cxa_bad_typeid()". The expression
@@ -215,7 +215,7 @@ throw_bad_typeid (void)
fn = push_throw_library_fn (fn, t);
}
- return build_cxx_call (fn, NULL_TREE);
+ return build_cxx_call (fn, 0, NULL);
}
/* Return an lvalue expression whose type is "const std::type_info"
@@ -588,7 +588,8 @@ build_dynamic_cast_1 (tree type, tree expr)
else
{
tree retval;
- tree result, td2, td3, elems;
+ tree result, td2, td3;
+ tree elems[4];
tree static_type, target_type, boff;
/* If we got here, we can't convert statically. Therefore,
@@ -646,11 +647,10 @@ build_dynamic_cast_1 (tree type, tree expr)
if (tc == REFERENCE_TYPE)
expr1 = build_unary_op (ADDR_EXPR, expr1, 0);
- elems = tree_cons
- (NULL_TREE, expr1, tree_cons
- (NULL_TREE, td3, tree_cons
- (NULL_TREE, td2, tree_cons
- (NULL_TREE, boff, NULL_TREE))));
+ elems[0] = expr1;
+ elems[1] = td3;
+ elems[2] = td2;
+ elems[3] = boff;
dcast_fn = dynamic_cast_node;
if (!dcast_fn)
@@ -680,7 +680,7 @@ build_dynamic_cast_1 (tree type, tree expr)
pop_nested_namespace (ns);
dynamic_cast_node = dcast_fn;
}
- result = build_cxx_call (dcast_fn, elems);
+ result = build_cxx_call (dcast_fn, 4, elems);
if (tc == REFERENCE_TYPE)
{
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index c4cdd954982..e2603531e88 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -509,6 +509,8 @@ finish_cond (tree *cond_p, tree expr)
tree cond = pop_stmt_list (*cond_p);
if (TREE_CODE (cond) == DECL_EXPR)
expr = cond;
+
+ check_for_bare_parameter_packs (expr);
}
*cond_p = expr;
}
@@ -618,6 +620,8 @@ finish_expr_stmt (tree expr)
else if (!type_dependent_expression_p (expr))
convert_to_void (build_non_dependent_expr (expr), "statement");
+ check_for_bare_parameter_packs (expr);
+
/* Simplification of inner statement expressions, compound exprs,
etc can result in us already having an EXPR_STMT. */
if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
@@ -697,7 +701,7 @@ finish_if_stmt (tree if_stmt)
TREE_CHAIN (if_stmt) = NULL;
add_stmt (do_poplevel (scope));
finish_stmt ();
- empty_body_warning (THEN_CLAUSE (if_stmt), ELSE_CLAUSE (if_stmt));
+ empty_if_body_warning (THEN_CLAUSE (if_stmt), ELSE_CLAUSE (if_stmt));
}
/* Begin a while-statement. Returns a newly created WHILE_STMT if
@@ -750,7 +754,14 @@ begin_do_stmt (void)
void
finish_do_body (tree do_stmt)
{
- DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
+ tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
+
+ if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
+ body = STATEMENT_LIST_TAIL (body)->stmt;
+
+ if (IS_EMPTY_STMT (body))
+ warning (OPT_Wempty_body,
+ "suggest explicit braces around empty body in %<do%> statement");
}
/* Finish a do-statement, which may be given by DO_STMT, and whose
@@ -866,6 +877,7 @@ finish_for_expr (tree expr, tree for_stmt)
else if (!type_dependent_expression_p (expr))
convert_to_void (build_non_dependent_expr (expr), "3rd expression in for");
expr = maybe_cleanup_point_expr_void (expr);
+ check_for_bare_parameter_packs (expr);
FOR_EXPR (for_stmt) = expr;
}
@@ -966,6 +978,7 @@ finish_switch_cond (tree cond, tree switch_stmt)
add_stmt (switch_stmt);
push_switch (switch_stmt);
SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
+ check_for_bare_parameter_packs (cond);
}
/* Finish the body of a switch-statement, which may be given by
@@ -1246,7 +1259,7 @@ finish_asm_stmt (int volatile_p, tree string, tree output_operands,
effectively const. */
|| (CLASS_TYPE_P (TREE_TYPE (operand))
&& C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
- readonly_error (operand, "assignment (via 'asm' output)", 0);
+ readonly_error (operand, "assignment (via 'asm' output)");
constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
oconstraints[i] = constraint;
@@ -1362,7 +1375,22 @@ finish_mem_initializers (tree mem_inits)
mem_inits = nreverse (mem_inits);
if (processing_template_decl)
- add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
+ {
+ tree mem;
+
+ for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
+ {
+ /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
+ check for bare parameter packs in the TREE_VALUE, because
+ any parameter packs in the TREE_VALUE have already been
+ bound as part of the TREE_PURPOSE. See
+ make_pack_expansion for more information. */
+ if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION)
+ check_for_bare_parameter_packs (TREE_VALUE (mem));
+ }
+
+ add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
+ }
else
emit_mem_initializers (mem_inits);
}
@@ -2906,7 +2934,7 @@ finish_typeof (tree expr)
return type;
}
- type = TREE_TYPE (expr);
+ type = unlowered_expr_type (expr);
if (!type || type == unknown_type_node)
{
@@ -2933,7 +2961,8 @@ finish_offsetof (tree expr)
|| TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
|| TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
{
- if (TREE_CODE (expr) == COMPONENT_REF)
+ if (TREE_CODE (expr) == COMPONENT_REF
+ || TREE_CODE (expr) == COMPOUND_EXPR)
expr = TREE_OPERAND (expr, 1);
error ("cannot apply %<offsetof%> to member function %qD", expr);
return error_mark_node;
@@ -3099,7 +3128,7 @@ expand_body (tree fn)
generating trees for a function. */
gcc_assert (function_depth == 0);
- tree_rest_of_compilation (fn);
+ c_expand_body (fn);
current_function_decl = saved_function;
@@ -3159,17 +3188,9 @@ expand_or_defer_fn (tree fn)
return;
}
- /* If this function is marked with the constructor attribute, add it
- to the list of functions to be called along with constructors
- from static duration objects. */
- if (DECL_STATIC_CONSTRUCTOR (fn))
- static_ctors = tree_cons (NULL_TREE, fn, static_ctors);
-
- /* If this function is marked with the destructor attribute, add it
- to the list of functions to be called along with destructors from
- static duration objects. */
- if (DECL_STATIC_DESTRUCTOR (fn))
- static_dtors = tree_cons (NULL_TREE, fn, static_dtors);
+ /* Keep track of functions declared with the "constructor" and
+ "destructor" attribute. */
+ c_record_cdtor_fn (fn);
/* We make a decision about linkage for these functions at the end
of the compilation. Until that point, we do not want the back
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index a5fac298007..d334a689e29 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1670,6 +1670,10 @@ cp_tree_equal (tree t1, tree t2)
&& !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
TREE_STRING_LENGTH (t1));
+ case COMPLEX_CST:
+ return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
+ && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
+
case CONSTRUCTOR:
/* We need to do this when determining whether or not two
non-type pointer to member function template arguments
@@ -2229,12 +2233,16 @@ cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
case TEMPLATE_TYPE_PARM:
case TYPENAME_TYPE:
case TYPEOF_TYPE:
- case BASELINK:
/* None of these have subtrees other than those already walked
above. */
*walk_subtrees_p = 0;
break;
+ case BASELINK:
+ WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
+ *walk_subtrees_p = 0;
+ break;
+
case TINST_LEVEL:
WALK_SUBTREE (TINST_DECL (*tp));
*walk_subtrees_p = 0;
@@ -2260,6 +2268,38 @@ cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
break;
+ case TYPE_ARGUMENT_PACK:
+ case NONTYPE_ARGUMENT_PACK:
+ {
+ tree args = ARGUMENT_PACK_ARGS (*tp);
+ int i, len = TREE_VEC_LENGTH (args);
+ for (i = 0; i < len; i++)
+ WALK_SUBTREE (TREE_VEC_ELT (args, i));
+ }
+ break;
+
+ case TYPE_PACK_EXPANSION:
+ WALK_SUBTREE (TREE_TYPE (*tp));
+ *walk_subtrees_p = 0;
+ break;
+
+ case EXPR_PACK_EXPANSION:
+ WALK_SUBTREE (TREE_OPERAND (*tp, 0));
+ *walk_subtrees_p = 0;
+ break;
+
+ case CAST_EXPR:
+ if (TREE_TYPE (*tp))
+ WALK_SUBTREE (TREE_TYPE (*tp));
+
+ {
+ int i;
+ for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
+ WALK_SUBTREE (TREE_OPERAND (*tp, i));
+ }
+ *walk_subtrees_p = 0;
+ break;
+
default:
input_location = save_locus;
return NULL_TREE;
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 63f03ccecde..ac6eb2b6f75 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -53,14 +53,13 @@ static tree rationalize_conditional_expr (enum tree_code, tree);
static int comp_ptr_ttypes_real (tree, tree, int);
static bool comp_except_types (tree, tree, bool);
static bool comp_array_types (tree, tree, bool);
-static tree common_base_type (tree, tree);
static tree pointer_diff (tree, tree, tree);
static tree get_delta_difference (tree, tree, bool, bool);
static void casts_away_constness_r (tree *, tree *);
static bool casts_away_constness (tree, tree);
static void maybe_warn_about_returning_address_of_local (tree);
static tree lookup_destructor (tree, tree, tree);
-static tree convert_arguments (tree, tree, tree, int);
+static int convert_arguments (int, tree *, tree, tree, tree, int);
/* Do `exp = require_complete_type (exp);' to make sure exp
does not have an incomplete type. (That includes void types.)
@@ -992,7 +991,9 @@ structural_comptypes (tree t1, tree t2, int strict)
case TEMPLATE_TEMPLATE_PARM:
case BOUND_TEMPLATE_TEMPLATE_PARM:
if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
- || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
+ || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)
+ || (TEMPLATE_TYPE_PARAMETER_PACK (t1)
+ != TEMPLATE_TYPE_PARAMETER_PACK (t2)))
return false;
if (!comp_template_parms
(DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
@@ -1051,7 +1052,9 @@ structural_comptypes (tree t1, tree t2, int strict)
case TEMPLATE_TYPE_PARM:
if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
- || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
+ || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)
+ || (TEMPLATE_TYPE_PARAMETER_PACK (t1)
+ != TEMPLATE_TYPE_PARAMETER_PACK (t2)))
return false;
break;
@@ -1081,6 +1084,10 @@ structural_comptypes (tree t1, tree t2, int strict)
return false;
break;
+ case TYPE_PACK_EXPANSION:
+ return same_type_p (PACK_EXPANSION_PATTERN (t1),
+ PACK_EXPANSION_PATTERN (t2));
+
default:
return false;
}
@@ -1196,59 +1203,6 @@ comp_cv_qual_signature (tree type1, tree type2)
else
return 0;
}
-
-/* If two types share a common base type, return that basetype.
- If there is not a unique most-derived base type, this function
- returns ERROR_MARK_NODE. */
-
-static tree
-common_base_type (tree tt1, tree tt2)
-{
- tree best = NULL_TREE;
- int i;
-
- /* If one is a baseclass of another, that's good enough. */
- if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
- return tt1;
- if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
- return tt2;
-
- /* Otherwise, try to find a unique baseclass of TT1
- that is shared by TT2, and follow that down. */
- for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--)
- {
- tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i));
- tree trial = common_base_type (basetype, tt2);
-
- if (trial)
- {
- if (trial == error_mark_node)
- return trial;
- if (best == NULL_TREE)
- best = trial;
- else if (best != trial)
- return error_mark_node;
- }
- }
-
- /* Same for TT2. */
- for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--)
- {
- tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i));
- tree trial = common_base_type (tt1, basetype);
-
- if (trial)
- {
- if (trial == error_mark_node)
- return trial;
- if (best == NULL_TREE)
- best = trial;
- else if (best != trial)
- return error_mark_node;
- }
- }
- return best;
-}
/* Subroutines of `comptypes'. */
@@ -1464,23 +1418,52 @@ invalid_nonstatic_memfn_p (tree expr)
tree
is_bitfield_expr_with_lowered_type (tree exp)
{
- tree field;
-
- if (TREE_CODE (exp) == COND_EXPR)
+ switch (TREE_CODE (exp))
{
+ case COND_EXPR:
if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)))
return NULL_TREE;
return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
+
+ case COMPOUND_EXPR:
+ return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
+
+ case MODIFY_EXPR:
+ case SAVE_EXPR:
+ return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
+
+ case COMPONENT_REF:
+ {
+ tree field;
+
+ field = TREE_OPERAND (exp, 1);
+ if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
+ return NULL_TREE;
+ if (same_type_ignoring_top_level_qualifiers_p
+ (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
+ return NULL_TREE;
+ return DECL_BIT_FIELD_TYPE (field);
+ }
+
+ default:
+ return NULL_TREE;
}
- if (TREE_CODE (exp) != COMPONENT_REF)
- return NULL_TREE;
- field = TREE_OPERAND (exp, 1);
- if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
- return NULL_TREE;
- if (same_type_ignoring_top_level_qualifiers_p
- (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
- return NULL_TREE;
- return DECL_BIT_FIELD_TYPE (field);
+}
+
+/* Like is_bitfield_with_lowered_type, except that if EXP is not a
+ bitfield with a lowered type, the type of EXP is returned, rather
+ than NULL_TREE. */
+
+tree
+unlowered_expr_type (tree exp)
+{
+ tree type;
+
+ type = is_bitfield_expr_with_lowered_type (exp);
+ if (!type)
+ type = TREE_TYPE (exp);
+
+ return type;
}
/* Perform the conversions in [expr] that apply when an lvalue appears
@@ -2670,10 +2653,12 @@ tree
build_function_call (tree function, tree params)
{
tree fntype, fndecl;
- tree coerced_params;
tree name = NULL_TREE;
int is_method;
tree original = function;
+ int nargs, parm_types_len;
+ tree *argarray;
+ tree parm_types;
/* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
expressions, like those used for ObjC messenger dispatches. */
@@ -2739,22 +2724,29 @@ build_function_call (tree function, tree params)
/* fntype now gets the type of function pointed to. */
fntype = TREE_TYPE (fntype);
+ parm_types = TYPE_ARG_TYPES (fntype);
+
+ /* Allocate storage for converted arguments. */
+ parm_types_len = list_length (parm_types);
+ nargs = list_length (params);
+ if (parm_types_len > nargs)
+ nargs = parm_types_len;
+ argarray = (tree *) alloca (nargs * sizeof (tree));
/* Convert the parameters to the types declared in the
function prototype, or apply default promotions. */
-
- coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
- params, fndecl, LOOKUP_NORMAL);
- if (coerced_params == error_mark_node)
+ nargs = convert_arguments (nargs, argarray, parm_types,
+ params, fndecl, LOOKUP_NORMAL);
+ if (nargs < 0)
return error_mark_node;
/* Check for errors in format strings and inappropriately
null parameters. */
- check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
- TYPE_ARG_TYPES (fntype));
+ check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
+ parm_types);
- return build_cxx_call (function, coerced_params);
+ return build_cxx_call (function, nargs, argarray);
}
/* Convert the actual parameter expressions in the list VALUES
@@ -2762,23 +2754,26 @@ build_function_call (tree function, tree params)
If parmdecls is exhausted, or when an element has NULL as its type,
perform the default conversions.
+ Store the converted arguments in ARGARRAY. NARGS is the size of this array.
+
NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
This is also where warnings about wrong number of args are generated.
- Return a list of expressions for the parameters as converted.
+ Returns the actual number of arguments processed (which might be less
+ than NARGS), or -1 on error.
- Both VALUES and the returned value are chains of TREE_LIST nodes
- with the elements of the list in the TREE_VALUE slots of those nodes.
+ VALUES is a chain of TREE_LIST nodes with the elements of the list
+ in the TREE_VALUE slots of those nodes.
In C++, unspecified trailing parameters can be filled in with their
default arguments, if such were specified. Do so here. */
-static tree
-convert_arguments (tree typelist, tree values, tree fndecl, int flags)
+static int
+convert_arguments (int nargs, tree *argarray,
+ tree typelist, tree values, tree fndecl, int flags)
{
tree typetail, valtail;
- tree result = NULL_TREE;
const char *called_thing = 0;
int i = 0;
@@ -2807,7 +2802,7 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
tree val = TREE_VALUE (valtail);
if (val == error_mark_node || type == error_mark_node)
- return error_mark_node;
+ return -1;
if (type == void_type_node)
{
@@ -2818,11 +2813,7 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
}
else
error ("too many arguments to function");
- /* In case anybody wants to know if this argument
- list is valid. */
- if (result)
- TREE_TYPE (tree_last (result)) = error_mark_node;
- break;
+ return i;
}
/* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
@@ -2841,7 +2832,7 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
}
if (val == error_mark_node)
- return error_mark_node;
+ return -1;
if (type != 0)
{
@@ -2866,9 +2857,9 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
}
if (parmval == error_mark_node)
- return error_mark_node;
+ return -1;
- result = tree_cons (NULL_TREE, parmval, result);
+ argarray[i] = parmval;
}
else
{
@@ -2881,7 +2872,7 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
else
val = convert_arg_to_ellipsis (val);
- result = tree_cons (NULL_TREE, val, result);
+ argarray[i] = val;
}
if (typetail)
@@ -2902,9 +2893,9 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
fndecl, i);
if (parmval == error_mark_node)
- return error_mark_node;
+ return -1;
- result = tree_cons (0, parmval, result);
+ argarray[i] = parmval;
typetail = TREE_CHAIN (typetail);
/* ends with `...'. */
if (typetail == NULL_TREE)
@@ -2920,11 +2911,12 @@ convert_arguments (tree typelist, tree values, tree fndecl, int flags)
}
else
error ("too few arguments to function");
- return error_mark_node;
+ return -1;
}
}
- return nreverse (result);
+ gcc_assert (i <= nargs);
+ return i;
}
/* Build a binary-operation expression, after performing default
@@ -3177,10 +3169,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
{
enum tree_code tcode0 = code0, tcode1 = code1;
- if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0);
- else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0);
+ warn_for_div_by_zero (op1);
if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
@@ -3214,10 +3203,7 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
case TRUNC_MOD_EXPR:
case FLOOR_MOD_EXPR:
- if (code1 == INTEGER_TYPE && integer_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0);
- else if (code1 == REAL_TYPE && real_zerop (op1))
- warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0);
+ warn_for_div_by_zero (op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{
@@ -4250,13 +4236,15 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert)
|| TREE_READONLY (arg))
readonly_error (arg, ((code == PREINCREMENT_EXPR
|| code == POSTINCREMENT_EXPR)
- ? "increment" : "decrement"),
- 0);
+ ? "increment" : "decrement"));
{
tree inc;
+ tree declared_type;
tree result_type = TREE_TYPE (arg);
+ declared_type = unlowered_expr_type (arg);
+
arg = get_unwidened (arg, 0);
argtype = TREE_TYPE (arg);
@@ -4334,7 +4322,7 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert)
return error_mark_node;
/* Forbid using -- on `bool'. */
- if (same_type_p (TREE_TYPE (arg), boolean_type_node))
+ if (same_type_p (declared_type, boolean_type_node))
{
if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
{
@@ -5825,7 +5813,7 @@ build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
effectively const. */
|| (CLASS_TYPE_P (lhstype)
&& C_TYPE_FIELDS_READONLY (lhstype))))
- readonly_error (lhs, "assignment", 0);
+ readonly_error (lhs, "assignment");
/* If storing into a structure or union member, it has probably been
given type `int'. Compute the type that would go with the actual
@@ -6589,6 +6577,7 @@ check_return_expr (tree retval, bool *no_warning)
if (processing_template_decl)
{
current_function_returns_value = 1;
+ check_for_bare_parameter_packs (retval);
return retval;
}
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index e31d87b1698..5f6cf0d35a5 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -68,20 +68,12 @@ binfo_or_else (tree base, tree type)
}
/* According to ARM $7.1.6, "A `const' object may be initialized, but its
- value may not be changed thereafter. Thus, we emit hard errors for these,
- rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
- example, conversions to references.) */
+ value may not be changed thereafter. */
void
-readonly_error (tree arg, const char* string, int soft)
+readonly_error (tree arg, const char* string)
{
const char *fmt;
- void (*fn) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
-
- if (soft)
- fn = pedwarn;
- else
- fn = error;
if (TREE_CODE (arg) == COMPONENT_REF)
{
@@ -89,7 +81,7 @@ readonly_error (tree arg, const char* string, int soft)
fmt = "%s of data-member %qD in read-only structure";
else
fmt = "%s of read-only data-member %qD";
- (*fn) (fmt, string, TREE_OPERAND (arg, 1));
+ error (fmt, string, TREE_OPERAND (arg, 1));
}
else if (TREE_CODE (arg) == VAR_DECL)
{
@@ -99,21 +91,21 @@ readonly_error (tree arg, const char* string, int soft)
fmt = "%s of constant field %qD";
else
fmt = "%s of read-only variable %qD";
- (*fn) (fmt, string, arg);
+ error (fmt, string, arg);
}
else if (TREE_CODE (arg) == PARM_DECL)
- (*fn) ("%s of read-only parameter %qD", string, arg);
+ error ("%s of read-only parameter %qD", string, arg);
else if (TREE_CODE (arg) == INDIRECT_REF
&& TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
&& (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
|| TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
- (*fn) ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
+ error ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
else if (TREE_CODE (arg) == RESULT_DECL)
- (*fn) ("%s of read-only named return value %qD", string, arg);
+ error ("%s of read-only named return value %qD", string, arg);
else if (TREE_CODE (arg) == FUNCTION_DECL)
- (*fn) ("%s of function %qD", string, arg);
+ error ("%s of function %qD", string, arg);
else
- (*fn) ("%s of read-only location", string);
+ error ("%s of read-only location", string);
}
diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
index dfea0b8d51b..3e60841980f 100644
--- a/gcc/cppdefault.c
+++ b/gcc/cppdefault.c
@@ -66,9 +66,21 @@ const struct default_include cpp_include_defaults[]
{ PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0 },
#endif
#ifdef GCC_INCLUDE_DIR
- /* This is the dir for fixincludes and for gcc's private headers. */
+ /* This is the dir for gcc's private headers. */
{ GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
#endif
+#ifdef FIXED_INCLUDE_DIR
+ /* This is the dir for fixincludes. */
+ { FIXED_INCLUDE_DIR, "GCC", 0, 0, 0,
+ /* A multilib suffix needs adding if different multilibs use
+ different headers. */
+#ifdef SYSROOT_HEADERS_SUFFIX_SPEC
+ 1
+#else
+ 0
+#endif
+ },
+#endif
#ifdef CROSS_INCLUDE_DIR
/* One place the target system's headers might be. */
{ CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
@@ -100,6 +112,7 @@ const size_t cpp_GCC_INCLUDE_DIR_len = 0;
/* The configured prefix. */
const char cpp_PREFIX[] = PREFIX;
const size_t cpp_PREFIX_len = sizeof PREFIX - 1;
+const char cpp_EXEC_PREFIX[] = STANDARD_EXEC_PREFIX;
/* This value is set by cpp_relocated at runtime */
const char *gcc_exec_prefix;
diff --git a/gcc/cppdefault.h b/gcc/cppdefault.h
index 2da6d05f564..398cc857424 100644
--- a/gcc/cppdefault.h
+++ b/gcc/cppdefault.h
@@ -52,8 +52,16 @@ extern const struct default_include cpp_include_defaults[];
extern const char cpp_GCC_INCLUDE_DIR[];
extern const size_t cpp_GCC_INCLUDE_DIR_len;
+/* The configure-time prefix, i.e., the value supplied as the argument
+ to --prefix=. */
extern const char cpp_PREFIX[];
+/* The length of the configure-time prefix. */
extern const size_t cpp_PREFIX_len;
+/* The configure-time execution prefix. This is typically the lib/gcc
+ subdirectory of cpp_PREFIX. */
+extern const char cpp_EXEC_PREFIX[];
+/* The run-time execution prefix. This is typically the lib/gcc
+ subdirectory of the actual installation. */
extern const char *gcc_exec_prefix;
/* Return true if the toolchain is relocated. */
diff --git a/gcc/cse.c b/gcc/cse.c
index c354041b01f..cdc5ebe4ce3 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1,6 +1,7 @@
/* Common subexpression elimination for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
- 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -3045,11 +3046,37 @@ fold_rtx (rtx x, rtx insn)
{
rtx folded_arg = XEXP (x, i), const_arg;
enum machine_mode mode_arg = GET_MODE (folded_arg);
+
+ switch (GET_CODE (folded_arg))
+ {
+ case MEM:
+ case REG:
+ case SUBREG:
+ const_arg = equiv_constant (folded_arg);
+ break;
+
+ case CONST:
+ case CONST_INT:
+ case SYMBOL_REF:
+ case LABEL_REF:
+ case CONST_DOUBLE:
+ case CONST_VECTOR:
+ const_arg = folded_arg;
+ break;
+
#ifdef HAVE_cc0
- if (CC0_P (folded_arg))
- folded_arg = prev_insn_cc0, mode_arg = prev_insn_cc0_mode;
+ case CC0:
+ folded_arg = prev_insn_cc0;
+ mode_arg = prev_insn_cc0_mode;
+ const_arg = equiv_constant (folded_arg);
+ break;
#endif
- const_arg = equiv_constant (folded_arg);
+
+ default:
+ folded_arg = fold_rtx (folded_arg, insn);
+ const_arg = equiv_constant (folded_arg);
+ break;
+ }
/* For the first three operands, see if the operand
is constant or equivalent to a constant. */
@@ -5254,8 +5281,11 @@ cse_insn (rtx insn, rtx libcall_insn)
{
if (insert_regs (x, NULL, 0))
{
+ rtx dest = SET_DEST (sets[i].rtl);
+
rehash_using_reg (x);
hash = HASH (x, mode);
+ sets[i].dest_hash = HASH (dest, GET_MODE (dest));
}
elt = insert (x, NULL, hash, mode);
}
@@ -5846,13 +5876,20 @@ cse_find_path (basic_block first_bb, struct cse_basic_block_data *data,
{
bb = FALLTHRU_EDGE (previous_bb_in_path)->dest;
if (bb != EXIT_BLOCK_PTR
- && single_pred_p (bb))
+ && single_pred_p (bb)
+ /* We used to assert here that we would only see blocks
+ that we have not visited yet. But we may end up
+ visiting basic blocks twice if the CFG has changed
+ in this run of cse_main, because when the CFG changes
+ the topological sort of the CFG also changes. A basic
+ blocks that previously had more than two predecessors
+ may now have a single predecessor, and become part of
+ a path that starts at another basic block.
+
+ We still want to visit each basic block only once, so
+ halt the path here if we have already visited BB. */
+ && !TEST_BIT (cse_visited_basic_blocks, bb->index))
{
-#if ENABLE_CHECKING
- /* We should only see blocks here that we have not
- visited yet. */
- gcc_assert (!TEST_BIT (cse_visited_basic_blocks, bb->index));
-#endif
SET_BIT (cse_visited_basic_blocks, bb->index);
data->path[path_size++].bb = bb;
break;
@@ -5891,14 +5928,12 @@ cse_find_path (basic_block first_bb, struct cse_basic_block_data *data,
e = NULL;
if (e && e->dest != EXIT_BLOCK_PTR
- && single_pred_p (e->dest))
+ && single_pred_p (e->dest)
+ /* Avoid visiting basic blocks twice. The large comment
+ above explains why this can happen. */
+ && !TEST_BIT (cse_visited_basic_blocks, e->dest->index))
{
basic_block bb2 = e->dest;
-
- /* We should only see blocks here that we have not
- visited yet. */
- gcc_assert (!TEST_BIT (cse_visited_basic_blocks, bb2->index));
-
SET_BIT (cse_visited_basic_blocks, bb2->index);
data->path[path_size++].bb = bb2;
bb = bb2;
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index 90ff2304f7b..f0e2bb9d78f 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -58,9 +58,8 @@ This manual contains no Invariant Sections. The Front-Cover Texts are
@titlepage
@title The C Preprocessor
-@subtitle for GCC version @value{version-GCC}
-@author Richard M. Stallman
-@author Zachary Weinberg
+@versionsubtitle
+@author Richard M. Stallman, Zachary Weinberg
@page
@c There is a fill at the bottom of the page, so we need a filll to
@c override it.
@@ -2015,6 +2014,28 @@ functions. You should not use these macros in any way unless you make
sure that programs will execute with the same effect whether or not they
are defined. If they are defined, their value is 1.
+@item __GNUC_GNU_INLINE__
+GCC defines this macro if functions declared @code{inline} will be
+handled in GCC's traditional gnu89 mode. In this mode an @code{extern
+inline} function will never be compiled as a standalone function, and
+an @code{inline} function which is neither @code{extern} nor
+@code{static} will always be compiled as a standalone function.
+
+@item __GNUC_STDC_INLINE__
+GCC defines this macro if functions declared @code{inline} will be
+handled according to the ISO C99 standard. In this mode an
+@code{extern inline} function will always be compiled as a standalone
+externally visible function, and an @code{inline} function which is
+neither @code{extern} nor @code{static} will never be compiled as a
+standalone function.
+
+If this macro is defined, GCC supports the @code{gnu_inline} function
+attribute as a way to always get the gnu89 behaviour. Support for
+this and @code{__GNUC_GNU_INLINE__} was added in GCC 4.1.3. If
+neither macro is defined, an older version of GCC is being used:
+@code{inline} functions will be compiled in gnu89 mode, and the
+@code{gnu_inline} function attribute will not be recognized.
+
@item __CHAR_UNSIGNED__
GCC defines this macro if and only if the data type @code{char} is
unsigned on the target machine. It exists to cause the standard header
diff --git a/gcc/doc/cppinternals.texi b/gcc/doc/cppinternals.texi
index 24164243a02..ff6acc3fbbc 100644
--- a/gcc/doc/cppinternals.texi
+++ b/gcc/doc/cppinternals.texi
@@ -41,9 +41,8 @@ into another language, under the above conditions for modified versions.
@end ifinfo
@titlepage
-@c @finalout
@title Cpplib Internals
-@subtitle for GCC version @value{version-GCC}
+@versionsubtitle
@author Neil Booth
@page
@vskip 0pt plus 1filll
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 57cc6e1c660..8257fdc421b 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -1578,10 +1578,11 @@ attributes are currently defined for functions on all targets:
@code{section}, @code{constructor}, @code{destructor}, @code{used},
@code{unused}, @code{deprecated}, @code{weak}, @code{malloc},
@code{alias}, @code{warn_unused_result}, @code{nonnull},
-@code{gnu_inline} and @code{externally_visible}. Several other
-attributes are defined for functions on particular target systems. Other
-attributes, including @code{section} are supported for variables declarations
-(@pxref{Variable Attributes}) and for types (@pxref{Type Attributes}).
+@code{gnu_inline} and @code{externally_visible}, @code{hot}, @code{cold}.
+Several other attributes are defined for functions on particular target
+systems. Other attributes, including @code{section} are supported for
+variables declarations (@pxref{Variable Attributes}) and for types (@pxref{Type
+Attributes}).
You may also specify attributes with @samp{__} preceding and following
each keyword. This allows you to use them in header files without
@@ -1618,8 +1619,37 @@ if no optimization level was specified.
@item gnu_inline
@cindex @code{gnu_inline} function attribute
-This attribute on an inline declaration results in the old GNU C89
-inline behavior even in the ISO C99 mode.
+This attribute should be used with a function which is also declared
+with the @code{inline} keyword. It directs GCC to treat the function
+as if it were defined in gnu89 mode even when compiling in C99 or
+gnu99 mode.
+
+If the function is declared @code{extern}, then this definition of the
+function is used only for inlining. In no case is the function
+compiled as a standalone function, not even if you take its address
+explicitly. Such an address becomes an external reference, as if you
+had only declared the function, and had not defined it. This has
+almost the effect of a macro. The way to use this is to put a
+function definition in a header file with this attribute, and put
+another copy of the function, without @code{extern}, in a library
+file. The definition in the header file will cause most calls to the
+function to be inlined. If any uses of the function remain, they will
+refer to the single copy in the library. Note that the two
+definitions of the functions need not be precisely the same, although
+if they do not have the same effect your program may behave oddly.
+
+If the function is neither @code{extern} nor @code{static}, then the
+function is compiled as a standalone function, as well as being
+inlined where possible.
+
+This is how GCC traditionally handled functions declared
+@code{inline}. Since ISO C99 specifies a different semantics for
+@code{inline}, this function attribute is provided as a transition
+measure and as a useful feature in its own right. This attribute is
+available in GCC 4.1.3 and later. It is available if either of the
+preprocessor macros @code{__GNUC_GNU_INLINE__} or
+@code{__GNUC_STDC_INLINE__} are defined. @xref{Inline,,An Inline
+Function is As Fast As a Macro}.
@cindex @code{flatten} function attribute
@item flatten
@@ -1667,6 +1697,8 @@ specifies that the @samp{const} must be attached to the return value.
@item constructor
@itemx destructor
+@itemx constructor (@var{priority})
+@itemx destructor (@var{priority})
@cindex @code{constructor} function attribute
@cindex @code{destructor} function attribute
The @code{constructor} attribute causes the function to be called
@@ -1677,6 +1709,16 @@ been called. Functions with these attributes are useful for
initializing data that will be used implicitly during the execution of
the program.
+You may provide an optional integer priority to control the order in
+which constructor and destructor functions are run. A constructor
+with a smaller priority number runs before a constructor with a larger
+priority number; the opposite relationship holds for destructors. So,
+if you have a constructor that allocates a resource and a destructor
+that deallocates the same resource, both functions typically have the
+same priority. The priorities for constructor and destructor
+functions are the same as those specified for namespace-scope C++
+objects (@pxref{C++ Attributes}).
+
These attributes are not currently implemented for Objective-C@.
@item deprecated
@@ -2201,6 +2243,35 @@ two consecutive calls (such as @code{feof} in a multithreading environment).
The attribute @code{pure} is not implemented in GCC versions earlier
than 2.96.
+@item hot
+@cindex @code{hot} function attribute
+The @code{hot} attribute is used to inform the compiler that a function is a
+hot spot of the compiled program. The function is optimized more aggressively
+and on many target it is placed into special subsection of the text section so
+all hot functions appears close together improving locality.
+
+When profile feedback is available, via @option{-fprofile-use}, hot functions
+are automatically detected and this attribute is ignored.
+
+The @code{hot} attribute is not implemented in GCC versions earlier than 4.3.
+
+@item cold
+@cindex @code{cold} function attribute
+The @code{cold} attribute is used to inform the compiler that a function is
+unlikely executed. The function is optimized for size rather than speed and on
+many targets it is placed into special subsection of the text section so all
+cold functions appears close together improving code locality of non-cold parts
+of program. The paths leading to call of cold functions within code are marked
+as unlikely by the branch prediction mechanizm. It is thus useful to mark
+functions used to handle unlikely conditions, such as @code{perror}, as cold to
+improve optimization of hot functions that do call marked functions in rare
+occasions.
+
+When profile feedback is available, via @option{-fprofile-use}, hot functions
+are automatically detected and this attribute is ignored.
+
+The @code{hot} attribute is not implemented in GCC versions earlier than 4.3.
+
@item regparm (@var{number})
@cindex @code{regparm} attribute
@cindex functions that are passed arguments in registers on the 386
@@ -3834,10 +3905,11 @@ also direct GCC to try to integrate all ``simple enough'' functions
into their callers with the option @option{-finline-functions}.
GCC implements three different semantics of declaring a function
-inline. One is available with @option{-std=gnu89} or when @code{gnu_inline}
-attribute is present on all inline declarations, another when
-@option{-std=c99} or @option{-std=gnu99}, and the third is used when
-compiling C++.
+inline. One is available with @option{-std=gnu89} or
+@option{-fgnu89-inline} or when @code{gnu_inline} attribute is present
+on all inline declarations, another when @option{-std=c99} or
+@option{-std=gnu99} (without @option{-fgnu89-inline}), and the third
+is used when compiling C++.
To declare a function inline, use the @code{inline} keyword in its
declaration, like this:
@@ -7331,25 +7403,36 @@ v2si __builtin_ia32_pswapdsi (v2si)
The MIPS DSP Application-Specific Extension (ASE) includes new
instructions that are designed to improve the performance of DSP and
media applications. It provides instructions that operate on packed
-8-bit integer data, Q15 fractional data and Q31 fractional data.
+8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
GCC supports MIPS DSP operations using both the generic
vector extensions (@pxref{Vector Extensions}) and a collection of
MIPS-specific built-in functions. Both kinds of support are
enabled by the @option{-mdsp} command-line option.
+Revision 2 of the ASE was introduced in the second half of 2006.
+This revision adds extra instructions to the original ASE, but is
+otherwise backwards-compatible with it. You can select revision 2
+using the command-line option @option{-mdspr2}; this option implies
+@option{-mdsp}.
+
At present, GCC only provides support for operations on 32-bit
vectors. The vector type associated with 8-bit integer data is
-usually called @code{v4i8} and the vector type associated with Q15 is
-usually called @code{v2q15}. They can be defined in C as follows:
+usually called @code{v4i8}, the vector type associated with Q7
+is usually called @code{v4q7}, the vector type associated with 16-bit
+integer data is usually called @code{v2i16}, and the vector type
+associated with Q15 is usually called @code{v2q15}. They can be
+defined in C as follows:
@smallexample
-typedef char v4i8 __attribute__ ((vector_size(4)));
+typedef signed char v4i8 __attribute__ ((vector_size(4)));
+typedef signed char v4q7 __attribute__ ((vector_size(4)));
+typedef short v2i16 __attribute__ ((vector_size(4)));
typedef short v2q15 __attribute__ ((vector_size(4)));
@end smallexample
-@code{v4i8} and @code{v2q15} values are initialized in the same way as
-aggregates. For example:
+@code{v4i8}, @code{v4q7}, @code{v2i16} and @code{v2q15} values are
+initialized in the same way as aggregates. For example:
@smallexample
v4i8 a = @{1, 2, 3, 4@};
@@ -7368,9 +7451,10 @@ order applies to big-endian targets. For example, the code above will
set the lowest byte of @code{a} to @code{1} on little-endian targets
and @code{4} on big-endian targets.
-@emph{Note:} Q15 and Q31 values must be initialized with their integer
+@emph{Note:} Q7, Q15 and Q31 values must be initialized with their integer
representation. As shown in this example, the integer representation
-of a Q15 value can be obtained by multiplying the fractional value by
+of a Q7 value can be obtained by multiplying the fractional value by
+@code{0x1.0p7}. The equivalent for Q15 values is to multiply by
@code{0x1.0p15}. The equivalent for Q31 values is to multiply by
@code{0x1.0p31}.
@@ -7386,12 +7470,22 @@ and @code{c} and @code{d} are @code{v2q15} values.
@item @code{c - d} @tab @code{subq.ph}
@end multitable
+The table below lists the @code{v2i16} operation for which
+hardware support exists for the DSP ASE REV 2. @code{e} and @code{f} are
+@code{v2i16} values.
+
+@multitable @columnfractions .50 .50
+@item C code @tab MIPS instruction
+@item @code{e * f} @tab @code{mul.ph}
+@end multitable
+
It is easier to describe the DSP built-in functions if we first define
the following types:
@smallexample
typedef int q31;
typedef int i32;
+typedef unsigned int ui32;
typedef long long a64;
@end smallexample
@@ -7408,6 +7502,7 @@ numbers and register operands, or accept immediate numbers only. The
immediate parameters are listed as follows.
@smallexample
+imm0_3: 0 to 3.
imm0_7: 0 to 7.
imm0_15: 0 to 15.
imm0_31: 0 to 31.
@@ -7527,6 +7622,66 @@ i32 __builtin_mips_lwx (void *, i32)
i32 __builtin_mips_bposge32 (void)
@end smallexample
+The following built-in functions map directly to a particular MIPS DSP REV 2
+instruction. Please refer to the architecture specification
+for details on what each instruction does.
+
+@smallexample
+v4q7 __builtin_mips_absq_s_qb (v4q7);
+v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
+v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
+v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
+v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
+i32 __builtin_mips_append (i32, i32, imm0_31);
+i32 __builtin_mips_balign (i32, i32, imm0_3);
+i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
+i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
+i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
+a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
+a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
+a64 __builtin_mips_madd (a64, i32, i32);
+a64 __builtin_mips_maddu (a64, ui32, ui32);
+a64 __builtin_mips_msub (a64, i32, i32);
+a64 __builtin_mips_msubu (a64, ui32, ui32);
+v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
+v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
+q31 __builtin_mips_mulq_rs_w (q31, q31);
+v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
+q31 __builtin_mips_mulq_s_w (q31, q31);
+a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
+a64 __builtin_mips_mult (i32, i32);
+a64 __builtin_mips_multu (ui32, ui32);
+v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
+v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
+v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
+i32 __builtin_mips_prepend (i32, i32, imm0_31);
+v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
+v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
+v4i8 __builtin_mips_shra_qb (v4i8, i32);
+v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
+v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
+v2i16 __builtin_mips_shrl_ph (v2i16, i32);
+v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
+v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
+v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
+v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
+v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
+v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
+q31 __builtin_mips_addqh_w (q31, q31);
+q31 __builtin_mips_addqh_r_w (q31, q31);
+v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
+v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
+q31 __builtin_mips_subqh_w (q31, q31);
+q31 __builtin_mips_subqh_r_w (q31, q31);
+a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
+a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
+a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
+a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
+a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
+a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
+@end smallexample
+
+
@node MIPS Paired-Single Support
@subsection MIPS Paired-Single Support
diff --git a/gcc/doc/gcc.texi b/gcc/doc/gcc.texi
index 77471ee0cbe..47e5d5e1364 100644
--- a/gcc/doc/gcc.texi
+++ b/gcc/doc/gcc.texi
@@ -73,15 +73,12 @@ This file documents the use of the GNU compilers.
@end ifnottex
@setchapternewpage odd
-@shorttitlepage Using the GNU Compiler Collection (GCC)
@titlepage
-@center @titlefont{Using the GNU Compiler Collection}
-@sp 2
-@center by Richard M. Stallman and the GCC Developer Community
+@title Using the GNU Compiler Collection
+@versionsubtitle
+@author Richard M. Stallman and the @sc{GCC} Developer Community
@page
@vskip 0pt plus 1filll
-For GCC Version @value{version-GCC}@*
-@sp 1
Published by:
@multitable @columnfractions 0.5 0.5
@item GNU Press
diff --git a/gcc/doc/gccint.texi b/gcc/doc/gccint.texi
index 085ff1a8734..9080ffdffbb 100644
--- a/gcc/doc/gccint.texi
+++ b/gcc/doc/gccint.texi
@@ -59,15 +59,12 @@ This file documents the internals of the GNU compilers.
@end ifnottex
@setchapternewpage odd
-@shorttitlepage GNU Compiler Collection Internals (GCC)
@titlepage
-@center @titlefont{GNU Compiler Collection Internals}
-@sp 2
-@center by Richard M. Stallman and the GCC Developer Community
+@title GNU Compiler Collection Internals
+@versionsubtitle
+@author Richard M. Stallman and the @sc{GCC} Developer Community
@page
@vskip 0pt plus 1filll
-For GCC Version @value{version-GCC}@*
-@sp 1
@insertcopying
@end titlepage
@summarycontents
diff --git a/gcc/doc/include/gcc-common.texi b/gcc/doc/include/gcc-common.texi
index 1cbfc64edad..bd44b3c2f61 100644
--- a/gcc/doc/include/gcc-common.texi
+++ b/gcc/doc/include/gcc-common.texi
@@ -51,3 +51,19 @@
\global\normaloffset =0.75in
@end tex
@end ifset
+
+@c Macro to generate a "For the N.N.N version" subtitle on the title
+@c page of TeX documentation. This macro should be used in the
+@c titlepage environment after the title and any other subtitles have
+@c been placed, and before any authors are placed.
+@macro versionsubtitle
+@ifclear DEVELOPMENT
+@subtitle For @sc{gcc} version @value{version-GCC}
+@end ifclear
+@ifset DEVELOPMENT
+@subtitle For @sc{gcc} version @value{version-GCC} (pre-release)
+@end ifset
+@c Even if there are no authors, the second titlepage line should be
+@c forced to the bottom of the page.
+@vskip 0pt plus 1filll
+@end macro
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 9f236759100..569a399e72e 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -7,6 +7,8 @@
@c %**end of header
@c @end ifnothtml
+@include gcc-common.texi
+
@c Specify title for specific html page
@ifset indexhtml
@settitle Installing GCC
@@ -99,9 +101,8 @@ Free Documentation License}''.
@c Part 3 Titlepage and Copyright
@titlepage
-@sp 10
-@comment The title is printed in a large font.
-@center @titlefont{Installing GCC}
+@title Installing GCC
+@versionsubtitle
@c The following two commands start the copyright page.
@page
@@ -109,7 +110,7 @@ Free Documentation License}''.
@insertcopying
@end titlepage
-@c Part 4 Top node and Master Menu
+@c Part 4 Top node, Master Menu, and/or Table of Contents
@ifinfo
@node Top, , , (dir)
@comment node-name, next, Previous, up
@@ -129,6 +130,10 @@ Free Documentation License}''.
@end menu
@end ifinfo
+@iftex
+@contents
+@end iftex
+
@c Part 5 The Body of the Document
@c ***Installing GCC**********************************************************
@ifnothtml
@@ -1131,6 +1136,21 @@ Re-defining @code{LANGUAGES} when calling @samp{make} @strong{does not}
work anymore, as those language sub-directories might not have been
configured!
+@item --enable-stage1-languages=@var{lang1},@var{lang2},@dots{}
+Specify that a particular subset of compilers and their runtime
+libraries should be built with the system C compiler during stage 1 of
+the bootstrap process, rather than only in later stages with the
+bootstrapped C compiler. The list of valid values is the same as for
+@option{--enable-languages}, and the option @code{all} will select all
+of the languages enabled by @option{--enable-languages}. This option is
+primarily useful for GCC development; for instance, when a development
+version of the compiler cannot bootstrap due to compiler bugs, or when
+one is debugging front ends other than the C front end. When this
+option is used, one can then build the target libraries for the
+specified languages with the stage-1 compiler by using @command{make
+stage1-bubble all-target}, or run the testsuite on the stage-1 compiler
+for the specified languages using @command{make stage1-start check-gcc}.
+
@item --disable-libada
Specify that the run-time libraries and tools used by GNAT should not
be built. This can be useful for debugging, or for compatibility with
@@ -3546,10 +3566,13 @@ currently do not work, because the auxiliary programs
anything but a MIPS. It does work to cross compile for a MIPS
if you use the GNU assembler and linker.
-The linker from GNU binutils versions prior to 2.17 has a bug which
-causes the runtime linker stubs in @file{libgcj.so} to be incorrectly
-generated. If you want to use libgcj, either use binutils 2.17 or
-later to build it or export @samp{LD_BIND_NOW=1} in your runtime environment.
+The assembler from GNU binutils 2.17 and earlier has a bug in the way
+it sorts relocations for REL targets (o32, o64, EABI). This can cause
+bad code to be generated for simple C++ programs. Also the linker
+from GNU binutils versions prior to 2.17 has a bug which causes the
+runtime linker stubs in very large programs, like @file{libgcj.so}, to
+be incorrectly generated. Binutils CVS snapshots and releases made
+after Nov. 9, 2006 are thought to be free from both of these problems.
@html
<hr />
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index a6bcd721cf3..fa9ed7f4d2b 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -166,7 +166,8 @@ in the following sections.
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
-@gccoptlist{-ansi -std=@var{standard} -aux-info @var{filename} @gol
+@gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol
+-aux-info @var{filename} @gol
-fno-asm -fno-builtin -fno-builtin-@var{function} @gol
-fhosted -ffreestanding -fopenmp -fms-extensions @gol
-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol
@@ -235,9 +236,9 @@ Objective-C and Objective-C++ Dialects}.
-Wformat-security -Wformat-y2k @gol
-Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol
-Wimport -Wno-import -Winit-self -Winline @gol
--Wno-int-to-pointer-cast @gol
--Wno-invalid-offsetof -Winvalid-pch @gol
--Wlarger-than-@var{len} -Wunsafe-loop-optimizations -Wlong-long @gol
+-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
+-Winvalid-pch -Wlarger-than-@var{len} -Wunsafe-loop-optimizations @gol
+-Wlogical-op -Wlong-long @gol
-Wmain -Wmissing-braces -Wmissing-field-initializers @gol
-Wmissing-format-attribute -Wmissing-include-dirs @gol
-Wmissing-noreturn @gol
@@ -253,7 +254,8 @@ Objective-C and Objective-C++ Dialects}.
-Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized @gol
-Wunknown-pragmas -Wno-pragmas -Wunreachable-code @gol
-Wunused -Wunused-function -Wunused-label -Wunused-parameter @gol
--Wunused-value -Wunused-variable -Wvariadic-macros @gol
+-Wunused-value -Wunused-variable @gol
+-Wvariadic-macros -Wvla @gol
-Wvolatile-register-var -Wwrite-strings}
@item C-only Warning Options
@@ -301,6 +303,7 @@ Objective-C and Objective-C++ Dialects}.
-p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol
-print-multi-directory -print-multi-lib @gol
-print-prog-name=@var{program} -print-search-dirs -Q @gol
+-print-sysroot-headers-suffix @gol
-save-temps -time}
@item Optimization Options
@@ -348,6 +351,7 @@ Objective-C and Objective-C++ Dialects}.
-fvariable-expansion-in-unroller @gol
-ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize @gol
-ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol
+-fcheck-data-deps @gol
-ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol
-ftree-ch -ftree-sra -ftree-ter -ftree-fre -ftree-vectorize @gol
-ftree-vect-loop-version -ftree-salias -fipa-pta -fweb @gol
@@ -461,6 +465,7 @@ Objective-C and Objective-C++ Dialects}.
-dynamic -dynamiclib -exported_symbols_list @gol
-filelist -flat_namespace -force_cpusubtype_ALL @gol
-force_flat_namespace -headerpad_max_install_names @gol
+-iframework @gol
-image_base -init -install_name -keep_private_externs @gol
-multi_module -multiply_defined -multiply_defined_unused @gol
-noall_load -no_dead_strip_inits_and_terms @gol
@@ -538,7 +543,7 @@ Objective-C and Objective-C++ Dialects}.
-masm=@var{dialect} -mno-fancy-math-387 @gol
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol
-mno-wide-multiply -mrtd -malign-double @gol
--mpreferred-stack-boundary=@var{num} @gol
+-mpreferred-stack-boundary=@var{num} -mcx16 -msahf @gol
-mmmx -msse -msse2 -msse3 -mssse3 -msse4a -m3dnow -mpopcnt -mabm @gol
-mthreads -mno-align-stringops -minline-all-stringops @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
@@ -609,7 +614,7 @@ Objective-C and Objective-C++ Dialects}.
-mips16 -mno-mips16 -mabi=@var{abi} -mabicalls -mno-abicalls @gol
-mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 @gol
-mfp32 -mfp64 -mhard-float -msoft-float @gol
--msingle-float -mdouble-float -mdsp -mpaired-single -mips3d @gol
+-msingle-float -mdouble-float -mdsp -mdspr2 -mpaired-single -mips3d @gol
-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
@@ -766,6 +771,10 @@ See RS/6000 and PowerPC Options.
@emph{VAX Options}
@gccoptlist{-mg -mgnu -munix}
+@emph{VxWorks Options}
+@gccoptlist{-mrtp -non-static -Bstatic -Bdynamic @gol
+-Xbind-lazy -Xbind-now}
+
@emph{x86-64 Options}
See i386 and x86-64 Options.
@@ -1351,6 +1360,27 @@ the @code{inline} keyword in ISO C99) are not disabled.
@xref{Standards,,Language Standards Supported by GCC}, for details of
these standard versions.
+@item -fgnu89-inline
+@opindex fgnu89-inline
+The option @option{-fgnu89-inline} tells GCC to use the traditional
+GNU semantics for @code{inline} functions when in C99 mode.
+@xref{Inline,,An Inline Function is As Fast As a Macro}. This option
+is accepted and ignored by GCC versions 4.1.3 up to but not including
+4.3. In GCC versions 4.3 and later it changes the behavior of GCC in
+C99 mode. Using this option is roughly equivalent to adding the
+@code{gnu_inline} function attribute to all inline functions
+(@pxref{Function Attributes}).
+
+The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
+C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
+specifies the default behavior). This option was first supported in
+GCC 4.3. This option is not supported in C89 or gnu89 mode.
+
+The preprocesor macros @code{__GNUC_GNU_INLINE__} and
+@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
+in effect for @code{inline} functions. @xref{Common Predefined
+Macros,,,cpp,The C Preprocessor}.
+
@item -aux-info @var{filename}
@opindex aux-info
Output to the given filename prototyped declarations for all functions
@@ -2993,17 +3023,17 @@ warning levels are defined.
@item -Wstrict-overflow=1
Warn about cases which are both questionable and easy to avoid. For
example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
-compiler will simplify this to @code{1}. @option{-Wstrict-overflow}
-(with no level) is the same as @option{-Wstrict-overflow=1}. This
-level of @option{-Wstrict-overflow} is enabled by @option{-Wall};
-higher levels are not, and must be explicitly requested.
+compiler will simplify this to @code{1}. This level of
+@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
+are not, and must be explicitly requested.
@item -Wstrict-overflow=2
Also warn about other cases where a comparison is simplified to a
constant. For example: @code{abs (x) >= 0}. This can only be
simplified when @option{-fstrict-overflow} is in effect, because
@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
-zero.
+zero. @option{-Wstrict-overflow} (with no level) is the same as
+@option{-Wstrict-overflow=2}.
@item -Wstrict-overflow=3
Also warn about other cases where a comparison is simplified. For
@@ -3106,8 +3136,9 @@ functions. This warning can be independently controlled by
@option{-Wmissing-parameter-type}.
@item
-An empty body occurs in an @samp{if} or @samp{else} statement. This
-warning can be independently controlled by @option{-Wempty-body}.
+An empty body occurs in an @samp{if}, @samp{else} or
+@samp{do while} statement. This warning can be independently
+controlled by @option{-Wempty-body}.
@item
A pointer is compared against integer zero with @samp{<}, @samp{<=},
@@ -3367,8 +3398,8 @@ changed by the conversion like in @code{abs (2.0)}.
@item -Wempty-body
@opindex Wempty-body
-An empty body occurs in an @samp{if} or @samp{else} statement.
-This warning is also enabled by @option{-Wextra}.
+An empty body occurs in an @samp{if}, @samp{else} or @samp{do while}
+statement. This warning is also enabled by @option{-Wextra}.
@item -Wsign-compare
@opindex Wsign-compare
@@ -3395,6 +3426,13 @@ behavior and are not portable in C, so they usually indicate that the
programmer intended to use @code{strcmp}. This warning is enabled by
@option{-Wall}.
+@item -Wlogical-op
+@opindex Wlogical-op
+@opindex Wno-logical-op
+Warn about suspicious uses of logical operators in expressions.
+This includes using logical operators in contexts where a
+bit-wise operator is likely to be expected.
+
@item -Waggregate-return
@opindex Waggregate-return
Warn if any functions that return structures or unions are defined or
@@ -3701,6 +3739,13 @@ Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
alternate syntax when in pedantic ISO C99 mode. This is default.
To inhibit the warning messages, use @option{-Wno-variadic-macros}.
+@item -Wvla
+@opindex Wvla
+@opindex Wno-vla
+Warn if variable length array is used in the code.
+@option{-Wno-vla} will prevent the @option{-pedantic} warning of
+the variable length array.
+
@item -Wvolatile-register-var
@opindex Wvolatile-register-var
@opindex Wno-volatile-register-var
@@ -4674,6 +4719,12 @@ variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
Don't forget the trailing @samp{/}.
@xref{Environment Variables}.
+@item -print-sysroot-headers-suffix
+@opindex print-sysroot-headers-suffix
+Print the suffix added to the target sysroot when searching for
+headers, or give an error if the compiler is not configured with such
+a suffix---and don't do anything else.
+
@item -dumpmachine
@opindex dumpmachine
Print the compiler's target machine (for example,
@@ -5417,6 +5468,10 @@ 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 -fcheck-data-deps
+Compare the results of several data dependence analyzers. This option
+is used for debugging the data dependence analyzers.
+
@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
@@ -6420,6 +6475,34 @@ optimization when a new iv is added to the set.
Bound on size of expressions used in the scalar evolutions analyzer.
Large expressions slow the analyzer.
+@item omega-max-vars
+The maximum number of variables in an Omega constraint system.
+The default value is 128.
+
+@item omega-max-geqs
+The maximum number of inequalities in an Omega constraint system.
+The default value is 256.
+
+@item omega-max-eqs
+The maximum number of equalities in an Omega constraint system.
+The default value is 128.
+
+@item omega-max-wild-cards
+The maximum number of wildcard variables that the Omega solver will
+be able to insert. The default value is 18.
+
+@item omega-hash-table-size
+The size of the hash table in the Omega solver. The default value is
+550.
+
+@item omega-max-keys
+The maximal number of keys used by the Omega solver. The default
+value is 500.
+
+@item omega-eliminate-redundant-constraints
+When set to 1, use expensive methods to eliminate all redundant
+constraints. The default value is 0.
+
@item vect-max-version-checks
The maximum number of runtime checks that can be performed when doing
loop versioning in the vectorizer. See option ftree-vect-loop-version
@@ -7415,6 +7498,19 @@ of the current spec.
The following built-in spec functions are provided:
@table @code
+@item @code{getenv}
+The @code{getenv} spec function takes two arguments: an environment
+variable name and a string. If the environment variable is not
+defined, a fatal error is issued. Otherwise, the return value is the
+value of the environment variable concatenated with the string. For
+example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
+
+@smallexample
+%:getenv(TOPDIR /include)
+@end smallexample
+
+expands to @file{/path/to/top/include}.
+
@item @code{if-exists}
The @code{if-exists} spec function takes one argument, an absolute
pathname to a file. If the file exists, @code{if-exists} returns the
@@ -7496,12 +7592,19 @@ Substitutes @code{X}, if processing a file with suffix @code{S}.
@item %@{!.@code{S}:@code{X}@}
Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
+@item %@{,@code{S}:@code{X}@}
+Substitutes @code{X}, if processing a file for language @code{S}.
+
+@item %@{!,@code{S}:@code{X}@}
+Substitutes @code{X}, if not processing a file for language @code{S}.
+
@item %@{@code{S}|@code{P}:@code{X}@}
-Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
-This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
-although they have a stronger binding than the @samp{|}. If @code{%*}
-appears in @code{X}, all of the alternatives must be starred, and only
-the first matching alternative is substituted.
+Substitutes @code{X} if either @code{-S} or @code{-P} was given to
+GCC@. This may be combined with @samp{!}, @samp{.}, @samp{,}, and
+@code{*} sequences as well, although they have a stronger binding than
+the @samp{|}. If @code{%*} appears in @code{X}, all of the
+alternatives must be starred, and only the first matching alternative
+is substituted.
For example, a spec string like this:
@@ -7524,7 +7627,7 @@ jim.d -bar -boggle
If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can
be as many clauses as you need. This may be combined with @code{.},
-@code{!}, @code{|}, and @code{*} as needed.
+@code{,}, @code{!}, @code{|}, and @code{*} as needed.
@end table
@@ -7663,6 +7766,7 @@ platform.
* TMS320C3x/C4x Options::
* V850 Options::
* VAX Options::
+* VxWorks Options::
* x86-64 Options::
* Xstormy16 Options::
* Xtensa Options::
@@ -8428,6 +8532,14 @@ in @samp{"/System/Library/Frameworks"} and
the name of the framework and header.h is found in the
@samp{"PrivateHeaders"} or @samp{"Headers"} directory.
+@item -iframework@var{dir}
+@opindex iframework
+Like @option{-F} except the directory is a treated as a system
+directory. The main difference between this @option{-iframework} and
+@option{-F} is that with @option{-iframework} the compiler does not
+warn about constructs contained within header files found via
+@var{dir}. This option is valid only for the C family of languages.
+
@item -gused
@opindex -gused
Emit debugging information for symbols that are used. For STABS
@@ -9975,6 +10087,23 @@ supported architecture, using the appropriate flags. In particular,
the file containing the CPU detection code should be compiled without
these options.
+@item -mcx16
+@opindex -mcx16
+This option will enable GCC to use CMPXCHG16B instruction in generated code.
+CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword)
+data types. This is useful for high resolution counters that could be updated
+by multiple processors (or cores). This instruction is generated as part of
+atomic built-in functions: see @ref{Atomic Builtins} for details.
+
+@item -msahf
+@opindex -msahf
+This option will enable GCC to use SAHF instruction in generated 64-bit code.
+Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported
+by AMD64 until introduction of Pentium 4 G1 step in December 2005. LAHF and
+SAHF are load and store instructions, respectively, for certain status flags.
+In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
+or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
+
@item -mpush-args
@itemx -mno-push-args
@opindex mpush-args
@@ -10091,8 +10220,7 @@ building of shared libraries are not supported with the medium model.
@item -mcmodel=large
@opindex mcmodel=large
Generate code for the large model: This model makes no assumptions
-about addresses and sizes of sections. Currently GCC does not implement
-this model.
+about addresses and sizes of sections.
@end table
@node IA-64 Options
@@ -11228,6 +11356,13 @@ operations. This is the default.
@opindex mno-dsp
Use (do not use) the MIPS DSP ASE. @xref{MIPS DSP Built-in Functions}.
+@itemx -mdspr2
+@itemx -mno-dspr2
+@opindex mdspr2
+@opindex mno-dspr2
+Use (do not use) the MIPS DSP ASE REV 2. @xref{MIPS DSP Built-in Functions}.
+The option @option{-mdspr2} implies @option{-mdsp}.
+
@itemx -mpaired-single
@itemx -mno-paired-single
@opindex mpaired-single
@@ -12739,17 +12874,19 @@ sized arrays. This is generally a bad idea with a limited stack size.
@item -mstack-size=@var{stack-size}
@opindex mstack-guard
@opindex mstack-size
-These arguments always have to be used in conjunction. If they are present the s390
-back end emits additional instructions in the function prologue which trigger a trap
-if the stack size is @var{stack-guard} bytes above the @var{stack-size}
-(remember that the stack on s390 grows downward). These options are intended to
-be used to help debugging stack overflow problems. The additionally emitted code
-causes only little overhead and hence can also be used in production like systems
-without greater performance degradation. The given values have to be exact
-powers of 2 and @var{stack-size} has to be greater than @var{stack-guard} without
-exceeding 64k.
+If these options are provided the s390 back end emits additional instructions in
+the function prologue which trigger a trap if the stack size is @var{stack-guard}
+bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
+If the @var{stack-guard} option is omitted the smallest power of 2 larger than
+the frame size of the compiled function is chosen.
+These options are intended to be used to help debugging stack overflow problems.
+The additionally emitted code causes only little overhead and hence can also be
+used in production like systems without greater performance degradation. The given
+values have to be exact powers of 2 and @var{stack-size} has to be greater than
+@var{stack-guard} without exceeding 64k.
In order to be efficient the extra code makes the assumption that the stack starts
at an address aligned to the value given by @var{stack-size}.
+The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
@end table
@node Score Options
@@ -13695,6 +13832,46 @@ will assemble with the GNU assembler.
Output code for g-format floating point numbers instead of d-format.
@end table
+@node VxWorks Options
+@subsection VxWorks Options
+@cindex VxWorks Options
+
+The options in this section are defined for all VxWorks targets.
+Options specific to the target hardware are listed with the other
+options for that target.
+
+@table @gcctabopt
+@item -mrtp
+@opindex mrtp
+GCC can generate code for both VxWorks kernels and real time processes
+(RTPs). This option switches from the former to the latter. It also
+defines the preprocessor macro @code{__RTP__}.
+
+@item -non-static
+@opindex non-static
+Link an RTP executable against shared libraries rather than static
+libraries. The options @option{-static} and @option{-shared} can
+also be used for RTPs (@pxref{Link Options}); @option{-static}
+is the default.
+
+@item -Bstatic
+@itemx -Bdynamic
+@opindex Bstatic
+@opindex Bdynamic
+These options are passed down to the linker. They are defined for
+compatibility with Diab.
+
+@item -Xbind-lazy
+@opindex Xbind-lazy
+Enable lazy binding of function calls. This option is equivalent to
+@option{-Wl,-z,now} and is defined for compatibility with Diab.
+
+@item -Xbind-now
+@opindex Xbind-now
+Disable lazy binding of function calls. This option is the default and
+is defined for compatibility with Diab.
+@end table
+
@node x86-64 Options
@subsection x86-64 Options
@cindex x86-64 options
diff --git a/gcc/doc/loop.texi b/gcc/doc/loop.texi
index 3f0076e8f79..c904a873541 100644
--- a/gcc/doc/loop.texi
+++ b/gcc/doc/loop.texi
@@ -26,6 +26,7 @@ variable analysis and number of iterations analysis).
* Number of iterations:: Number of iterations analysis.
* Dependency analysis:: Data dependency analysis.
* Lambda:: Linear loop transformations framework.
+* Omega:: A solver for linear programming problems.
@end menu
@node Loop representation
@@ -623,3 +624,32 @@ Given a transformed loopnest, conversion back into gcc IR is done by
@code{lambda_loopnest_to_gcc_loopnest}. This function will modify the
loops so that they match the transformed loopnest.
+
+@node Omega
+@section Omega a solver for linear programming problems
+@cindex Omega a solver for linear programming problems
+
+The data dependence analysis contains several solvers triggered
+sequentially from the less complex ones to the more sophisticated.
+For ensuring the consistency of the results of these solvers, a data
+dependence check pass has been implemented based on two different
+solvers. The second method that has been integrated to GCC is based
+on the Omega dependence solver, written in the 1990's by William Pugh
+and David Wonnacott. Data dependence tests can be formulated using a
+subset of the Presburger arithmetics that can be translated to linear
+constraint systems. These linear constraint systems can then be
+solved using the Omega solver.
+
+The Omega solver is using Fourier-Motzkin's algorithm for variable
+elimination: a linear constraint system containing @code{n} variables
+is reduced to a linear constraint system with @code{n-1} variables.
+The Omega solver can also be used for solving other problems that can
+be expressed under the form of a system of linear equalities and
+inequalities. The Omega solver is known to have an exponential worst
+case, also known under the name of ``omega nightmare'' in the
+literature, but in practice, the omega test is known to be efficient
+for the common data dependence tests.
+
+The interface used by the Omega solver for describing the linear
+programming problems is described in @file{omega.h}, and the solver is
+@code{omega_solve_problem}.
diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi
index bd8c476d933..5c4499998dd 100644
--- a/gcc/doc/passes.texi
+++ b/gcc/doc/passes.texi
@@ -191,7 +191,7 @@ rid of it. This pass is located in @file{tree-cfg.c} and described by
@item Mudflap declaration registration
If mudflap (@pxref{Optimize Options,,-fmudflap -fmudflapth
--fmudflapir,gcc.info,Using the GNU Compiler Collection (GCC)}) is
+-fmudflapir,gcc,Using the GNU Compiler Collection (GCC)}) is
enabled, we generate code to register some variable declarations with
the mudflap runtime. Specifically, the runtime tracks the lifetimes of
those variable declarations that have their addresses taken, or whose
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ad179099869..ac09e4e7985 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -773,6 +773,19 @@ argument. Otherwise @var{value} is 1 if the positive form of the
option was used and 0 if the ``no-'' form was.
@end deftypefn
+@deftypefn {Target Hook} bool TARGET_HANDLE_C_OPTION (size_t @var{code}, const char *@var{arg}, int @var{value})
+This target hook is called whenever the user specifies one of the
+target-specific C language family options described by the @file{.opt}
+definition files(@pxref{Options}). It has the opportunity to do some
+option-specific processing and should return true if the option is
+valid. The default definition does nothing but return false.
+
+In general, you should use @code{TARGET_HANDLE_OPTION} to handle
+options. However, if processing an option requires routines that are
+only available in the C (and related language) front ends, then you
+should use @code{TARGET_HANDLE_C_OPTION} instead.
+@end deftypefn
+
@defmac TARGET_VERSION
This macro is a C statement to print on @code{stderr} a string
describing the particular machine description choice. Every machine
@@ -1068,7 +1081,9 @@ Alignment required for a function entry point, in bits.
@end defmac
@defmac BIGGEST_ALIGNMENT
-Biggest alignment that any data type can require on this machine, in bits.
+Biggest alignment that any data type can require on this machine, in
+bits. Note that this is not the biggest alignment that is supported,
+just the biggest alignment that, when violated, may cause a fault.
@end defmac
@defmac MINIMUM_ATOMIC_ALIGNMENT
@@ -6382,6 +6397,18 @@ any assembly code, and before calling any of the section-returning hooks
described below.
@end deftypefn
+@deftypefn {Target Hook} TARGET_ASM_RELOC_RW_MASK (void)
+Return a mask describing how relocations should be treated when
+selecting sections. Bit 1 should be set if global relocations
+should be placed in a read-write section; bit 0 should be set if
+local relocations should be placed in a read-write section.
+
+The default version of this function returns 3 when @option{-fpic}
+is in effect, and 0 otherwise. The hook is typically redefined
+when the target cannot support (some kinds of) dynamic relocations
+in read-only sections even in executables.
+@end deftypefn
+
@deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_SECTION (tree @var{exp}, int @var{reloc}, unsigned HOST_WIDE_INT @var{align})
Return the section into which @var{exp} should be placed. You can
assume that @var{exp} is either a @code{VAR_DECL} node or a constant of
@@ -8166,6 +8193,15 @@ register in Dwarf. Otherwise, this hook should return @code{NULL_RTX}.
If not defined, the default is to return @code{NULL_RTX}.
@end deftypefn
+@deftypefn {Target Hook} void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree @var{address})
+If some registers are represented in Dwarf-2 unwind information in
+multiple pieces, define this hook to fill in information about the
+sizes of those pieces in the table used by the unwinder at runtime.
+It will be called by @code{expand_builtin_init_dwarf_reg_sizes} after
+filling in a single size corresponding to each hard register;
+@var{address} is the address of the table.
+@end deftypefn
+
@deftypefn {Target Hook} bool TARGET_ASM_TTYPE (rtx @var{sym})
This hook is used to output a reference from a frame unwinding table to
the type_info object identified by @var{sym}. It should return @code{true}
diff --git a/gcc/doc/tree-ssa.texi b/gcc/doc/tree-ssa.texi
index 9fb793955bb..1322875df14 100644
--- a/gcc/doc/tree-ssa.texi
+++ b/gcc/doc/tree-ssa.texi
@@ -964,12 +964,11 @@ tree FOR_EACH_SSA_TREE_OPERAND
#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 VDEFS.} */
-#define SSA_OP_VMAYDEF 0x10 /* @r{DEF portion of VDEFS.} */
-#define SSA_OP_VMUSTDEF 0x20 /* @r{V_MUST_DEF definitions.} */
+#define SSA_OP_VDEF 0x10 /* @r{DEF portion of VDEFS.} */
/* @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_VIRTUAL_DEFS (SSA_OP_VDEF)
#define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
#define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
#define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
@@ -998,14 +997,14 @@ aren't using operand pointers, use and defs flags can be mixed.
tree var;
ssa_op_iter iter;
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE | SSA_OP_VMUSTDEF)
+ FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
@{
print_generic_expr (stderr, var, TDF_SLIM);
@}
@end smallexample
@code{VDEF}s are broken into two flags, one for the
-@code{DEF} portion (@code{SSA_OP_VMAYDEF}) and one for the USE portion
+@code{DEF} portion (@code{SSA_OP_VDEF}) and one for the USE portion
(@code{SSA_OP_VMAYUSE}). If all you want to look at are the
@code{VDEF}s together, there is a fourth iterator macro for this,
which returns both a def_operand_p and a use_operand_p for each
@@ -1023,26 +1022,6 @@ this one.
@}
@end smallexample
-@code{V_MUST_DEF}s are broken into two flags, one for the
-@code{DEF} portion (@code{SSA_OP_VMUSTDEF}) and one for the kill portion
-(@code{SSA_OP_VMUSTKILL}). If all you want to look at are the
-@code{V_MUST_DEF}s together, there is a fourth iterator macro for this,
-which returns both a def_operand_p and a use_operand_p for each
-@code{V_MUST_DEF} in the statement. Note that you don't need any flags for
-this one.
-
-@smallexample
- use_operand_p kill_p;
- def_operand_p def_p;
- ssa_op_iter iter;
-
- FOR_EACH_SSA_MUSTDEF_OPERAND (def_p, kill_p, stmt, iter)
- @{
- my_code;
- @}
-@end smallexample
-
-
There are many examples in the code as well, as well as the
documentation in @file{tree-ssa-operands.h}.
@@ -1535,9 +1514,9 @@ struct foo temp;
int bar (void)
@{
int tmp1, tmp2, tmp3;
- SFT.0_2 = V_MUST_DEF <SFT.0_1>
+ SFT.0_2 = VDEF <SFT.0_1>
temp.a = 5;
- SFT.1_4 = V_MUST_DEF <SFT.1_3>
+ SFT.1_4 = VDEF <SFT.1_3>
temp.b = 6;
VUSE <SFT.1_4>
diff --git a/gcc/double-int.c b/gcc/double-int.c
index f1824da8ff4..45a833a0654 100644
--- a/gcc/double-int.c
+++ b/gcc/double-int.c
@@ -26,7 +26,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
/* Returns mask for PREC bits. */
-static inline double_int
+double_int
double_int_mask (unsigned prec)
{
unsigned HOST_WIDE_INT m;
diff --git a/gcc/double-int.h b/gcc/double-int.h
index 6ecfa48f787..807166b8957 100644
--- a/gcc/double-int.h
+++ b/gcc/double-int.h
@@ -134,6 +134,7 @@ void dump_double_int (FILE *, double_int, bool);
double_int double_int_ext (double_int, unsigned, bool);
double_int double_int_sext (double_int, unsigned);
double_int double_int_zext (double_int, unsigned);
+double_int double_int_mask (unsigned);
#define ALL_ONES (~((unsigned HOST_WIDE_INT) 0))
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 901fbff5279..476f6ebf794 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -498,6 +498,8 @@ expand_builtin_init_dwarf_reg_sizes (tree address)
#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
#endif
+
+ targetm.init_dwarf_reg_sizes_extra (address);
}
/* Convert a DWARF call frame info. operation to its string name */
@@ -5039,9 +5041,15 @@ add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
slot = htab_find_slot_with_hash (debug_str_hash, str,
htab_hash_string (str), INSERT);
if (*slot == NULL)
- *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
- node = (struct indirect_string_node *) *slot;
- node->str = ggc_strdup (str);
+ {
+ node = (struct indirect_string_node *)
+ ggc_alloc_cleared (sizeof (struct indirect_string_node));
+ node->str = ggc_strdup (str);
+ *slot = node;
+ }
+ else
+ node = (struct indirect_string_node *) *slot;
+
node->refcount++;
attr.dw_attr = attr_kind;
@@ -8811,6 +8819,32 @@ is_based_loc (rtx rtl)
&& GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
}
+/* Return a descriptor that describes the concatenation of N locations
+ used to form the address of a memory location. */
+
+static dw_loc_descr_ref
+concatn_mem_loc_descriptor (rtx concatn, enum machine_mode mode)
+{
+ unsigned int i;
+ dw_loc_descr_ref cc_loc_result = NULL;
+ unsigned int n = XVECLEN (concatn, 0);
+
+ for (i = 0; i < n; ++i)
+ {
+ dw_loc_descr_ref ref;
+ rtx x = XVECEXP (concatn, 0, i);
+
+ ref = mem_loc_descriptor (x, mode);
+ if (ref == NULL)
+ return NULL;
+
+ add_loc_descr (&cc_loc_result, ref);
+ add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
+ }
+
+ return cc_loc_result;
+}
+
/* The following routine converts the RTL for a variable or parameter
(resident in memory) into an equivalent Dwarf representation of a
mechanism for getting the address of that same variable onto the top of a
@@ -9006,6 +9040,10 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode)
mem_loc_result = int_loc_descriptor (INTVAL (rtl));
break;
+ case CONCATN:
+ mem_loc_result = concatn_mem_loc_descriptor (rtl, mode);
+ break;
+
default:
gcc_unreachable ();
}
@@ -11221,10 +11259,17 @@ type_tag (tree type)
involved. */
else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
&& ! DECL_IGNORED_P (TYPE_NAME (type)))
- t = DECL_NAME (TYPE_NAME (type));
+ {
+ /* We want to be extra verbose. Don't call dwarf_name if
+ DECL_NAME isn't set. The default hook for decl_printable_name
+ doesn't like that, and in this context it's correct to return
+ 0, instead of "<anonymous>" or the like. */
+ if (DECL_NAME (TYPE_NAME (type)))
+ name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
+ }
/* Now get the name as a string, or invent one. */
- if (t != 0)
+ if (!name && t != 0)
name = IDENTIFIER_POINTER (t);
}
@@ -12188,6 +12233,36 @@ add_call_src_coords_attributes (tree stmt, dw_die_ref die)
add_AT_unsigned (die, DW_AT_call_line, s.line);
}
+
+/* If STMT's abstract origin is a function declaration and STMT's
+ first subblock's abstract origin is the function's outermost block,
+ then we're looking at the main entry point. */
+static bool
+is_inlined_entry_point (tree stmt)
+{
+ tree decl, block;
+
+ if (!stmt || TREE_CODE (stmt) != BLOCK)
+ return false;
+
+ decl = block_ultimate_origin (stmt);
+
+ if (!decl || TREE_CODE (decl) != FUNCTION_DECL)
+ return false;
+
+ block = BLOCK_SUBBLOCKS (stmt);
+
+ if (block)
+ {
+ if (TREE_CODE (block) != BLOCK)
+ return false;
+
+ block = block_ultimate_origin (block);
+ }
+
+ return block == DECL_INITIAL (decl);
+}
+
/* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
Add low_pc and high_pc attributes to the DIE for a block STMT. */
@@ -12200,6 +12275,13 @@ add_high_low_attributes (tree stmt, dw_die_ref die)
{
tree chain;
+ if (is_inlined_entry_point (stmt))
+ {
+ ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
+ BLOCK_NUMBER (stmt));
+ add_AT_lbl_id (die, DW_AT_entry_pc, label);
+ }
+
add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
chain = BLOCK_FRAGMENT_CHAIN (stmt);
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 9a5db43bc8e..ebe0a52e7d9 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -3077,6 +3077,37 @@ prev_cc0_setter (rtx insn)
}
#endif
+#ifdef AUTO_INC_DEC
+/* Find a RTX_AUTOINC class rtx which matches DATA. */
+
+static int
+find_auto_inc (rtx *xp, void *data)
+{
+ rtx x = *xp;
+ rtx reg = data;
+
+ if (GET_RTX_CLASS (GET_CODE (x)) != RTX_AUTOINC)
+ return 0;
+
+ switch (GET_CODE (x))
+ {
+ case PRE_DEC:
+ case PRE_INC:
+ case POST_DEC:
+ case POST_INC:
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ if (rtx_equal_p (reg, XEXP (x, 0)))
+ return 1;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+ return -1;
+}
+#endif
+
/* Increment the label uses for all labels present in rtx. */
static void
@@ -3201,8 +3232,7 @@ try_split (rtx pat, rtx trial, int last)
switch (REG_NOTE_KIND (note))
{
case REG_EH_REGION:
- insn = insn_last;
- while (insn != NULL_RTX)
+ for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
{
if (CALL_P (insn)
|| (flag_non_call_exceptions && INSN_P (insn)
@@ -3211,37 +3241,45 @@ try_split (rtx pat, rtx trial, int last)
= gen_rtx_EXPR_LIST (REG_EH_REGION,
XEXP (note, 0),
REG_NOTES (insn));
- insn = PREV_INSN (insn);
}
break;
case REG_NORETURN:
case REG_SETJMP:
- insn = insn_last;
- while (insn != NULL_RTX)
+ for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
{
if (CALL_P (insn))
REG_NOTES (insn)
= gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
XEXP (note, 0),
REG_NOTES (insn));
- insn = PREV_INSN (insn);
}
break;
case REG_NON_LOCAL_GOTO:
- insn = insn_last;
- while (insn != NULL_RTX)
+ for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
{
if (JUMP_P (insn))
REG_NOTES (insn)
= gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
XEXP (note, 0),
REG_NOTES (insn));
- insn = PREV_INSN (insn);
}
break;
+#ifdef AUTO_INC_DEC
+ case REG_INC:
+ for (insn = insn_last; insn != NULL_RTX; insn = PREV_INSN (insn))
+ {
+ rtx reg = XEXP (note, 0);
+ if (!FIND_REG_INC_NOTE (insn, reg)
+ && for_each_rtx (&PATTERN (insn), find_auto_inc, reg) > 0)
+ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, reg,
+ REG_NOTES (insn));
+ }
+ break;
+#endif
+
default:
break;
}
diff --git a/gcc/errors.h b/gcc/errors.h
index 5fefa071644..a5c7fe508e9 100644
--- a/gcc/errors.h
+++ b/gcc/errors.h
@@ -34,10 +34,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
version of warning(). For those, you'd pass an OPT_W* value from
options.h, but in generator programs it has no effect, so it's OK
to just pass zero for calls from generator-only files. */
-extern void warning (int, const char *, ...) ATTRIBUTE_PRINTF_2;
-extern void error (const char *, ...) ATTRIBUTE_PRINTF_1;
-extern void fatal (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1;
-extern void internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1;
+extern void warning (int, const char *, ...) ATTRIBUTE_PRINTF_2 ATTRIBUTE_COLD;
+extern void error (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern void fatal (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern void internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
extern const char *trim_filename (const char *);
extern int have_error;
diff --git a/gcc/expr.c b/gcc/expr.c
index f624d95c415..1dc437cb836 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -2987,7 +2987,7 @@ emit_move_resolve_push (enum machine_mode mode, rtx x)
X is known to satisfy push_operand, and MODE is known to be complex.
Returns the last instruction emitted. */
-static rtx
+rtx
emit_move_complex_push (enum machine_mode mode, rtx x, rtx y)
{
enum machine_mode submode = GET_MODE_INNER (mode);
@@ -3027,6 +3027,25 @@ emit_move_complex_push (enum machine_mode mode, rtx x, rtx y)
read_complex_part (y, !imag_first));
}
+/* A subroutine of emit_move_complex. Perform the move from Y to X
+ via two moves of the parts. Returns the last instruction emitted. */
+
+rtx
+emit_move_complex_parts (rtx x, rtx y)
+{
+ /* Show the output dies here. This is necessary for SUBREGs
+ of pseudos since we cannot track their lifetimes correctly;
+ hard regs shouldn't appear here except as return values. */
+ if (!reload_completed && !reload_in_progress
+ && REG_P (x) && !reg_overlap_mentioned_p (x, y))
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+
+ write_complex_part (x, read_complex_part (y, false), false);
+ write_complex_part (x, read_complex_part (y, true), true);
+
+ return get_last_insn ();
+}
+
/* A subroutine of emit_move_insn_1. Generate a move from Y into X.
MODE is known to be complex. Returns the last instruction emitted. */
@@ -3081,16 +3100,7 @@ emit_move_complex (enum machine_mode mode, rtx x, rtx y)
return ret;
}
- /* Show the output dies here. This is necessary for SUBREGs
- of pseudos since we cannot track their lifetimes correctly;
- hard regs shouldn't appear here except as return values. */
- if (!reload_completed && !reload_in_progress
- && REG_P (x) && !reg_overlap_mentioned_p (x, y))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
-
- write_complex_part (x, read_complex_part (y, false), false);
- write_complex_part (x, read_complex_part (y, true), true);
- return get_last_insn ();
+ return emit_move_complex_parts (x, y);
}
/* A subroutine of emit_move_insn_1. Generate a move from Y into X.
diff --git a/gcc/expr.h b/gcc/expr.h
index 32a0a51a373..13c73215960 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -465,6 +465,9 @@ extern rtx emit_move_insn (rtx, rtx);
/* Emit insns to set X from Y, with no frills. */
extern rtx emit_move_insn_1 (rtx, rtx);
+extern rtx emit_move_complex_push (enum machine_mode, rtx, rtx);
+extern rtx emit_move_complex_parts (rtx, rtx);
+
/* Push a block of length SIZE (perhaps variable)
and return an rtx to address the beginning of the block. */
extern rtx push_block (rtx, int, int);
@@ -594,9 +597,6 @@ extern rtx label_rtx (tree);
if how is not obvious). */
extern rtx force_label_rtx (tree);
-/* Indicate how an input argument register was promoted. */
-extern rtx promoted_input_arg (unsigned int, enum machine_mode *, int *);
-
/* Return an rtx like arg but sans any constant terms.
Returns the original rtx if it has no constant terms.
The constant terms are added and stored via a second arg. */
diff --git a/gcc/final.c b/gcc/final.c
index bd96444ea48..93112ec808b 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1,6 +1,6 @@
/* 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, 2005, 2006
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -1357,7 +1357,7 @@ asm_insn_count (rtx body)
if (GET_CODE (body) == ASM_INPUT)
template = XSTR (body, 0);
else
- template = decode_asm_operands (body, NULL, NULL, NULL, NULL);
+ template = decode_asm_operands (body, NULL, NULL, NULL, NULL, NULL);
for (; *template; template++)
if (IS_ASM_LOGICAL_LINE_SEPARATOR (*template) || *template == '\n')
@@ -2068,12 +2068,27 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
if (string[0])
{
+ location_t loc;
+
if (! app_on)
{
fputs (ASM_APP_ON, file);
app_on = 1;
}
+#ifdef USE_MAPPED_LOCATION
+ loc = ASM_INPUT_SOURCE_LOCATION (body);
+#else
+ loc.file = ASM_INPUT_SOURCE_FILE (body);
+ loc.line = ASM_INPUT_SOURCE_LINE (body);
+#endif
+ if (*loc.file && loc.line)
+ fprintf (asm_out_file, "%s %i \"%s\" 1\n",
+ ASM_COMMENT_START, loc.line, loc.file);
fprintf (asm_out_file, "\t%s\n", string);
+#if HAVE_AS_LINE_ZERO
+ if (*loc.file && loc.line)
+ fprintf (asm_out_file, "%s 0 \"\" 2\n", ASM_COMMENT_START);
+#endif
}
break;
}
@@ -2084,12 +2099,13 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
unsigned int noperands = asm_noperands (body);
rtx *ops = alloca (noperands * sizeof (rtx));
const char *string;
+ location_t loc;
/* There's no telling what that did to the condition codes. */
CC_STATUS_INIT;
/* Get out the operand values. */
- string = decode_asm_operands (body, ops, NULL, NULL, NULL);
+ string = decode_asm_operands (body, ops, NULL, NULL, NULL, &loc);
/* Inhibit dieing on what would otherwise be compiler bugs. */
insn_noperands = noperands;
this_is_asm_operands = insn;
@@ -2106,7 +2122,14 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
fputs (ASM_APP_ON, file);
app_on = 1;
}
+ if (loc.file && loc.line)
+ fprintf (asm_out_file, "%s %i \"%s\" 1\n",
+ ASM_COMMENT_START, loc.line, loc.file);
output_asm_insn (string, ops);
+#if HAVE_AS_LINE_ZERO
+ if (loc.file && loc.line)
+ fprintf (asm_out_file, "%s 0 \"\" 2\n", ASM_COMMENT_START);
+#endif
}
this_is_asm_operands = 0;
diff --git a/gcc/flags.h b/gcc/flags.h
index 2a5515f70c6..0b594ee48d3 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -251,11 +251,6 @@ extern int flag_var_tracking;
warning message in case flag was set by -fprofile-{generate,use}. */
extern bool flag_speculative_prefetching_set;
-/* A string that's used when a random name is required. NULL means
- to make it really random. */
-
-extern const char *flag_random_seed;
-
/* Returns TRUE if generated code should match ABI version N or
greater is in use. */
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 1e623003d18..daad1ba3d41 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -131,7 +131,6 @@ static tree fold_truthop (enum tree_code, tree, tree, tree);
static tree optimize_minmax_comparison (enum tree_code, tree, tree, tree);
static tree extract_muldiv (tree, tree, enum tree_code, tree, bool *);
static tree extract_muldiv_1 (tree, tree, enum tree_code, tree, bool *);
-static int multiple_of_p (tree, tree, tree);
static tree fold_binary_op_with_conditional_arg (enum tree_code, tree,
tree, tree,
tree, tree, int);
@@ -8859,29 +8858,6 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
}
}
- /* If this is a comparison of complex values and both sides
- are COMPLEX_CST, do the comparison by parts to fold the
- comparison. */
- if ((code == EQ_EXPR || code == NE_EXPR)
- && TREE_CODE (TREE_TYPE (arg0)) == COMPLEX_TYPE
- && TREE_CODE (arg0) == COMPLEX_CST
- && TREE_CODE (arg1) == COMPLEX_CST)
- {
- tree real0, imag0, real1, imag1;
- enum tree_code outercode;
-
- real0 = TREE_REALPART (arg0);
- imag0 = TREE_IMAGPART (arg0);
- real1 = TREE_REALPART (arg1);
- imag1 = TREE_IMAGPART (arg1);
- outercode = code == EQ_EXPR ? TRUTH_ANDIF_EXPR : TRUTH_ORIF_EXPR;
-
- return fold_build2 (outercode, type,
- fold_build2 (code, type, real0, real1),
- fold_build2 (code, type, imag0, imag1));
- }
-
-
/* Fold a comparison of the address of COMPONENT_REFs with the same
type and component to a comparison of the address of the base
object. In short, &x->a OP &y->a to x OP y and
@@ -8921,16 +8897,23 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
/* Fold ~X op ~Y as Y op X. */
if (TREE_CODE (arg0) == BIT_NOT_EXPR
&& TREE_CODE (arg1) == BIT_NOT_EXPR)
- return fold_build2 (code, type,
- TREE_OPERAND (arg1, 0),
- TREE_OPERAND (arg0, 0));
+ {
+ tree cmp_type = TREE_TYPE (TREE_OPERAND (arg0, 0));
+ return fold_build2 (code, type,
+ fold_convert (cmp_type, TREE_OPERAND (arg1, 0)),
+ TREE_OPERAND (arg0, 0));
+ }
/* Fold ~X op C as X op' ~C, where op' is the swapped comparison. */
if (TREE_CODE (arg0) == BIT_NOT_EXPR
&& TREE_CODE (arg1) == INTEGER_CST)
- return fold_build2 (swap_tree_comparison (code), type,
- TREE_OPERAND (arg0, 0),
- fold_build1 (BIT_NOT_EXPR, TREE_TYPE (arg1), arg1));
+ {
+ tree cmp_type = TREE_TYPE (TREE_OPERAND (arg0, 0));
+ return fold_build2 (swap_tree_comparison (code), type,
+ TREE_OPERAND (arg0, 0),
+ fold_build1 (BIT_NOT_EXPR, cmp_type,
+ fold_convert (cmp_type, arg1)));
+ }
return NULL_TREE;
}
@@ -9424,6 +9407,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
{
tree var0, con0, lit0, minus_lit0;
tree var1, con1, lit1, minus_lit1;
+ bool ok = true;
/* Split both trees into variables, constants, and literals. Then
associate each group together, the constants with literals,
@@ -9434,12 +9418,32 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
var1 = split_tree (arg1, code, &con1, &lit1, &minus_lit1,
code == MINUS_EXPR);
+ /* With undefined overflow we can only associate constants
+ with one variable. */
+ if ((POINTER_TYPE_P (type)
+ || (INTEGRAL_TYPE_P (type) && !TYPE_OVERFLOW_WRAPS (type)))
+ && var0 && var1)
+ {
+ tree tmp0 = var0;
+ tree tmp1 = var1;
+
+ if (TREE_CODE (tmp0) == NEGATE_EXPR)
+ tmp0 = TREE_OPERAND (tmp0, 0);
+ if (TREE_CODE (tmp1) == NEGATE_EXPR)
+ tmp1 = TREE_OPERAND (tmp1, 0);
+ /* The only case we can still associate with two variables
+ is if they are the same, modulo negation. */
+ if (!operand_equal_p (tmp0, tmp1, 0))
+ ok = false;
+ }
+
/* Only do something if we found more than two objects. Otherwise,
nothing has changed and we risk infinite recursion. */
- if (2 < ((var0 != 0) + (var1 != 0)
- + (con0 != 0) + (con1 != 0)
- + (lit0 != 0) + (lit1 != 0)
- + (minus_lit0 != 0) + (minus_lit1 != 0)))
+ if (ok
+ && (2 < ((var0 != 0) + (var1 != 0)
+ + (con0 != 0) + (con1 != 0)
+ + (lit0 != 0) + (lit1 != 0)
+ + (minus_lit0 != 0) + (minus_lit1 != 0))))
{
/* Recombine MINUS_EXPR operands by using PLUS_EXPR. */
if (code == MINUS_EXPR)
@@ -11131,14 +11135,6 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
&& code == EQ_EXPR)
return fold_build1 (TRUTH_NOT_EXPR, type, arg0);
- /* If this is an equality comparison of the address of a non-weak
- object against zero, then we know the result. */
- if (TREE_CODE (arg0) == ADDR_EXPR
- && VAR_OR_FUNCTION_DECL_P (TREE_OPERAND (arg0, 0))
- && ! DECL_WEAK (TREE_OPERAND (arg0, 0))
- && integer_zerop (arg1))
- return constant_boolean_node (code != EQ_EXPR, type);
-
/* If this is an equality comparison of the address of two non-weak,
unaliased symbols neither of which are extern (since we do not
have access to attributes for externs), then we know the result. */
@@ -11203,6 +11199,24 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
fold_convert (TREE_TYPE (arg0), arg1),
TREE_OPERAND (arg0, 1)));
+ /* Transform comparisons of the form X +- C CMP X. */
+ if ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
+ && operand_equal_p (TREE_OPERAND (arg0, 0), arg1, 0)
+ && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
+ && (INTEGRAL_TYPE_P (TREE_TYPE (arg0))
+ || POINTER_TYPE_P (TREE_TYPE (arg0))))
+ {
+ tree cst = TREE_OPERAND (arg0, 1);
+
+ if (code == EQ_EXPR
+ && !integer_zerop (cst))
+ return omit_two_operands (type, boolean_false_node,
+ TREE_OPERAND (arg0, 0), arg1);
+ else
+ return omit_two_operands (type, boolean_true_node,
+ TREE_OPERAND (arg0, 0), arg1);
+ }
+
/* If we have X - Y == 0, we can convert that to X == Y and similarly
for !=. Don't do this for ordered comparisons due to overflow. */
if (TREE_CODE (arg0) == MINUS_EXPR
@@ -11583,6 +11597,79 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
arg01, arg11)),
arg10);
}
+
+ /* Attempt to simplify equality/inequality comparisons of complex
+ values. Only lower the comparison if the result is known or
+ can be simplified to a single scalar comparison. */
+ if ((TREE_CODE (arg0) == COMPLEX_EXPR
+ || TREE_CODE (arg0) == COMPLEX_CST)
+ && (TREE_CODE (arg1) == COMPLEX_EXPR
+ || TREE_CODE (arg1) == COMPLEX_CST))
+ {
+ tree real0, imag0, real1, imag1;
+ tree rcond, icond;
+
+ if (TREE_CODE (arg0) == COMPLEX_EXPR)
+ {
+ real0 = TREE_OPERAND (arg0, 0);
+ imag0 = TREE_OPERAND (arg0, 1);
+ }
+ else
+ {
+ real0 = TREE_REALPART (arg0);
+ imag0 = TREE_IMAGPART (arg0);
+ }
+
+ if (TREE_CODE (arg1) == COMPLEX_EXPR)
+ {
+ real1 = TREE_OPERAND (arg1, 0);
+ imag1 = TREE_OPERAND (arg1, 1);
+ }
+ else
+ {
+ real1 = TREE_REALPART (arg1);
+ imag1 = TREE_IMAGPART (arg1);
+ }
+
+ rcond = fold_binary (code, type, real0, real1);
+ if (rcond && TREE_CODE (rcond) == INTEGER_CST)
+ {
+ if (integer_zerop (rcond))
+ {
+ if (code == EQ_EXPR)
+ return omit_two_operands (type, boolean_false_node,
+ imag0, imag1);
+ return fold_build2 (NE_EXPR, type, imag0, imag1);
+ }
+ else
+ {
+ if (code == NE_EXPR)
+ return omit_two_operands (type, boolean_true_node,
+ imag0, imag1);
+ return fold_build2 (EQ_EXPR, type, imag0, imag1);
+ }
+ }
+
+ icond = fold_binary (code, type, imag0, imag1);
+ if (icond && TREE_CODE (icond) == INTEGER_CST)
+ {
+ if (integer_zerop (icond))
+ {
+ if (code == EQ_EXPR)
+ return omit_two_operands (type, boolean_false_node,
+ real0, real1);
+ return fold_build2 (NE_EXPR, type, real0, real1);
+ }
+ else
+ {
+ if (code == NE_EXPR)
+ return omit_two_operands (type, boolean_true_node,
+ real0, real1);
+ return fold_build2 (EQ_EXPR, type, real0, real1);
+ }
+ }
+ }
+
return NULL_TREE;
case LT_EXPR:
@@ -12857,13 +12944,13 @@ fold_build3_stat (enum tree_code code, tree type, tree op0, tree op1, tree op2
return tem;
}
-/* Fold a CALL_EXPR expression of type TYPE with operands FN and ARGLIST
- and a null static chain.
+/* Fold a CALL_EXPR expression of type TYPE with operands FN and NARGS
+ arguments in ARGARRAY, and a null static chain.
Return a folded expression if successful. Otherwise, return a CALL_EXPR
- of type TYPE from the given operands as constructed by build_call_list. */
+ of type TYPE from the given operands as constructed by build_call_array. */
tree
-fold_build_call_list (tree type, tree fn, tree arglist)
+fold_build_call_array (tree type, tree fn, int nargs, tree *argarray)
{
tree tem;
#ifdef ENABLE_FOLD_CHECKING
@@ -12873,6 +12960,7 @@ fold_build_call_list (tree type, tree fn, tree arglist)
checksum_after_arglist[16];
struct md5_ctx ctx;
htab_t ht;
+ int i;
ht = htab_create (32, htab_hash_pointer, htab_eq_pointer, NULL);
md5_init_ctx (&ctx);
@@ -12881,12 +12969,13 @@ fold_build_call_list (tree type, tree fn, tree arglist)
htab_empty (ht);
md5_init_ctx (&ctx);
- fold_checksum_tree (arglist, &ctx, ht);
+ for (i = 0; i < nargs; i++)
+ fold_checksum_tree (argarray[i], &ctx, ht);
md5_finish_ctx (&ctx, checksum_before_arglist);
htab_empty (ht);
#endif
- tem = fold_builtin_call_list (type, fn, arglist);
+ tem = fold_builtin_call_array (type, fn, nargs, argarray);
#ifdef ENABLE_FOLD_CHECKING
md5_init_ctx (&ctx);
@@ -12898,12 +12987,13 @@ fold_build_call_list (tree type, tree fn, tree arglist)
fold_check_failed (fn, tem);
md5_init_ctx (&ctx);
- fold_checksum_tree (arglist, &ctx, ht);
+ for (i = 0; i < nargs; i++)
+ fold_checksum_tree (argarray[i], &ctx, ht);
md5_finish_ctx (&ctx, checksum_after_arglist);
htab_delete (ht);
if (memcmp (checksum_before_arglist, checksum_after_arglist, 16))
- fold_check_failed (arglist, tem);
+ fold_check_failed (NULL_TREE, tem);
#endif
return tem;
}
@@ -12969,12 +13059,13 @@ fold_build3_initializer (enum tree_code code, tree type, tree op0, tree op1,
}
tree
-fold_build_call_list_initializer (tree type, tree fn, tree arglist)
+fold_build_call_array_initializer (tree type, tree fn,
+ int nargs, tree *argarray)
{
tree result;
START_FOLD_INIT;
- result = fold_build_call_list (type, fn, arglist);
+ result = fold_build_call_array (type, fn, nargs, argarray);
END_FOLD_INIT;
return result;
@@ -13023,7 +13114,7 @@ fold_build_call_list_initializer (tree type, tree fn, tree arglist)
(where the same SAVE_EXPR (J) is used in the original and the
transformed version). */
-static int
+int
multiple_of_p (tree type, tree top, tree bottom)
{
if (operand_equal_p (top, bottom, 0))
@@ -13214,6 +13305,7 @@ tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p)
case SAVE_EXPR:
case NON_LVALUE_EXPR:
case FLOAT_EXPR:
+ case FIX_TRUNC_EXPR:
return tree_expr_nonnegative_warnv_p (TREE_OPERAND (t, 0),
strict_overflow_p);
@@ -13356,6 +13448,7 @@ tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p)
CASE_FLT_FN (BUILT_IN_SCALBLN):
CASE_FLT_FN (BUILT_IN_SCALBN):
CASE_FLT_FN (BUILT_IN_SIGNBIT):
+ CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
CASE_FLT_FN (BUILT_IN_SINH):
CASE_FLT_FN (BUILT_IN_TANH):
CASE_FLT_FN (BUILT_IN_TRUNC):
@@ -13887,6 +13980,23 @@ fold_relational_const (enum tree_code code, tree type, tree op0, tree op1)
return constant_boolean_node (real_compare (code, c0, c1), type);
}
+ /* Handle equality/inequality of complex constants. */
+ if (TREE_CODE (op0) == COMPLEX_CST && TREE_CODE (op1) == COMPLEX_CST)
+ {
+ tree rcond = fold_relational_const (code, type,
+ TREE_REALPART (op0),
+ TREE_REALPART (op1));
+ tree icond = fold_relational_const (code, type,
+ TREE_IMAGPART (op0),
+ TREE_IMAGPART (op1));
+ if (code == EQ_EXPR)
+ return fold_build2 (TRUTH_ANDIF_EXPR, type, rcond, icond);
+ else if (code == NE_EXPR)
+ return fold_build2 (TRUTH_ORIF_EXPR, type, rcond, icond);
+ else
+ return NULL_TREE;
+ }
+
/* From here on we only handle LT, LE, GT, GE, EQ and NE.
To compute GT, swap the arguments and do LT.
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index cea7f13ec00..48d43349467 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,232 @@
+2007-03-14 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ * trans-array.c (gfc_trans_auto_array_allocation): Replace
+ fold(convert()) by fold_convert().
+ (gfc_duplicate_allocatable): Likewise.
+ * trans-intrinsic.c (gfc_conv_intrinsic_dot_product): Use
+ build_int_cst instead of converting an integer_zero_node
+ to the final type.
+
+2007-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * module.c (mio_typespec): Don't look at ts->cl if not BT_CHARACTER.
+
+2007-03-13 Brooks Moses <brooks.moses@codesourcery.com>
+
+ PR fortran/30933
+ PR fortran/30948
+ PR fortran/30953
+ * intrinsics.texi (CHDIR): Fix argument names, note
+ that STATUS must be a default integer.
+ (CTIME): Fix argument names, note that RESULT must
+ be a default integer.
+ (EXIT): Note that STATUS must be a default integer.
+
+2007-03-13 Brooks Moses <brooks.moses@codesourcery.com>
+
+ PR fortran/28068
+ * intrinsic.texi: General whitespace cleanup, remove
+ comment about missing intrinsics.
+ (menu): Add lines for new entries listed below.
+ (ACOSH): Mention specific function DACOSH, correct
+ description phrasing.
+ (ASINH): Mention specific function DASINH, correct
+ description phrasing.
+ (ATANH): Mention specific function DATANH, correct
+ description phrasing.
+ (COS): Add index entry for CCOS.
+ (CPU_TIME): Correct "REAL" to "REAL(*)".
+ (EXP): Add index entry for CEXP.
+ (INT): Correct argument name to "A".
+ (INT2): New entry.
+ (INT8): New entry.
+ (LONG): New entry.
+ (MAX): Add index entries for specific variants.
+ (MCLOCK): New entry.
+ (MCLOCK8): New entry.
+ (SECNDS): Adjust to a more standard form.
+ (SECOND): New entry.
+ (TIME): Add cross-reference to MCLOCK.
+ (TIME8): Add cross-reference to MCLOCK8.
+
+2007-03-11 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30883
+ * parse.c (parse_interface): Use the default types from the
+ formal namespace if a function or its result do not have a type
+ after parsing the specification statements.
+
+2007-03-08 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * intrinsic.texi: (ICHAR) Improve internal I/O note.
+ (ACHAR): Reference it.
+ (CHAR): Reference it.
+ (IACHAR): Reference it.
+
+2007-03-08 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * intrinsic.texi: (LINK) Document function form.
+ (RENAME): Likewise.
+ (SYMLNK): Likewise.
+ (SYSTEM): Likewise.
+ (UNLINK): Likewise.
+
+2007-03-08 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * intrinsic.texi: minor typo fixes, removed prologue.
+ (FSEEK): moved to correct place in alphabetical order.
+
+2007-03-08 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/30947
+ * check.c (gfc_check_alarm_sub): Added check for default integer
+ kind of status argument.
+ * iresolve.c (gfc_resolve_alarm_sub): Removed conversion of
+ status argument.
+ * intrinsic.texi (ALARM): Extended documentation.
+
+2007-03-08 Daniel Franke <franke.daniel@gmail.com>
+
+ * intrinsic.texi (GERROR, ISATTY, TTYNAM): New.
+ (ABORT, FLUSH, FNUM, IRAND, MALLOC, SIGNAL, SRAND): Fixed typo.
+ * intrinsic.c (add_subroutines): Adjusted dummy argument names
+ of GERROR and TTYNAM.
+
+2007-07-08 Tobias Burnus <burnus@net-b.de>
+
+ * module.c (gfc_match_use): Support renaming of operators
+ in USE statements.
+ * gfortran.texi (Fortran 2003 Status): Document support of
+ renaming of operators.
+
+2007-07-08 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30973
+ * module.c (read_module): Always import module name as symbol.
+ (gfc_match_use): Disallow module name in the only clause of
+ a use statement.
+
+2007-03-08 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31011
+ * expr.c (find_array_section): Correct arithmetic for section
+ size.
+
+2007-03-07 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * iresolve.c (gfc_resolve_ishftc): Correct s_kind value.
+
+2007-03-06 Daniel Franke <franke.daniel@gmail.com>
+
+ PR documentation/30950
+ * intrinsic.texi (AND, CPU_TIME): Fix dummy argument names.
+ (FREE): Fix call syntax.
+
+2007-03-06 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * intrinsic.texi: Limit column widths to a total of .85.
+
+2007-03-05 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gfortran.texi (GFortran and G77): Rewrite completely.
+
+2007-03-05 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * match.c (gfc_match_name): Expanded comment.
+
+2007-03-05 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gfortran.texi (Old-style kind specifications): Document
+ special handling of old-style kind specifiers for COMPLEX.
+ * decl.c (gfc_match_old_kind_spec): Document kind/bytesize
+ assumptions for COMPLEX in comment.
+
+2007-03-05 Brooks Moses <brooks.moses@codesourcery.com>
+
+ PR 31050
+ * gfortranspec.c (lang_specific_driver): Update program
+ name and copyright date.
+
+2007-03-03 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30882
+ * check.c (dim_rank_check): The shape of subsections of
+ assumed-size arrays is known.
+
+2007-03-02 Paul Thomas <pault@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30873
+ * decl.c (gfc_match_entry): Remove erroneous entry result check.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+
+2007-03-01 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30865
+ * trans-intrinsic.c (gfc_conv_intrinsic_size): Compare pointers.
+
+2007-02-28 Tobias Burnus <burnus@net-b.de>
+ Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30888
+ PR fortran/30887
+ * resolve.c (resolve_actual_arglist): Allow by-value
+ arguments and non-default-kind for %VAL().
+ * trans-expr.c (conv_arglist_function): Allow
+ non-default-kind for %VAL().
+
+2007-02-28 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30968
+ * primary.c (next_string_char): Correct reading a character
+ after the delimiter.
+ (match_string_constant): Print warning message only once.
+
+2007-02-27 Richard Guenther <rguenther@suse.de>
+
+ * trans-array.c (structure_alloc_comps): Use correct type
+ for null pointer constant.
+
+2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gfortran.texi: Standardize title page, remove version number
+ from copyright page.
+
+2007-02-26 Thomas Koenig <Thomas.Koenig@online.de>
+ Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30865
+ * trans-intrinsic.c (gfc_conv_intrinsic_size):
+ If dim is an optional argument, check for its
+ presence and call size0 or size1, respectively.
+
+2007-02-23 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30660
+ * resolve.c (has_default_initializer): New function.
+ (resolve_fl_variable): Call has_default_initializer to determine if
+ the derived type has a default initializer to its ultimate
+ components.
+
+
+2007-02-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * options.c (set_default_std_flags): New function to consolidate
+ setting the flags.
+ (gfc_init_options): Use new function.
+ (gfc_handle_option): Use new function.
+
+2007-02-22 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gfortran.texi (Old-style kind specifications): Document
+ special handling of old-style kind specifiers for COMPLEX.
+ * decl.c (gfc_match_old_kind_spec): Documented kind/bytesize
+ assumptions in comment.
+
2007-02-21 Bernhard Fischer <aldot@gcc.gnu.org>
* parse.c (next_free): Gooble spaces after OpenMP sentinel.
diff --git a/gcc/fortran/Make-lang.in b/gcc/fortran/Make-lang.in
index 077b16ad3c2..00b5a98414a 100644
--- a/gcc/fortran/Make-lang.in
+++ b/gcc/fortran/Make-lang.in
@@ -25,10 +25,9 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.info
-# foo.install-common, foo.install-info, foo.install-man,
-# foo.uninstall, foo.install-info, foo.dvi, foo.pdf, foo.html,
-# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
+# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
@@ -124,9 +123,22 @@ fortran.tags: force
fortran.info: doc/gfortran.info
fortran.dvi: doc/gfortran.dvi
-fortran.pdf: doc/gfortran.pdf
fortran.html: $(build_htmldir)/gfortran/index.html
+F95_PDFFILES = doc/gfortran.pdf
+
+fortran.pdf: $(F95_PDFFILES)
+
+fortran.install-pdf: $(F95_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
+ @list='$(F95_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
+ done
+
F95_MANFILES = doc/gfortran.1
fortran.man: $(F95_MANFILES)
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 6e4d798f6d1..3b1a1a05f47 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -337,7 +337,10 @@ dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
ar = gfc_find_array_ref (array);
rank = array->rank;
- if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
+ if (ar->as->type == AS_ASSUMED_SIZE
+ && !allow_assumed
+ && ar->type != AR_ELEMENT
+ && ar->type != AR_SECTION)
rank--;
if (mpz_cmp_ui (dim->value.integer, 1) < 0
@@ -2996,6 +2999,9 @@ gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
if (type_check (status, 2, BT_INTEGER) == FAILURE)
return FAILURE;
+ if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
+ return FAILURE;
+
return SUCCESS;
}
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 86b7ac103db..c8547507299 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -1578,7 +1578,9 @@ cleanup:
}
-/* Match an extended-f77 kind specification. */
+/* Match an extended-f77 "TYPESPEC*bytesize"-style kind specification.
+ This assumes that the byte size is equal to the kind number for
+ non-COMPLEX types, and equal to twice the kind number for COMPLEX. */
match
gfc_match_old_kind_spec (gfc_typespec *ts)
@@ -4026,12 +4028,6 @@ gfc_match_entry (void)
entry->result = result;
}
-
- if (proc->attr.recursive && result == NULL)
- {
- gfc_error ("RESULT attribute required in ENTRY statement at %C");
- return MATCH_ERROR;
- }
}
if (gfc_match_eos () != MATCH_YES)
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index bf183854e36..baab1106690 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -1150,8 +1150,7 @@ find_array_section (gfc_expr *expr, gfc_ref *ref)
}
/* Calculate the number of elements and the shape. */
- mpz_abs (tmp_mpz, stride[d]);
- mpz_div (tmp_mpz, stride[d], tmp_mpz);
+ mpz_set (tmp_mpz, stride[d]);
mpz_add (tmp_mpz, end[d], tmp_mpz);
mpz_sub (tmp_mpz, tmp_mpz, ctr[d]);
mpz_div (tmp_mpz, tmp_mpz, stride[d]);
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 08fa011d55b..52b4c2c1c8c 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -118,12 +118,10 @@ Boston, MA 02110-1301 USA
@setchapternewpage odd
@titlepage
@title Using GNU Fortran
-@sp 2
-@center The gfortran team
+@versionsubtitle
+@author The @t{gfortran} team
@page
@vskip 0pt plus 1filll
-For the @value{version-GCC} Version
-@sp 1
Published by the Free Software Foundation@*
51 Franklin Street, Fifth Floor@*
Boston, MA 02110-1301, USA@*
@@ -391,36 +389,12 @@ Fortran compiler.
@cindex Fortran 77
@cindex G77
-Why do we write a compiler front end from scratch?
-There's a fine Fortran 77 compiler in the
-GNU Compiler Collection that accepts some features
-of the Fortran 90 standard as extensions.
-Why not start from there and revamp it?
-
-One of the reasons is that Craig Burley, the author of G77,
-has decided to stop working on the G77 front end.
-On @uref{http://world.std.com/~burley/g77-why.html,
-Craig explains the reasons for his decision to stop working on G77}
-in one of the pages in his homepage.
-Among the reasons is a lack of interest in improvements to
-@command{g77}.
-Users appear to be quite satisfied with @command{g77} as it is.
-While @command{g77} is still being maintained (by Toon Moene),
-it is unlikely that sufficient people will be willing
-to completely rewrite the existing code.
-
-But there are other reasons to start from scratch.
-Many people, including Craig Burley,
-no longer agreed with certain design decisions in the G77 front end.
-Also, the interface of @command{g77} to the back end is written in
-a style which is confusing and not up to date on recommended practice.
-In fact, a full rewrite had already been planned for GCC 3.0.
-
-When Craig decided to stop,
-it just seemed to be a better idea to start a new project from scratch,
-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.
+The GNU Fortran compiler is the successor to G77, the Fortran 77 front
+end included in GCC prior to version 4. It is an entirely new program
+that has been designed to provide Fortran 95 support and extensibility
+for future Fortran language standards, as well as providing backwards
+compatibility for Fortran 77 and nearly all of the GNU language
+extensions supported by G77.
@c ---------------------------------------------------------------------
@@ -790,6 +764,9 @@ host-associated derived types.
attribute; supported intrinsic modules: @code{ISO_FORTRAN_ENV},
@code{OMP_LIB} and @code{OMP_LIB_KINDS}.
+@item
+Renaming of operators in the @code{USE} statement.
+
@end itemize
@@ -837,19 +814,25 @@ of extensions, and @option{-std=legacy} allows both without warning.
@section Old-style kind specifications
@cindex Kind specifications
-GNU Fortran allows old-style kind specifications in
-declarations. These look like:
+GNU Fortran allows old-style kind specifications in declarations. These
+look like:
@smallexample
- TYPESPEC*k x,y,z
+ TYPESPEC*size x,y,z
@end smallexample
+@noindent
where @code{TYPESPEC} is a basic type (@code{INTEGER}, @code{REAL},
-etc.), and where @code{k} is a valid kind number for that type. The
-statement then declares @code{x}, @code{y} and @code{z} to be of
-type @code{TYPESPEC} with kind @code{k}. This is equivalent to the
-standard conforming declaration
+etc.), and where @code{size} is a byte count corresponding to the
+storage size of a valid kind for that type. (For @code{COMPLEX}
+variables, @code{size} is the total size of the real and imaginary
+parts.) The statement then declares @code{x}, @code{y} and @code{z} to
+be of type @code{TYPESPEC} with the appropriate kind. This is
+equivalent to the standard-conforming declaration
@smallexample
TYPESPEC(k) x,y,z
@end smallexample
+@noindent
+where @code{k} is equal to @code{size} for most types, but is equal to
+@code{size/2} for the @code{COMPLEX} type.
@node Old-style variable initialization
@section Old-style variable initialization
diff --git a/gcc/fortran/gfortranspec.c b/gcc/fortran/gfortranspec.c
index 645e3b2d404..5913bd3c514 100644
--- a/gcc/fortran/gfortranspec.c
+++ b/gcc/fortran/gfortranspec.c
@@ -345,8 +345,8 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
break;
case OPTION_version:
- printf ("GNU Fortran 95 (GCC) %s\n", version_string);
- printf ("Copyright %s 2006 Free Software Foundation, Inc.\n\n",
+ printf ("GNU Fortran (GCC) %s\n", version_string);
+ printf ("Copyright %s 2007 Free Software Foundation, Inc.\n\n",
_("(C)"));
printf (_("GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\
You may redistribute copies of GNU Fortran\n\
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index d3692c9d19e..5db319adb10 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -2383,7 +2383,7 @@ add_subroutines (void)
dt, BT_CHARACTER, dc, REQUIRED);
add_sym_1s ("gerror", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
- gfc_check_gerror, NULL, gfc_resolve_gerror, c, BT_CHARACTER,
+ gfc_check_gerror, NULL, gfc_resolve_gerror, res, BT_CHARACTER,
dc, REQUIRED);
add_sym_2s ("getcwd", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
@@ -2553,7 +2553,7 @@ add_subroutines (void)
add_sym_2s ("ttynam", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_ttynam_sub, NULL, gfc_resolve_ttynam_sub,
- ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED);
+ ut, BT_INTEGER, di, REQUIRED, name, BT_CHARACTER, dc, REQUIRED);
add_sym_2s ("umask", 0, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_umask_sub, NULL, gfc_resolve_umask_sub,
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 26244b505ad..8c2a74aa30b 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -38,16 +38,6 @@ Some basic guidelines for editing this document:
@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.
-
-Implemented intrinsics are fully functional and available to the user to apply.
-Some intrinsics have documentation yet to be completed as indicated by 'documentation pending'.
-
-@comment Missing intrinsics (double check with #19292)
-@comment - MClock
-@comment - Short
-
@menu
* Introduction: Introduction to Intrinsics
* @code{ABORT}: ABORT, Abort the program
@@ -125,6 +115,7 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{FSEEK}: FSEEK, Low level file positioning subroutine
* @code{FSTAT}: FSTAT, Get file status
* @code{FTELL}: FTELL, Current stream position
+* @code{GERROR}: GERROR, Get last system error message
* @code{GETARG}: GETARG, Get command line arguments
* @code{GET_COMMAND}: GET_COMMAND, Get the entire command line
* @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments
@@ -150,8 +141,11 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{IERRNO}: IERRNO, Function to get the last system error number
* @code{INDEX}: INDEX, Position of a substring within a string
* @code{INT}: INT, Convert to integer type
+* @code{INT2}: INT2, Convert to 16-bit integer type
+* @code{INT8}: INT8, Convert to 64-bit integer type
* @code{IOR}: IOR, Bitwise logical or
* @code{IRAND}: IRAND, Integer pseudo-random number
+* @code{ISATTY}: ISATTY, Whether a unit is a terminal device
* @code{ISHFT}: ISHFT, Shift bits
* @code{ISHFTC}: ISHFTC, Shift bits circularly
* @code{ITIME}: ITIME, Current local time (hour/minutes/seconds)
@@ -170,6 +164,7 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{LOG}: LOG, Logarithm function
* @code{LOG10}: LOG10, Base 10 logarithm function
* @code{LOGICAL}: LOGICAL, Convert to logical type
+* @code{LONG}: LONG, Convert to integer type
* @code{LSHIFT}: LSHIFT, Left shift bits
* @code{LSTAT}: LSTAT, Get file status
* @code{LTIME}: LTIME, Convert time to local time info
@@ -179,6 +174,8 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{MAXEXPONENT}: MAXEXPONENT, Maximum exponent of a real kind
* @code{MAXLOC}: MAXLOC, Location of the maximum value within an array
* @code{MAXVAL}: MAXVAL, Maximum value of an array
+* @code{MCLOCK}: MCLOCK, Time function
+* @code{MCLOCK8}: MCLOCK8, Time function (64-bit)
* @code{MERGE}: MERGE, Merge arrays
* @code{MIN}: MIN, Minimum value of an argument list
* @code{MINEXPONENT}: MINEXPONENT, Minimum exponent of a real kind
@@ -214,8 +211,7 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{SCALE}: SCALE, Scale a real value
* @code{SCAN}: SCAN, Scan a string for the presence of a set of characters
* @code{SECNDS}: SECNDS, Time function
-@comment * @code{SECOND}: SECOND, (?)
-@comment * @code{SECONDS}: SECONDS, (?)
+* @code{SECOND}: SECOND, CPU time function
* @code{SELECTED_INT_KIND}: SELECTED_INT_KIND, Choose integer kind
* @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND, Choose real kind
* @code{SET_EXPONENT}: SET_EXPONENT, Set the exponent of the model
@@ -244,6 +240,7 @@ Some intrinsics have documentation yet to be completed as indicated by 'document
* @code{TRANSFER}: TRANSFER, Transfer bit patterns
* @code{TRANSPOSE}: TRANSPOSE, Transpose an array of rank two
* @code{TRIM}: TRIM, Function to remove trailing blank characters of a string
+* @code{TTYNAM}: TTYNAM, Get the name of a terminal device.
* @code{UBOUND}: UBOUND, Upper dimension bounds of an array
* @code{UMASK}: UMASK, Set the file creation mask
* @code{UNLINK}: UNLINK, Remove a file from the file system
@@ -308,7 +305,7 @@ which is suitable for debugging purposes.
GNU extension
@item @emph{Class}:
-non-elemental subroutine
+Non-elemental subroutine
@item @emph{Syntax}:
@code{CALL ABORT}
@@ -330,6 +327,7 @@ end program test_abort
@end table
+
@node ABS
@section @code{ABS} --- Absolute value
@cindex @code{ABS} intrinsic
@@ -354,7 +352,7 @@ Elemental function
@code{RESULT = ABS(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be an @code{INTEGER(*)},
@code{REAL(*)}, or @code{COMPLEX(*)}.
@end multitable
@@ -377,7 +375,7 @@ end program test_abs
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{CABS(Z)} @tab @code{COMPLEX(4) Z} @tab @code{REAL(4)} @tab F77 and later
@item @code{DABS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@@ -388,6 +386,7 @@ end program test_abs
@end table
+
@node ACCESS
@section @code{ACCESS} --- Checks file access modes
@cindex @code{ACCESS}
@@ -410,7 +409,7 @@ Inquiry function
@code{RESULT = ACCESS(NAME, MODE)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{NAME} @tab Scalar @code{CHARACTER} with the file name.
Tailing blank are ignored unless the character @code{achar(0)} is
present, then all characters up to and excluding @code{achar(0)} are
@@ -445,6 +444,7 @@ end program access_test
@end table
+
@node ACHAR
@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
@cindex @code{ACHAR} intrinsic
@@ -465,7 +465,7 @@ Elemental function
@code{RESULT = ACHAR(I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -481,6 +481,10 @@ program test_achar
end program test_achar
@end smallexample
+@item @emph{Note}:
+See @ref{ICHAR} for a discussion of converting between numerical values
+and formatted string representations.
+
@item @emph{See also}:
@ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
@@ -508,7 +512,7 @@ Elemental function
@code{RESULT = ACOS(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} with a magnitude that is
less than one.
@end multitable
@@ -527,7 +531,7 @@ end program test_acos
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -538,15 +542,18 @@ Inverse function: @ref{COS}
@end table
+
@node ACOSH
@section @code{ACOSH} --- Hyperbolic arccosine function
@cindex @code{ACOSH} intrinsic
+@cindex @code{DACOSH} intrinsic
@cindex hyperbolic arccosine
@cindex hyperbolic cosine (inverse)
@table @asis
@item @emph{Description}:
-@code{ACOSH(X)} computes the area hyperbolic cosine of @var{X} (inverse of @code{COSH(X)}).
+@code{ACOSH(X)} computes the hyperbolic arccosine of @var{X} (inverse of
+@code{COSH(X)}).
@item @emph{Standard}:
GNU extension
@@ -558,7 +565,7 @@ Elemental function
@code{RESULT = ACOSH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} with a magnitude that is
greater or equal to one.
@end multitable
@@ -575,6 +582,12 @@ PROGRAM test_acosh
END PROGRAM
@end smallexample
+@item @emph{Specific names}:
+@multitable @columnfractions .20 .20 .20 .25
+@item Name @tab Argument @tab Return type @tab Standard
+@item @code{DACOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
+@end multitable
+
@item @emph{See also}:
Inverse function: @ref{COSH}
@end table
@@ -601,7 +614,7 @@ Elemental function
@code{RESULT = ADJUSTL(STR)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STR} @tab The type shall be @code{CHARACTER}.
@end multitable
@@ -642,7 +655,7 @@ Elemental function
@code{RESULT = ADJUSTR(STR)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STR} @tab The type shall be @code{CHARACTER}.
@end multitable
@@ -688,7 +701,7 @@ Elemental function
@code{RESULT = AIMAG(Z)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{Z} @tab The type of the argument shall be @code{COMPLEX(*)}.
@end multitable
@@ -708,7 +721,7 @@ end program test_aimag
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)} @tab GNU extension
@item @code{IMAG(Z)} @tab @code{COMPLEX(*) Z} @tab @code{REAL(*)} @tab GNU extension
@@ -738,7 +751,7 @@ Elemental function
@code{RESULT = AINT(X [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be @code{REAL(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -767,7 +780,7 @@ end program test_aint
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -782,7 +795,7 @@ end program test_aint
@table @asis
@item @emph{Description}:
@code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER}
-to be executed after a delay of @var{SECONDS} by using @code{alarm(1)} to
+to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to
set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is
supplied, it will be returned with the number of seconds remaining until
any previously scheduled alarm was due to be delivered, or zero if there
@@ -798,14 +811,15 @@ Subroutine
@code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{SECONDS} @tab The type of the argument shall be a scalar
@code{INTEGER}. It is @code{INTENT(IN)}.
@item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or
-@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
-@code{INTEGER}. It is @code{INTENT(IN)}.
+@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar
+values may be either @code{SIG_IGN=1} to ignore the alarm generated
+or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}.
@item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar
-@code{INTEGER} variable. It is @code{INTENT(OUT)}.
+variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}.
@end multitable
@item @emph{Example}:
@@ -844,7 +858,7 @@ transformational function
@code{RESULT = ALL(MASK [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@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
@@ -909,7 +923,7 @@ Inquiry function
@code{RESULT = ALLOCATED(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The argument shall be an @code{ALLOCATABLE} array.
@end multitable
@@ -929,6 +943,7 @@ end program test_allocated
@end table
+
@node AND
@section @code{AND} --- Bitwise logical AND
@cindex @code{AND} intrinsic
@@ -949,12 +964,12 @@ GNU extension
Non-elemental function
@item @emph{Syntax}:
-@code{RESULT = AND(X, Y)}
+@code{RESULT = AND(I, J)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
-@item @var{Y} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
+@multitable @columnfractions .15 .70
+@item @var{I} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
+@item @var{J} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
@end multitable
@item @emph{Return value}:
@@ -999,7 +1014,7 @@ Elemental function
@code{RESULT = ANINT(X [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be @code{REAL(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -1026,7 +1041,7 @@ end program test_anint
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DNINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -1054,7 +1069,7 @@ transformational function
@code{RESULT = ANY(MASK [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@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
@@ -1120,7 +1135,7 @@ Elemental function
@code{RESULT = ASIN(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and a magnitude that is
less than one.
@end multitable
@@ -1139,7 +1154,7 @@ end program test_asin
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DASIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -1150,15 +1165,17 @@ Inverse function: @ref{SIN}
@end table
+
@node ASINH
@section @code{ASINH} --- Hyperbolic arcsine function
@cindex @code{ASINH} intrinsic
+@cindex @code{DASINH} intrinsic
@cindex hyperbolic arcsine
@cindex hyperbolic sine (inverse)
@table @asis
@item @emph{Description}:
-@code{ASINH(X)} computes the area hyperbolic sine of @var{X} (inverse of @code{SINH(X)}).
+@code{ASINH(X)} computes the hyperbolic arcsine of @var{X} (inverse of @code{SINH(X)}).
@item @emph{Standard}:
GNU extension
@@ -1170,7 +1187,7 @@ Elemental function
@code{RESULT = ASINH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, with @var{X} a real number.
@end multitable
@@ -1186,6 +1203,12 @@ PROGRAM test_asinh
END PROGRAM
@end smallexample
+@item @emph{Specific names}:
+@multitable @columnfractions .20 .20 .20 .25
+@item Name @tab Argument @tab Return type @tab Standard
+@item @code{DASINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension.
+@end multitable
+
@item @emph{See also}:
Inverse function: @ref{SINH}
@end table
@@ -1212,7 +1235,7 @@ Inquiry function
@code{RESULT = ASSOCIATED(PTR [, TGT])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PTR} @tab @var{PTR} shall have the @code{POINTER} attribute and
it can be of any type.
@item @var{TGT} @tab (Optional) @var{TGT} shall be a @code{POINTER} or
@@ -1287,7 +1310,7 @@ Elemental function
@code{RESULT = ATAN(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -1304,7 +1327,7 @@ end program test_atan
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DATAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -1324,7 +1347,8 @@ Inverse function: @ref{TAN}
@table @asis
@item @emph{Description}:
-@code{ATAN2(Y,X)} computes the arctangent of the complex number @math{X + i Y}.
+@code{ATAN2(Y,X)} computes the arctangent of the complex number
+@math{X + i Y}.
@item @emph{Standard}:
F77 and later
@@ -1336,7 +1360,7 @@ Elemental function
@code{RESULT = ATAN2(Y,X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{Y} @tab The type shall be @code{REAL(*)}.
@item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}.
If @var{Y} is zero, then @var{X} must be nonzero.
@@ -1360,7 +1384,7 @@ end program test_atan2
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DATAN2(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -1371,12 +1395,14 @@ end program test_atan2
@node ATANH
@section @code{ATANH} --- Hyperbolic arctangent function
@cindex @code{ASINH} intrinsic
+@cindex @code{DASINH} intrinsic
@cindex hyperbolic arctangent
@cindex hyperbolic tangent (inverse)
@table @asis
@item @emph{Description}:
-@code{ATANH(X)} computes the area hyperbolic sine of @var{X} (inverse of @code{TANH(X)}).
+@code{ATANH(X)} computes the hyperbolic arctangent of @var{X} (inverse
+of @code{TANH(X)}).
@item @emph{Standard}:
GNU extension
@@ -1388,7 +1414,7 @@ Elemental function
@code{RESULT = ATANH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} with a magnitude
that is less than or equal to one.
@end multitable
@@ -1405,13 +1431,18 @@ PROGRAM test_atanh
END PROGRAM
@end smallexample
+@item @emph{Specific names}:
+@multitable @columnfractions .20 .20 .20 .25
+@item Name @tab Argument @tab Return type @tab Standard
+@item @code{DATANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
+@end multitable
+
@item @emph{See also}:
Inverse function: @ref{TANH}
@end table
-
@node BESJ0
@section @code{BESJ0} --- Bessel function of the first kind of order 0
@cindex @code{BESJ0} intrinsic
@@ -1433,7 +1464,7 @@ Elemental function
@code{RESULT = BESJ0(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1450,7 +1481,7 @@ end program test_besj0
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESJ0(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -1479,7 +1510,7 @@ Elemental function
@code{RESULT = BESJ1(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1496,7 +1527,7 @@ end program test_besj1
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESJ1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -1525,7 +1556,7 @@ Elemental function
@code{RESULT = BESJN(N, X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{N} @tab The type shall be @code{INTEGER(*)}, and it shall be scalar.
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1542,7 +1573,7 @@ end program test_besjn
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESJN(X)} @tab @code{INTEGER(*) N} @tab @code{REAL(8)} @tab GNU extension
@item @tab @code{REAL(8) X} @tab @tab
@@ -1572,7 +1603,7 @@ Elemental function
@code{RESULT = BESY0(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1588,7 +1619,7 @@ end program test_besy0
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESY0(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -1617,7 +1648,7 @@ Elemental function
@code{RESULT = BESY1(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1633,7 +1664,7 @@ end program test_besy1
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESY1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -1662,7 +1693,7 @@ Elemental function
@code{RESULT = BESYN(N, X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{N} @tab The type shall be @code{INTEGER(*)}, and it shall be scalar.
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -1679,7 +1710,7 @@ end program test_besyn
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DBESYN(N,X)} @tab @code{INTEGER(*) N} @tab @code{REAL(8)} @tab GNU extension
@item @tab @code{REAL(8) X} @tab @tab
@@ -1709,7 +1740,7 @@ Inquiry function
@code{RESULT = BIT_SIZE(I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -1749,7 +1780,7 @@ Elemental function
@code{RESULT = BTEST(I, POS)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -1792,7 +1823,7 @@ Elemental function
@code{RESULT = CEILING(X [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -1838,7 +1869,7 @@ Elemental function
@code{RESULT = CHAR(I [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -1858,12 +1889,17 @@ program test_char
end program test_char
@end smallexample
+@item @emph{Note}:
+See @ref{ICHAR} for a discussion of converting between numerical values
+and formatted string representations.
+
@item @emph{See also}:
@ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
@end table
+
@node CHDIR
@section @code{CHDIR} --- Change working directory
@cindex @code{CHDIR} intrinsic
@@ -1871,23 +1907,30 @@ end program test_char
@table @asis
@item @emph{Description}:
-Change current working directory to a specified @var{PATH}.
+Change current working directory to a specified path.
+
+This intrinsic is provided in both subroutine and function forms; however,
+only one form can be used in any given program unit.
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Non-elemental subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL CHDIR(PATH [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL CHDIR(NAME [, STATUS])}
+@item @code{STATUS = CHDIR(NAME)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{PATH} @tab The type shall be @code{CHARACTER(*)} and shall
+@multitable @columnfractions .15 .70
+@item @var{NAME} @tab The type shall be @code{CHARACTER(*)} and shall
specify a valid path within the file system.
-@item @var{STATUS} @tab (Optional) status flag. Returns 0 on success,
- a system specific and non-zero error code otherwise.
+@item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default
+ kind. Returns 0 on success, and a system specific
+ and non-zero error code otherwise.
@end multitable
@item @emph{Example}:
@@ -1934,7 +1977,7 @@ Subroutine, non-elemental function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{NAME} @tab Scalar @code{CHARACTER} with the file name.
Trailing blanks are ignored unless the character @code{achar(0)} is
present, then all characters up to and excluding @code{achar(0)} are
@@ -1971,12 +2014,11 @@ program chmod_test
print *, 'Status: ', status
end program chmod_test
@end smallexample
-@item @emph{Specific names}:
-@item @emph{See also}:
@end table
+
@node CMPLX
@section @code{CMPLX} --- Complex conversion function
@cindex @code{CMPLX} intrinsic
@@ -1999,7 +2041,7 @@ Elemental function
@code{RESULT = CMPLX(X [, Y [, KIND]])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)},
or @code{COMPLEX(*)}.
@item @var{Y} @tab (Optional; only allowed if @var{X} is not
@@ -2047,7 +2089,7 @@ Inquiry function
@code{RESULT = COMMAND_ARGUMENT_COUNT()}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item None
@end multitable
@@ -2067,6 +2109,8 @@ end program test_command_argument_count
@ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}
@end table
+
+
@node CONJG
@section @code{CONJG} --- Complex conjugate function
@cindex @code{CONJG} intrinsic
@@ -2087,7 +2131,7 @@ Elemental function
@code{Z = CONJG(Z)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{Z} @tab The type shall be @code{COMPLEX(*)}.
@end multitable
@@ -2107,7 +2151,7 @@ end program test_conjg
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension
@end multitable
@@ -2119,6 +2163,7 @@ end program test_conjg
@section @code{COS} --- Cosine function
@cindex @code{COS} intrinsic
@cindex @code{DCOS} intrinsic
+@cindex @code{CCOS} intrinsic
@cindex @code{ZCOS} intrinsic
@cindex @code{CDCOS} intrinsic
@cindex trigonometric functions
@@ -2137,7 +2182,7 @@ Elemental function
@code{RESULT = COS(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -2156,7 +2201,7 @@ end program test_cos
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DCOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@item @code{CCOS(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab F77 and later
@@ -2191,7 +2236,7 @@ Elemental function
@code{X = COSH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -2208,7 +2253,7 @@ end program test_cosh
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DCOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@end multitable
@@ -2242,7 +2287,7 @@ transformational function
@code{RESULT = COUNT(MASK [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{MASK} @tab The type shall be @code{LOGICAL}.
@item @var{DIM} @tab The type shall be @code{INTEGER}.
@end multitable
@@ -2287,8 +2332,9 @@ end program test_count
@table @asis
@item @emph{Description}:
-Returns a @code{REAL} value representing the elapsed CPU time in seconds. This
-is useful for testing segments of code to determine execution time.
+Returns a @code{REAL(*)} value representing the elapsed CPU time in
+seconds. This is useful for testing segments of code to determine
+execution time.
@item @emph{Standard}:
F95 and later
@@ -2297,11 +2343,11 @@ F95 and later
Subroutine
@item @emph{Syntax}:
-@code{CALL CPU_TIME(X)}
+@code{CALL CPU_TIME(TIME)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}.
+@multitable @columnfractions .15 .70
+@item @var{TIME} @tab The type shall be @code{REAL(*)} with @code{INTENT(OUT)}.
@end multitable
@item @emph{Return value}:
@@ -2347,7 +2393,7 @@ transformational function
@code{RESULT = CSHIFT(A, SHIFT [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab May be any type, not scaler.
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
@item @var{DIM} @tab The type shall be @code{INTEGER}.
@@ -2374,6 +2420,7 @@ end program test_cshift
@end table
+
@node CTIME
@section @code{CTIME} --- Convert a time into a string
@cindex @code{CTIME} intrinsic
@@ -2381,15 +2428,11 @@ end program test_cshift
@table @asis
@item @emph{Description}:
-@code{CTIME(T,S)} converts @var{T}, a system time value, such as returned
-by @code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14
-1995}, and returns that string into @var{S}.
+@code{CTIME} converts a system time value, such as returned by
+@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}.
-If @code{CTIME} is invoked as a function, it can not be invoked as a
-subroutine, and vice versa.
-
-@var{T} is an @code{INTENT(IN)} @code{INTEGER(KIND=8)} variable.
-@var{S} is an @code{INTENT(OUT)} @code{CHARACTER} variable.
+This intrinsic is provided in both subroutine and function forms; however,
+only one form can be used in any given program unit.
@item @emph{Standard}:
GNU extension
@@ -2399,14 +2442,14 @@ Subroutine
@item @emph{Syntax}:
@multitable @columnfractions .80
-@item @code{CALL CTIME(T,S)}.
-@item @code{S = CTIME(T)}, (not recommended).
+@item @code{CALL CTIME(TIME, RESULT)}.
+@item @code{RESULT = CTIME(TIME)}, (not recommended).
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{S}@tab The type shall be of type @code{CHARACTER}.
-@item @var{T}@tab The type shall be of type @code{INTEGER(KIND=8)}.
+@multitable @columnfractions .15 .70
+@item @var{TIME} @tab The type shall be of type @code{INTEGER(KIND=8)}.
+@item @var{RESULT} @tab The type shall be of type @code{CHARACTER}.
@end multitable
@item @emph{Return value}:
@@ -2452,7 +2495,7 @@ Unavailable time and date parameters return blanks.
@var{VALUES} is @code{INTENT(OUT)} and provides the following:
-@multitable @columnfractions .15 .30 .60
+@multitable @columnfractions .15 .30 .40
@item @tab @code{VALUE(1)}: @tab The year
@item @tab @code{VALUE(2)}: @tab The month
@item @tab @code{VALUE(3)}: @tab The day of the month
@@ -2473,7 +2516,7 @@ Subroutine
@code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{DATE} @tab (Optional) The type shall be @code{CHARACTER(8)} or larger.
@item @var{TIME} @tab (Optional) The type shall be @code{CHARACTER(10)} or larger.
@item @var{ZONE} @tab (Optional) The type shall be @code{CHARACTER(5)} or larger.
@@ -2522,7 +2565,7 @@ Elemental function
@code{RESULT = DBLE(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{INTEGER(*)}, @code{REAL(*)},
or @code{COMPLEX(*)}.
@end multitable
@@ -2568,7 +2611,7 @@ Elemental function
@code{RESULT = DCMPLX(X [, Y])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)},
or @code{COMPLEX(*)}.
@item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX(*)}.) May be
@@ -2614,7 +2657,7 @@ Elemental function
@code{RESULT = DFLOAT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -2656,7 +2699,7 @@ Inquiry function
@code{RESULT = DIGITS(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type may be @code{INTEGER(*)} or @code{REAL(*)}.
@end multitable
@@ -2700,7 +2743,7 @@ Elemental function
@code{RESULT = DIM(X, Y)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{INTEGER(*)} or @code{REAL(*)}
@item @var{Y} @tab The type shall be the same type and kind as @var{X}.
@end multitable
@@ -2721,7 +2764,7 @@ end program test_dim
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X,Y} @tab @code{INTEGER(4)} @tab F77 and later
@item @code{DDIM(X,Y)} @tab @code{REAL(8) X,Y} @tab @code{REAL(8)} @tab F77 and later
@@ -2754,7 +2797,7 @@ transformational function
@code{RESULT = DOT_PRODUCT(X, Y)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
@item @var{Y} @tab The type shall be numeric or @code{LOGICAL}, rank 1.
@end multitable
@@ -2800,7 +2843,7 @@ Elemental function
@code{RESULT = DPROD(X, Y)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL}.
@item @var{Y} @tab The type shall be @code{REAL}.
@end multitable
@@ -2842,7 +2885,7 @@ Elemental function
@code{RESULT = DREAL(Z)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{Z} @tab The type shall be @code{COMPLEX(8)}.
@end multitable
@@ -2892,7 +2935,7 @@ subroutine, and vice versa.
@var{TARRAY} and @var{RESULT} are @code{INTENT(OUT)} and provide the following:
-@multitable @columnfractions .15 .30 .60
+@multitable @columnfractions .15 .30 .40
@item @tab @code{TARRAY(1)}: @tab User time in seconds.
@item @tab @code{TARRAY(2)}: @tab System time in seconds.
@item @tab @code{RESULT}: @tab Run time since start in seconds.
@@ -2911,7 +2954,7 @@ Subroutine
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{TARRAY}@tab The type shall be @code{REAL, DIMENSION(2)}.
@item @var{RESULT}@tab The type shall be @code{REAL}.
@end multitable
@@ -2978,7 +3021,7 @@ transformational function
@code{RESULT = EOSHIFT(A, SHIFT [, BOUNDARY, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab May be any type, not scaler.
@item @var{SHIFT} @tab The type shall be @code{INTEGER}.
@item @var{BOUNDARY} @tab Same type as @var{ARRAY}.
@@ -3026,7 +3069,7 @@ Inquiry function
@code{RESULT = EPSILON(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -3065,7 +3108,7 @@ Elemental function
@code{RESULT = ERF(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -3082,7 +3125,7 @@ end program test_erf
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DERF(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -3109,7 +3152,7 @@ Elemental function
@code{RESULT = ERFC(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}, and it shall be scalar.
@end multitable
@@ -3126,7 +3169,7 @@ end program test_erfc
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DERFC(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension
@end multitable
@@ -3170,13 +3213,13 @@ GNU extension
Subroutine
@item @emph{Syntax}:
-@multitable @columnfractions .8
+@multitable @columnfractions .80
@item @code{CALL ETIME(TARRAY, RESULT)}.
@item @code{RESULT = ETIME(TARRAY)}, (not recommended).
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{TARRAY}@tab The type shall be @code{REAL, DIMENSION(2)}.
@item @var{RESULT}@tab The type shall be @code{REAL}.
@end multitable
@@ -3232,8 +3275,8 @@ Subroutine
@code{CALL EXIT([STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{STATUS} @tab The type of the argument shall be @code{INTEGER(*)}.
+@multitable @columnfractions .15 .70
+@item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind.
@end multitable
@item @emph{Return value}:
@@ -3258,6 +3301,7 @@ end program test_exit
@section @code{EXP} --- Exponential function
@cindex @code{EXP} intrinsic
@cindex @code{DEXP} intrinsic
+@cindex @code{CEXP} intrinsic
@cindex @code{ZEXP} intrinsic
@cindex @code{CDEXP} intrinsic
@cindex exponential
@@ -3276,7 +3320,7 @@ Elemental function
@code{RESULT = EXP(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -3293,7 +3337,7 @@ end program test_exp
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DEXP(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F77 and later
@item @code{CEXP(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab F77 and later
@@ -3324,7 +3368,7 @@ Elemental function
@code{RESULT = EXPONENT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -3344,6 +3388,7 @@ end program test_exponent
@end table
+
@node FDATE
@section @code{FDATE} --- Get the current time as a string
@cindex @code{FDATE} intrinsic
@@ -3376,7 +3421,7 @@ Subroutine
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{DATE}@tab The type shall be of type @code{CHARACTER}.
@end multitable
@@ -3399,6 +3444,8 @@ end program test_fdate
@end smallexample
@end table
+
+
@node FLOAT
@section @code{FLOAT} --- Convert integer to default real
@@ -3419,7 +3466,7 @@ Elemental function
@code{RESULT = FLOAT(I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -3467,7 +3514,7 @@ Non-elemental subroutine
@code{CALL FGET(C [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{C} @tab The type shall be @code{CHARACTER}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
Returns 0 on success, -1 on end-of-file, and a
@@ -3496,6 +3543,7 @@ END PROGRAM
@end table
+
@node FGETC
@section @code{FGETC} --- Read a single character in stream mode
@cindex @code{FGETC} intrinsic
@@ -3523,7 +3571,7 @@ Non-elemental subroutine
@code{CALL FGETC(UNIT, C [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{UNIT} @tab The type shall be @code{INTEGER}.
@item @var{C} @tab The type shall be @code{CHARACTER}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. Returns 0 on success,
@@ -3571,7 +3619,7 @@ Elemental function
@code{RESULT = FLOOR(X [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -3612,13 +3660,13 @@ argument, all units are flushed, otherwise just the unit specified.
GNU extension
@item @emph{Class}:
-non-elemental subroutine
+Non-elemental subroutine
@item @emph{Syntax}:
@code{CALL FLUSH(UNIT)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}.
@end multitable
@@ -3644,13 +3692,13 @@ open Fortran I/O unit @code{UNIT}.
GNU extension
@item @emph{Class}:
-non-elemental function
+Non-elemental function
@item @emph{Syntax}:
@code{RESULT = FNUM(UNIT)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{UNIT} @tab The type shall be @code{INTEGER}.
@end multitable
@@ -3698,7 +3746,7 @@ Non-elemental subroutine
@code{CALL FPUT(C [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{C} @tab The type shall be @code{CHARACTER}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. Returns 0 on success,
-1 on end-of-file and a system specific positive error code otherwise.
@@ -3748,7 +3796,7 @@ Non-elemental subroutine
@code{CALL FPUTC(UNIT, C [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{UNIT} @tab The type shall be @code{INTEGER}.
@item @var{C} @tab The type shall be @code{CHARACTER}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. Returns 0 on success,
@@ -3795,7 +3843,7 @@ Elemental function
@code{Y = FRACTION(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be a @code{REAL}.
@end multitable
@@ -3837,10 +3885,10 @@ GNU extension
Subroutine
@item @emph{Syntax}:
-@code{FREE(PTR)}
+@code{CALL FREE(PTR)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the
location of the memory that should be de-allocated.
@end multitable
@@ -3857,6 +3905,33 @@ See @code{MALLOC} for an example.
+@node FSEEK
+@section @code{FSEEK} --- Low level file positioning subroutine
+@cindex @code{FSEEK} intrinsic
+@cindex file system operations
+
+Not yet implemented in GNU Fortran.
+
+@table @asis
+@item @emph{Description}:
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Subroutine
+
+@item @emph{Syntax}:
+@item @emph{Arguments}:
+@item @emph{Return value}:
+@item @emph{Example}:
+@item @emph{Specific names}:
+@item @emph{See also}:
+@uref{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19292, g77 features lacking in gfortran}
+
+@end table
+
+
@node FSTAT
@section @code{FSTAT} --- Get file status
@@ -3880,7 +3955,7 @@ Non-elemental subroutine
@code{CALL FSTAT(UNIT, BUFF [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{UNIT} @tab An open I/O unit number of type @code{INTEGER}.
@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
@@ -3896,34 +3971,6 @@ To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT}
-@node FSEEK
-@section @code{FSEEK} --- Low level file positioning subroutine
-@cindex @code{FSEEK} intrinsic
-@cindex file system operations
-
-Not yet implemented in GNU Fortran.
-
-@table @asis
-@item @emph{Description}:
-
-@item @emph{Standard}:
-GNU extension
-
-@item @emph{Class}:
-Subroutine
-
-@item @emph{Syntax}:
-@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
-@item @emph{See also}:
-@uref{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19292, g77 features lacking in gfortran}
-
-@end table
-
-
-
@node FTELL
@section @code{FTELL} --- Current stream position
@cindex @code{FTELL} intrinsic
@@ -3948,7 +3995,7 @@ Subroutine, function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{OFFSET} @tab Shall of type @code{INTEGER}.
@item @var{UNIT} @tab Shall of type @code{INTEGER}.
@end multitable
@@ -3973,6 +4020,44 @@ END PROGRAM
+@node GERROR
+@section @code{GERROR} --- Get last system error message
+@cindex @code{GERROR} intrinsic
+
+@table @asis
+@item @emph{Description}:
+Returns the system error message corresponding to the last system error.
+This resembles the functionality of @code{strerror(3)} in C.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Subroutine
+
+@item @emph{Syntax}:
+@code{CALL GERROR(RESULT)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{RESULT} @tab Shall of type @code{CHARACTER(*)}.
+@end multitable
+
+@item @emph{Example}:
+@smallexample
+PROGRAM test_gerror
+ CHARACTER(len=100) :: msg
+ CALL gerror(msg)
+ WRITE(*,*) msg
+END PROGRAM
+@end smallexample
+
+@item @emph{See also}:
+@ref{IERRNO}, @ref{PERROR}
+@end table
+
+
+
@node GETARG
@section @code{GETARG} --- Get command line arguments
@cindex @code{GETARG} intrinsic
@@ -3998,8 +4083,8 @@ Subroutine
@code{CALL GETARG(N, ARG)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{N} @tab Shall of type @code{INTEGER(4)}, @math{@var{N} \geq 0}
+@multitable @columnfractions .15 .70
+@item @var{N} @tab Shall be of type @code{INTEGER(4)}, @math{@var{N} \geq 0}
@item @var{ARG} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4052,7 +4137,7 @@ Subroutine
@code{CALL GET_COMMAND(CMD)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{CMD} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4095,8 +4180,8 @@ Subroutine
@code{CALL GET_COMMAND_ARGUMENT(N, ARG)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{N} @tab Shall of type @code{INTEGER(4)}, @math{@var{N} \geq 0}
+@multitable @columnfractions .15 .70
+@item @var{N} @tab Shall be of type @code{INTEGER(4)}, @math{@var{N} \geq 0}
@item @var{ARG} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4150,7 +4235,7 @@ Non-elemental subroutine.
@code{CALL GETCWD(CWD [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{CWD} @tab The type shall be @code{CHARACTER(*)}.
@item @var{STATUS} @tab (Optional) status flag. Returns 0 on success,
a system specific and non-zero error code otherwise.
@@ -4195,7 +4280,7 @@ Subroutine
@code{CALL GETENV(ENVVAR, VALUE)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ENVVAR} @tab Shall be of type @code{CHARACTER(*)}.
@item @var{VALUE} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4239,7 +4324,7 @@ Subroutine
@code{CALL GET_ENVIRONMENT_VARIABLE(ENVVAR, VALUE)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ENVVAR} @tab Shall be of type @code{CHARACTER(*)}.
@item @var{VALUE} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4311,7 +4396,7 @@ Subroutine
@code{CALL GETLOG(LOGIN)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{LOGIN} @tab Shall be of type @code{CHARACTER(*)}.
@end multitable
@@ -4427,7 +4512,7 @@ Subroutine
@code{CALL GMTIME(STIME, TARRAY)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STIME} @tab An @code{INTEGER(*)} scalar expression
corresponding to a system time, with
@code{INTENT(IN)}.
@@ -4483,7 +4568,7 @@ Subroutine, function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{NAME} @tab Shall of type @code{CHARACTER(*)}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
Returns 0 on success, or a system specific error
@@ -4518,8 +4603,8 @@ Elemental function
@code{RESULT = HUGE(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL} or @code{INTEGER}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}.
@end multitable
@item @emph{Return value}:
@@ -4557,7 +4642,7 @@ Elemental function
@code{RESULT = IACHAR(C)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
@end multitable
@@ -4573,12 +4658,17 @@ program test_iachar
end program test_iachar
@end smallexample
+@item @emph{Note}:
+See @ref{ICHAR} for a discussion of converting between numerical values
+and formatted string representations.
+
@item @emph{See also}:
@ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
@end table
+
@node IAND
@section @code{IAND} --- Bitwise logical and
@cindex @code{IAND} intrinsic
@@ -4598,7 +4688,7 @@ Elemental function
@code{RESULT = IAND(I, J)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
kind as @var{I}. (As a GNU extension, different kinds are also
@@ -4688,7 +4778,7 @@ Elemental function
@code{RESULT = IBCLR(I, POS)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -4727,7 +4817,7 @@ Elemental function
@code{RESULT = IBITS(I, POS, LEN)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
@item @var{LEN} @tab The type shall be @code{INTEGER(*)}.
@@ -4763,7 +4853,7 @@ Elemental function
@code{RESULT = IBSET(I, POS)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -4801,7 +4891,7 @@ Elemental function
@code{RESULT = ICHAR(C)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)}
@end multitable
@@ -4818,21 +4908,25 @@ end program test_ichar
@end smallexample
@item @emph{Note}:
-No intrinsic exists to convert a printable character string to a numerical
-value. For example, there is no intrinsic that, given the @code{CHARACTER}
-value 154, returns an @code{INTEGER} or @code{REAL} value with the
-value 154.
-
-Instead, you can use internal-file I/O to do this kind of conversion. For
+No intrinsic exists to convert between a numeric value and a formatted
+character string representation -- for instance, given the
+@code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or
+@code{REAL} value with the value 154, or vice versa. Instead, this
+functionality is provided by internal-file I/O, as in the following
example:
@smallexample
program read_val
integer value
- character(len=10) string
-
+ character(len=10) string, string2
string = '154'
+
+ ! Convert a string to a numeric value
read (string,'(I10)') value
print *, value
+
+ ! Convert a value to a formatted string
+ write (string2,'(I10)') value
+ print *, string2
end program read_val
@end smallexample
@@ -4864,7 +4958,7 @@ Subroutine
@code{CALL IDATE(TARRAY)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{TARRAY} @tab The type shall be @code{INTEGER, DIMENSION(3)} and
the kind shall be the default integer kind.
@end multitable
@@ -4906,7 +5000,7 @@ Elemental function
@code{RESULT = IEOR(I, J)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
kind as @var{I}. (As a GNU extension, different kinds are also
@@ -4977,7 +5071,7 @@ Elemental function
@code{RESULT = INDEX(STRING, SUBSTRING [, BACK])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING} @tab Shall be a scalar @code{CHARACTER(*)}, with
@code{INTENT(IN)}
@item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER(*)}, with
@@ -5013,11 +5107,11 @@ F77 and later
Elemental function
@item @emph{Syntax}:
-@item @code{RESULT = INT(X [, KIND))}
+@code{RESULT = INT(A [, KIND))}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{INTEGER(*)},
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be of type @code{INTEGER(*)},
@code{REAL(*)}, or @code{COMPLEX(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -5030,13 +5124,13 @@ the following rules:
@table @asis
@item (A)
-If @var{X} is of type @code{INTEGER(*)}, @code{INT(X) = X}
+If @var{A} is of type @code{INTEGER(*)}, @code{INT(A) = A}
@item (B)
-If @var{X} is of type @code{REAL(*)} and @math{|X| < 1}, @code{INT(X)} equals @var{0}.
-If @math{|X| \geq 1}, then @code{INT(X)} equals the largest integer that does not exceed
-the range of @var{X} and whose sign is the same as the sign of @var{X}.
+If @var{A} is of type @code{REAL(*)} and @math{|A| < 1}, @code{INT(A)} equals @code{0}.
+If @math{|A| \geq 1}, then @code{INT(A)} equals the largest integer that does not exceed
+the range of @var{A} and whose sign is the same as the sign of @var{A}.
@item (C)
-If @var{X} is of type @code{COMPLEX(*)}, rule B is applied to the real part of X.
+If @var{A} is of type @code{COMPLEX(*)}, rule B is applied to the real part of @var{A}.
@end table
@item @emph{Example}:
@@ -5050,13 +5144,86 @@ end program
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
-@item @code{IFIX(X)} @tab @code{REAL(4) X} @tab @code{INTEGER} @tab F77 and later
-@item @code{IDINT(X)} @tab @code{REAL(8) X} @tab @code{INTEGER} @tab F77 and later
+@item @code{IFIX(A)} @tab @code{REAL(4) A} @tab @code{INTEGER} @tab F77 and later
+@item @code{IDINT(A)} @tab @code{REAL(8) A} @tab @code{INTEGER} @tab F77 and later
+@end multitable
+
+@comment @item @emph{See also}:
+@end table
+
+
+
+@node INT2
+@section @code{INT2} --- Convert to 16-bit integer type
+@cindex @code{INT2} intrinsic
+@cindex @code{SHORT} intrinsic
+@cindex conversion function (integer)
+
+@table @asis
+@item @emph{Description}:
+Convert to a @code{KIND=2} integer type. This is equivalent to the
+standard @code{INT} intrinsic with an optional argument of
+@code{KIND=2}, and is only included for backwards compatibility.
+
+The @code{SHORT} intrinsic is equivalent to @code{INT2}.
+
+@item @emph{Standard}:
+GNU extension.
+
+@item @emph{Class}:
+Elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = INT2(A)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{COMPLEX(*)}.
@end multitable
+@item @emph{Return value}:
+The return value is a @code{INTEGER(2)} variable.
+
+@comment @item @emph{See also}:
+@ref{INT}, @ref{INT8}, @ref{LONG}
+@end table
+
+
+
+@node INT8
+@section @code{INT8} --- Convert to 64-bit integer type
+@cindex @code{INT8} intrinsic
+@cindex conversion function (integer)
+
+@table @asis
+@item @emph{Description}:
+Convert to a @code{KIND=8} integer type. This is equivalent to the
+standard @code{INT} intrinsic with an optional argument of
+@code{KIND=8}, and is only included for backwards compatibility.
+
+@item @emph{Standard}:
+GNU extension.
+
+@item @emph{Class}:
+Elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = INT8(A)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{COMPLEX(*)}.
+@end multitable
+
+@item @emph{Return value}:
+The return value is a @code{INTEGER(8)} variable.
+
@comment @item @emph{See also}:
+@ref{INT}, @ref{INT2}, @ref{LONG}
@end table
@@ -5081,7 +5248,7 @@ Elemental function
@code{RESULT = IEOR(I, J)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
kind as @var{I}. (As a GNU extension, different kinds are also
@@ -5099,7 +5266,6 @@ the larger argument.)
-
@node IRAND
@section @code{IRAND} --- Integer pseudo-random number
@cindex @code{IRAND} intrinsic
@@ -5118,14 +5284,14 @@ it is used as a new seed with @code{SRAND}.
GNU extension
@item @emph{Class}:
-non-elemental function
+Non-elemental function
@item @emph{Syntax}:
@code{RESULT = IRAND(FLAG)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{FLAG} @tab shall be a scalar @code{INTEGER} of kind 4.
+@multitable @columnfractions .15 .70
+@item @var{FLAG} @tab Shall be a scalar @code{INTEGER} of kind 4.
@end multitable
@item @emph{Return value}:
@@ -5146,6 +5312,47 @@ end program test_irand
+@node ISATTY
+@section @code{ISATTY} --- Whether a unit is a terminal device.
+@cindex @code{ISATTY} intrinsic
+
+@table @asis
+@item @emph{Description}:
+Determine whether a unit is connected to a terminal device.
+
+@item @emph{Standard}:
+GNU extension.
+
+@item @emph{Class}:
+Non-elemental function.
+
+@item @emph{Syntax}:
+@code{RESULT = ISATTY(UNIT)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{UNIT} @tab Shall be a scalar @code{INTEGER(*)}.
+@end multitable
+
+@item @emph{Return value}:
+Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal
+device, @code{.FALSE.} otherwise.
+
+@item @emph{Example}:
+@smallexample
+PROGRAM test_isatty
+ INTEGER(kind=1) :: unit
+ DO unit = 1, 10
+ write(*,*) isatty(unit=unit)
+ END DO
+END PROGRAM
+@end smallexample
+@item @emph{See also}:
+@ref{TTYNAM}
+@end table
+
+
+
@node ISHFT
@section @code{ISHFT} --- Shift bits
@cindex @code{ISHFT} intrinsic
@@ -5171,7 +5378,7 @@ Elemental function
@code{RESULT = ISHFT(I, SHIFT)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -5186,7 +5393,6 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
-
@node ISHFTC
@section @code{ISHFTC} --- Shift bits circularly
@cindex @code{ISHFTC} intrinsic
@@ -5213,7 +5419,7 @@ Elemental function
@code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
@item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER(*)};
@@ -5252,7 +5458,7 @@ Subroutine
@code{CALL ITIME(TARRAY)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{TARRAY} @tab The type shall be @code{INTEGER, DIMENSION(3)}
and the kind shall be the default integer kind.
@end multitable
@@ -5292,7 +5498,7 @@ Subroutine
@code{CALL KILL(PID, SIGNAL [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PID} @tab Shall be a scalar @code{INTEGER}, with
@code{INTENT(IN)}
@item @var{SIGNAL} @tab Shall be a scalar @code{INTEGER}, with
@@ -5326,7 +5532,7 @@ Inquiry function
@code{K = KIND(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER},
@code{REAL}, @code{COMPLEX} or @code{CHARACTER}.
@end multitable
@@ -5368,7 +5574,7 @@ Inquiry function
@code{RESULT = LBOUND(ARRAY [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array, of any type.
@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER(*)}.
@end multitable
@@ -5408,7 +5614,7 @@ Inquiry function
@code{L = LEN(STRING)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING} @tab Shall be a scalar or array of type
@code{CHARACTER(*)}, with @code{INTENT(IN)}
@end multitable
@@ -5440,7 +5646,7 @@ Elemental function
@code{RESULT = LEN_TRIM(STRING)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER(*)},
with @code{INTENT(IN)}
@end multitable
@@ -5485,7 +5691,7 @@ Elemental function
@code{RESULT = LGE(STRING_A, STRING_B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
@end multitable
@@ -5531,7 +5737,7 @@ Elemental function
@code{RESULT = LGT(STRING_A, STRING_B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
@end multitable
@@ -5560,17 +5766,23 @@ names are ignored. If the @var{STATUS} argument is supplied, it
contains 0 on success or a nonzero error code upon return; see
@code{link(2)}.
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL LINK(PATH1, PATH2 [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL LINK(PATH1, PATH2 [, STATUS])}
+@item @code{STATUS = LINK(PATH1, PATH2)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
@@ -5613,7 +5825,7 @@ Elemental function
@code{RESULT = LLE(STRING_A, STRING_B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
@end multitable
@@ -5659,7 +5871,7 @@ Elemental function
@code{RESULT = LLT(STRING_A, STRING_B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
@end multitable
@@ -5694,7 +5906,7 @@ Elemental function
@code{RESULT = LNBLNK(STRING)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER(*)},
with @code{INTENT(IN)}
@end multitable
@@ -5727,7 +5939,7 @@ Inquiry function
@code{RESULT = LOC(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab Variable of any type.
@end multitable
@@ -5773,7 +5985,7 @@ Elemental function
@code{RESULT = LOG(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -5793,7 +6005,7 @@ end program test_log
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@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
@@ -5826,7 +6038,7 @@ Elemental function
@code{RESULT = LOG10(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -5844,7 +6056,7 @@ end program test_log10
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{ALOG10(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab F95 and later
@item @code{DLOG10(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F95 and later
@@ -5872,7 +6084,7 @@ Elemental function
@code{RESULT = LOGICAL(L [, KIND])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{L} @tab The type shall be @code{LOGICAL(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -5890,6 +6102,41 @@ kind corresponding to @var{KIND}, or of the default logical kind if
+@node LONG
+@section @code{LONG} --- Convert to integer type
+@cindex @code{LONG} intrinsic
+@cindex conversion function (integer)
+
+@table @asis
+@item @emph{Description}:
+Convert to a @code{KIND=4} integer type, which is the same size as a C
+@code{long} integer. This is equivalent to the standard @code{INT}
+intrinsic with an optional argument of @code{KIND=4}, and is only
+included for backwards compatibility.
+
+@item @emph{Standard}:
+GNU extension.
+
+@item @emph{Class}:
+Elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = LONG(A)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{COMPLEX(*)}.
+@end multitable
+
+@item @emph{Return value}:
+The return value is a @code{INTEGER(4)} variable.
+
+@comment @item @emph{See also}:
+@ref{INT}, @ref{INT2}, @ref{INT8}
+@end table
+
+
@node LSHIFT
@section @code{LSHIFT} --- Left shift bits
@@ -5917,7 +6164,7 @@ Elemental function
@code{RESULT = LSHIFT(I, SHIFT)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -5932,6 +6179,7 @@ The return value is of type @code{INTEGER(*)} and of the same kind as
@end table
+
@node LSTAT
@section @code{LSTAT} --- Get file status
@cindex @code{LSTAT} intrinsic
@@ -5954,7 +6202,7 @@ Non-elemental subroutine
@code{CALL LSTAT(FILE, BUFF [, STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{FILE} @tab The type shall be @code{CHARACTER(*)}, a valid path within the file system.
@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
@@ -5991,7 +6239,7 @@ Subroutine
@code{CALL LTIME(STIME, TARRAY)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STIME} @tab An @code{INTEGER(*)} scalar expression
corresponding to a system time, with
@code{INTENT(IN)}.
@@ -6041,13 +6289,13 @@ using Fortran 95 pointers, the memory allocation intrinsic is
GNU extension
@item @emph{Class}:
-non-elemental function
+Non-elemental function
@item @emph{Syntax}:
@code{PTR = MALLOC(SIZE)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{SIZE} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -6108,7 +6356,7 @@ Transformational function
@code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{MATRIX_A} @tab An array of @code{INTEGER(*)},
@code{REAL(*)}, @code{COMPLEX(*)}, or
@code{LOGICAL(*)} type, with a rank of
@@ -6136,6 +6384,11 @@ for the @code{*} or @code{.AND.} operators.
@node MAX
@section @code{MAX} --- Maximum value of an argument list
@cindex @code{MAX} intrinsic
+@cindex @code{MAX0} intrinsic
+@cindex @code{AMAX0} intrinsic
+@cindex @code{MAX1} intrinsic
+@cindex @code{AMAX1} intrinsic
+@cindex @code{DMAX1} intrinsic
@table @asis
@item @emph{Description}:
@@ -6151,7 +6404,7 @@ Elemental function
@code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{A1} @tab The type shall be @code{INTEGER(*)} or
@code{REAL(*)}.
@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
@@ -6165,7 +6418,7 @@ The return value corresponds to the maximum value among the arguments,
and has the same type and kind as the first argument.
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{MAX0(I)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab F77 and later
@item @code{AMAX0(I)} @tab @code{INTEGER(4) I} @tab @code{REAL(MAX(X))} @tab F77 and later
@@ -6202,8 +6455,8 @@ Inquiry function
@code{RESULT = MAXEXPONENT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
@end multitable
@item @emph{Return value}:
@@ -6255,7 +6508,7 @@ Transformational function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
@code{REAL(*)}, or @code{CHARACTER(*)}.
@item @var{DIM} @tab (Optional) Shall be a scalar of type
@@ -6310,7 +6563,7 @@ Transformational function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
@code{REAL(*)}, or @code{CHARACTER(*)}.
@item @var{DIM} @tab (Optional) Shall be a scalar of type
@@ -6334,6 +6587,84 @@ cases, the result is of the same type and kind as @var{ARRAY}.
+@node MCLOCK
+@section @code{MCLOCK} --- Time function
+@cindex @code{MCLOCK} intrinsic
+@cindex time, clock ticks
+@cindex clock ticks
+
+@table @asis
+@item @emph{Description}:
+Returns the number of clock ticks since the start of the process, based
+on the UNIX function @code{clock(3)}.
+
+This intrinsic is not fully portable, such as to systems with 32-bit
+@code{INTEGER} types but supporting times wider than 32 bits. Therefore,
+the values returned by this intrinsic might be, or become, negative, or
+numerically less than previous values, during a single run of the
+compiled program.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Non-elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = MCLOCK()}
+
+@item @emph{Return value}:
+The return value is a scalar of type @code{INTEGER(4)}, equal to the
+number of clock ticks since the start of the process, or @code{-1} if
+the system does not support @code{clock(3)}.
+
+@item @emph{See also}:
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME}
+
+@end table
+
+
+
+@node MCLOCK8
+@section @code{MCLOCK8} --- Time function (64-bit)
+@cindex @code{MCLOCK8} intrinsic
+@cindex time, current
+@cindex current time
+
+@table @asis
+@item @emph{Description}:
+Returns the number of clock ticks since the start of the process, based
+on the UNIX function @code{clock(3)}.
+
+@emph{Warning:} this intrinsic does not increase the range of the timing
+values over that returned by @code{clock(3)}. On a system with a 32-bit
+@code{clock(3)}, @code{MCLOCK8()} will return a 32-bit value, even though
+it is converted to a 64-bit @code{INTEGER(8)} value. That means
+overflows of the 32-bit value can still occur. Therefore, the values
+returned by this intrinsic might be or become negative or numerically
+less than previous values during a single run of the compiled program.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Non-elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = MCLOCK8()}
+
+@item @emph{Return value}:
+The return value is a scalar of type @code{INTEGER(8)}, equal to the
+number of clock ticks since the start of the process, or @code{-1} if
+the system does not support @code{clock(3)}.
+
+@item @emph{See also}:
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
+
+@end table
+
+
+
@node MERGE
@section @code{MERGE} --- Merge variables
@cindex @code{MERGE} intrinsic
@@ -6354,7 +6685,7 @@ Elemental function
@code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{TSOURCE} @tab May be of any type.
@item @var{FSOURCE} @tab Shall be of the same type and type parameters
as @var{TSOURCE}.
@@ -6371,6 +6702,11 @@ The result is of the same type and type parameters as @var{TSOURCE}.
@node MIN
@section @code{MIN} --- Minimum value of an argument list
@cindex @code{MIN} intrinsic
+@cindex @code{MIN0} intrinsic
+@cindex @code{AMIN0} intrinsic
+@cindex @code{MIN1} intrinsic
+@cindex @code{AMIN1} intrinsic
+@cindex @code{DMIN1} intrinsic
@table @asis
@item @emph{Description}:
@@ -6386,7 +6722,7 @@ Elemental function
@code{RESULT = MIN(A1, A2 [, A3, ...])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{A1} @tab The type shall be @code{INTEGER(*)} or
@code{REAL(*)}.
@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
@@ -6400,7 +6736,7 @@ The return value corresponds to the maximum value among the arguments,
and has the same type and kind as the first argument.
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{MIN0(I)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab F77 and later
@item @code{AMIN0(I)} @tab @code{INTEGER(4) I} @tab @code{REAL(MIN(X))} @tab F77 and later
@@ -6413,6 +6749,8 @@ and has the same type and kind as the first argument.
@ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
@end table
+
+
@node MINEXPONENT
@section @code{MINEXPONENT} --- Minimum exponent of a real kind
@cindex @code{MINEXPONENT} intrinsic
@@ -6434,8 +6772,8 @@ Inquiry function
@code{RESULT = MINEXPONENT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
@end multitable
@item @emph{Return value}:
@@ -6479,7 +6817,7 @@ Transformational function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
@code{REAL(*)}, or @code{CHARACTER(*)}.
@item @var{DIM} @tab (Optional) Shall be a scalar of type
@@ -6534,7 +6872,7 @@ Transformational function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
@code{REAL(*)}, or @code{CHARACTER(*)}.
@item @var{DIM} @tab (Optional) Shall be a scalar of type
@@ -6581,9 +6919,9 @@ Elemental function
@code{RESULT = MOD(A, P)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{A} @tab shall be a scalar of type @code{INTEGER} or @code{REAL}
-@item @var{P} @tab shall be a scalar of the same type as @var{A} and not
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
+@item @var{P} @tab Shall be a scalar of the same type as @var{A} and not
equal to zero
@end multitable
@@ -6612,7 +6950,7 @@ end program test_mod
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Arguments @tab Return type @tab Standard
@item @code{AMOD(A,P)} @tab @code{REAL(4)} @tab @code{REAL(4)} @tab F95 and later
@item @code{DMOD(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab F95 and later
@@ -6640,9 +6978,9 @@ Elemental function
@code{RESULT = MODULO(A, P)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{A} @tab shall be a scalar of type @code{INTEGER} or @code{REAL}
-@item @var{P} @tab shall be a scalar of the same type and kind as @var{A}
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
+@item @var{P} @tab Shall be a scalar of the same type and kind as @var{A}
@end multitable
@item @emph{Return value}:
@@ -6696,7 +7034,7 @@ Subroutine
@code{CALL MOVE_ALLOC(SRC, DEST)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{SRC} @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
of any type and kind.
@item @var{DEST} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
@@ -6746,7 +7084,7 @@ Elemental function
@code{RESULT = MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{FROM} @tab The type shall be @code{INTEGER(*)}.
@item @var{FROMPOS} @tab The type shall be @code{INTEGER(*)}.
@item @var{LEN} @tab The type shall be @code{INTEGER(*)}.
@@ -6786,8 +7124,8 @@ Elemental function
@code{RESULT = NEAREST(X, S)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
@item @var{S} @tab (Optional) shall be of type @code{REAL} and
not equal to zero.
@end multitable
@@ -6831,7 +7169,7 @@ Elemental function
@code{RESULT = NEW_LINE(C)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{C} @tab The argument shall be a scalar or array of the
type @code{CHARACTER}.
@end multitable
@@ -6871,7 +7209,7 @@ Elemental function
@code{RESULT = NINT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be @code{REAL}.
@end multitable
@@ -6892,7 +7230,7 @@ end program test_nint
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .33 .33 .33
+@multitable @columnfractions .25 .25 .25
@item Name @tab Argument @tab Standard
@item @code{IDNINT(X)} @tab @code{REAL(8)} @tab F95 and later
@end multitable
@@ -6903,6 +7241,7 @@ end program test_nint
@end table
+
@node NOT
@section @code{NOT} --- Logical negation
@cindex @code{NOT} intrinsic
@@ -6922,7 +7261,7 @@ Elemental function
@code{RESULT = NOT(I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -6937,7 +7276,6 @@ argument.
-
@node NULL
@section @code{NULL} --- Function that returns an disassociated pointer
@cindex @code{NULL} intrinsic
@@ -6963,7 +7301,6 @@ Transformational function
-
@node OR
@section @code{OR} --- Bitwise logical OR
@cindex @code{OR} intrinsic
@@ -6987,7 +7324,7 @@ Non-elemental function
@code{RESULT = OR(X, Y)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
@item @var{Y} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
@end multitable
@@ -7014,7 +7351,6 @@ F95 elemental function: @ref{IOR}
-
@node PACK
@section @code{PACK} --- Pack an array into an array of rank one
@cindex @code{PACK} intrinsic
@@ -7061,7 +7397,7 @@ Subroutine
@code{CALL PERROR(STRING)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{STRING} @tab A scalar of default @code{CHARACTER} type.
@end multitable
@@ -7091,8 +7427,8 @@ Inquiry function
@code{RESULT = PRECISION(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL} or @code{COMPLEX}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
@end multitable
@item @emph{Return value}:
@@ -7182,7 +7518,7 @@ Inquiry function
@code{RESULT = RADIX(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
@end multitable
@@ -7248,8 +7584,8 @@ Non-elemental function
@code{RESULT = RAND(FLAG)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{FLAG} @tab shall be a scalar @code{INTEGER} of kind 4.
+@multitable @columnfractions .15 .70
+@item @var{FLAG} @tab Shall be a scalar @code{INTEGER} of kind 4.
@end multitable
@item @emph{Return value}:
@@ -7343,8 +7679,8 @@ Inquiry function
@code{RESULT = RANGE(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL} or @code{COMPLEX}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}.
@end multitable
@item @emph{Return value}:
@@ -7376,14 +7712,14 @@ F77 and later
Elemental function
@item @emph{Syntax}:
-@multitable @columnfractions .30 .80
+@multitable @columnfractions .80
@item @code{RESULT = REAL(X [, KIND])}
@item @code{RESULT = REALPART(Z)}
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be @code{INTEGER(*)}, @code{REAL(*)}, or
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be @code{INTEGER(*)}, @code{REAL(*)}, or
@code{COMPLEX(*)}.
@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
expression indicating the kind parameter of
@@ -7436,17 +7772,23 @@ names are ignored. If the @var{STATUS} argument is supplied, it
contains 0 on success or a nonzero error code upon return; see
@code{rename(2)}.
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL RENAME(PATH1, PATH2 [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL RENAME(PATH1, PATH2 [, STATUS])}
+@item @code{STATUS = RENAME(PATH1, PATH2)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
@@ -7483,7 +7825,6 @@ Transformational function
-
@node RESHAPE
@section @code{RESHAPE} --- Function to reshape an array
@cindex @code{RESHAPE} intrinsic
@@ -7528,8 +7869,8 @@ Elemental function
@code{RESULT = RRSPACING(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
@end multitable
@item @emph{Return value}:
@@ -7567,7 +7908,7 @@ Elemental function
@code{RESULT = RSHIFT(I, SHIFT)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
@end multitable
@@ -7601,7 +7942,7 @@ Elemental function
@code{RESULT = SCALE(X, I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type of the argument shall be a @code{REAL}.
@item @var{I} @tab The type of the argument shall be a @code{INTEGER}.
@end multitable
@@ -7622,6 +7963,7 @@ end program test_scale
@end table
+
@node SCAN
@section @code{SCAN} --- Scan a string for the presence of a set of characters
@cindex @code{SCAN} intrinsic
@@ -7646,7 +7988,6 @@ Elemental function
-
@node SECNDS
@section @code{SECNDS} --- Time function
@cindex @code{SECNDS} intrinsic
@@ -7664,16 +8005,15 @@ use is discouraged.
GNU extension
@item @emph{Class}:
-function
+Non-elemental function
@item @emph{Syntax}:
@code{RESULT = SECNDS (X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item Name @tab Type
-@item @var{T} @tab REAL(4)
-@item @var{X} @tab REAL(4)
+@multitable @columnfractions .15 .70
+@item @var{T} @tab Shall be of type @code{REAL(4)}.
+@item @var{X} @tab Shall be of type @code{REAL(4)}.
@end multitable
@item @emph{Return value}:
@@ -7695,6 +8035,50 @@ end program test_secnds
+@node SECOND
+@section @code{SECOND} --- CPU time function
+@cindex @code{SECOND} intrinsic
+@cindex time, elapsed
+@cindex elapsed time
+
+@table @asis
+@item @emph{Description}:
+Returns a @code{REAL(4)} value representing the elapsed CPU time in
+seconds. This provides the same functionality as the standard
+@code{CPU_TIME} intrinsic, and is only included for backwards
+compatibility.
+
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Subroutine, non-elemental function
+
+@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{CALL SECOND(TIME)}
+@item @code{TIME = SECOND()}
+@end multitable
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{TIME} @tab Shall be of type @code{REAL(4)}.
+@end multitable
+
+@item @emph{Return value}:
+In either syntax, @var{TIME} is set to the process's current runtime in
+seconds.
+
+@item @emph{See also}:
+@ref{CPU_TIME}
+
+@end table
+
+
+
@node SELECTED_INT_KIND
@section @code{SELECTED_INT_KIND} --- Choose integer kind
@cindex @code{SELECTED_INT_KIND} intrinsic
@@ -7717,8 +8101,8 @@ Transformational function
@code{RESULT = SELECTED_INT_KIND(I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{I} @tab shall be a scalar and of type @code{INTEGER}.
+@multitable @columnfractions .15 .70
+@item @var{I} @tab Shall be a scalar and of type @code{INTEGER}.
@end multitable
@item @emph{Example}:
@@ -7761,7 +8145,7 @@ Transformational function
@code{RESULT = SELECTED_REAL_KIND(P, R)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
@item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}.
@end multitable
@@ -7822,9 +8206,9 @@ Elemental function
@code{RESULT = SET_EXPONENT(X, I)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
-@item @var{I} @tab shall be of type @code{INTEGER}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
+@item @var{I} @tab Shall be of type @code{INTEGER}.
@end multitable
@item @emph{Return value}:
@@ -7892,9 +8276,9 @@ Elemental function
@code{RESULT = SIGN(A, B)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{A} @tab shall be a scalar of type @code{INTEGER} or @code{REAL}
-@item @var{B} @tab shall be a scalar of the same type and kind as @var{A}
+@multitable @columnfractions .15 .70
+@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL}
+@item @var{B} @tab Shall be a scalar of the same type and kind as @var{A}
@end multitable
@item @emph{Return value}:
@@ -7916,7 +8300,7 @@ end program test_sign
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Arguments @tab Return type @tab Standard
@item @code{ISIGN(A,P)} @tab @code{INTEGER(4)} @tab @code{INTEGER(4)} @tab f95, gnu
@item @code{DSIGN(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab f95, gnu
@@ -7945,7 +8329,7 @@ is supplied, it is set to the value returned by @code{signal(2)}.
GNU extension
@item @emph{Class}:
-subroutine, non-elemental function
+Subroutine, non-elemental function
@item @emph{Syntax}:
@multitable @columnfractions .80
@@ -7954,8 +8338,8 @@ subroutine, non-elemental function
@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{NUMBER} @tab shall be a scalar integer, with @code{INTENT(IN)}
+@multitable @columnfractions .15 .70
+@item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)}
@item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or
@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar.
@code{INTEGER}. It is @code{INTENT(IN)}.
@@ -7986,6 +8370,7 @@ end program test_signal
@section @code{SIN} --- Sine function
@cindex @code{SIN} intrinsic
@cindex @code{DSIN} intrinsic
+@cindex @code{CSIN} intrinsic
@cindex @code{ZSIN} intrinsic
@cindex @code{CDSIN} intrinsic
@cindex trigonometric functions
@@ -8004,7 +8389,7 @@ Elemental function
@code{RESULT = SIN(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -8021,7 +8406,7 @@ end program test_sin
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@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
@@ -8055,7 +8440,7 @@ Elemental function
@code{RESULT = SINH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -8071,7 +8456,7 @@ end program test_sinh
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DSINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F95 and later
@end multitable
@@ -8124,7 +8509,7 @@ Subroutine
@code{CALL SLEEP(SECONDS)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{SECONDS} @tab The type shall be of default @code{INTEGER}.
@end multitable
@@ -8159,7 +8544,7 @@ function
@code{RESULT = SNGL(A)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{A} @tab The type shall be a double precision @code{REAL}.
@end multitable
@@ -8196,7 +8581,6 @@ Elemental function
-
@node SPREAD
@section @code{SPREAD} --- Add a dimension to an array
@cindex @code{SPREAD} intrinsic
@@ -8221,7 +8605,6 @@ Transformational function
-
@node SQRT
@section @code{SQRT} --- Square-root function
@cindex @code{SQRT} intrinsic
@@ -8245,7 +8628,7 @@ Elemental function
@code{RESULT = SQRT(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)} or
@code{COMPLEX(*)}.
@end multitable
@@ -8265,7 +8648,7 @@ end program test_sqrt
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DSQRT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F95 and later
@item @code{CSQRT(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab F95 and later
@@ -8291,14 +8674,14 @@ generator is specified by the required argument @var{SEED}.
GNU extension
@item @emph{Class}:
-non-elemental subroutine
+Non-elemental subroutine
@item @emph{Syntax}:
@code{CALL SRAND(SEED)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{SEED} @tab shall be a scalar @code{INTEGER(kind=4)}.
+@multitable @columnfractions .15 .70
+@item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}.
@end multitable
@item @emph{Return value}:
@@ -8335,7 +8718,7 @@ the file itself, but execute (search) permission is required on all of the
directories in path that lead to the file.
The elements that are obtained and stored in the array @code{BUFF}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @code{buff(1)} @tab Device ID
@item @code{buff(2)} @tab Inode number
@item @code{buff(3)} @tab File mode
@@ -8365,7 +8748,7 @@ Non-elemental subroutine
@code{CALL STAT(FILE,BUFF[,STATUS])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{FILE} @tab The type shall be @code{CHARACTER(*)}, a valid path within the file system.
@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}.
@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0
@@ -8444,17 +8827,23 @@ contains 0 on success or a nonzero error code upon return; see
@code{symlink(2)}. If the system does not supply @code{symlink(2)},
@code{ENOSYS} is returned.
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
+@item @code{STATUS = SYMLNK(PATH1, PATH2)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
@@ -8479,17 +8868,23 @@ argument @var{STATUS} is present, it contains the value returned by
Note that which shell is used to invoke the command is system-dependent
and environment-dependent.
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL SYSTEM(COMMAND [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL SYSTEM(COMMAND [, STATUS])}
+@item @code{STATUS = SYSTEM(COMMAND)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
@end multitable
@@ -8544,7 +8939,7 @@ Elemental function
@code{RESULT = TAN(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -8561,7 +8956,7 @@ end program test_tan
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DTAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F95 and later
@end multitable
@@ -8592,7 +8987,7 @@ Elemental function
@code{X = TANH(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be @code{REAL(*)}.
@end multitable
@@ -8609,7 +9004,7 @@ end program test_tanh
@end smallexample
@item @emph{Specific names}:
-@multitable @columnfractions .20 .20 .20 .40
+@multitable @columnfractions .20 .20 .20 .25
@item Name @tab Argument @tab Return type @tab Standard
@item @code{DTANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab F95 and later
@end multitable
@@ -8655,7 +9050,7 @@ Non-elemental function
The return value is a scalar of type @code{INTEGER(4)}.
@item @emph{See also}:
-@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME8}
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8}
@end table
@@ -8694,7 +9089,7 @@ Non-elemental function
The return value is a scalar of type @code{INTEGER(8)}.
@item @emph{See also}:
-@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME}
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME}
@end table
@@ -8720,8 +9115,8 @@ Elemental function
@code{RESULT = TINY(X)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{REAL}.
+@multitable @columnfractions .15 .70
+@item @var{X} @tab Shall be of type @code{REAL}.
@end multitable
@item @emph{Return value}:
@@ -8805,6 +9200,52 @@ Transformational function
+@node TTYNAM
+@section @code{TTYNAM} --- Get the name of a terminal device.
+@cindex @code{TTYNAM} intrinsic
+
+@table @asis
+@item @emph{Description}:
+Get the name of a terminal device. For more information,
+see @code{ttyname(3)}.
+
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Subroutine, non-elemental function
+
+@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{CALL TTYNAM(UNIT, NAME)}
+@item @code{NAME = TTYNAM(UNIT)}
+@end multitable
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .70
+@item @var{UNIT} @tab Shall be a scalar @code{INTEGER(*)}.
+@item @var{NAME} @tab Shall be of type @code{CHARACTER(*)}.
+@end multitable
+
+@item @emph{Example}:
+@smallexample
+PROGRAM test_ttynam
+ INTEGER :: unit
+ DO unit = 1, 10
+ IF (isatty(unit=unit)) write(*,*) ttynam(unit)
+ END DO
+END PROGRAM
+@end smallexample
+
+@item @emph{See also}:
+@ref{ISATTY}
+@end table
+
+
+
@node UBOUND
@section @code{UBOUND} --- Upper dimension bounds of an array
@cindex @code{UBOUND} intrinsic
@@ -8823,7 +9264,7 @@ Inquiry function
@code{RESULT = UBOUND(ARRAY [, DIM])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{ARRAY} @tab Shall be an array, of any type.
@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER(*)}.
@end multitable
@@ -8863,7 +9304,7 @@ Subroutine
@code{CALL UMASK(MASK [, OLD])}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{MASK} @tab Shall be a scalar of type @code{INTEGER(*)}.
@item @var{MASK} @tab (Optional) Shall be a scalar of type
@code{INTEGER(*)}.
@@ -8886,17 +9327,23 @@ blanks in the file name are ignored. If the @var{STATUS} argument is
supplied, it contains 0 on success or a nonzero error code upon return;
see @code{unlink(2)}.
+This intrinsic is provided in both subroutine and function forms;
+however, only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
-@code{CALL UNLINK(PATH [, STATUS])}
+@multitable @columnfractions .80
+@item @code{CALL UNLINK(PATH [, STATUS])}
+@item @code{STATUS = UNLINK(PATH)}
+@end multitable
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
@end multitable
@@ -8981,7 +9428,7 @@ Non-elemental function
@code{RESULT = XOR(X, Y)}
@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
+@multitable @columnfractions .15 .70
@item @var{X} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
@item @var{Y} @tab The type shall be either @code{INTEGER(*)} or @code{LOGICAL}.
@end multitable
diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c
index 63741f2ba6f..12ecd061e69 100644
--- a/gcc/fortran/iresolve.c
+++ b/gcc/fortran/iresolve.c
@@ -988,7 +988,7 @@ gfc_resolve_ishftc (gfc_expr *f, gfc_expr *i, gfc_expr *shift, gfc_expr *size)
{
int s_kind;
- s_kind = (size == NULL) ? gfc_default_integer_kind : shift->ts.kind;
+ s_kind = (size == NULL) ? gfc_default_integer_kind : size->ts.kind;
f->ts = i->ts;
f->value.function.name
@@ -2386,8 +2386,6 @@ gfc_resolve_alarm_sub (gfc_code *c)
if (seconds->ts.kind != gfc_c_int_kind)
gfc_convert_type (seconds, &ts, 2);
- if (status != NULL && status->ts.kind != gfc_c_int_kind)
- gfc_convert_type (status, &ts, 2);
c->resolved_sym = gfc_get_intrinsic_sub_symbol (name);
}
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 7a834f76fc3..def305bee24 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -410,7 +410,9 @@ gfc_match_strings (mstring *a)
/* See if the current input looks like a name of some sort. Modifies
- the passed buffer which must be GFC_MAX_SYMBOL_LEN+1 bytes long. */
+ the passed buffer which must be GFC_MAX_SYMBOL_LEN+1 bytes long.
+ Note that options.c restricts max_identifier_length to not more
+ than GFC_MAX_SYMBOL_LEN. */
match
gfc_match_name (char *buffer)
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index b43e1909686..d067f1c4d21 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -498,7 +498,7 @@ gfc_match_use (void)
{
char name[GFC_MAX_SYMBOL_LEN + 1], module_nature[GFC_MAX_SYMBOL_LEN + 1];
gfc_use_rename *tail = NULL, *new;
- interface_type type;
+ interface_type type, type2;
gfc_intrinsic_op operator;
match m;
@@ -598,9 +598,16 @@ gfc_match_use (void)
gfc_error ("Missing generic specification in USE statement at %C");
goto cleanup;
+ case INTERFACE_USER_OP:
case INTERFACE_GENERIC:
m = gfc_match (" =>");
+ if (type == INTERFACE_USER_OP && m == MATCH_YES
+ && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Renaming "
+ "operators in USE statements at %C")
+ == FAILURE))
+ goto cleanup;
+
if (only_flag)
{
if (m != MATCH_YES)
@@ -608,8 +615,9 @@ gfc_match_use (void)
else
{
strcpy (new->local_name, name);
-
- m = gfc_match_name (new->use_name);
+ m = gfc_match_generic_spec (&type2, new->use_name, &operator);
+ if (type != type2)
+ goto syntax;
if (m == MATCH_NO)
goto syntax;
if (m == MATCH_ERROR)
@@ -622,18 +630,27 @@ gfc_match_use (void)
goto syntax;
strcpy (new->local_name, name);
- m = gfc_match_name (new->use_name);
+ m = gfc_match_generic_spec (&type2, new->use_name, &operator);
+ if (type != type2)
+ goto syntax;
if (m == MATCH_NO)
goto syntax;
if (m == MATCH_ERROR)
goto cleanup;
}
- break;
+ if (strcmp (new->use_name, module_name) == 0
+ || strcmp (new->local_name, module_name) == 0)
+ {
+ gfc_error ("The name '%s' at %C has already been used as "
+ "an external module name.", module_name);
+ goto cleanup;
+ }
- case INTERFACE_USER_OP:
- strcpy (new->use_name, name);
- /* Fall through */
+ if (type == INTERFACE_USER_OP)
+ new->operator = operator;
+
+ break;
case INTERFACE_INTRINSIC_OP:
new->operator = operator;
@@ -1842,8 +1859,14 @@ mio_typespec (gfc_typespec *ts)
else
ts->f90_type = MIO_NAME (bt) (ts->type, bt_types);
-
- mio_charlen (&ts->cl);
+ if (ts->type != BT_CHARACTER)
+ {
+ /* ts->cl is only valid for BT_CHARACTER. */
+ mio_lparen ();
+ mio_rparen ();
+ }
+ else
+ mio_charlen (&ts->cl);
mio_rparen ();
}
@@ -3510,6 +3533,9 @@ read_module (void)
/* Get the jth local name for this symbol. */
p = find_use_name_n (name, &j);
+ if (p == NULL && strcmp (name, module_name) == 0)
+ p = name;
+
/* Skip symtree nodes not in an ONLY clause, unless there
is an existing symtree loaded from another USE
statement. */
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index bd8f6ebf05e..e4f6092663c 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -36,6 +36,18 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
gfc_option_t gfc_option;
+/* Set flags that control warnings and errors for different
+ Fortran standards to their default values. */
+
+static void
+set_default_std_flags (void)
+{
+ gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
+ | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F77 | GFC_STD_GNU
+ | GFC_STD_LEGACY;
+ gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
+}
+
/* Get ready for options handling. */
unsigned int
@@ -97,10 +109,7 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED,
flag_errno_math = 0;
- gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F77 | GFC_STD_GNU
- | GFC_STD_LEGACY;
- gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
+ set_default_std_flags ();
gfc_option.warn_nonstd_intrinsics = 0;
@@ -624,17 +633,11 @@ gfc_handle_option (size_t scode, const char *arg, int value)
break;
case OPT_std_gnu:
- gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_F77 | GFC_STD_F95 | GFC_STD_F2003
- | GFC_STD_GNU | GFC_STD_LEGACY;
- gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_LEGACY;
+ set_default_std_flags ();
break;
case OPT_std_legacy:
- gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_F77 | GFC_STD_F95 | GFC_STD_F2003
- | GFC_STD_GNU | GFC_STD_LEGACY;
+ set_default_std_flags ();
gfc_option.warn_std = 0;
break;
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 37b19871b18..78de480cfce 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -1790,6 +1790,20 @@ decl:
/* Read data declaration statements. */
st = parse_spec (ST_NONE);
+ /* Since the interface block does not permit an IMPLICIT statement,
+ the default type for the function or the result must be taken
+ from the formal namespace. */
+ if (new_state == COMP_FUNCTION)
+ {
+ if (prog_unit->result == prog_unit
+ && prog_unit->ts.type == BT_UNKNOWN)
+ gfc_set_default_type (prog_unit, 1, prog_unit->formal_ns);
+ else if (prog_unit->result != prog_unit
+ && prog_unit->result->ts.type == BT_UNKNOWN)
+ gfc_set_default_type (prog_unit->result, 1,
+ prog_unit->formal_ns);
+ }
+
if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
{
gfc_error ("Unexpected %s statement at %C in INTERFACE body",
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 7bbd2067c70..9c85ecd7b4b 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -773,7 +773,7 @@ next_string_char (char delimiter)
return c;
old_locus = gfc_current_locus;
- c = gfc_next_char_literal (1);
+ c = gfc_next_char_literal (0);
if (c == delimiter)
return c;
@@ -852,7 +852,7 @@ static match
match_string_constant (gfc_expr **result)
{
char *p, name[GFC_MAX_SYMBOL_LEN + 1];
- int i, c, kind, length, delimiter;
+ int i, c, kind, length, delimiter, warn_ampersand;
locus old_locus, start_locus;
gfc_symbol *sym;
gfc_expr *e;
@@ -979,10 +979,16 @@ got_delim:
gfc_current_locus = start_locus;
gfc_next_char (); /* Skip delimiter */
+ /* We disable the warning for the following loop as the warning has already
+ been printed in the loop above. */
+ warn_ampersand = gfc_option.warn_ampersand;
+ gfc_option.warn_ampersand = 0;
+
for (i = 0; i < length; i++)
*p++ = next_string_char (delimiter);
*p = '\0'; /* TODO: C-style string is for development/debug purposes. */
+ gfc_option.warn_ampersand = warn_ampersand;
if (next_string_char (delimiter) != -1)
gfc_internal_error ("match_string_constant(): Delimiter not found");
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 8c7fb83ee5a..72085418e8c 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1016,22 +1016,14 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype)
since same file external procedures are not resolvable
in gfortran, it is a good deal easier to leave them to
intrinsic.c. */
- if (ptype != PROC_UNKNOWN && ptype != PROC_EXTERNAL)
+ if (ptype != PROC_UNKNOWN
+ && ptype != PROC_DUMMY
+ && ptype != PROC_EXTERNAL)
{
gfc_error ("By-value argument at %L is not allowed "
"in this context", &e->where);
return FAILURE;
}
-
- if (((e->ts.type == BT_REAL || e->ts.type == BT_COMPLEX)
- && e->ts.kind > gfc_default_real_kind)
- || (e->ts.kind > gfc_default_integer_kind))
- {
- gfc_error ("Kind of by-value argument at %L is larger "
- "than default kind", &e->where);
- return FAILURE;
- }
-
}
/* Statement functions have already been excluded above. */
@@ -6171,6 +6163,21 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
}
+static gfc_component *
+has_default_initializer (gfc_symbol *der)
+{
+ gfc_component *c;
+ for (c = der->components; c; c = c->next)
+ if ((c->ts.type != BT_DERIVED && c->initializer)
+ || (c->ts.type == BT_DERIVED
+ && !c->pointer
+ && has_default_initializer (c->ts.derived)))
+ break;
+
+ return c;
+}
+
+
/* Resolve symbols with flavor variable. */
static try
@@ -6318,9 +6325,7 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag)
components. */
c = NULL;
if (sym->ts.type == BT_DERIVED && !(sym->value || flag))
- for (c = sym->ts.derived->components; c; c = c->next)
- if (c->initializer)
- break;
+ c = has_default_initializer (sym->ts.derived);
/* 4th constraint in section 11.3: "If an object of a type for which
component-initialization is specified (R429) appears in the
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 683c8bdf6e1..5d413310735 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3862,7 +3862,7 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, tree fnbody)
else
gcc_unreachable ();
tmp = build_call_expr (fndecl, 1, size);
- tmp = fold (convert (TREE_TYPE (decl), tmp));
+ tmp = fold_convert (TREE_TYPE (decl), tmp);
gfc_add_modify_expr (&block, decl, tmp);
/* Set offset of the array. */
@@ -4918,8 +4918,7 @@ gfc_duplicate_allocatable(tree dest, tree src, tree type, int rank)
tmp = build_call_expr (gfor_fndecl_internal_malloc64, 1, size);
else
gcc_unreachable ();
- tmp = fold (convert (TREE_TYPE (gfc_conv_descriptor_data_get (src)),
- tmp));
+ tmp = fold_convert (TREE_TYPE (gfc_conv_descriptor_data_get (src)), tmp);
gfc_conv_descriptor_data_set (&block, dest, tmp);
/* We know the temporary and the value will be the same length,
@@ -4990,7 +4989,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
null_cond = gfc_conv_descriptor_data_get (decl);
null_cond = build2 (NE_EXPR, boolean_type_node, null_cond,
- build_int_cst (TREE_TYPE (tmp), 0));
+ build_int_cst (TREE_TYPE (null_cond), 0));
}
else
{
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index e2a19698894..f795c436ffa 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1934,40 +1934,12 @@ is_aliased_array (gfc_expr * e)
static void
conv_arglist_function (gfc_se *se, gfc_expr *expr, const char *name)
{
- tree type = NULL_TREE;
/* Pass by value for g77 %VAL(arg), pass the address
indirectly for %LOC, else by reference. Thus %REF
is a "do-nothing" and %LOC is the same as an F95
pointer. */
if (strncmp (name, "%VAL", 4) == 0)
- {
- gfc_conv_expr (se, expr);
- /* %VAL converts argument to default kind. */
- switch (expr->ts.type)
- {
- case BT_REAL:
- type = gfc_get_real_type (gfc_default_real_kind);
- se->expr = fold_convert (type, se->expr);
- break;
- case BT_COMPLEX:
- type = gfc_get_complex_type (gfc_default_complex_kind);
- se->expr = fold_convert (type, se->expr);
- break;
- case BT_INTEGER:
- type = gfc_get_int_type (gfc_default_integer_kind);
- se->expr = fold_convert (type, se->expr);
- break;
- case BT_LOGICAL:
- type = gfc_get_logical_type (gfc_default_logical_kind);
- se->expr = fold_convert (type, se->expr);
- break;
- /* This should have been resolved away. */
- case BT_UNKNOWN: case BT_CHARACTER: case BT_DERIVED:
- case BT_PROCEDURE: case BT_HOLLERITH: case BT_VOID:
- gfc_internal_error ("Bad type in conv_arglist_function");
- }
-
- }
+ gfc_conv_expr (se, expr);
else if (strncmp (name, "%LOC", 4) == 0)
{
gfc_conv_expr_reference (se, expr);
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index c041b630e77..58c4131eea7 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -1840,7 +1840,7 @@ gfc_conv_intrinsic_dot_product (gfc_se * se, gfc_expr * expr)
/* Initialize the result. */
resvar = gfc_create_var (type, "val");
if (expr->ts.type == BT_LOGICAL)
- tmp = convert (type, integer_zero_node);
+ tmp = build_int_cst (type, 0);
else
tmp = gfc_build_const (type, integer_zero_node);
@@ -2681,9 +2681,10 @@ static void
gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr)
{
gfc_actual_arglist *actual;
- tree args;
+ tree arg1;
tree type;
- tree fndecl;
+ tree fncall0;
+ tree fncall1;
gfc_se argse;
gfc_ss *ss;
@@ -2697,21 +2698,48 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr)
gfc_conv_expr_descriptor (&argse, actual->expr, ss);
gfc_add_block_to_block (&se->pre, &argse.pre);
gfc_add_block_to_block (&se->post, &argse.post);
- args = gfc_chainon_list (NULL_TREE, argse.expr);
+ arg1 = gfc_evaluate_now (argse.expr, &se->pre);
+
+ /* Build the call to size0. */
+ fncall0 = build_call_expr (gfor_fndecl_size0, 1, arg1);
actual = actual->next;
+
if (actual->expr)
{
gfc_init_se (&argse, NULL);
- gfc_conv_expr_type (&argse, actual->expr, gfc_array_index_type);
+ gfc_conv_expr_type (&argse, actual->expr,
+ gfc_array_index_type);
gfc_add_block_to_block (&se->pre, &argse.pre);
- args = gfc_chainon_list (args, argse.expr);
- fndecl = gfor_fndecl_size1;
+
+ /* Build the call to size1. */
+ fncall1 = build_call_expr (gfor_fndecl_size1, 2,
+ arg1, argse.expr);
+
+ /* Unusually, for an intrinsic, size does not exclude
+ an optional arg2, so we must test for it. */
+ if (actual->expr->expr_type == EXPR_VARIABLE
+ && actual->expr->symtree->n.sym->attr.dummy
+ && actual->expr->symtree->n.sym->attr.optional)
+ {
+ tree tmp;
+ gfc_init_se (&argse, NULL);
+ argse.want_pointer = 1;
+ argse.data_not_needed = 1;
+ gfc_conv_expr (&argse, actual->expr);
+ gfc_add_block_to_block (&se->pre, &argse.pre);
+ tmp = build2 (NE_EXPR, boolean_type_node, argse.expr,
+ null_pointer_node);
+ tmp = gfc_evaluate_now (tmp, &se->pre);
+ se->expr = build3 (COND_EXPR, pvoid_type_node,
+ tmp, fncall1, fncall0);
+ }
+ else
+ se->expr = fncall1;
}
else
- fndecl = gfor_fndecl_size0;
+ se->expr = fncall0;
- se->expr = build_function_call_expr (fndecl, args);
type = gfc_typenode_for_spec (&expr->ts);
se->expr = convert (type, se->expr);
}
diff --git a/gcc/function.c b/gcc/function.c
index 3c6222700c9..f6ebb855898 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3229,40 +3229,6 @@ gimplify_parameters (void)
return stmts;
}
-/* Indicate whether REGNO is an incoming argument to the current function
- that was promoted to a wider mode. If so, return the RTX for the
- register (to get its mode). PMODE and PUNSIGNEDP are set to the mode
- that REGNO is promoted from and whether the promotion was signed or
- unsigned. */
-
-rtx
-promoted_input_arg (unsigned int regno, enum machine_mode *pmode, int *punsignedp)
-{
- tree arg;
-
- for (arg = DECL_ARGUMENTS (current_function_decl); arg;
- arg = TREE_CHAIN (arg))
- if (REG_P (DECL_INCOMING_RTL (arg))
- && REGNO (DECL_INCOMING_RTL (arg)) == regno
- && TYPE_MODE (DECL_ARG_TYPE (arg)) == TYPE_MODE (TREE_TYPE (arg)))
- {
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (arg));
- int unsignedp = TYPE_UNSIGNED (TREE_TYPE (arg));
-
- mode = promote_mode (TREE_TYPE (arg), mode, &unsignedp, 1);
- if (mode == GET_MODE (DECL_INCOMING_RTL (arg))
- && mode != DECL_MODE (arg))
- {
- *pmode = DECL_MODE (arg);
- *punsignedp = unsignedp;
- return DECL_INCOMING_RTL (arg);
- }
- }
-
- return 0;
-}
-
-
/* Compute the size and offset from the start of the stacked arguments for a
parm passed in mode PASSED_MODE and with type TYPE.
@@ -4361,16 +4327,6 @@ expand_function_end (void)
if (flag_exceptions)
sjlj_emit_function_exit_after (get_last_insn ());
}
- else
- {
- /* @@@ This is a kludge. We want to ensure that instructions that
- may trap are not moved into the epilogue by scheduling, because
- we don't always emit unwind information for the epilogue.
- However, not all machine descriptions define a blockage insn, so
- emit an ASM_INPUT to act as one. */
- if (flag_non_call_exceptions)
- emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
- }
/* If this is an implementation of throw, do what's necessary to
communicate between __builtin_eh_return and the epilogue. */
@@ -4512,6 +4468,14 @@ expand_function_end (void)
/* Output the label for the naked return from the function. */
emit_label (naked_return_label);
+ /* @@@ This is a kludge. We want to ensure that instructions that
+ may trap are not moved into the epilogue by scheduling, because
+ we don't always emit unwind information for the epilogue.
+ However, not all machine descriptions define a blockage insn, so
+ emit an ASM_INPUT to act as one. */
+ if (! USING_SJLJ_EXCEPTIONS && flag_non_call_exceptions)
+ emit_insn (gen_rtx_ASM_INPUT (VOIDmode, ""));
+
/* If stack protection is enabled for this function, check the guard. */
if (cfun->stack_protect_guard)
stack_protect_epilogue ();
diff --git a/gcc/function.h b/gcc/function.h
index e02077f6c63..85431944e68 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -168,12 +168,12 @@ DEF_VEC_ALLOC_P(temp_slot_p,gc);
enum function_frequency {
/* This function most likely won't be executed at all.
- (set only when profile feedback is available). */
+ (set only when profile feedback is available or via function attribute). */
FUNCTION_FREQUENCY_UNLIKELY_EXECUTED,
/* The default value. */
FUNCTION_FREQUENCY_NORMAL,
/* Optimize this function hard
- (set only when profile feedback is available). */
+ (set only when profile feedback is available or via function attribute). */
FUNCTION_FREQUENCY_HOT
};
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 1ab3e525138..6ce91836d45 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -324,7 +324,8 @@ propagate_rtx_1 (rtx *px, rtx old, rtx new, bool can_appear)
/* Dismiss transformation that we do not want to carry on. */
if (!valid_ops
|| new_op0 == op0
- || GET_MODE (new_op0) != GET_MODE (op0))
+ || !(GET_MODE (new_op0) == GET_MODE (op0)
+ || GET_MODE (new_op0) == VOIDmode))
return true;
canonicalize_address (new_op0);
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 14e4ceea71f..b4f9abebc10 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -168,6 +168,11 @@ static int print_multi_lib;
static int print_help_list;
+/* Flag saying to print the sysroot suffix used for searching for
+ headers. */
+
+static int print_sysroot_headers_suffix;
+
/* Flag indicating whether we should print the command and arguments */
static int verbose_flag;
@@ -350,6 +355,7 @@ static void init_gcc_specs (struct obstack *, const char *, const char *,
static const char *convert_filename (const char *, int, int);
#endif
+static const char *getenv_spec_function (int, const char **);
static const char *if_exists_spec_function (int, const char **);
static const char *if_exists_else_spec_function (int, const char **);
static const char *replace_outfile_spec_function (int, const char **);
@@ -510,15 +516,18 @@ or with constant text in a single argument.
part of that switch that matched the '*'.
%{.S:X} substitutes X, if processing a file with suffix S.
%{!.S:X} substitutes X, if NOT processing a file with suffix S.
-
+ %{,S:X} substitutes X, if processing a file which will use spec S.
+ %{!,S:X} substitutes X, if NOT processing a file which will use spec S.
+
%{S|T:X} substitutes X if either -S or -T was given to CC. This may be
- combined with !, ., and * as above binding stronger than the OR.
+ combined with '!', '.', ',', and '*' as above binding stronger
+ than the OR.
If %* appears in X, all of the alternatives must be starred, and
only the first matching alternative is substituted.
%{S:X; if S was given to CC, substitutes X;
T:Y; else if T was given to CC, substitutes Y;
:D} else substitutes D. There can be as many clauses as you need.
- This may be combined with ., !, |, and * as above.
+ This may be combined with '.', '!', ',', '|', and '*' as above.
%(Spec) processes a specification defined in a specs file as *Spec:
%[Spec] as above, but put __ around -D arguments
@@ -775,7 +784,7 @@ static const char *cpp_unique_options =
%{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\
%{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\
%{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\
- %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\
+ %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}}\
%{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD}\
%{H} %C %{D*&U*&A*} %{i*} %Z %i\
%{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
@@ -1124,6 +1133,7 @@ static const struct option_map option_map[] =
{"--print-multi-directory", "-print-multi-directory", 0},
{"--print-multi-os-directory", "-print-multi-os-directory", 0},
{"--print-prog-name", "-print-prog-name=", "aj"},
+ {"--print-sysroot-headers-suffix", "-print-sysroot-headers-suffix", 0},
{"--profile", "-p", 0},
{"--profile-blocks", "-a", 0},
{"--quiet", "-q", 0},
@@ -1601,6 +1611,7 @@ static struct spec_list *specs = (struct spec_list *) 0;
static const struct spec_function static_spec_functions[] =
{
+ { "getenv", getenv_spec_function },
{ "if-exists", if_exists_spec_function },
{ "if-exists-else", if_exists_else_spec_function },
{ "replace-outfile", replace_outfile_spec_function },
@@ -3191,6 +3202,7 @@ display_help (void)
-print-multi-lib Display the mapping between command line options and\n\
multiple library search directories\n"), stdout);
fputs (_(" -print-multi-os-directory Display the relative path to OS libraries\n"), stdout);
+ fputs (_(" -print-sysroot-headers-suffix Display the sysroot suffix used to find headers\n"), stdout);
fputs (_(" -Wa,<options> Pass comma-separated <options> on to the assembler\n"), stdout);
fputs (_(" -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"), stdout);
fputs (_(" -Wl,<options> Pass comma-separated <options> on to the linker\n"), stdout);
@@ -3570,7 +3582,7 @@ process_command (int argc, const char **argv)
{
/* translate_options () has turned --version into -fversion. */
printf (_("%s (GCC) %s\n"), programname, version_string);
- printf ("Copyright %s 2006 Free Software Foundation, Inc.\n",
+ printf ("Copyright %s 2007 Free Software Foundation, Inc.\n",
_("(C)"));
fputs (_("This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),
@@ -3635,6 +3647,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
print_multi_directory = 1;
else if (! strcmp (argv[i], "-print-multi-os-directory"))
print_multi_os_directory = 1;
+ else if (! strcmp (argv[i], "-print-sysroot-headers-suffix"))
+ print_sysroot_headers_suffix = 1;
else if (! strncmp (argv[i], "-Wa,", 4))
{
int prev, j;
@@ -3814,28 +3828,6 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
value = tmp;
}
- /* As a kludge, if the arg is "[foo/]stageN/", just
- add "[foo/]include" to the include prefix. */
- if ((len == 7
- || (len > 7
- && (IS_DIR_SEPARATOR (value[len - 8]))))
- && strncmp (value + len - 7, "stage", 5) == 0
- && ISDIGIT (value[len - 2])
- && (IS_DIR_SEPARATOR (value[len - 1])))
- {
- if (len == 7)
- add_prefix (&include_prefixes, "./", NULL,
- PREFIX_PRIORITY_B_OPT, 0, 0);
- else
- {
- char *string = xmalloc (len - 6);
- memcpy (string, value, len - 7);
- string[len - 7] = 0;
- add_prefix (&include_prefixes, string, NULL,
- PREFIX_PRIORITY_B_OPT, 0, 0);
- }
- }
-
add_prefix (&exec_prefixes, value, NULL,
PREFIX_PRIORITY_B_OPT, 0, 0);
add_prefix (&startfile_prefixes, value, NULL,
@@ -4086,6 +4078,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
;
else if (! strcmp (argv[i], "-print-multi-os-directory"))
;
+ else if (! strcmp (argv[i], "-print-sysroot-headers-suffix"))
+ ;
else if (! strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")))
{
target_system_root = argv[i] + strlen ("--sysroot=");
@@ -4996,6 +4990,14 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
for_each_path (&include_prefixes, false, info.append_len,
spec_path, &info);
+
+ info.append = "include-fixed";
+ if (*sysroot_hdrs_suffix_spec)
+ info.append = concat (info.append, dir_separator_str,
+ multilib_dir, NULL);
+ info.append_len = strlen (info.append);
+ for_each_path (&include_prefixes, false, info.append_len,
+ spec_path, &info);
}
break;
@@ -5530,27 +5532,24 @@ handle_spec_function (const char *p)
static inline bool
input_suffix_matches (const char *atom, const char *end_atom)
{
- /* We special case the semantics of {.s:...} and {.S:...} and their
- negative variants. Instead of testing the input filename suffix,
- we test whether the input source file is an assembler file or an
- assembler-with-cpp file respectively. This allows us to correctly
- handle the -x command line option. */
-
- if (atom + 1 == end_atom
- && input_file_compiler
- && input_file_compiler->suffix)
- {
- if (*atom == 's')
- return !strcmp (input_file_compiler->suffix, "@assembler");
- if (*atom == 'S')
- return !strcmp (input_file_compiler->suffix, "@assembler-with-cpp");
- }
-
return (input_suffix
&& !strncmp (input_suffix, atom, end_atom - atom)
&& input_suffix[end_atom - atom] == '\0');
}
+/* Subroutine of handle_braces. Returns true if the current
+ input file's spec name matches the atom bracketed by ATOM and END_ATOM. */
+static bool
+input_spec_matches (const char *atom, const char *end_atom)
+{
+ return (input_file_compiler
+ && input_file_compiler->suffix
+ && input_file_compiler->suffix[0] != '\0'
+ && !strncmp (input_file_compiler->suffix + 1, atom,
+ end_atom - atom)
+ && input_file_compiler->suffix[end_atom - atom + 1] == '\0');
+}
+
/* Subroutine of handle_braces. Returns true if a switch
matching the atom bracketed by ATOM and END_ATOM appeared on the
command line. */
@@ -5614,6 +5613,7 @@ handle_braces (const char *p)
const char *orig = p;
bool a_is_suffix;
+ bool a_is_spectype;
bool a_is_starred;
bool a_is_negated;
bool a_matched;
@@ -5634,8 +5634,12 @@ handle_braces (const char *p)
goto invalid;
/* Scan one "atom" (S in the description above of %{}, possibly
- with !, ., or * modifiers). */
- a_matched = a_is_suffix = a_is_starred = a_is_negated = false;
+ with '!', '.', '@', ',', or '*' modifiers). */
+ a_matched = false;
+ a_is_suffix = false;
+ a_is_starred = false;
+ a_is_negated = false;
+ a_is_spectype = false;
SKIP_WHITE();
if (*p == '!')
@@ -5644,6 +5648,8 @@ handle_braces (const char *p)
SKIP_WHITE();
if (*p == '.')
p++, a_is_suffix = true;
+ else if (*p == ',')
+ p++, a_is_spectype = true;
atom = p;
while (ISIDNUM(*p) || *p == '-' || *p == '+' || *p == '='
@@ -5661,7 +5667,7 @@ handle_braces (const char *p)
/* Substitute the switch(es) indicated by the current atom. */
ordered_set = true;
if (disjunct_set || n_way_choice || a_is_negated || a_is_suffix
- || atom == end_atom)
+ || a_is_spectype || atom == end_atom)
goto invalid;
mark_matching_switches (atom, end_atom, a_is_starred);
@@ -5680,7 +5686,8 @@ handle_braces (const char *p)
if (atom == end_atom)
{
if (!n_way_choice || disj_matched || *p == '|'
- || a_is_negated || a_is_suffix || a_is_starred)
+ || a_is_negated || a_is_suffix || a_is_spectype
+ || a_is_starred)
goto invalid;
/* An empty term may appear as the last choice of an
@@ -5691,28 +5698,30 @@ handle_braces (const char *p)
}
else
{
- if (a_is_suffix && a_is_starred)
- goto invalid;
-
- if (!a_is_starred)
- disj_starred = false;
-
- /* Don't bother testing this atom if we already have a
- match. */
- if (!disj_matched && !n_way_matched)
- {
- if (a_is_suffix)
- a_matched = input_suffix_matches (atom, end_atom);
- else
- a_matched = switch_matches (atom, end_atom, a_is_starred);
-
- if (a_matched != a_is_negated)
- {
- disj_matched = true;
- d_atom = atom;
- d_end_atom = end_atom;
- }
- }
+ if ((a_is_suffix || a_is_spectype) && a_is_starred)
+ goto invalid;
+
+ if (!a_is_starred)
+ disj_starred = false;
+
+ /* Don't bother testing this atom if we already have a
+ match. */
+ if (!disj_matched && !n_way_matched)
+ {
+ if (a_is_suffix)
+ a_matched = input_suffix_matches (atom, end_atom);
+ else if (a_is_spectype)
+ a_matched = input_spec_matches (atom, end_atom);
+ else
+ a_matched = switch_matches (atom, end_atom, a_is_starred);
+
+ if (a_matched != a_is_negated)
+ {
+ disj_matched = true;
+ d_atom = atom;
+ d_end_atom = end_atom;
+ }
+ }
}
if (*p == ':')
@@ -6409,6 +6418,21 @@ main (int argc, char **argv)
return (0);
}
+ if (print_sysroot_headers_suffix)
+ {
+ if (*sysroot_hdrs_suffix_spec)
+ {
+ printf("%s\n", (target_sysroot_hdrs_suffix
+ ? target_sysroot_hdrs_suffix
+ : ""));
+ return (0);
+ }
+ else
+ /* The error status indicates that only one set of fixed
+ headers should be built. */
+ fatal ("not configured with sysroot headers suffix");
+ }
+
if (print_help_list)
{
display_help ();
@@ -6928,7 +6952,7 @@ next_member:
p++;
SKIP_WHITE ();
- if (*p == '.')
+ if (*p == '.' || *p == ',')
suffix = true, p++;
atom = p;
@@ -7645,6 +7669,27 @@ print_multilib_info (void)
}
}
+/* getenv built-in spec function.
+
+ Returns the value of the environment variable given by its first
+ argument, concatenated with the second argument. If the
+ environment variable is not defined, a fatal error is issued. */
+
+static const char *
+getenv_spec_function (int argc, const char **argv)
+{
+ char *value;
+
+ if (argc != 2)
+ return NULL;
+
+ value = getenv (argv[0]);
+ if (!value)
+ fatal ("environment variable \"%s\" not defined", argv[0]);
+
+ return concat (value, argv[1], NULL);
+}
+
/* if-exists built-in spec function.
Checks to see if the file specified by the absolute pathname in
diff --git a/gcc/gccspec.c b/gcc/gccspec.c
index 39b90d92fee..242e1985cbf 100644
--- a/gcc/gccspec.c
+++ b/gcc/gccspec.c
@@ -30,7 +30,10 @@ lang_specific_driver (int *in_argc ATTRIBUTE_UNUSED,
const char *const **in_argv ATTRIBUTE_UNUSED,
int *in_added_libraries ATTRIBUTE_UNUSED)
{
-#ifdef ENABLE_SHARED_LIBGCC
+ /* Systems which use the NeXT runtime by default should arrange
+ for the shared libgcc to be used when -fgnu-runtime is passed
+ through specs. */
+#if defined(ENABLE_SHARED_LIBGCC) && ! defined(NEXT_OBJC_RUNTIME)
int i;
/* The new argument list will be contained in this. */
diff --git a/gcc/gthr-vxworks.h b/gcc/gthr-vxworks.h
index 5ff5234219f..c11d3a20cab 100644
--- a/gcc/gthr-vxworks.h
+++ b/gcc/gthr-vxworks.h
@@ -37,6 +37,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#else
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define __GTHREADS 1
#define __gthread_active_p() 1
@@ -103,12 +107,18 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
typedef struct
{
+#ifndef __RTP__
volatile unsigned char busy;
+#endif
volatile unsigned char done;
}
__gthread_once_t;
-#define __GTHREAD_ONCE_INIT { 0, 0 }
+#ifndef __RTP__
+# define __GTHREAD_ONCE_INIT { 0, 0 }
+#else
+# define __GTHREAD_ONCE_INIT { 0 }
+#endif
extern int __gthread_once (__gthread_once_t *once, void (*func)(void));
@@ -125,6 +135,10 @@ extern int __gthread_key_delete (__gthread_key_t key);
extern void *__gthread_getspecific (__gthread_key_t key);
extern int __gthread_setspecific (__gthread_key_t key, void *ptr);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* not _LIBOBJC */
#endif /* gthr-vxworks.h */
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 67ca5fdee24..04306aaa7e0 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -472,6 +472,15 @@ cgraph_maybe_hot_edge_p (struct cgraph_edge *edge)
&& (edge->count
<= profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
return false;
+ if (lookup_attribute ("cold", DECL_ATTRIBUTES (edge->callee->decl))
+ || lookup_attribute ("cold", DECL_ATTRIBUTES (edge->caller->decl)))
+ return false;
+ if (lookup_attribute ("hot", DECL_ATTRIBUTES (edge->caller->decl)))
+ return true;
+ if (flag_guess_branch_prob
+ && edge->frequency < (CGRAPH_FREQ_MAX
+ / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION)))
+ return false;
return true;
}
diff --git a/gcc/ipa-type-escape.c b/gcc/ipa-type-escape.c
index 8c7253e6f01..d4c86ca06b2 100644
--- a/gcc/ipa-type-escape.c
+++ b/gcc/ipa-type-escape.c
@@ -60,13 +60,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
this phase has been run. */
static bool initialized = false;
-/* This bitmap contains the set of local vars that are the lhs of
- calls to mallocs. These variables, when seen on the rhs as part of
- a cast, the cast are not marked as doing bad things to the type
- even though they are generally of the form
- "foo = (type_of_foo)void_temp". */
-static bitmap results_of_malloc;
-
/* Scratch bitmap for avoiding work. */
static bitmap been_there_done_that;
static bitmap bitmap_tmp;
@@ -135,8 +128,17 @@ static splay_tree uid_to_subtype_map;
scan_for_refs. */
static struct pointer_set_t *visited_nodes;
+/* Visited stmts by walk_use_def_chains function because it's called
+ recursively. */
+static struct pointer_set_t *visited_stmts;
+
static bitmap_obstack ipa_obstack;
+/* Static functions from this file that are used
+ before being defined. */
+static unsigned int look_for_casts (tree lhs ATTRIBUTE_UNUSED, tree);
+static bool is_cast_from_non_pointer (tree, tree, void *);
+
/* Get the name of TYPE or return the string "<UNNAMED>". */
static char*
get_name_of_type (tree type)
@@ -622,10 +624,15 @@ count_stars (tree* type_ptr)
}
enum cast_type {
- CT_UP,
- CT_DOWN,
- CT_SIDEWAYS,
- CT_USELESS
+ CT_UP = 0x1,
+ CT_DOWN = 0x2,
+ CT_SIDEWAYS = 0x4,
+ CT_USELESS = 0x8,
+ CT_FROM_P_BAD = 0x10,
+ CT_FROM_NON_P = 0x20,
+ CT_TO_NON_INTER = 0x40,
+ CT_FROM_MALLOC = 0x80,
+ CT_NO_CAST = 0x100
};
/* Check the cast FROM_TYPE to TO_TYPE. This function requires that
@@ -648,17 +655,54 @@ check_cast_type (tree to_type, tree from_type)
return CT_SIDEWAYS;
}
+/* This function returns non-zero if VAR is result of call
+ to malloc function. */
+
+static bool
+is_malloc_result (tree var)
+{
+ tree def_stmt;
+ tree rhs;
+ int flags;
+
+ if (!var)
+ return false;
+
+ if (SSA_NAME_IS_DEFAULT_DEF (var))
+ return false;
+
+ def_stmt = SSA_NAME_DEF_STMT (var);
+
+ if (TREE_CODE (def_stmt) != GIMPLE_MODIFY_STMT)
+ return false;
+
+ if (var != GIMPLE_STMT_OPERAND (def_stmt, 0))
+ return false;
+
+ rhs = get_call_expr_in (def_stmt);
+
+ if (!rhs)
+ return false;
+
+ flags = call_expr_flags (rhs);
+
+ return ((flags & ECF_MALLOC) != 0);
+
+}
+
/* Check a cast FROM this variable, TO_TYPE. Mark the escaping types
- if appropriate. */
-static void
+ if appropriate. Returns cast_type as detected. */
+
+static enum cast_type
check_cast (tree to_type, tree from)
{
tree from_type = get_canon_type (TREE_TYPE (from), false, false);
bool to_interesting_type, from_interesting_type;
+ enum cast_type cast = CT_NO_CAST;
to_type = get_canon_type (to_type, false, false);
if (!from_type || !to_type || from_type == to_type)
- return;
+ return cast;
to_interesting_type =
ipa_type_escape_star_count_of_interesting_type (to_type) >= 0;
@@ -674,7 +718,8 @@ check_cast (tree to_type, tree from)
both sides get marked as escaping. Downcasts are not
interesting here because if type is marked as escaping, all
of its subtypes escape. */
- switch (check_cast_type (to_type, from_type))
+ cast = check_cast_type (to_type, from_type);
+ switch (cast)
{
case CT_UP:
case CT_USELESS:
@@ -685,17 +730,288 @@ check_cast (tree to_type, tree from)
mark_type (to_type, FULL_ESCAPE);
mark_type (from_type, FULL_ESCAPE);
break;
+
+ default:
+ break;
}
}
else
{
- /* If this is a cast from the local that is a result from a
- call to malloc, do not mark the cast as bad. */
- if (DECL_P (from) && !bitmap_bit_p (results_of_malloc, DECL_UID (from)))
- mark_type (to_type, FULL_ESCAPE);
+ /* This code excludes two cases from marking as escaped:
+
+ 1. if this is a cast of index of array of structures/unions
+ that happens before accessing array element, we should not
+ mark it as escaped.
+ 2. if this is a cast from the local that is a result from a
+ call to malloc, do not mark the cast as bad.
+
+ */
+
+ if (POINTER_TYPE_P (to_type) && !POINTER_TYPE_P (from_type))
+ cast = CT_FROM_NON_P;
+ else if (TREE_CODE (from) == SSA_NAME
+ && is_malloc_result (from))
+ cast = CT_FROM_MALLOC;
+ else
+ {
+ cast = CT_FROM_P_BAD;
+ mark_type (to_type, FULL_ESCAPE);
+ }
}
else if (from_interesting_type)
- mark_type (from_type, FULL_ESCAPE);
+ {
+ mark_type (from_type, FULL_ESCAPE);
+ cast = CT_TO_NON_INTER;
+ }
+
+ return cast;
+}
+
+typedef struct cast
+{
+ int type;
+ tree stmt;
+}cast_t;
+
+/* This function is a callback for walk_tree called from
+ is_cast_from_non_pointer. The data->type is set to be:
+
+ 0 - if there is no cast
+ number - the number of casts from non-pointer type
+ -1 - if there is a cast that makes the type to escape
+
+ If data->type = number, then data->stmt will contain the
+ last casting stmt met in traversing. */
+
+static tree
+is_cast_from_non_pointer_1 (tree *tp, int *walk_subtrees, void *data)
+{
+ tree def_stmt = *tp;
+
+
+ if (pointer_set_insert (visited_stmts, def_stmt))
+ {
+ *walk_subtrees = 0;
+ return NULL;
+ }
+
+ switch (TREE_CODE (def_stmt))
+ {
+ case GIMPLE_MODIFY_STMT:
+ {
+ use_operand_p use_p;
+ ssa_op_iter iter;
+ tree lhs = GIMPLE_STMT_OPERAND (def_stmt, 0);
+ tree rhs = GIMPLE_STMT_OPERAND (def_stmt, 1);
+
+ unsigned int cast = look_for_casts (lhs, rhs);
+ /* Check that only one cast happened, and it's of
+ non-pointer type. */
+ if ((cast & CT_FROM_NON_P) == (CT_FROM_NON_P)
+ && (cast & ~(CT_FROM_NON_P)) == 0)
+ {
+ ((cast_t *)data)->stmt = def_stmt;
+ ((cast_t *)data)->type++;
+
+ FOR_EACH_SSA_USE_OPERAND (use_p, def_stmt, iter, SSA_OP_ALL_USES)
+ {
+ walk_use_def_chains (USE_FROM_PTR (use_p), is_cast_from_non_pointer,
+ data, false);
+ if (((cast_t*)data)->type == -1)
+ return def_stmt;
+ }
+ }
+
+ /* Check that there is no cast, or cast is not harmful. */
+ else if ((cast & CT_NO_CAST) == (CT_NO_CAST)
+ || (cast & CT_DOWN) == (CT_DOWN)
+ || (cast & CT_UP) == (CT_UP)
+ || (cast & CT_USELESS) == (CT_USELESS)
+ || (cast & CT_FROM_MALLOC) == (CT_FROM_MALLOC))
+ {
+ FOR_EACH_SSA_USE_OPERAND (use_p, def_stmt, iter, SSA_OP_ALL_USES)
+ {
+ walk_use_def_chains (USE_FROM_PTR (use_p), is_cast_from_non_pointer,
+ data, false);
+ if (((cast_t*)data)->type == -1)
+ return def_stmt;
+ }
+ }
+
+ /* The cast is harmful. */
+ else
+ {
+ ((cast_t *)data)->type = -1;
+ return def_stmt;
+ }
+
+ *walk_subtrees = 0;
+ }
+ break;
+
+ default:
+ {
+ *walk_subtrees = 0;
+ break;
+ }
+ }
+
+ return NULL;
+}
+
+/* This function is a callback for walk_use_def_chains function called
+ from is_array_access_through_pointer_and_index. */
+
+static bool
+is_cast_from_non_pointer (tree var, tree def_stmt, void *data)
+{
+
+ if (!def_stmt || !var)
+ return false;
+
+ if (TREE_CODE (def_stmt) == PHI_NODE)
+ return false;
+
+ if (SSA_NAME_IS_DEFAULT_DEF (var))
+ return false;
+
+ walk_tree (&def_stmt, is_cast_from_non_pointer_1, data, NULL);
+ if (((cast_t*)data)->type == -1)
+ return true;
+
+ return false;
+}
+
+/* When array element a_p[i] is accessed through the pointer a_p
+ and index i, it's translated into the following sequence
+ in gimple:
+
+ i.1_5 = (unsigned int) i_1;
+ D.1605_6 = i.1_5 * 16;
+ D.1606_7 = (struct str_t *) D.1605_6;
+ a_p.2_8 = a_p;
+ D.1608_9 = D.1606_7 + a_p.2_8;
+
+ OP0 and OP1 are of the same pointer types and stand for
+ D.1606_7 and a_p.2_8 or vise versa.
+
+ This function checks that:
+
+ 1. one of OP0 and OP1 (D.1606_7) has passed only one cast from
+ non-pointer type (D.1606_7 = (struct str_t *) D.1605_6;).
+
+ 2. one of OP0 and OP1 which has passed the cast from
+ non-pointer type (D.1606_7), is actually generated by multiplication of
+ index by size of type to which both OP0 and OP1 point to
+ (in this case D.1605_6 = i.1_5 * 16; ).
+
+ 3. an address of def of the var to which was made cast (D.1605_6)
+ was not taken.(How can it happen?)
+
+ The following items are checked implicitly by the end of algorithm:
+
+ 4. one of OP0 and OP1 (a_p.2_8) have never been cast
+ (because if it was cast to pointer type, its type, that is also
+ the type of OP0 and OP1, will be marked as escaped during
+ analysis of casting stmt (when check_cast() is called
+ from scan_for_refs for this stmt)).
+
+ 5. defs of OP0 and OP1 are not passed into externally visible function
+ (because if they are passed then their type, that is also the type of OP0
+ and OP1, will be marked and escaped during check_call function called from
+ scan_for_refs with call stmt).
+
+ In total, 1-5 guaranty that it's an access to array by pointer and index.
+
+*/
+
+static bool
+is_array_access_through_pointer_and_index (tree op0, tree op1)
+{
+ tree base, offset, offset_cast_stmt;
+ tree before_cast, before_cast_def_stmt;
+ cast_t op0_cast, op1_cast;
+
+ /* Check 1. */
+
+ /* Init data for walk_use_def_chains function. */
+ op0_cast.type = op1_cast.type = 0;
+ op0_cast.stmt = op1_cast.stmt = NULL;
+
+ visited_stmts = pointer_set_create ();
+ walk_use_def_chains (op0, is_cast_from_non_pointer,(void *)(&op0_cast), false);
+ pointer_set_destroy (visited_stmts);
+
+ visited_stmts = pointer_set_create ();
+ walk_use_def_chains (op1, is_cast_from_non_pointer,(void *)(&op1_cast), false);
+ pointer_set_destroy (visited_stmts);
+
+ if (op0_cast.type == 1 && op1_cast.type == 0)
+ {
+ base = op1;
+ offset = op0;
+ offset_cast_stmt = op0_cast.stmt;
+ }
+ else if (op0_cast.type == 0 && op1_cast.type == 1)
+ {
+ base = op0;
+ offset = op1;
+ offset_cast_stmt = op1_cast.stmt;
+ }
+ else
+ return false;
+
+ /* Check 2.
+ offset_cast_stmt is of the form:
+ D.1606_7 = (struct str_t *) D.1605_6; */
+
+ before_cast = SINGLE_SSA_TREE_OPERAND (offset_cast_stmt, SSA_OP_USE);
+ if (!before_cast)
+ return false;
+
+ if (SSA_NAME_IS_DEFAULT_DEF(before_cast))
+ return false;
+
+ before_cast_def_stmt = SSA_NAME_DEF_STMT (before_cast);
+ if (!before_cast_def_stmt)
+ return false;
+
+ /* before_cast_def_stmt should be of the form:
+ D.1605_6 = i.1_5 * 16; */
+
+ if (TREE_CODE (before_cast_def_stmt) == GIMPLE_MODIFY_STMT)
+ {
+ tree lhs = GIMPLE_STMT_OPERAND (before_cast_def_stmt,0);
+ tree rhs = GIMPLE_STMT_OPERAND (before_cast_def_stmt,1);
+
+ /* We expect temporary here. */
+ if (!is_gimple_reg (lhs))
+ return false;
+
+ if (TREE_CODE (rhs) == MULT_EXPR)
+ {
+ tree arg0 = TREE_OPERAND (rhs, 0);
+ tree arg1 = TREE_OPERAND (rhs, 1);
+ tree unit_size =
+ TYPE_SIZE_UNIT (TREE_TYPE (TYPE_MAIN_VARIANT (TREE_TYPE (op0))));
+
+ if (!(CONSTANT_CLASS_P (arg0)
+ && simple_cst_equal (arg0,unit_size))
+ && !(CONSTANT_CLASS_P (arg1)
+ && simple_cst_equal (arg1,unit_size)))
+ return false;
+ }
+ else
+ return false;
+ }
+ else
+ return false;
+
+ /* Check 3.
+ check that address of D.1605_6 was not taken.
+ FIXME: if D.1605_6 is gimple reg than it cannot be addressable. */
+
+ return true;
}
/* Register the parameter and return types of function FN. The type
@@ -808,9 +1124,9 @@ check_tree (tree t)
if ((TREE_CODE (t) == EXC_PTR_EXPR) || (TREE_CODE (t) == FILTER_EXPR))
return;
- while (TREE_CODE (t) == REALPART_EXPR
- || TREE_CODE (t) == IMAGPART_EXPR
- || handled_component_p (t))
+ /* We want to catch here also REALPART_EXPR and IMAGEPART_EXPR,
+ but they already included in handled_component_p. */
+ while (handled_component_p (t))
{
if (TREE_CODE (t) == ARRAY_REF)
check_operand (TREE_OPERAND (t, 1));
@@ -873,7 +1189,7 @@ mark_interesting_addressof (tree to_type, tree from_type)
to_uid,
(splay_tree_value)type_map);
}
- bitmap_set_bit (type_map, TYPE_UID (to_type));
+ bitmap_set_bit (type_map, TYPE_UID (from_type));
}
/* Scan tree T to see if there are any addresses taken in within T. */
@@ -912,29 +1228,41 @@ look_for_address_of (tree t)
/* Scan tree T to see if there are any casts within it.
LHS Is the LHS of the expression involving the cast. */
-static void
-look_for_casts (tree lhs __attribute__((unused)), tree t)
+static unsigned int
+look_for_casts (tree lhs ATTRIBUTE_UNUSED, tree t)
{
+ unsigned int cast = 0;
+
+
if (is_gimple_cast (t) || TREE_CODE (t) == VIEW_CONVERT_EXPR)
{
tree castfromvar = TREE_OPERAND (t, 0);
- check_cast (TREE_TYPE (t), castfromvar);
+ cast = cast | check_cast (TREE_TYPE (t), castfromvar);
}
- else
- while (handled_component_p (t))
- {
- t = TREE_OPERAND (t, 0);
- if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
- {
- /* This may be some part of a component ref.
- IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
- castfromref will give you a.b.c, not a. */
- tree castfromref = TREE_OPERAND (t, 0);
- check_cast (TREE_TYPE (t), castfromref);
- }
- else if (TREE_CODE (t) == COMPONENT_REF)
- get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
- }
+ else if (TREE_CODE (t) == COMPONENT_REF
+ || TREE_CODE (t) == INDIRECT_REF
+ || TREE_CODE (t) == BIT_FIELD_REF)
+ {
+ tree base = get_base_address (t);
+ while (t != base)
+ {
+ t = TREE_OPERAND (t, 0);
+ if (TREE_CODE (t) == VIEW_CONVERT_EXPR)
+ {
+ /* This may be some part of a component ref.
+ IE it may be a.b.VIEW_CONVERT_EXPR<weird_type>(c).d, AFAIK.
+ castfromref will give you a.b.c, not a. */
+ tree castfromref = TREE_OPERAND (t, 0);
+ cast = cast | check_cast (TREE_TYPE (t), castfromref);
+ }
+ else if (TREE_CODE (t) == COMPONENT_REF)
+ get_canon_type (TREE_TYPE (TREE_OPERAND (t, 1)), false, false);
+ }
+ }
+
+ if (!cast)
+ cast = CT_NO_CAST;
+ return cast;
}
/* Check to see if T is a read or address of operation on a static var
@@ -1007,10 +1335,9 @@ get_asm_expr_operands (tree stmt)
this is either an indirect call, a call outside the compilation
unit. */
-static bool
+static void
check_call (tree call_expr)
{
- int flags = call_expr_flags(call_expr);
tree operand;
tree callee_t = get_callee_fndecl (call_expr);
struct cgraph_node* callee;
@@ -1118,7 +1445,6 @@ check_call (tree call_expr)
mark_interesting_type (type, EXPOSED_PARAMETER);
}
}
- return (flags & ECF_MALLOC);
}
/* CODE is the operation on OP0 and OP1. OP0 is the operand that we
@@ -1128,18 +1454,39 @@ okay_pointer_operation (enum tree_code code, tree op0, tree op1)
{
tree op0type = TYPE_MAIN_VARIANT (TREE_TYPE (op0));
tree op1type = TYPE_MAIN_VARIANT (TREE_TYPE (op1));
- if (POINTER_TYPE_P (op1type))
- return false;
+
switch (code)
{
case MULT_EXPR:
- case PLUS_EXPR:
+ /* Multiplication does not change alignment. */
+ return true;
+ break;
case MINUS_EXPR:
- /* TODO: Handle multiples of op0 size as well */
- if (operand_equal_p (size_in_bytes (op0type), op1, 0))
- return true;
- /* fallthrough */
+ case PLUS_EXPR:
+ {
+ if (POINTER_TYPE_P (op1type)
+ && TREE_CODE (op0) == SSA_NAME
+ && TREE_CODE (op1) == SSA_NAME
+ && is_array_access_through_pointer_and_index (op0, op1))
+ return true;
+ else
+ {
+ tree size_of_op0_points_to = TYPE_SIZE_UNIT (TREE_TYPE (op0type));
+
+ if (CONSTANT_CLASS_P (op1)
+ && size_of_op0_points_to
+ && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
+ op1, size_of_op0_points_to))
+ return true;
+ if (CONSTANT_CLASS_P (op0)
+ && size_of_op0_points_to
+ && multiple_of_p (TREE_TYPE (size_of_op0_points_to),
+ op0, size_of_op0_points_to))
+ return true;
+ }
+ }
+ break;
default:
return false;
}
@@ -1256,12 +1603,7 @@ scan_for_refs (tree *tp, int *walk_subtrees, void *data)
/* If this is a call to malloc, squirrel away the
result so we do mark the resulting cast as being
bad. */
- if (check_call (rhs))
- {
- if (TREE_CODE (lhs) == SSA_NAME)
- lhs = SSA_NAME_VAR (lhs);
- bitmap_set_bit (results_of_malloc, DECL_UID (lhs));
- }
+ check_call (rhs);
break;
default:
break;
@@ -1307,7 +1649,6 @@ ipa_init (void)
global_types_exposed_parameter = BITMAP_ALLOC (&ipa_obstack);
global_types_full_escape = BITMAP_ALLOC (&ipa_obstack);
global_types_seen = BITMAP_ALLOC (&ipa_obstack);
- results_of_malloc = BITMAP_ALLOC (&ipa_obstack);
uid_to_canon_type = splay_tree_new (splay_tree_compare_ints, 0, 0);
all_canon_types = splay_tree_new (compare_type_brand, 0, 0);
@@ -1810,7 +2151,6 @@ type_escape_execute (void)
BITMAP_FREE (global_types_exposed_parameter);
BITMAP_FREE (been_there_done_that);
BITMAP_FREE (bitmap_tmp);
- BITMAP_FREE (results_of_malloc);
return 0;
}
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index fa8fc0f33c9..b6ff11947fd 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,12 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+
+2007-02-27 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * gcj.texi: Standardize title page.
+
2007-02-18 Kazu Hirata <kazu@codesourcery.com>
* class.c: Fix a comment typo.
diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in
index a2024948a71..f708eea25a3 100644
--- a/gcc/java/Make-lang.in
+++ b/gcc/java/Make-lang.in
@@ -28,8 +28,8 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf,
-# foo.html, foo.uninstall,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -135,8 +135,13 @@ java.srcinfo: doc/gcj.info
-cp -p $^ $(srcdir)/doc
java.dvi: doc/gcj.dvi
-java.pdf: doc/gcj.pdf
+
+JAVA_PDFFILES = doc/gcj.pdf
+
+java.pdf: $(JAVA_PDFFILES)
+
java.html: $(build_htmldir)/java/index.html
+
JAVA_MANFILES = doc/gcj.1 doc/jcf-dump.1 doc/gij.1 \
doc/jv-convert.1 doc/grmic.1 doc/grmiregistry.1 \
doc/gcj-dbtool.1 doc/gc-analyze.1
@@ -187,6 +192,16 @@ java.uninstall:
java.install-info: $(DESTDIR)$(infodir)/gcj.info
+java.install-pdf: $(JAVA_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+ @list='$(JAVA_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
diff --git a/gcc/java/gcj.texi b/gcc/java/gcj.texi
index 8bd9d5bcfb6..75dad644972 100644
--- a/gcc/java/gcj.texi
+++ b/gcc/java/gcj.texi
@@ -89,12 +89,11 @@ man page gfdl(7).
@titlepage
@title GNU gcj
+@versionsubtitle
@author Tom Tromey
@page
@vskip 0pt plus 1filll
-For the @value{which-gcj} Version*
-@sp 1
Published by the Free Software Foundation @*
51 Franklin Street, Fifth Floor@*
Boston, MA 02110-1301, USA@*
diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c
index 3a7fa5fc01f..487c6468de7 100644
--- a/gcc/lambda-code.c
+++ b/gcc/lambda-code.c
@@ -2153,7 +2153,7 @@ replace_uses_equiv_to_x_with_y (struct loop *loop, tree stmt, tree x,
/* Use REPLACEMENTS hash table to cache already created
temporaries. */
in.hash = htab_hash_pointer (use);
- in.from = use;
+ in.base.from = use;
h = htab_find_with_hash (replacements, &in, in.hash);
if (h != NULL)
{
@@ -2198,7 +2198,7 @@ replace_uses_equiv_to_x_with_y (struct loop *loop, tree stmt, tree x,
SET_USE (use_p, var);
h = ggc_alloc (sizeof (struct tree_map));
h->hash = in.hash;
- h->from = use;
+ h->base.from = use;
h->to = var;
loc = htab_find_slot_with_hash (replacements, h, in.hash, INSERT);
gcc_assert ((*(struct tree_map **)loc) == NULL);
@@ -2363,8 +2363,9 @@ can_convert_to_perfect_nest (struct loop *loop)
{
tree arg_stmt = SSA_NAME_DEF_STMT (arg);
- if (bb_for_stmt (arg_stmt)->loop_father
- == loop->inner)
+ if (bb_for_stmt (arg_stmt)
+ && (bb_for_stmt (arg_stmt)->loop_father
+ == loop->inner))
goto fail;
}
}
diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c
index fcf4a2525af..00c82943642 100644
--- a/gcc/loop-iv.c
+++ b/gcc/loop-iv.c
@@ -1261,71 +1261,6 @@ inverse (unsigned HOST_WIDEST_INT x, int mod)
return rslt;
}
-/* Tries to estimate the maximum number of iterations. */
-
-static unsigned HOST_WIDEST_INT
-determine_max_iter (struct niter_desc *desc)
-{
- rtx niter = desc->niter_expr;
- rtx mmin, mmax, left, right;
- unsigned HOST_WIDEST_INT nmax, inc;
-
- if (GET_CODE (niter) == AND
- && GET_CODE (XEXP (niter, 0)) == CONST_INT)
- {
- nmax = INTVAL (XEXP (niter, 0));
- if (!(nmax & (nmax + 1)))
- {
- desc->niter_max = nmax;
- return nmax;
- }
- }
-
- get_mode_bounds (desc->mode, desc->signed_p, desc->mode, &mmin, &mmax);
- nmax = INTVAL (mmax) - INTVAL (mmin);
-
- if (GET_CODE (niter) == UDIV)
- {
- if (GET_CODE (XEXP (niter, 1)) != CONST_INT)
- {
- desc->niter_max = nmax;
- return nmax;
- }
- inc = INTVAL (XEXP (niter, 1));
- niter = XEXP (niter, 0);
- }
- else
- inc = 1;
-
- if (GET_CODE (niter) == PLUS)
- {
- left = XEXP (niter, 0);
- right = XEXP (niter, 0);
-
- if (GET_CODE (right) == CONST_INT)
- right = GEN_INT (-INTVAL (right));
- }
- else if (GET_CODE (niter) == MINUS)
- {
- left = XEXP (niter, 0);
- right = XEXP (niter, 0);
- }
- else
- {
- left = niter;
- right = mmin;
- }
-
- if (GET_CODE (left) == CONST_INT)
- mmax = left;
- if (GET_CODE (right) == CONST_INT)
- mmin = right;
- nmax = INTVAL (mmax) - INTVAL (mmin);
-
- desc->niter_max = nmax / inc;
- return nmax / inc;
-}
-
/* Checks whether register *REG is in set ALT. Callback for for_each_rtx. */
static int
@@ -1457,14 +1392,34 @@ implies_p (rtx a, rtx b)
}
}
+ if (b == const_true_rtx)
+ return true;
+
+ if ((GET_RTX_CLASS (GET_CODE (a)) != RTX_COMM_COMPARE
+ && GET_RTX_CLASS (GET_CODE (a)) != RTX_COMPARE)
+ || (GET_RTX_CLASS (GET_CODE (b)) != RTX_COMM_COMPARE
+ && GET_RTX_CLASS (GET_CODE (b)) != RTX_COMPARE))
+ return false;
+
+ op0 = XEXP (a, 0);
+ op1 = XEXP (a, 1);
+ opb0 = XEXP (b, 0);
+ opb1 = XEXP (b, 1);
+
+ mode = GET_MODE (op0);
+ if (mode != GET_MODE (opb0))
+ mode = VOIDmode;
+ else if (mode == VOIDmode)
+ {
+ mode = GET_MODE (op1);
+ if (mode != GET_MODE (opb1))
+ mode = VOIDmode;
+ }
+
/* A < B implies A + 1 <= B. */
if ((GET_CODE (a) == GT || GET_CODE (a) == LT)
&& (GET_CODE (b) == GE || GET_CODE (b) == LE))
{
- op0 = XEXP (a, 0);
- op1 = XEXP (a, 1);
- opb0 = XEXP (b, 0);
- opb1 = XEXP (b, 1);
if (GET_CODE (a) == GT)
{
@@ -1480,22 +1435,82 @@ implies_p (rtx a, rtx b)
opb1 = r;
}
- mode = GET_MODE (op0);
- if (mode != GET_MODE (opb0))
- mode = VOIDmode;
- else if (mode == VOIDmode)
- {
- mode = GET_MODE (op1);
- if (mode != GET_MODE (opb1))
- mode = VOIDmode;
- }
-
if (SCALAR_INT_MODE_P (mode)
&& rtx_equal_p (op1, opb1)
&& simplify_gen_binary (MINUS, mode, opb0, op0) == const1_rtx)
return true;
+ return false;
}
+ /* A < B or A > B imply A != B. TODO: Likewise
+ A + n < B implies A != B + n if neither wraps. */
+ if (GET_CODE (b) == NE
+ && (GET_CODE (a) == GT || GET_CODE (a) == GTU
+ || GET_CODE (a) == LT || GET_CODE (a) == LTU))
+ {
+ if (rtx_equal_p (op0, opb0)
+ && rtx_equal_p (op1, opb1))
+ return true;
+ }
+
+ /* For unsigned comparisons, A != 0 implies A > 0 and A >= 1. */
+ if (GET_CODE (a) == NE
+ && op1 == const0_rtx)
+ {
+ if ((GET_CODE (b) == GTU
+ && opb1 == const0_rtx)
+ || (GET_CODE (b) == GEU
+ && opb1 == const1_rtx))
+ return rtx_equal_p (op0, opb0);
+ }
+
+ /* A != N is equivalent to A - (N + 1) <u -1. */
+ if (GET_CODE (a) == NE
+ && GET_CODE (op1) == CONST_INT
+ && GET_CODE (b) == LTU
+ && opb1 == constm1_rtx
+ && GET_CODE (opb0) == PLUS
+ && GET_CODE (XEXP (opb0, 1)) == CONST_INT
+ /* Avoid overflows. */
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (opb0, 1))
+ != ((unsigned HOST_WIDE_INT)1
+ << (HOST_BITS_PER_WIDE_INT - 1)) - 1)
+ && INTVAL (XEXP (opb0, 1)) + 1 == -INTVAL (op1))
+ return rtx_equal_p (op0, XEXP (opb0, 0));
+
+ /* Likewise, A != N implies A - N > 0. */
+ if (GET_CODE (a) == NE
+ && GET_CODE (op1) == CONST_INT)
+ {
+ if (GET_CODE (b) == GTU
+ && GET_CODE (opb0) == PLUS
+ && opb1 == const0_rtx
+ && GET_CODE (XEXP (opb0, 1)) == CONST_INT
+ /* Avoid overflows. */
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (opb0, 1))
+ != ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1)))
+ && rtx_equal_p (XEXP (opb0, 0), op0))
+ return INTVAL (op1) == -INTVAL (XEXP (opb0, 1));
+ if (GET_CODE (b) == GEU
+ && GET_CODE (opb0) == PLUS
+ && opb1 == const1_rtx
+ && GET_CODE (XEXP (opb0, 1)) == CONST_INT
+ /* Avoid overflows. */
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (opb0, 1))
+ != ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1)))
+ && rtx_equal_p (XEXP (opb0, 0), op0))
+ return INTVAL (op1) == -INTVAL (XEXP (opb0, 1));
+ }
+
+ /* A >s X, where X is positive, implies A <u Y, if Y is negative. */
+ if ((GET_CODE (a) == GT || GET_CODE (a) == GE)
+ && GET_CODE (op1) == CONST_INT
+ && ((GET_CODE (a) == GT && op1 == constm1_rtx)
+ || INTVAL (op1) >= 0)
+ && GET_CODE (b) == LTU
+ && GET_CODE (opb1) == CONST_INT)
+ return INTVAL (opb1) < 0;
+
return false;
}
@@ -1796,6 +1811,11 @@ simplify_using_initial_values (struct loop *loop, enum rtx_code op, rtx *expr)
FREE_REG_SET (altered);
return;
}
+ if (for_each_rtx (expr, altered_reg_used, altered))
+ {
+ FREE_REG_SET (altered);
+ return;
+ }
}
if (!single_pred_p (e->src)
@@ -1981,6 +2001,57 @@ canonicalize_iv_subregs (struct rtx_iv *iv0, struct rtx_iv *iv1,
return true;
}
+/* Tries to estimate the maximum number of iterations. */
+
+static unsigned HOST_WIDEST_INT
+determine_max_iter (struct loop *loop, struct niter_desc *desc)
+{
+ rtx niter = desc->niter_expr;
+ rtx mmin, mmax, cmp;
+ unsigned HOST_WIDEST_INT nmax, inc;
+
+ if (GET_CODE (niter) == AND
+ && GET_CODE (XEXP (niter, 0)) == CONST_INT)
+ {
+ nmax = INTVAL (XEXP (niter, 0));
+ if (!(nmax & (nmax + 1)))
+ {
+ desc->niter_max = nmax;
+ return nmax;
+ }
+ }
+
+ get_mode_bounds (desc->mode, desc->signed_p, desc->mode, &mmin, &mmax);
+ nmax = INTVAL (mmax) - INTVAL (mmin);
+
+ if (GET_CODE (niter) == UDIV)
+ {
+ if (GET_CODE (XEXP (niter, 1)) != CONST_INT)
+ {
+ desc->niter_max = nmax;
+ return nmax;
+ }
+ inc = INTVAL (XEXP (niter, 1));
+ niter = XEXP (niter, 0);
+ }
+ else
+ inc = 1;
+
+ /* We could use a binary search here, but for now improving the upper
+ bound by just one eliminates one important corner case. */
+ cmp = gen_rtx_fmt_ee (desc->signed_p ? LT : LTU, VOIDmode, niter, mmax);
+ simplify_using_initial_values (loop, UNKNOWN, &cmp);
+ if (cmp == const_true_rtx)
+ {
+ nmax--;
+
+ if (dump_file)
+ fprintf (dump_file, ";; improved upper bound by one.\n");
+ }
+ desc->niter_max = nmax / inc;
+ return nmax / inc;
+}
+
/* Computes number of iterations of the CONDITION in INSN in LOOP and stores
the result into DESC. Very similar to determine_number_of_iterations
(basically its rtl version), complicated by things like subregs. */
@@ -2499,7 +2570,7 @@ iv_number_of_iterations (struct loop *loop, rtx insn, rtx condition,
else
{
if (!desc->niter_max)
- desc->niter_max = determine_max_iter (desc);
+ desc->niter_max = determine_max_iter (loop, desc);
/* simplify_using_initial_values does a copy propagation on the registers
in the expression for the number of iterations. This prolongs life
diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c
index 63eebed3183..0ef434ce8bf 100644
--- a/gcc/loop-unroll.c
+++ b/gcc/loop-unroll.c
@@ -879,7 +879,37 @@ split_edge_and_insert (edge e, rtx insns)
return NULL;
bb = split_edge (e);
emit_insn_after (insns, BB_END (bb));
- bb->flags |= BB_SUPERBLOCK;
+
+ /* ??? We used to assume that INSNS can contain control flow insns, and
+ that we had to try to find sub basic blocks in BB to maintain a valid
+ CFG. For this purpose we used to set the BB_SUPERBLOCK flag on BB
+ and call break_superblocks when going out of cfglayout mode. But it
+ turns out that this never happens; and that if it does ever happen,
+ the verify_flow_info call in loop_optimizer_finalize would fail.
+
+ There are two reasons why we expected we could have control flow insns
+ in INSNS. The first is when a comparison has to be done in parts, and
+ the second is when the number of iterations is computed for loops with
+ the number of iterations known at runtime. In both cases, test cases
+ to get control flow in INSNS appear to be impossible to construct:
+
+ * If do_compare_rtx_and_jump needs several branches to do comparison
+ in a mode that needs comparison by parts, we cannot analyze the
+ number of iterations of the loop, and we never get to unrolling it.
+
+ * The code in expand_divmod that was suspected to cause creation of
+ branching code seems to be only accessed for signed division. The
+ divisions used by # of iterations analysis are always unsigned.
+ Problems might arise on architectures that emits branching code
+ for some operations that may appear in the unroller (especially
+ for division), but we have no such architectures.
+
+ Considering all this, it was decided that we should for now assume
+ that INSNS can in theory contain control flow insns, but in practice
+ it never does. So we don't handle the theoretical case, and should
+ a real failure ever show up, we have a pretty good clue for how to
+ fix it. */
+
return bb;
}
@@ -1588,7 +1618,15 @@ analyze_insn_to_expand_var (struct loop *loop, rtx insn)
|| FLOAT_MODE_P (mode2))
&& !flag_unsafe_math_optimizations)
return NULL;
-
+
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ "\n;; Expanding Accumulator ");
+ print_rtl (dump_file, dest);
+ fprintf (dump_file, "\n");
+ }
+
/* Record the accumulator to expand. */
ves = XNEW (struct var_to_expand);
ves->insn = insn;
diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
index 22a40e629b1..e911205f460 100644
--- a/gcc/lower-subreg.c
+++ b/gcc/lower-subreg.c
@@ -35,6 +35,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "recog.h"
#include "bitmap.h"
#include "expr.h"
+#include "except.h"
#include "regs.h"
#include "tree-pass.h"
@@ -1051,6 +1052,8 @@ decompose_multiword_subregs (bool update_life)
int max_regno = max_reg_num ();
sbitmap life_blocks;
sbitmap sub_blocks;
+ unsigned int i;
+ sbitmap_iterator sbi;
bitmap_iterator iter;
unsigned int regno;
@@ -1105,6 +1108,21 @@ decompose_multiword_subregs (bool update_life)
rtx orig_insn = insn;
bool cfi = control_flow_insn_p (insn);
+ /* We can end up splitting loads to multi-word pseudos
+ into separate loads to machine word size pseudos.
+ When this happens, we first had one load that can
+ throw, and after resolve_simple_move we'll have a
+ bunch of loads (at least two). All those loads may
+ trap if we can have non-call exceptions, so they
+ all will end the current basic block. We split the
+ block after the outer loop over all insns, but we
+ make sure here that we will be able to split the
+ basic block and still produce the correct control
+ flow graph for it. */
+ gcc_assert (!cfi
+ || (flag_non_call_exceptions
+ && can_throw_internal (insn)));
+
insn = resolve_simple_move (set, insn);
if (insn != orig_insn)
{
@@ -1157,8 +1175,35 @@ decompose_multiword_subregs (bool update_life)
update_life_info (life_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES,
PROP_DEATH_NOTES);
- if (sbitmap_first_set_bit (sub_blocks) >= 0)
- find_many_sub_basic_blocks (sub_blocks);
+ /* If we had insns to split that caused control flow insns in the middle
+ of a basic block, split those blocks now. Note that we only handle
+ the case where splitting a load has caused multiple possibly trapping
+ loads to appear. */
+ EXECUTE_IF_SET_IN_SBITMAP (sub_blocks, 0, i, sbi)
+ {
+ rtx insn, end;
+ edge fallthru;
+
+ bb = BASIC_BLOCK (i);
+ insn = BB_HEAD (bb);
+ end = BB_END (bb);
+
+ while (insn != end)
+ {
+ if (control_flow_insn_p (insn))
+ {
+ /* Split the block after insn. There will be a fallthru
+ edge, which is OK so we keep it. We have to create the
+ exception edges ourselves. */
+ fallthru = split_block (bb, insn);
+ rtl_make_eh_edge (NULL, bb, BB_END (bb));
+ bb = fallthru->dest;
+ insn = BB_HEAD (bb);
+ }
+ else
+ insn = NEXT_INSN (insn);
+ }
+ }
sbitmap_free (life_blocks);
sbitmap_free (sub_blocks);
diff --git a/gcc/mode-switching.c b/gcc/mode-switching.c
index 407ae76a8c6..8e9bde302a3 100644
--- a/gcc/mode-switching.c
+++ b/gcc/mode-switching.c
@@ -259,6 +259,12 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
last_insn = return_copy;
continue;
}
+ if (GET_CODE (PATTERN (return_copy)) == ASM_INPUT
+ && strcmp (XSTR (PATTERN (return_copy), 0), "") == 0)
+ {
+ last_insn = return_copy;
+ continue;
+ }
/* If the return register is not (in its entirety)
likely spilled, the return copy might be
partially or completely optimized away. */
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index df636e80db3..76c342854ad 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add dummy lang.install-pdf target.
+
2007-02-18 Kazu Hirata <kazu@codesourcery.com>
* objc/objc-act.c: Fix comment typos.
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
index 41463f2bcdd..30872cbcd2f 100644
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -23,8 +23,8 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf
-# foo.uninstall,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -91,6 +91,7 @@ objc.info:
objc.install-info:
objc.dvi:
objc.pdf:
+objc.install-pdf:
objc.html:
objc.man:
objc.srcinfo:
diff --git a/gcc/objcp/ChangeLog b/gcc/objcp/ChangeLog
index 86a060069e9..560705b3f7b 100644
--- a/gcc/objcp/ChangeLog
+++ b/gcc/objcp/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add dummy lang.install-pdf target.
+
2006-10-23 Rafael Avila de Espindola <rafael.espindola@gmail.com>
* objcp-decl.h (objcp_builtin_function): Remove.
diff --git a/gcc/objcp/Make-lang.in b/gcc/objcp/Make-lang.in
index 997987a74da..7a1c55d8438 100644
--- a/gcc/objcp/Make-lang.in
+++ b/gcc/objcp/Make-lang.in
@@ -23,8 +23,8 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf
-# foo.uninstall,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -99,6 +99,7 @@ obj-c++.info:
obj-c++.install-info:
obj-c++.dvi:
obj-c++.pdf:
+obj-c++.install-pdf:
obj-c++.html:
obj-c++.srcinfo:
obj-c++.srcextra:
diff --git a/gcc/omega.c b/gcc/omega.c
new file mode 100644
index 00000000000..9f5abaf406b
--- /dev/null
+++ b/gcc/omega.c
@@ -0,0 +1,5583 @@
+/* Source code for an implementation of the Omega test, an integer
+ programming algorithm for dependence analysis, by William Pugh,
+ appeared in Supercomputing '91 and CACM Aug 92.
+
+ This code has no license restrictions, and is considered public
+ domain.
+
+ Changes copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+ Contributed by Sebastian Pop <sebastian.pop@inria.fr>
+
+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. */
+
+/* For a detailed description, see "Constraint-Based Array Dependence
+ Analysis" William Pugh, David Wonnacott, TOPLAS'98 and David
+ Wonnacott's thesis:
+ ftp://ftp.cs.umd.edu/pub/omega/davewThesis/davewThesis.ps.gz
+*/
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "errors.h"
+#include "ggc.h"
+#include "tree.h"
+#include "diagnostic.h"
+#include "varray.h"
+#include "tree-pass.h"
+#include "omega.h"
+
+/* When set to true, keep substitution variables. When set to false,
+ resurrect substitution variables (convert substitutions back to EQs). */
+static bool omega_reduce_with_subs = true;
+
+/* When set to true, omega_simplify_problem checks for problem with no
+ solutions, calling verify_omega_pb. */
+static bool omega_verify_simplification = false;
+
+/* When set to true, only produce a single simplified result. */
+static bool omega_single_result = false;
+
+/* Set return_single_result to 1 when omega_single_result is true. */
+static int return_single_result = 0;
+
+/* Hash table for equations generated by the solver. */
+#define HASH_TABLE_SIZE PARAM_VALUE (PARAM_OMEGA_HASH_TABLE_SIZE)
+#define MAX_KEYS PARAM_VALUE (PARAM_OMEGA_MAX_KEYS)
+static eqn hash_master;
+static int next_key;
+static int hash_version = 0;
+
+/* Set to true for making the solver enter in approximation mode. */
+static bool in_approximate_mode = false;
+
+/* When set to zero, the solver is allowed to add new equalities to
+ the problem to be solved. */
+static int conservative = 0;
+
+/* Set to omega_true when the problem was successfully reduced, set to
+ omega_unknown when the solver is unable to determine an answer. */
+static enum omega_result omega_found_reduction;
+
+/* Set to true when the solver is allowed to add omega_red equations. */
+static bool create_color = false;
+
+/* Set to nonzero when the problem to be solved can be reduced. */
+static int may_be_red = 0;
+
+/* When false, there should be no substitution equations in the
+ simplified problem. */
+static int please_no_equalities_in_simplified_problems = 0;
+
+/* Variables names for pretty printing. */
+static char wild_name[200][40];
+
+/* Pointer to the void problem. */
+static omega_pb no_problem = (omega_pb) 0;
+
+/* Pointer to the problem to be solved. */
+static omega_pb original_problem = (omega_pb) 0;
+
+
+/* Return the integer A divided by B. */
+
+static inline int
+int_div (int a, int b)
+{
+ if (a > 0)
+ return a/b;
+ else
+ return -((-a + b - 1)/b);
+}
+
+/* Return the integer A modulo B. */
+
+static inline int
+int_mod (int a, int b)
+{
+ return a - b * int_div (a, b);
+}
+
+/* For X and Y positive integers, return X multiplied by Y and check
+ that the result does not overflow. */
+
+static inline int
+check_pos_mul (int x, int y)
+{
+ if (x != 0)
+ gcc_assert ((INT_MAX) / x > y);
+
+ return x * y;
+}
+
+/* Return X multiplied by Y and check that the result does not
+ overflow. */
+
+static inline int
+check_mul (int x, int y)
+{
+ if (x >= 0)
+ {
+ if (y >= 0)
+ return check_pos_mul (x, y);
+ else
+ return -check_pos_mul (x, -y);
+ }
+ else if (y >= 0)
+ return -check_pos_mul (-x, y);
+ else
+ return check_pos_mul (-x, -y);
+}
+
+/* Test whether equation E is red. */
+
+static inline bool
+omega_eqn_is_red (eqn e, int desired_res)
+{
+ return (desired_res == omega_simplify && e->color == omega_red);
+}
+
+/* Return a string for VARIABLE. */
+
+static inline char *
+omega_var_to_str (int variable)
+{
+ if (0 <= variable && variable <= 20)
+ return wild_name[variable];
+
+ if (-20 < variable && variable < 0)
+ return wild_name[40 + variable];
+
+ /* Collapse all the entries that would have overflowed. */
+ return wild_name[21];
+}
+
+/* Return a string for variable I in problem PB. */
+
+static inline char *
+omega_variable_to_str (omega_pb pb, int i)
+{
+ return omega_var_to_str (pb->var[i]);
+}
+
+/* Do nothing function: used for default initializations. */
+
+void
+omega_no_procedure (omega_pb pb ATTRIBUTE_UNUSED)
+{
+}
+
+void (*omega_when_reduced) (omega_pb) = omega_no_procedure;
+
+/* Compute the greatest common divisor of A and B. */
+
+static inline int
+gcd (int b, int a)
+{
+ if (b == 1)
+ return 1;
+
+ while (b != 0)
+ {
+ int t = b;
+ b = a % b;
+ a = t;
+ }
+
+ return a;
+}
+
+/* Print to FILE from PB equation E with all its coefficients
+ multiplied by C. */
+
+static void
+omega_print_term (FILE *file, omega_pb pb, eqn e, int c)
+{
+ int i;
+ bool first = true;
+ int n = pb->num_vars;
+ int went_first = -1;
+
+ for (i = 1; i <= n; i++)
+ if (c * e->coef[i] > 0)
+ {
+ first = false;
+ went_first = i;
+
+ if (c * e->coef[i] == 1)
+ fprintf (file, "%s", omega_variable_to_str (pb, i));
+ else
+ fprintf (file, "%d * %s", c * e->coef[i],
+ omega_variable_to_str (pb, i));
+ break;
+ }
+
+ for (i = 1; i <= n; i++)
+ if (i != went_first && c * e->coef[i] != 0)
+ {
+ if (!first && c * e->coef[i] > 0)
+ fprintf (file, " + ");
+
+ first = false;
+
+ if (c * e->coef[i] == 1)
+ fprintf (file, "%s", omega_variable_to_str (pb, i));
+ else if (c * e->coef[i] == -1)
+ fprintf (file, " - %s", omega_variable_to_str (pb, i));
+ else
+ fprintf (file, "%d * %s", c * e->coef[i],
+ omega_variable_to_str (pb, i));
+ }
+
+ if (!first && c * e->coef[0] > 0)
+ fprintf (file, " + ");
+
+ if (first || c * e->coef[0] != 0)
+ fprintf (file, "%d", c * e->coef[0]);
+}
+
+/* Print to FILE the equation E of problem PB. */
+
+void
+omega_print_eqn (FILE *file, omega_pb pb, eqn e, bool test, int extra)
+{
+ int i;
+ int n = pb->num_vars + extra;
+ bool is_lt = test && e->coef[0] == -1;
+ bool first;
+
+ if (test)
+ {
+ if (e->touched)
+ fprintf (file, "!");
+
+ else if (e->key != 0)
+ fprintf (file, "%d: ", e->key);
+ }
+
+ if (e->color == omega_red)
+ fprintf (file, "[");
+
+ first = true;
+
+ for (i = is_lt ? 1 : 0; i <= n; i++)
+ if (e->coef[i] < 0)
+ {
+ if (!first)
+ fprintf (file, " + ");
+ else
+ first = false;
+
+ if (i == 0)
+ fprintf (file, "%d", -e->coef[i]);
+ else if (e->coef[i] == -1)
+ fprintf (file, "%s", omega_variable_to_str (pb, i));
+ else
+ fprintf (file, "%d * %s", -e->coef[i],
+ omega_variable_to_str (pb, i));
+ }
+
+ if (first)
+ {
+ if (is_lt)
+ {
+ fprintf (file, "1");
+ is_lt = false;
+ }
+ else
+ fprintf (file, "0");
+ }
+
+ if (test == 0)
+ fprintf (file, " = ");
+ else if (is_lt)
+ fprintf (file, " < ");
+ else
+ fprintf (file, " <= ");
+
+ first = true;
+
+ for (i = 0; i <= n; i++)
+ if (e->coef[i] > 0)
+ {
+ if (!first)
+ fprintf (file, " + ");
+ else
+ first = false;
+
+ if (i == 0)
+ fprintf (file, "%d", e->coef[i]);
+ else if (e->coef[i] == 1)
+ fprintf (file, "%s", omega_variable_to_str (pb, i));
+ else
+ fprintf (file, "%d * %s", e->coef[i],
+ omega_variable_to_str (pb, i));
+ }
+
+ if (first)
+ fprintf (file, "0");
+
+ if (e->color == omega_red)
+ fprintf (file, "]");
+}
+
+/* Print to FILE all the variables of problem PB. */
+
+static void
+omega_print_vars (FILE *file, omega_pb pb)
+{
+ int i;
+
+ fprintf (file, "variables = ");
+
+ if (pb->safe_vars > 0)
+ fprintf (file, "protected (");
+
+ for (i = 1; i <= pb->num_vars; i++)
+ {
+ fprintf (file, "%s", omega_variable_to_str (pb, i));
+
+ if (i == pb->safe_vars)
+ fprintf (file, ")");
+
+ if (i < pb->num_vars)
+ fprintf (file, ", ");
+ }
+
+ fprintf (file, "\n");
+}
+
+/* Debug problem PB. */
+
+void
+debug_omega_problem (omega_pb pb)
+{
+ omega_print_problem (stderr, pb);
+}
+
+/* Print to FILE problem PB. */
+
+void
+omega_print_problem (FILE *file, omega_pb pb)
+{
+ int e;
+
+ if (!pb->variables_initialized)
+ omega_initialize_variables (pb);
+
+ omega_print_vars (file, pb);
+
+ for (e = 0; e < pb->num_eqs; e++)
+ {
+ omega_print_eq (file, pb, &pb->eqs[e]);
+ fprintf (file, "\n");
+ }
+
+ fprintf (file, "Done with EQ\n");
+
+ for (e = 0; e < pb->num_geqs; e++)
+ {
+ omega_print_geq (file, pb, &pb->geqs[e]);
+ fprintf (file, "\n");
+ }
+
+ fprintf (file, "Done with GEQ\n");
+
+ for (e = 0; e < pb->num_subs; e++)
+ {
+ eqn eq = &pb->subs[e];
+
+ if (eq->color == omega_red)
+ fprintf (file, "[");
+
+ if (eq->key > 0)
+ fprintf (file, "%s := ", omega_var_to_str (eq->key));
+ else
+ fprintf (file, "#%d := ", eq->key);
+
+ omega_print_term (file, pb, eq, 1);
+
+ if (eq->color == omega_red)
+ fprintf (file, "]");
+
+ fprintf (file, "\n");
+ }
+}
+
+/* Return the number of equations in PB tagged omega_red. */
+
+int
+omega_count_red_equations (omega_pb pb)
+{
+ int e, i;
+ int result = 0;
+
+ for (e = 0; e < pb->num_eqs; e++)
+ if (pb->eqs[e].color == omega_red)
+ {
+ for (i = pb->num_vars; i > 0; i--)
+ if (pb->geqs[e].coef[i])
+ break;
+
+ if (i == 0 && pb->geqs[e].coef[0] == 1)
+ return 0;
+ else
+ result += 2;
+ }
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].color == omega_red)
+ result += 1;
+
+ for (e = 0; e < pb->num_subs; e++)
+ if (pb->subs[e].color == omega_red)
+ result += 2;
+
+ return result;
+}
+
+/* Print to FILE all the equations in PB that are tagged omega_red. */
+
+void
+omega_print_red_equations (FILE *file, omega_pb pb)
+{
+ int e;
+
+ if (!pb->variables_initialized)
+ omega_initialize_variables (pb);
+
+ omega_print_vars (file, pb);
+
+ for (e = 0; e < pb->num_eqs; e++)
+ if (pb->eqs[e].color == omega_red)
+ {
+ omega_print_eq (file, pb, &pb->eqs[e]);
+ fprintf (file, "\n");
+ }
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].color == omega_red)
+ {
+ omega_print_geq (file, pb, &pb->geqs[e]);
+ fprintf (file, "\n");
+ }
+
+ for (e = 0; e < pb->num_subs; e++)
+ if (pb->subs[e].color == omega_red)
+ {
+ eqn eq = &pb->subs[e];
+ fprintf (file, "[");
+
+ if (eq->key > 0)
+ fprintf (file, "%s := ", omega_var_to_str (eq->key));
+ else
+ fprintf (file, "#%d := ", eq->key);
+
+ omega_print_term (file, pb, eq, 1);
+ fprintf (file, "]\n");
+ }
+}
+
+/* Pretty print PB to FILE. */
+
+void
+omega_pretty_print_problem (FILE *file, omega_pb pb)
+{
+ int e, v, v1, v2, v3, t;
+ bool *live = XNEWVEC (bool, OMEGA_MAX_GEQS);
+ int stuffPrinted = 0;
+ bool change;
+
+ typedef enum {
+ none, le, lt
+ } partial_order_type;
+
+ partial_order_type **po = XNEWVEC (partial_order_type *,
+ OMEGA_MAX_VARS * OMEGA_MAX_VARS);
+ int **po_eq = XNEWVEC (int *, OMEGA_MAX_VARS * OMEGA_MAX_VARS);
+ int *last_links = XNEWVEC (int, OMEGA_MAX_VARS);
+ int *first_links = XNEWVEC (int, OMEGA_MAX_VARS);
+ int *chain_length = XNEWVEC (int, OMEGA_MAX_VARS);
+ int *chain = XNEWVEC (int, OMEGA_MAX_VARS);
+ int i, m;
+ bool multiprint;
+
+ if (!pb->variables_initialized)
+ omega_initialize_variables (pb);
+
+ if (pb->num_vars > 0)
+ {
+ omega_eliminate_redundant (pb, false);
+
+ for (e = 0; e < pb->num_eqs; e++)
+ {
+ if (stuffPrinted)
+ fprintf (file, "; ");
+
+ stuffPrinted = 1;
+ omega_print_eq (file, pb, &pb->eqs[e]);
+ }
+
+ for (e = 0; e < pb->num_geqs; e++)
+ live[e] = true;
+
+ while (1)
+ {
+ for (v = 1; v <= pb->num_vars; v++)
+ {
+ last_links[v] = first_links[v] = 0;
+ chain_length[v] = 0;
+
+ for (v2 = 1; v2 <= pb->num_vars; v2++)
+ po[v][v2] = none;
+ }
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (live[e])
+ {
+ for (v = 1; v <= pb->num_vars; v++)
+ if (pb->geqs[e].coef[v] == 1)
+ first_links[v]++;
+ else if (pb->geqs[e].coef[v] == -1)
+ last_links[v]++;
+
+ v1 = pb->num_vars;
+
+ while (v1 > 0 && pb->geqs[e].coef[v1] == 0)
+ v1--;
+
+ v2 = v1 - 1;
+
+ while (v2 > 0 && pb->geqs[e].coef[v2] == 0)
+ v2--;
+
+ v3 = v2 - 1;
+
+ while (v3 > 0 && pb->geqs[e].coef[v3] == 0)
+ v3--;
+
+ if (pb->geqs[e].coef[0] > 0 || pb->geqs[e].coef[0] < -1
+ || v2 <= 0 || v3 > 0
+ || pb->geqs[e].coef[v1] * pb->geqs[e].coef[v2] != -1)
+ {
+ /* Not a partial order relation. */
+ }
+ else
+ {
+ if (pb->geqs[e].coef[v1] == 1)
+ {
+ v3 = v2;
+ v2 = v1;
+ v1 = v3;
+ }
+
+ /* Relation is v1 <= v2 or v1 < v2. */
+ po[v1][v2] = ((pb->geqs[e].coef[0] == 0) ? le : lt);
+ po_eq[v1][v2] = e;
+ }
+ }
+ for (v = 1; v <= pb->num_vars; v++)
+ chain_length[v] = last_links[v];
+
+ /* Just in case pb->num_vars <= 0. */
+ change = false;
+ for (t = 0; t < pb->num_vars; t++)
+ {
+ change = false;
+
+ for (v1 = 1; v1 <= pb->num_vars; v1++)
+ for (v2 = 1; v2 <= pb->num_vars; v2++)
+ if (po[v1][v2] != none &&
+ chain_length[v1] <= chain_length[v2])
+ {
+ chain_length[v1] = chain_length[v2] + 1;
+ change = true;
+ }
+ }
+
+ /* Caught in cycle. */
+ gcc_assert (!change);
+
+ for (v1 = 1; v1 <= pb->num_vars; v1++)
+ if (chain_length[v1] == 0)
+ first_links[v1] = 0;
+
+ v = 1;
+
+ for (v1 = 2; v1 <= pb->num_vars; v1++)
+ if (chain_length[v1] + first_links[v1] >
+ chain_length[v] + first_links[v])
+ v = v1;
+
+ if (chain_length[v] + first_links[v] == 0)
+ break;
+
+ if (stuffPrinted)
+ fprintf (file, "; ");
+
+ stuffPrinted = 1;
+
+ /* Chain starts at v. */
+ {
+ int tmp;
+ bool first = true;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (live[e] && pb->geqs[e].coef[v] == 1)
+ {
+ if (!first)
+ fprintf (file, ", ");
+
+ tmp = pb->geqs[e].coef[v];
+ pb->geqs[e].coef[v] = 0;
+ omega_print_term (file, pb, &pb->geqs[e], -1);
+ pb->geqs[e].coef[v] = tmp;
+ live[e] = false;
+ first = false;
+ }
+
+ if (!first)
+ fprintf (file, " <= ");
+ }
+
+ /* Find chain. */
+ chain[0] = v;
+ m = 1;
+ while (1)
+ {
+ /* Print chain. */
+ for (v2 = 1; v2 <= pb->num_vars; v2++)
+ if (po[v][v2] && chain_length[v] == 1 + chain_length[v2])
+ break;
+
+ if (v2 > pb->num_vars)
+ break;
+
+ chain[m++] = v2;
+ v = v2;
+ }
+
+ fprintf (file, "%s", omega_variable_to_str (pb, chain[0]));
+
+ for (multiprint = false, i = 1; i < m; i++)
+ {
+ v = chain[i - 1];
+ v2 = chain[i];
+
+ if (po[v][v2] == le)
+ fprintf (file, " <= ");
+ else
+ fprintf (file, " < ");
+
+ fprintf (file, "%s", omega_variable_to_str (pb, v2));
+ live[po_eq[v][v2]] = false;
+
+ if (!multiprint && i < m - 1)
+ for (v3 = 1; v3 <= pb->num_vars; v3++)
+ {
+ if (v == v3 || v2 == v3
+ || po[v][v2] != po[v][v3]
+ || po[v2][chain[i + 1]] != po[v3][chain[i + 1]])
+ continue;
+
+ fprintf (file, ",%s", omega_variable_to_str (pb, v3));
+ live[po_eq[v][v3]] = false;
+ live[po_eq[v3][chain[i + 1]]] = false;
+ multiprint = true;
+ }
+ else
+ multiprint = false;
+ }
+
+ v = chain[m - 1];
+ /* Print last_links. */
+ {
+ int tmp;
+ bool first = true;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (live[e] && pb->geqs[e].coef[v] == -1)
+ {
+ if (!first)
+ fprintf (file, ", ");
+ else
+ fprintf (file, " <= ");
+
+ tmp = pb->geqs[e].coef[v];
+ pb->geqs[e].coef[v] = 0;
+ omega_print_term (file, pb, &pb->geqs[e], 1);
+ pb->geqs[e].coef[v] = tmp;
+ live[e] = false;
+ first = false;
+ }
+ }
+ }
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (live[e])
+ {
+ if (stuffPrinted)
+ fprintf (file, "; ");
+ stuffPrinted = 1;
+ omega_print_geq (file, pb, &pb->geqs[e]);
+ }
+
+ for (e = 0; e < pb->num_subs; e++)
+ {
+ eqn eq = &pb->subs[e];
+
+ if (stuffPrinted)
+ fprintf (file, "; ");
+
+ stuffPrinted = 1;
+
+ if (eq->key > 0)
+ fprintf (file, "%s := ", omega_var_to_str (eq->key));
+ else
+ fprintf (file, "#%d := ", eq->key);
+
+ omega_print_term (file, pb, eq, 1);
+ }
+ }
+
+ free (live);
+ free (po);
+ free (po_eq);
+ free (last_links);
+ free (first_links);
+ free (chain_length);
+ free (chain);
+}
+
+/* Assign to variable I in PB the next wildcard name. The name of a
+ wildcard is a negative number. */
+static int next_wild_card = 0;
+
+static void
+omega_name_wild_card (omega_pb pb, int i)
+{
+ --next_wild_card;
+ if (next_wild_card < -PARAM_VALUE (PARAM_OMEGA_MAX_WILD_CARDS))
+ next_wild_card = -1;
+ pb->var[i] = next_wild_card;
+}
+
+/* Return the index of the last protected (or safe) variable in PB,
+ after having added a new wildcard variable. */
+
+static int
+omega_add_new_wild_card (omega_pb pb)
+{
+ int e;
+ int i = ++pb->safe_vars;
+ pb->num_vars++;
+
+ /* Make a free place in the protected (safe) variables, by moving
+ the non protected variable pointed by "I" at the end, ie. at
+ offset pb->num_vars. */
+ if (pb->num_vars != i)
+ {
+ /* Move "I" for all the inequalities. */
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ if (pb->geqs[e].coef[i])
+ pb->geqs[e].touched = 1;
+
+ pb->geqs[e].coef[pb->num_vars] = pb->geqs[e].coef[i];
+ }
+
+ /* Move "I" for all the equalities. */
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[pb->num_vars] = pb->eqs[e].coef[i];
+
+ /* Move "I" for all the substitutions. */
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[pb->num_vars] = pb->subs[e].coef[i];
+
+ /* Move the identifier. */
+ pb->var[pb->num_vars] = pb->var[i];
+ }
+
+ /* Initialize at zero all the coefficients */
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].coef[i] = 0;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[i] = 0;
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[i] = 0;
+
+ /* And give it a name. */
+ omega_name_wild_card (pb, i);
+ return i;
+}
+
+/* Delete inequality E from problem PB that has N_VARS variables. */
+
+static void
+omega_delete_geq (omega_pb pb, int e, int n_vars)
+{
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Deleting %d (last:%d): ", e, pb->num_geqs - 1);
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ }
+
+ if (e < pb->num_geqs - 1)
+ omega_copy_eqn (&pb->geqs[e], &pb->geqs[pb->num_geqs - 1], n_vars);
+
+ pb->num_geqs--;
+}
+
+/* Delete extra inequality E from problem PB that has N_VARS
+ variables. */
+
+static void
+omega_delete_geq_extra (omega_pb pb, int e, int n_vars)
+{
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Deleting %d: ",e);
+ omega_print_geq_extra (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ }
+
+ if (e < pb->num_geqs - 1)
+ omega_copy_eqn (&pb->geqs[e], &pb->geqs[pb->num_geqs - 1], n_vars);
+
+ pb->num_geqs--;
+}
+
+
+/* Remove variable I from problem PB. */
+
+static void
+omega_delete_variable (omega_pb pb, int i)
+{
+ int n_vars = pb->num_vars;
+ int e;
+
+ if (omega_safe_var_p (pb, i))
+ {
+ int j = pb->safe_vars;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].coef[i] = pb->geqs[e].coef[j];
+ pb->geqs[e].coef[j] = pb->geqs[e].coef[n_vars];
+ }
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ pb->eqs[e].coef[i] = pb->eqs[e].coef[j];
+ pb->eqs[e].coef[j] = pb->eqs[e].coef[n_vars];
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ pb->subs[e].coef[i] = pb->subs[e].coef[j];
+ pb->subs[e].coef[j] = pb->subs[e].coef[n_vars];
+ }
+
+ pb->var[i] = pb->var[j];
+ pb->var[j] = pb->var[n_vars];
+ }
+ else if (i < n_vars)
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[n_vars])
+ {
+ pb->geqs[e].coef[i] = pb->geqs[e].coef[n_vars];
+ pb->geqs[e].touched = 1;
+ }
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[i] = pb->eqs[e].coef[n_vars];
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[i] = pb->subs[e].coef[n_vars];
+
+ pb->var[i] = pb->var[n_vars];
+ }
+
+ if (omega_safe_var_p (pb, i))
+ pb->safe_vars--;
+
+ pb->num_vars--;
+}
+
+/* Because the coefficients of an equation are sparse, PACKING records
+ indices for non null coefficients. */
+static int *packing;
+
+/* Set up the coefficients of PACKING, following the coefficients of
+ equation EQN that has NUM_VARS variables. */
+
+static inline int
+setup_packing (eqn eqn, int num_vars)
+{
+ int k;
+ int n = 0;
+
+ for (k = num_vars; k >= 0; k--)
+ if (eqn->coef[k])
+ packing[n++] = k;
+
+ return n;
+}
+
+/* Computes a linear combination of EQ and SUB at VAR with coefficient
+ C, such that EQ->coef[VAR] is set to 0. TOP_VAR is the number of
+ non null indices of SUB stored in PACKING. */
+
+static inline void
+omega_substitute_red_1 (eqn eq, eqn sub, int var, int c, bool *found_black,
+ int top_var)
+{
+ if (eq->coef[var] != 0)
+ {
+ if (eq->color == omega_black)
+ *found_black = true;
+ else
+ {
+ int j, k = eq->coef[var];
+
+ eq->coef[var] = 0;
+
+ for (j = top_var; j >= 0; j--)
+ eq->coef[packing[j]] -= sub->coef[packing[j]] * k * c;
+ }
+ }
+}
+
+/* Substitute in PB variable VAR with "C * SUB". */
+
+static void
+omega_substitute_red (omega_pb pb, eqn sub, int var, int c, bool *found_black)
+{
+ int e, top_var = setup_packing (sub, pb->num_vars);
+
+ *found_black = false;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (sub->color == omega_red)
+ fprintf (dump_file, "[");
+
+ fprintf (dump_file, "substituting using %s := ",
+ omega_variable_to_str (pb, var));
+ omega_print_term (dump_file, pb, sub, -c);
+
+ if (sub->color == omega_red)
+ fprintf (dump_file, "]");
+
+ fprintf (dump_file, "\n");
+ omega_print_vars (dump_file, pb);
+ }
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->eqs[e]);
+
+ omega_substitute_red_1 (eqn, sub, var, c, found_black, top_var);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->geqs[e]);
+
+ omega_substitute_red_1 (eqn, sub, var, c, found_black, top_var);
+
+ if (eqn->coef[var] && eqn->color == omega_red)
+ eqn->touched = 1;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->subs[e]);
+
+ omega_substitute_red_1 (eqn, sub, var, c, found_black, top_var);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "%s := ", omega_var_to_str (eqn->key));
+ omega_print_term (dump_file, pb, eqn, 1);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "---\n\n");
+
+ if (omega_safe_var_p (pb, var) && !omega_wildcard_p (pb, var))
+ *found_black = true;
+}
+
+/* Substitute in PB variable VAR with "C * SUB". */
+
+static void
+omega_substitute (omega_pb pb, eqn sub, int var, int c)
+{
+ int e, j, j0;
+ int top_var = setup_packing (sub, pb->num_vars);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "substituting using %s := ",
+ omega_variable_to_str (pb, var));
+ omega_print_term (dump_file, pb, sub, -c);
+ fprintf (dump_file, "\n");
+ omega_print_vars (dump_file, pb);
+ }
+
+ if (top_var < 0)
+ {
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[var] = 0;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[var] != 0)
+ {
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].coef[var] = 0;
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[var] = 0;
+
+ if (omega_safe_var_p (pb, var) && !omega_wildcard_p (pb, var))
+ {
+ int k;
+ eqn eqn = &(pb->subs[pb->num_subs++]);
+
+ for (k = pb->num_vars; k >= 0; k--)
+ eqn->coef[k] = 0;
+
+ eqn->key = pb->var[var];
+ eqn->color = omega_black;
+ }
+ }
+ else if (top_var == 0 && packing[0] == 0)
+ {
+ c = -sub->coef[0] * c;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ pb->eqs[e].coef[0] += pb->eqs[e].coef[var] * c;
+ pb->eqs[e].coef[var] = 0;
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[var] != 0)
+ {
+ pb->geqs[e].coef[0] += pb->geqs[e].coef[var] * c;
+ pb->geqs[e].coef[var] = 0;
+ pb->geqs[e].touched = 1;
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ pb->subs[e].coef[0] += pb->subs[e].coef[var] * c;
+ pb->subs[e].coef[var] = 0;
+ }
+
+ if (omega_safe_var_p (pb, var) && !omega_wildcard_p (pb, var))
+ {
+ int k;
+ eqn eqn = &(pb->subs[pb->num_subs++]);
+
+ for (k = pb->num_vars; k >= 1; k--)
+ eqn->coef[k] = 0;
+
+ eqn->coef[0] = c;
+ eqn->key = pb->var[var];
+ eqn->color = omega_black;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "---\n\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "===\n\n");
+ }
+ }
+ else
+ {
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->eqs[e]);
+ int k = eqn->coef[var];
+
+ if (k != 0)
+ {
+ k = c * k;
+ eqn->coef[var] = 0;
+
+ for (j = top_var; j >= 0; j--)
+ {
+ j0 = packing[j];
+ eqn->coef[j0] -= sub->coef[j0] * k;
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->geqs[e]);
+ int k = eqn->coef[var];
+
+ if (k != 0)
+ {
+ k = c * k;
+ eqn->touched = 1;
+ eqn->coef[var] = 0;
+
+ for (j = top_var; j >= 0; j--)
+ {
+ j0 = packing[j];
+ eqn->coef[j0] -= sub->coef[j0] * k;
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->subs[e]);
+ int k = eqn->coef[var];
+
+ if (k != 0)
+ {
+ k = c * k;
+ eqn->coef[var] = 0;
+
+ for (j = top_var; j >= 0; j--)
+ {
+ j0 = packing[j];
+ eqn->coef[j0] -= sub->coef[j0] * k;
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "%s := ", omega_var_to_str (eqn->key));
+ omega_print_term (dump_file, pb, eqn, 1);
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "---\n\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "===\n\n");
+ }
+
+ if (omega_safe_var_p (pb, var) && !omega_wildcard_p (pb, var))
+ {
+ int k;
+ eqn eqn = &(pb->subs[pb->num_subs++]);
+ c = -c;
+
+ for (k = pb->num_vars; k >= 0; k--)
+ eqn->coef[k] = c * (sub->coef[k]);
+
+ eqn->key = pb->var[var];
+ eqn->color = sub->color;
+ }
+ }
+}
+
+/* Solve e = factor alpha for x_j and substitute. */
+
+static void
+omega_do_mod (omega_pb pb, int factor, int e, int j)
+{
+ int k, i;
+ eqn eq = omega_alloc_eqns (0, 1);
+ int nfactor;
+ bool kill_j = false;
+
+ omega_copy_eqn (eq, &pb->eqs[e], pb->num_vars);
+
+ for (k = pb->num_vars; k >= 0; k--)
+ {
+ eq->coef[k] = int_mod (eq->coef[k], factor);
+
+ if (2 * eq->coef[k] >= factor)
+ eq->coef[k] -= factor;
+ }
+
+ nfactor = eq->coef[j];
+
+ if (omega_safe_var_p (pb, j) && !omega_wildcard_p (pb, j))
+ {
+ i = omega_add_new_wild_card (pb);
+ eq->coef[pb->num_vars] = eq->coef[i];
+ eq->coef[j] = 0;
+ eq->coef[i] = -factor;
+ kill_j = true;
+ }
+ else
+ {
+ eq->coef[j] = -factor;
+ if (!omega_wildcard_p (pb, j))
+ omega_name_wild_card (pb, j);
+ }
+
+ omega_substitute (pb, eq, j, nfactor);
+
+ for (k = pb->num_vars; k >= 0; k--)
+ pb->eqs[e].coef[k] = pb->eqs[e].coef[k] / factor;
+
+ if (kill_j)
+ omega_delete_variable (pb, j);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Mod-ing and normalizing produces:\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ omega_free_eqns (eq, 1);
+}
+
+/* Multiplies by -1 inequality E. */
+
+void
+omega_negate_geq (omega_pb pb, int e)
+{
+ int i;
+
+ for (i = pb->num_vars; i >= 0; i--)
+ pb->geqs[e].coef[i] *= -1;
+
+ pb->geqs[e].coef[0]--;
+ pb->geqs[e].touched = 1;
+}
+
+/* Returns OMEGA_TRUE when problem PB has a solution. */
+
+static enum omega_result
+verify_omega_pb (omega_pb pb)
+{
+ enum omega_result result;
+ int e;
+ bool any_color = false;
+ omega_pb tmp_problem = XNEW (struct omega_pb);
+
+ omega_copy_problem (tmp_problem, pb);
+ tmp_problem->safe_vars = 0;
+ tmp_problem->num_subs = 0;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_red)
+ {
+ any_color = true;
+ break;
+ }
+
+ if (please_no_equalities_in_simplified_problems)
+ any_color = true;
+
+ if (any_color)
+ original_problem = no_problem;
+ else
+ original_problem = pb;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "verifying problem");
+
+ if (any_color)
+ fprintf (dump_file, " (color mode)");
+
+ fprintf (dump_file, " :\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ result = omega_solve_problem (tmp_problem, omega_unknown);
+ original_problem = no_problem;
+ free (tmp_problem);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (result != omega_false)
+ fprintf (dump_file, "verified problem\n");
+ else
+ fprintf (dump_file, "disproved problem\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ return result;
+}
+
+/* Add a new equality to problem PB at last position E. */
+
+static void
+adding_equality_constraint (omega_pb pb, int e)
+{
+ if (original_problem != no_problem
+ && original_problem != pb
+ && !conservative)
+ {
+ int i, j;
+ int e2 = original_problem->num_eqs++;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "adding equality constraint %d to outer problem\n", e2);
+ omega_init_eqn_zero (&original_problem->eqs[e2],
+ original_problem->num_vars);
+
+ for (i = pb->num_vars; i >= 1; i--)
+ {
+ for (j = original_problem->num_vars; j >= 1; j--)
+ if (original_problem->var[j] == pb->var[i])
+ break;
+
+ if (j <= 0)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "retracting\n");
+ original_problem->num_eqs--;
+ return;
+ }
+ original_problem->eqs[e2].coef[j] = pb->eqs[e].coef[i];
+ }
+
+ original_problem->eqs[e2].coef[0] = pb->eqs[e].coef[0];
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ omega_print_problem (dump_file, original_problem);
+ }
+}
+
+static int *fast_lookup;
+static int *fast_lookup_red;
+
+typedef enum {
+ normalize_false,
+ normalize_uncoupled,
+ normalize_coupled
+} normalize_return_type;
+
+/* Normalizes PB by removing redundant constraints. Returns
+ normalize_false when the constraints system has no solution,
+ otherwise returns normalize_coupled or normalize_uncoupled. */
+
+static normalize_return_type
+normalize_omega_problem (omega_pb pb)
+{
+ int e, i, j, k, n_vars;
+ int coupled_subscripts = 0;
+
+ n_vars = pb->num_vars;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ {
+ if (!pb->geqs[e].touched)
+ {
+ if (!single_var_geq (&pb->geqs[e], n_vars))
+ coupled_subscripts = 1;
+ }
+ else
+ {
+ int g, top_var, i0, hashCode;
+ int *p = &packing[0];
+
+ for (k = 1; k <= n_vars; k++)
+ if (pb->geqs[e].coef[k])
+ *(p++) = k;
+
+ top_var = (p - &packing[0]) - 1;
+
+ if (top_var == -1)
+ {
+ if (pb->geqs[e].coef[0] < 0)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\nequations have no solution \n");
+ }
+ return normalize_false;
+ }
+
+ omega_delete_geq (pb, e, n_vars);
+ e--;
+ continue;
+ }
+ else if (top_var == 0)
+ {
+ int singlevar = packing[0];
+
+ g = pb->geqs[e].coef[singlevar];
+
+ if (g > 0)
+ {
+ pb->geqs[e].coef[singlevar] = 1;
+ pb->geqs[e].key = singlevar;
+ }
+ else
+ {
+ g = -g;
+ pb->geqs[e].coef[singlevar] = -1;
+ pb->geqs[e].key = -singlevar;
+ }
+
+ if (g > 1)
+ pb->geqs[e].coef[0] = int_div (pb->geqs[e].coef[0], g);
+ }
+ else
+ {
+ int g2;
+ int hash_key_multiplier = 31;
+
+ coupled_subscripts = 1;
+ i0 = top_var;
+ i = packing[i0--];
+ g = pb->geqs[e].coef[i];
+ hashCode = g * (i + 3);
+
+ if (g < 0)
+ g = -g;
+
+ for (; i0 >= 0; i0--)
+ {
+ int x;
+
+ i = packing[i0];
+ x = pb->geqs[e].coef[i];
+ hashCode = hashCode * hash_key_multiplier * (i + 3) + x;
+
+ if (x < 0)
+ x = -x;
+
+ if (x == 1)
+ {
+ g = 1;
+ i0--;
+ break;
+ }
+ else
+ g = gcd (x, g);
+ }
+
+ for (; i0 >= 0; i0--)
+ {
+ int x;
+ i = packing[i0];
+ x = pb->geqs[e].coef[i];
+ hashCode = hashCode * hash_key_multiplier * (i + 3) + x;
+ }
+
+ if (g > 1)
+ {
+ pb->geqs[e].coef[0] = int_div (pb->geqs[e].coef[0], g);
+ i0 = top_var;
+ i = packing[i0--];
+ pb->geqs[e].coef[i] = pb->geqs[e].coef[i] / g;
+ hashCode = pb->geqs[e].coef[i] * (i + 3);
+
+ for (; i0 >= 0; i0--)
+ {
+ i = packing[i0];
+ pb->geqs[e].coef[i] = pb->geqs[e].coef[i] / g;
+ hashCode = hashCode * hash_key_multiplier * (i + 3)
+ + pb->geqs[e].coef[i];
+ }
+ }
+
+ g2 = abs (hashCode);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Hash code = %d, eqn = ", hashCode);
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ }
+
+ j = g2 % HASH_TABLE_SIZE;
+
+ do {
+ eqn proto = &(hash_master[j]);
+
+ if (proto->touched == g2)
+ {
+ if (proto->coef[0] == top_var)
+ {
+ if (hashCode >= 0)
+ for (i0 = top_var; i0 >= 0; i0--)
+ {
+ i = packing[i0];
+
+ if (pb->geqs[e].coef[i] != proto->coef[i])
+ break;
+ }
+ else
+ for (i0 = top_var; i0 >= 0; i0--)
+ {
+ i = packing[i0];
+
+ if (pb->geqs[e].coef[i] != -proto->coef[i])
+ break;
+ }
+
+ if (i0 < 0)
+ {
+ if (hashCode >= 0)
+ pb->geqs[e].key = proto->key;
+ else
+ pb->geqs[e].key = -proto->key;
+ break;
+ }
+ }
+ }
+ else if (proto->touched < 0)
+ {
+ omega_init_eqn_zero (proto, pb->num_vars);
+ if (hashCode >= 0)
+ for (i0 = top_var; i0 >= 0; i0--)
+ {
+ i = packing[i0];
+ proto->coef[i] = pb->geqs[e].coef[i];
+ }
+ else
+ for (i0 = top_var; i0 >= 0; i0--)
+ {
+ i = packing[i0];
+ proto->coef[i] = -pb->geqs[e].coef[i];
+ }
+
+ proto->coef[0] = top_var;
+ proto->touched = g2;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, " constraint key = %d\n",
+ next_key);
+
+ proto->key = next_key++;
+
+ /* Too many hash keys generated. */
+ gcc_assert (proto->key <= MAX_KEYS);
+
+ if (hashCode >= 0)
+ pb->geqs[e].key = proto->key;
+ else
+ pb->geqs[e].key = -proto->key;
+
+ break;
+ }
+
+ j = (j + 1) % HASH_TABLE_SIZE;
+ } while (1);
+ }
+
+ pb->geqs[e].touched = 0;
+ }
+
+ {
+ int eKey = pb->geqs[e].key;
+ int e2;
+ if (e > 0)
+ {
+ int cTerm = pb->geqs[e].coef[0];
+ e2 = fast_lookup[MAX_KEYS - eKey];
+
+ if (e2 < e && pb->geqs[e2].key == -eKey
+ && pb->geqs[e2].color == omega_black)
+ {
+ if (pb->geqs[e2].coef[0] < -cTerm)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &pb->geqs[e2]);
+ fprintf (dump_file,
+ "\nequations have no solution \n");
+ }
+ return normalize_false;
+ }
+
+ if (pb->geqs[e2].coef[0] == -cTerm
+ && (create_color
+ || pb->geqs[e].color == omega_black))
+ {
+ omega_copy_eqn (&pb->eqs[pb->num_eqs], &pb->geqs[e],
+ pb->num_vars);
+ if (pb->geqs[e].color == omega_black)
+ adding_equality_constraint (pb, pb->num_eqs);
+ pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ }
+ }
+
+ e2 = fast_lookup_red[MAX_KEYS - eKey];
+
+ if (e2 < e && pb->geqs[e2].key == -eKey
+ && pb->geqs[e2].color == omega_red)
+ {
+ if (pb->geqs[e2].coef[0] < -cTerm)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &pb->geqs[e2]);
+ fprintf (dump_file,
+ "\nequations have no solution \n");
+ }
+ return normalize_false;
+ }
+
+ if (pb->geqs[e2].coef[0] == -cTerm && create_color)
+ {
+ omega_copy_eqn (&pb->eqs[pb->num_eqs], &pb->geqs[e],
+ pb->num_vars);
+ pb->eqs[pb->num_eqs].color = omega_red;
+ pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ }
+ }
+
+ e2 = fast_lookup[MAX_KEYS + eKey];
+
+ if (e2 < e && pb->geqs[e2].key == eKey
+ && pb->geqs[e2].color == omega_black)
+ {
+ if (pb->geqs[e2].coef[0] > cTerm)
+ {
+ if (pb->geqs[e].color == omega_black)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Removing Redudant Equation: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ fprintf (dump_file,
+ "[a] Made Redundant by: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ }
+ pb->geqs[e2].coef[0] = cTerm;
+ omega_delete_geq (pb, e, n_vars);
+ e--;
+ continue;
+ }
+ }
+ else
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Removing Redudant Equation: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ fprintf (dump_file, "[b] Made Redundant by: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ }
+ omega_delete_geq (pb, e, n_vars);
+ e--;
+ continue;
+ }
+ }
+
+ e2 = fast_lookup_red[MAX_KEYS + eKey];
+
+ if (e2 < e && pb->geqs[e2].key == eKey
+ && pb->geqs[e2].color == omega_red)
+ {
+ if (pb->geqs[e2].coef[0] >= cTerm)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Removing Redudant Equation: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ fprintf (dump_file, "[c] Made Redundant by: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ }
+ pb->geqs[e2].coef[0] = cTerm;
+ pb->geqs[e2].color = pb->geqs[e].color;
+ }
+ else if (pb->geqs[e].color == omega_red)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Removing Redudant Equation: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ fprintf (dump_file, "[d] Made Redundant by: ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ }
+ }
+ omega_delete_geq (pb, e, n_vars);
+ e--;
+ continue;
+
+ }
+ }
+
+ if (pb->geqs[e].color == omega_red)
+ fast_lookup_red[MAX_KEYS + eKey] = e;
+ else
+ fast_lookup[MAX_KEYS + eKey] = e;
+ }
+ }
+
+ create_color = false;
+ return coupled_subscripts ? normalize_coupled : normalize_uncoupled;
+}
+
+/* Divide the coefficients of EQN by their gcd. N_VARS is the number
+ of variables in EQN. */
+
+static inline void
+divide_eqn_by_gcd (eqn eqn, int n_vars)
+{
+ int var, g = 0;
+
+ for (var = n_vars; var >= 0; var--)
+ g = gcd (abs (eqn->coef[var]), g);
+
+ if (g)
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] = eqn->coef[var] / g;
+}
+
+/* Rewrite some non-safe variables in function of protected
+ wildcard variables. */
+
+static void
+cleanout_wildcards (omega_pb pb)
+{
+ int e, i, j;
+ int n_vars = pb->num_vars;
+ bool renormalize = false;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ for (i = n_vars; !omega_safe_var_p (pb, i); i--)
+ if (pb->eqs[e].coef[i] != 0)
+ {
+ /* i is the last non-zero non-safe variable. */
+
+ for (j = i - 1; !omega_safe_var_p (pb, j); j--)
+ if (pb->eqs[e].coef[j] != 0)
+ break;
+
+ /* j is the next non-zero non-safe variable, or points
+ to a safe variable: it is then a wildcard variable. */
+
+ /* Clean it out. */
+ if (omega_safe_var_p (pb, j))
+ {
+ eqn sub = &(pb->eqs[e]);
+ int c = pb->eqs[e].coef[i];
+ int a = abs (c);
+ int e2;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Found a single wild card equality: ");
+ omega_print_eq (dump_file, pb, &pb->eqs[e]);
+ fprintf (dump_file, "\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ for (e2 = pb->num_eqs - 1; e2 >= 0; e2--)
+ if (e != e2 && pb->eqs[e2].coef[i]
+ && (pb->eqs[e2].color == omega_red
+ || (pb->eqs[e2].color == omega_black
+ && pb->eqs[e].color == omega_black)))
+ {
+ eqn eqn = &(pb->eqs[e2]);
+ int var, k;
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] *= a;
+
+ k = eqn->coef[i];
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] -= sub->coef[var] * k / c;
+
+ eqn->coef[i] = 0;
+ divide_eqn_by_gcd (eqn, n_vars);
+ }
+
+ for (e2 = pb->num_geqs - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].coef[i]
+ && (pb->geqs[e2].color == omega_red
+ || (pb->eqs[e].color == omega_black
+ && pb->geqs[e2].color == omega_black)))
+ {
+ eqn eqn = &(pb->geqs[e2]);
+ int var, k;
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] *= a;
+
+ k = eqn->coef[i];
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] -= sub->coef[var] * k / c;
+
+ eqn->coef[i] = 0;
+ eqn->touched = 1;
+ renormalize = true;
+ }
+
+ for (e2 = pb->num_subs - 1; e2 >= 0; e2--)
+ if (pb->subs[e2].coef[i]
+ && (pb->subs[e2].color == omega_red
+ || (pb->subs[e2].color == omega_black
+ && pb->eqs[e].color == omega_black)))
+ {
+ eqn eqn = &(pb->subs[e2]);
+ int var, k;
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] *= a;
+
+ k = eqn->coef[i];
+
+ for (var = n_vars; var >= 0; var--)
+ eqn->coef[var] -= sub->coef[var] * k / c;
+
+ eqn->coef[i] = 0;
+ divide_eqn_by_gcd (eqn, n_vars);
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "cleaned-out wildcard: ");
+ omega_print_problem (dump_file, pb);
+ }
+ break;
+ }
+ }
+
+ if (renormalize)
+ normalize_omega_problem (pb);
+}
+
+/* Swap values contained in I and J. */
+
+static inline void
+swap (int *i, int *j)
+{
+ int tmp;
+ tmp = *i;
+ *i = *j;
+ *j = tmp;
+}
+
+/* Swap values contained in I and J. */
+
+static inline void
+bswap (bool *i, bool *j)
+{
+ bool tmp;
+ tmp = *i;
+ *i = *j;
+ *j = tmp;
+}
+
+/* Make variable IDX unprotected in PB, by swapping its index at the
+ PB->safe_vars rank. */
+
+static inline void
+omega_unprotect_1 (omega_pb pb, int *idx, bool *unprotect)
+{
+ /* If IDX is protected... */
+ if (*idx < pb->safe_vars)
+ {
+ /* ... swap its index with the last non protected index. */
+ int j = pb->safe_vars;
+ int e;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ pb->geqs[e].touched = 1;
+ swap (&pb->geqs[e].coef[*idx], &pb->geqs[e].coef[j]);
+ }
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ swap (&pb->eqs[e].coef[*idx], &pb->eqs[e].coef[j]);
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ swap (&pb->subs[e].coef[*idx], &pb->subs[e].coef[j]);
+
+ if (unprotect)
+ bswap (&unprotect[*idx], &unprotect[j]);
+
+ swap (&pb->var[*idx], &pb->var[j]);
+ pb->forwarding_address[pb->var[*idx]] = *idx;
+ pb->forwarding_address[pb->var[j]] = j;
+ (*idx)--;
+ }
+
+ /* The variable at pb->safe_vars is also unprotected now. */
+ pb->safe_vars--;
+}
+
+/* During the Fourier-Motzkin elimination some variables are
+ substituted with other variables. This function resurrects the
+ substituted variables in PB. */
+
+static void
+resurrect_subs (omega_pb pb)
+{
+ if (pb->num_subs > 0
+ && please_no_equalities_in_simplified_problems == 0)
+ {
+ int i, e, n, m;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "problem reduced, bringing variables back to life\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ if (omega_wildcard_p (pb, i))
+ omega_unprotect_1 (pb, &i, NULL);
+
+ m = pb->num_subs;
+ n = MAX (pb->num_vars, pb->safe_vars + m);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (single_var_geq (&pb->geqs[e], pb->num_vars))
+ {
+ if (!omega_safe_var_p (pb, abs (pb->geqs[e].key)))
+ pb->geqs[e].key += (pb->geqs[e].key > 0 ? m : -m);
+ }
+ else
+ {
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].key = 0;
+ }
+
+ for (i = pb->num_vars; !omega_safe_var_p (pb, i); i--)
+ {
+ pb->var[i + m] = pb->var[i];
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].coef[i + m] = pb->geqs[e].coef[i];
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[i + m] = pb->eqs[e].coef[i];
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[i + m] = pb->subs[e].coef[i];
+ }
+
+ for (i = pb->safe_vars + m; !omega_safe_var_p (pb, i); i--)
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].coef[i] = 0;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[i] = 0;
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[i] = 0;
+ }
+
+ pb->num_vars += m;
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ pb->var[pb->safe_vars + 1 + e] = pb->subs[e].key;
+ omega_copy_eqn (&(pb->eqs[pb->num_eqs]), &(pb->subs[e]),
+ pb->num_vars);
+ pb->eqs[pb->num_eqs].coef[pb->safe_vars + 1 + e] = -1;
+ pb->eqs[pb->num_eqs].color = omega_black;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "brought back: ");
+ omega_print_eq (dump_file, pb, &pb->eqs[pb->num_eqs]);
+ fprintf (dump_file, "\n");
+ }
+
+ pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ }
+
+ pb->safe_vars += m;
+ pb->num_subs = 0;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "variables brought back to life\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ cleanout_wildcards (pb);
+ }
+}
+
+static inline bool
+implies (unsigned int a, unsigned int b)
+{
+ return (a == (a & b));
+}
+
+/* Eliminate redundant equations in PB. When EXPENSIVE is true, an
+ extra step is performed. Returns omega_false when there exist no
+ solution, omega_true otherwise. */
+
+enum omega_result
+omega_eliminate_redundant (omega_pb pb, bool expensive)
+{
+ int c, e, e1, e2, e3, p, q, i, k, alpha, alpha1, alpha2, alpha3;
+ bool *is_dead = XNEWVEC (bool, OMEGA_MAX_GEQS);
+ omega_pb tmp_problem;
+
+ /* {P,Z,N}EQS = {Positive,Zero,Negative} Equations. */
+ unsigned int *peqs = XNEWVEC (unsigned int, OMEGA_MAX_GEQS);
+ unsigned int *zeqs = XNEWVEC (unsigned int, OMEGA_MAX_GEQS);
+ unsigned int *neqs = XNEWVEC (unsigned int, OMEGA_MAX_GEQS);
+
+ /* PP = Possible Positives, PZ = Possible Zeros, PN = Possible Negatives */
+ unsigned int pp, pz, pn;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "in eliminate Redudant:\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ int tmp = 1;
+
+ is_dead[e] = false;
+ peqs[e] = zeqs[e] = neqs[e] = 0;
+
+ for (i = pb->num_vars; i >= 1; i--)
+ {
+ if (pb->geqs[e].coef[i] > 0)
+ peqs[e] |= tmp;
+ else if (pb->geqs[e].coef[i] < 0)
+ neqs[e] |= tmp;
+ else
+ zeqs[e] |= tmp;
+
+ tmp <<= 1;
+ }
+ }
+
+
+ for (e1 = pb->num_geqs - 1; e1 >= 0; e1--)
+ if (!is_dead[e1])
+ for (e2 = e1 - 1; e2 >= 0; e2--)
+ if (!is_dead[e2])
+ {
+ for (p = pb->num_vars; p > 1; p--)
+ for (q = p - 1; q > 0; q--)
+ if ((alpha = pb->geqs[e1].coef[p] * pb->geqs[e2].coef[q]
+ - pb->geqs[e2].coef[p] * pb->geqs[e1].coef[q]) != 0)
+ goto foundPQ;
+
+ continue;
+
+ foundPQ:
+ pz = ((zeqs[e1] & zeqs[e2]) | (peqs[e1] & neqs[e2])
+ | (neqs[e1] & peqs[e2]));
+ pp = peqs[e1] | peqs[e2];
+ pn = neqs[e1] | neqs[e2];
+
+ for (e3 = pb->num_geqs - 1; e3 >= 0; e3--)
+ if (e3 != e1 && e3 != e2)
+ {
+ if (!implies (zeqs[e3], pz))
+ goto nextE3;
+
+ alpha1 = (pb->geqs[e2].coef[q] * pb->geqs[e3].coef[p]
+ - pb->geqs[e2].coef[p] * pb->geqs[e3].coef[q]);
+ alpha2 = -(pb->geqs[e1].coef[q] * pb->geqs[e3].coef[p]
+ - pb->geqs[e1].coef[p] * pb->geqs[e3].coef[q]);
+ alpha3 = alpha;
+
+ if (alpha1 * alpha2 <= 0)
+ goto nextE3;
+
+ if (alpha1 < 0)
+ {
+ alpha1 = -alpha1;
+ alpha2 = -alpha2;
+ alpha3 = -alpha3;
+ }
+
+ if (alpha3 > 0)
+ {
+ /* Trying to prove e3 is redundant. */
+ if (!implies (peqs[e3], pp)
+ || !implies (neqs[e3], pn))
+ goto nextE3;
+
+ if (pb->geqs[e3].color == omega_black
+ && (pb->geqs[e1].color == omega_red
+ || pb->geqs[e2].color == omega_red))
+ goto nextE3;
+
+ for (k = pb->num_vars; k >= 1; k--)
+ if (alpha3 * pb->geqs[e3].coef[k]
+ != (alpha1 * pb->geqs[e1].coef[k]
+ + alpha2 * pb->geqs[e2].coef[k]))
+ goto nextE3;
+
+ c = (alpha1 * pb->geqs[e1].coef[0]
+ + alpha2 * pb->geqs[e2].coef[0]);
+
+ if (c < alpha3 * (pb->geqs[e3].coef[0] + 1))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "found redundant inequality\n");
+ fprintf (dump_file,
+ "alpha1, alpha2, alpha3 = %d,%d,%d\n",
+ alpha1, alpha2, alpha3);
+
+ omega_print_geq (dump_file, pb, &(pb->geqs[e1]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n=> ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e3]));
+ fprintf (dump_file, "\n\n");
+ }
+
+ is_dead[e3] = true;
+ }
+ }
+ else
+ {
+ /* Trying to prove e3 <= 0 and therefore e3 = 0,
+ or trying to prove e3 < 0, and therefore the
+ problem has no solutions. */
+ if (!implies (peqs[e3], pn)
+ || !implies (neqs[e3], pp))
+ goto nextE3;
+
+ if (pb->geqs[e1].color == omega_red
+ || pb->geqs[e2].color == omega_red
+ || pb->geqs[e3].color == omega_red)
+ goto nextE3;
+
+ alpha3 = alpha3;
+ /* verify alpha1*v1+alpha2*v2 = alpha3*v3 */
+ for (k = pb->num_vars; k >= 1; k--)
+ if (alpha3 * pb->geqs[e3].coef[k]
+ != (alpha1 * pb->geqs[e1].coef[k]
+ + alpha2 * pb->geqs[e2].coef[k]))
+ goto nextE3;
+
+ c = (alpha1 * pb->geqs[e1].coef[0]
+ + alpha2 * pb->geqs[e2].coef[0]);
+
+ if (c < alpha3 * (pb->geqs[e3].coef[0]))
+ {
+ /* We just proved e3 < 0, so no solutions exist. */
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "found implied over tight inequality\n");
+ fprintf (dump_file,
+ "alpha1, alpha2, alpha3 = %d,%d,%d\n",
+ alpha1, alpha2, -alpha3);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e1]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n=> not ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e3]));
+ fprintf (dump_file, "\n\n");
+ }
+ free (is_dead);
+ free (peqs);
+ free (zeqs);
+ free (neqs);
+ return omega_false;
+ }
+ else if (c < alpha3 * (pb->geqs[e3].coef[0] - 1))
+ {
+ /* We just proved that e3 <=0, so e3 = 0. */
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "found implied tight inequality\n");
+ fprintf (dump_file,
+ "alpha1, alpha2, alpha3 = %d,%d,%d\n",
+ alpha1, alpha2, -alpha3);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e1]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n=> inverse ");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e3]));
+ fprintf (dump_file, "\n\n");
+ }
+
+ omega_copy_eqn (&pb->eqs[pb->num_eqs++],
+ &pb->geqs[e3], pb->num_vars);
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ adding_equality_constraint (pb, pb->num_eqs - 1);
+ is_dead[e3] = true;
+ }
+ }
+ nextE3:;
+ }
+ }
+
+ /* Delete the inequalities that were marked as dead. */
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (is_dead[e])
+ omega_delete_geq (pb, e, pb->num_vars);
+
+ if (!expensive)
+ goto eliminate_redundant_done;
+
+ tmp_problem = XNEW (struct omega_pb);
+ conservative++;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "checking equation %d to see if it is redundant: ", e);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ }
+
+ omega_copy_problem (tmp_problem, pb);
+ omega_negate_geq (tmp_problem, e);
+ tmp_problem->safe_vars = 0;
+ tmp_problem->variables_freed = false;
+
+ if (omega_solve_problem (tmp_problem, omega_false) == omega_false)
+ omega_delete_geq (pb, e, pb->num_vars);
+ }
+
+ free (tmp_problem);
+ conservative--;
+
+ if (!omega_reduce_with_subs)
+ {
+ resurrect_subs (pb);
+ gcc_assert (please_no_equalities_in_simplified_problems
+ || pb->num_subs == 0);
+ }
+
+ eliminate_redundant_done:
+ free (is_dead);
+ free (peqs);
+ free (zeqs);
+ free (neqs);
+ return omega_true;
+}
+
+/* For each inequality that has coefficients bigger than 20, try to
+ create a new constraint that cannot be derived from the original
+ constraint and that has smaller coefficients. Add the new
+ constraint at the end of geqs. Return the number of inequalities
+ that have been added to PB. */
+
+static int
+smooth_weird_equations (omega_pb pb)
+{
+ int e1, e2, e3, p, q, k, alpha, alpha1, alpha2, alpha3;
+ int c;
+ int v;
+ int result = 0;
+
+ for (e1 = pb->num_geqs - 1; e1 >= 0; e1--)
+ if (pb->geqs[e1].color == omega_black)
+ {
+ int g = 999999;
+
+ for (v = pb->num_vars; v >= 1; v--)
+ if (pb->geqs[e1].coef[v] != 0 && abs (pb->geqs[e1].coef[v]) < g)
+ g = abs (pb->geqs[e1].coef[v]);
+
+ /* Magic number. */
+ if (g > 20)
+ {
+ e3 = pb->num_geqs;
+
+ for (v = pb->num_vars; v >= 1; v--)
+ pb->geqs[e3].coef[v] = int_div (6 * pb->geqs[e1].coef[v] + g / 2,
+ g);
+
+ pb->geqs[e3].color = omega_black;
+ pb->geqs[e3].touched = 1;
+ /* Magic number. */
+ pb->geqs[e3].coef[0] = 9997;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Checking to see if we can derive: ");
+ omega_print_geq (dump_file, pb, &pb->geqs[e3]);
+ fprintf (dump_file, "\n from: ");
+ omega_print_geq (dump_file, pb, &pb->geqs[e1]);
+ fprintf (dump_file, "\n");
+ }
+
+ for (e2 = pb->num_geqs - 1; e2 >= 0; e2--)
+ if (e1 != e2 && pb->geqs[e2].color == omega_black)
+ {
+ for (p = pb->num_vars; p > 1; p--)
+ {
+ for (q = p - 1; q > 0; q--)
+ {
+ alpha =
+ (pb->geqs[e1].coef[p] * pb->geqs[e2].coef[q] -
+ pb->geqs[e2].coef[p] * pb->geqs[e1].coef[q]);
+ if (alpha != 0)
+ goto foundPQ;
+ }
+ }
+ continue;
+
+ foundPQ:
+
+ alpha1 = (pb->geqs[e2].coef[q] * pb->geqs[e3].coef[p]
+ - pb->geqs[e2].coef[p] * pb->geqs[e3].coef[q]);
+ alpha2 = -(pb->geqs[e1].coef[q] * pb->geqs[e3].coef[p]
+ - pb->geqs[e1].coef[p] * pb->geqs[e3].coef[q]);
+ alpha3 = alpha;
+
+ if (alpha1 * alpha2 <= 0)
+ continue;
+
+ if (alpha1 < 0)
+ {
+ alpha1 = -alpha1;
+ alpha2 = -alpha2;
+ alpha3 = -alpha3;
+ }
+
+ if (alpha3 > 0)
+ {
+ /* Try to prove e3 is redundant: verify
+ alpha1*v1 + alpha2*v2 = alpha3*v3. */
+ for (k = pb->num_vars; k >= 1; k--)
+ if (alpha3 * pb->geqs[e3].coef[k]
+ != (alpha1 * pb->geqs[e1].coef[k]
+ + alpha2 * pb->geqs[e2].coef[k]))
+ goto nextE2;
+
+ c = alpha1 * pb->geqs[e1].coef[0]
+ + alpha2 * pb->geqs[e2].coef[0];
+
+ if (c < alpha3 * (pb->geqs[e3].coef[0] + 1))
+ pb->geqs[e3].coef[0] = int_div (c, alpha3);
+ }
+ nextE2:;
+ }
+
+ if (pb->geqs[e3].coef[0] < 9997)
+ {
+ result++;
+ pb->num_geqs++;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Smoothing wierd equations; adding:\n");
+ omega_print_geq (dump_file, pb, &pb->geqs[e3]);
+ fprintf (dump_file, "\nto:\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n\n");
+ }
+ }
+ }
+ }
+ return result;
+}
+
+/* Replace tuples of inequalities, that define upper and lower half
+ spaces, with an equation. */
+
+static void
+coalesce (omega_pb pb)
+{
+ int e, e2;
+ int colors = 0;
+ bool *is_dead = XNEWVEC (bool, OMEGA_MAX_GEQS);
+ int found_something = 0;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].color == omega_red)
+ colors++;
+
+ if (colors < 2)
+ return;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ is_dead[e] = false;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].color == omega_red
+ && !pb->geqs[e].touched)
+ for (e2 = e + 1; e2 < pb->num_geqs; e2++)
+ if (!pb->geqs[e2].touched
+ && pb->geqs[e].key == -pb->geqs[e2].key
+ && pb->geqs[e].coef[0] == -pb->geqs[e2].coef[0]
+ && pb->geqs[e2].color == omega_red)
+ {
+ omega_copy_eqn (&pb->eqs[pb->num_eqs++], &pb->geqs[e],
+ pb->num_vars);
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ found_something++;
+ is_dead[e] = true;
+ is_dead[e2] = true;
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (is_dead[e])
+ omega_delete_geq (pb, e, pb->num_vars);
+
+ if (dump_file && (dump_flags & TDF_DETAILS) && found_something)
+ {
+ fprintf (dump_file, "Coalesced pb->geqs into %d EQ's:\n",
+ found_something);
+ omega_print_problem (dump_file, pb);
+ }
+
+ free (is_dead);
+}
+
+/* Eliminate red inequalities from PB. When ELIMINATE_ALL is
+ true, continue to eliminate all the red inequalities. */
+
+void
+omega_eliminate_red (omega_pb pb, bool eliminate_all)
+{
+ int e, e2, e3, i, j, k, a, alpha1, alpha2;
+ int c = 0;
+ bool *is_dead = XNEWVEC (bool, OMEGA_MAX_GEQS);
+ int dead_count = 0;
+ int red_found;
+ omega_pb tmp_problem;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "in eliminate RED:\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ if (pb->num_eqs > 0)
+ omega_simplify_problem (pb);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ is_dead[e] = false;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_black && !is_dead[e])
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].color == omega_black
+ && !is_dead[e2])
+ {
+ a = 0;
+
+ for (i = pb->num_vars; i > 1; i--)
+ for (j = i - 1; j > 0; j--)
+ if ((a = (pb->geqs[e].coef[i] * pb->geqs[e2].coef[j]
+ - pb->geqs[e2].coef[i] * pb->geqs[e].coef[j])) != 0)
+ goto found_pair;
+
+ continue;
+
+ found_pair:
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "found two equations to combine, i = %s, ",
+ omega_variable_to_str (pb, i));
+ fprintf (dump_file, "j = %s, alpha = %d\n",
+ omega_variable_to_str (pb, j), a);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ }
+
+ for (e3 = pb->num_geqs - 1; e3 >= 0; e3--)
+ if (pb->geqs[e3].color == omega_red)
+ {
+ alpha1 = (pb->geqs[e2].coef[j] * pb->geqs[e3].coef[i]
+ - pb->geqs[e2].coef[i] * pb->geqs[e3].coef[j]);
+ alpha2 = -(pb->geqs[e].coef[j] * pb->geqs[e3].coef[i]
+ - pb->geqs[e].coef[i] * pb->geqs[e3].coef[j]);
+
+ if ((a > 0 && alpha1 > 0 && alpha2 > 0)
+ || (a < 0 && alpha1 < 0 && alpha2 < 0))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "alpha1 = %d, alpha2 = %d;"
+ "comparing against: ",
+ alpha1, alpha2);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e3]));
+ fprintf (dump_file, "\n");
+ }
+
+ for (k = pb->num_vars; k >= 0; k--)
+ {
+ c = (alpha1 * pb->geqs[e].coef[k]
+ + alpha2 * pb->geqs[e2].coef[k]);
+
+ if (c != a * pb->geqs[e3].coef[k])
+ break;
+
+ if (dump_file && (dump_flags & TDF_DETAILS) && k > 0)
+ fprintf (dump_file, " %s: %d, %d\n",
+ omega_variable_to_str (pb, k), c,
+ a * pb->geqs[e3].coef[k]);
+ }
+
+ if (k < 0
+ || (k == 0 &&
+ ((a > 0 && c < a * pb->geqs[e3].coef[k])
+ || (a < 0 && c > a * pb->geqs[e3].coef[k]))))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ dead_count++;
+ fprintf (dump_file,
+ "red equation#%d is dead "
+ "(%d dead so far, %d remain)\n",
+ e3, dead_count,
+ pb->num_geqs - dead_count);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ omega_print_geq (dump_file, pb, &(pb->geqs[e3]));
+ fprintf (dump_file, "\n");
+ }
+ is_dead[e3] = true;
+ }
+ }
+ }
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (is_dead[e])
+ omega_delete_geq (pb, e, pb->num_vars);
+
+ free (is_dead);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "in eliminate RED, easy tests done:\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ for (red_found = 0, e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_red)
+ red_found = 1;
+
+ if (!red_found)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "fast checks worked\n");
+
+ if (!omega_reduce_with_subs)
+ gcc_assert (please_no_equalities_in_simplified_problems
+ || pb->num_subs == 0);
+
+ return;
+ }
+
+ if (!omega_verify_simplification
+ && verify_omega_pb (pb) == omega_false)
+ return;
+
+ conservative++;
+ tmp_problem = XNEW (struct omega_pb);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_red)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "checking equation %d to see if it is redundant: ", e);
+ omega_print_geq (dump_file, pb, &(pb->geqs[e]));
+ fprintf (dump_file, "\n");
+ }
+
+ omega_copy_problem (tmp_problem, pb);
+ omega_negate_geq (tmp_problem, e);
+ tmp_problem->safe_vars = 0;
+ tmp_problem->variables_freed = false;
+ tmp_problem->num_subs = 0;
+
+ if (omega_solve_problem (tmp_problem, omega_false) == omega_false)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "it is redundant\n");
+ omega_delete_geq (pb, e, pb->num_vars);
+ }
+ else
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "it is not redundant\n");
+
+ if (!eliminate_all)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "no need to check other red equations\n");
+ break;
+ }
+ }
+ }
+
+ conservative--;
+ free (tmp_problem);
+ /* omega_simplify_problem (pb); */
+
+ if (!omega_reduce_with_subs)
+ gcc_assert (please_no_equalities_in_simplified_problems
+ || pb->num_subs == 0);
+}
+
+/* Transform some wildcard variables to non-safe variables. */
+
+static void
+chain_unprotect (omega_pb pb)
+{
+ int i, e;
+ bool *unprotect = XNEWVEC (bool, OMEGA_MAX_VARS);
+
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ {
+ unprotect[i] = omega_wildcard_p (pb, i);
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ if (pb->subs[e].coef[i])
+ unprotect[i] = false;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Doing chain reaction unprotection\n");
+ omega_print_problem (dump_file, pb);
+
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ if (unprotect[i])
+ fprintf (dump_file, "unprotecting %s\n",
+ omega_variable_to_str (pb, i));
+ }
+
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ if (unprotect[i])
+ omega_unprotect_1 (pb, &i, unprotect);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "After chain reactions\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ free (unprotect);
+}
+
+/* Reduce problem PB. */
+
+static void
+omega_problem_reduced (omega_pb pb)
+{
+ if (omega_verify_simplification
+ && !in_approximate_mode
+ && verify_omega_pb (pb) == omega_false)
+ return;
+
+ if (PARAM_VALUE (PARAM_OMEGA_ELIMINATE_REDUNDANT_CONSTRAINTS)
+ && !omega_eliminate_redundant (pb, true))
+ return;
+
+ omega_found_reduction = omega_true;
+
+ if (!please_no_equalities_in_simplified_problems)
+ coalesce (pb);
+
+ if (omega_reduce_with_subs
+ || please_no_equalities_in_simplified_problems)
+ chain_unprotect (pb);
+ else
+ resurrect_subs (pb);
+
+ if (!return_single_result)
+ {
+ int i;
+
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ pb->forwarding_address[pb->var[i]] = i;
+
+ for (i = 0; i < pb->num_subs; i++)
+ pb->forwarding_address[pb->subs[i].key] = -i - 1;
+
+ (*omega_when_reduced) (pb);
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "-------------------------------------------\n");
+ fprintf (dump_file, "problem reduced:\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "-------------------------------------------\n");
+ }
+}
+
+/* Eliminates all the free variables for problem PB, that is all the
+ variables from FV to PB->NUM_VARS. */
+
+static void
+omega_free_eliminations (omega_pb pb, int fv)
+{
+ bool try_again = true;
+ int i, e, e2;
+ int n_vars = pb->num_vars;
+
+ while (try_again)
+ {
+ try_again = false;
+
+ for (i = n_vars; i > fv; i--)
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i])
+ break;
+
+ if (e < 0)
+ e2 = e;
+ else if (pb->geqs[e].coef[i] > 0)
+ {
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].coef[i] < 0)
+ break;
+ }
+ else
+ {
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].coef[i] > 0)
+ break;
+ }
+
+ if (e2 < 0)
+ {
+ int e3;
+ for (e3 = pb->num_subs - 1; e3 >= 0; e3--)
+ if (pb->subs[e3].coef[i])
+ break;
+
+ if (e3 >= 0)
+ continue;
+
+ for (e3 = pb->num_eqs - 1; e3 >= 0; e3--)
+ if (pb->eqs[e3].coef[i])
+ break;
+
+ if (e3 >= 0)
+ continue;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "a free elimination of %s\n",
+ omega_variable_to_str (pb, i));
+
+ if (e >= 0)
+ {
+ omega_delete_geq (pb, e, n_vars);
+
+ for (e--; e >= 0; e--)
+ if (pb->geqs[e].coef[i])
+ omega_delete_geq (pb, e, n_vars);
+
+ try_again = (i < n_vars);
+ }
+
+ omega_delete_variable (pb, i);
+ n_vars = pb->num_vars;
+ }
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\nafter free eliminations:\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ }
+}
+
+/* Do free red eliminations. */
+
+static void
+free_red_eliminations (omega_pb pb)
+{
+ bool try_again = true;
+ int i, e, e2;
+ int n_vars = pb->num_vars;
+ bool *is_red_var = XNEWVEC (bool, OMEGA_MAX_VARS);
+ bool *is_dead_var = XNEWVEC (bool, OMEGA_MAX_VARS);
+ bool *is_dead_geq = XNEWVEC (bool, OMEGA_MAX_GEQS);
+
+ for (i = n_vars; i > 0; i--)
+ {
+ is_red_var[i] = false;
+ is_dead_var[i] = false;
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ is_dead_geq[e] = false;
+
+ if (pb->geqs[e].color == omega_red)
+ for (i = n_vars; i > 0; i--)
+ if (pb->geqs[e].coef[i] != 0)
+ is_red_var[i] = true;
+ }
+
+ while (try_again)
+ {
+ try_again = false;
+ for (i = n_vars; i > 0; i--)
+ if (!is_red_var[i] && !is_dead_var[i])
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (!is_dead_geq[e] && pb->geqs[e].coef[i])
+ break;
+
+ if (e < 0)
+ e2 = e;
+ else if (pb->geqs[e].coef[i] > 0)
+ {
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (!is_dead_geq[e2] && pb->geqs[e2].coef[i] < 0)
+ break;
+ }
+ else
+ {
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (!is_dead_geq[e2] && pb->geqs[e2].coef[i] > 0)
+ break;
+ }
+
+ if (e2 < 0)
+ {
+ int e3;
+ for (e3 = pb->num_subs - 1; e3 >= 0; e3--)
+ if (pb->subs[e3].coef[i])
+ break;
+
+ if (e3 >= 0)
+ continue;
+
+ for (e3 = pb->num_eqs - 1; e3 >= 0; e3--)
+ if (pb->eqs[e3].coef[i])
+ break;
+
+ if (e3 >= 0)
+ continue;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "a free red elimination of %s\n",
+ omega_variable_to_str (pb, i));
+
+ for (; e >= 0; e--)
+ if (pb->geqs[e].coef[i])
+ is_dead_geq[e] = true;
+
+ try_again = true;
+ is_dead_var[i] = true;
+ }
+ }
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (is_dead_geq[e])
+ omega_delete_geq (pb, e, n_vars);
+
+ for (i = n_vars; i > 0; i--)
+ if (is_dead_var[i])
+ omega_delete_variable (pb, i);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\nafter free red eliminations:\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ }
+
+ free (is_red_var);
+ free (is_dead_var);
+ free (is_dead_geq);
+}
+
+/* For equation EQ of the form "0 = EQN", insert in PB two
+ inequalities "0 <= EQN" and "0 <= -EQN". */
+
+void
+omega_convert_eq_to_geqs (omega_pb pb, int eq)
+{
+ int i;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Converting Eq to Geqs\n");
+
+ /* Insert "0 <= EQN". */
+ omega_copy_eqn (&pb->geqs[pb->num_geqs], &pb->eqs[eq], pb->num_vars);
+ pb->geqs[pb->num_geqs].touched = 1;
+ pb->num_geqs++;
+
+ /* Insert "0 <= -EQN". */
+ omega_copy_eqn (&pb->geqs[pb->num_geqs], &pb->eqs[eq], pb->num_vars);
+ pb->geqs[pb->num_geqs].touched = 1;
+
+ for (i = 0; i <= pb->num_vars; i++)
+ pb->geqs[pb->num_geqs].coef[i] *= -1;
+
+ pb->num_geqs++;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ omega_print_problem (dump_file, pb);
+}
+
+/* Eliminates variable I from PB. */
+
+static void
+omega_do_elimination (omega_pb pb, int e, int i)
+{
+ eqn sub = omega_alloc_eqns (0, 1);
+ int c;
+ int n_vars = pb->num_vars;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "eliminating variable %s\n",
+ omega_variable_to_str (pb, i));
+
+ omega_copy_eqn (sub, &pb->eqs[e], pb->num_vars);
+ c = sub->coef[i];
+ sub->coef[i] = 0;
+ if (c == 1 || c == -1)
+ {
+ if (pb->eqs[e].color == omega_red)
+ {
+ bool fB;
+ omega_substitute_red (pb, sub, i, c, &fB);
+ if (fB)
+ omega_convert_eq_to_geqs (pb, e);
+ else
+ omega_delete_variable (pb, i);
+ }
+ else
+ {
+ omega_substitute (pb, sub, i, c);
+ omega_delete_variable (pb, i);
+ }
+ }
+ else
+ {
+ int a = abs (c);
+ int e2 = e;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "performing non-exact elimination, c = %d\n", c);
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ if (pb->eqs[e].coef[i])
+ {
+ eqn eqn = &(pb->eqs[e]);
+ int j, k;
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] *= a;
+ k = eqn->coef[i];
+ eqn->coef[i] = 0;
+ eqn->color |= sub->color;
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] -= sub->coef[j] * k / c;
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i])
+ {
+ eqn eqn = &(pb->geqs[e]);
+ int j, k;
+
+ if (sub->color == omega_red)
+ eqn->color = omega_red;
+
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] *= a;
+
+ eqn->touched = 1;
+ k = eqn->coef[i];
+ eqn->coef[i] = 0;
+
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] -= sub->coef[j] * k / c;
+
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ if (pb->subs[e].coef[i])
+ {
+ eqn eqn = &(pb->subs[e]);
+ int j, k;
+ gcc_assert (0);
+ gcc_assert (sub->color == omega_black);
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] *= a;
+ k = eqn->coef[i];
+ eqn->coef[i] = 0;
+ for (j = n_vars; j >= 0; j--)
+ eqn->coef[j] -= sub->coef[j] * k / c;
+ }
+
+ if (in_approximate_mode)
+ omega_delete_variable (pb, i);
+ else
+ omega_convert_eq_to_geqs (pb, e2);
+ }
+
+ omega_free_eqns (sub, 1);
+}
+
+/* Helper function for printing "sorry, no solution". */
+
+static inline enum omega_result
+omega_problem_has_no_solution (void)
+{
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "\nequations have no solution \n");
+
+ return omega_false;
+}
+
+/* Helper function: solve equations in PB one at a time, following the
+ DESIRED_RES result. */
+
+static enum omega_result
+omega_solve_eq (omega_pb pb, enum omega_result desired_res)
+{
+ int i, j, e;
+ int g, g2;
+ g = 0;
+
+
+ if (dump_file && (dump_flags & TDF_DETAILS) && pb->num_eqs > 0)
+ {
+ fprintf (dump_file, "\nomega_solve_eq (%d, %d)\n",
+ desired_res, may_be_red);
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ }
+
+ if (may_be_red)
+ {
+ i = 0;
+ j = pb->num_eqs - 1;
+
+ while (1)
+ {
+ eqn eq;
+
+ while (i <= j && pb->eqs[i].color == omega_red)
+ i++;
+
+ while (i <= j && pb->eqs[j].color == omega_black)
+ j--;
+
+ if (i >= j)
+ break;
+
+ eq = omega_alloc_eqns (0, 1);
+ omega_copy_eqn (eq, &pb->eqs[i], pb->num_vars);
+ omega_copy_eqn (&pb->eqs[i], &pb->eqs[j], pb->num_vars);
+ omega_copy_eqn (&pb->eqs[j], eq, pb->num_vars);
+ omega_free_eqns (eq, 1);
+ i++;
+ j--;
+ }
+ }
+
+ /* Eliminate all EQ equations */
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ eqn eqn = &(pb->eqs[e]);
+ int sv;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "----\n");
+
+ for (i = pb->num_vars; i > 0; i--)
+ if (eqn->coef[i])
+ break;
+
+ g = eqn->coef[i];
+
+ for (j = i - 1; j > 0; j--)
+ if (eqn->coef[j])
+ break;
+
+ /* i is the position of last non-zero coefficient,
+ g is the coefficient of i,
+ j is the position of next non-zero coefficient. */
+
+ if (j == 0)
+ {
+ if (eqn->coef[0] % g != 0)
+ return omega_problem_has_no_solution ();
+
+ eqn->coef[0] = eqn->coef[0] / g;
+ eqn->coef[i] = 1;
+ pb->num_eqs--;
+ omega_do_elimination (pb, e, i);
+ continue;
+ }
+
+ else if (j == -1)
+ {
+ if (eqn->coef[0] != 0)
+ return omega_problem_has_no_solution ();
+
+ pb->num_eqs--;
+ continue;
+ }
+
+ if (g < 0)
+ g = -g;
+
+ if (g == 1)
+ {
+ pb->num_eqs--;
+ omega_do_elimination (pb, e, i);
+ }
+
+ else
+ {
+ int k = j;
+ bool promotion_possible =
+ (omega_safe_var_p (pb, j)
+ && pb->safe_vars + 1 == i
+ && !omega_eqn_is_red (eqn, desired_res)
+ && !in_approximate_mode);
+
+ if (dump_file && (dump_flags & TDF_DETAILS) && promotion_possible)
+ fprintf (dump_file, " Promotion possible\n");
+
+ normalizeEQ:
+ if (!omega_safe_var_p (pb, j))
+ {
+ for (; g != 1 && !omega_safe_var_p (pb, j); j--)
+ g = gcd (abs (eqn->coef[j]), g);
+ g2 = g;
+ }
+ else if (!omega_safe_var_p (pb, i))
+ g2 = g;
+ else
+ g2 = 0;
+
+ for (; g != 1 && j > 0; j--)
+ g = gcd (abs (eqn->coef[j]), g);
+
+ if (g > 1)
+ {
+ if (eqn->coef[0] % g != 0)
+ return omega_problem_has_no_solution ();
+
+ for (j = 0; j <= pb->num_vars; j++)
+ eqn->coef[j] /= g;
+
+ g2 = g2 / g;
+ }
+
+ if (g2 > 1)
+ {
+ int e2;
+
+ for (e2 = e - 1; e2 >= 0; e2--)
+ if (pb->eqs[e2].coef[i])
+ break;
+
+ if (e2 == -1)
+ for (e2 = pb->num_geqs - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].coef[i])
+ break;
+
+ if (e2 == -1)
+ for (e2 = pb->num_subs - 1; e2 >= 0; e2--)
+ if (pb->subs[e2].coef[i])
+ break;
+
+ if (e2 == -1)
+ {
+ bool change = false;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Ha! We own it! \n");
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, " \n");
+ }
+
+ g = eqn->coef[i];
+ g = abs (g);
+
+ for (j = i - 1; j >= 0; j--)
+ {
+ int t = int_mod (eqn->coef[j], g);
+
+ if (2 * t >= g)
+ t -= g;
+
+ if (t != eqn->coef[j])
+ {
+ eqn->coef[j] = t;
+ change = true;
+ }
+ }
+
+ if (!change)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "So what?\n");
+ }
+
+ else
+ {
+ omega_name_wild_card (pb, i);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, " \n");
+ }
+
+ e++;
+ continue;
+ }
+ }
+ }
+
+ if (promotion_possible)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "promoting %s to safety\n",
+ omega_variable_to_str (pb, i));
+ omega_print_vars (dump_file, pb);
+ }
+
+ pb->safe_vars++;
+
+ if (!omega_wildcard_p (pb, i))
+ omega_name_wild_card (pb, i);
+
+ promotion_possible = false;
+ j = k;
+ goto normalizeEQ;
+ }
+
+ if (g2 > 1 && !in_approximate_mode)
+ {
+ if (pb->eqs[e].color == omega_red)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "handling red equality\n");
+
+ pb->num_eqs--;
+ omega_do_elimination (pb, e, i);
+ continue;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "adding equation to handle safe variable \n");
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n----\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n----\n");
+ fprintf (dump_file, "\n----\n");
+ }
+
+ i = omega_add_new_wild_card (pb);
+ pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ omega_init_eqn_zero (&pb->eqs[e + 1], pb->num_vars);
+ omega_copy_eqn (&pb->eqs[e + 1], eqn, pb->safe_vars);
+
+ for (j = pb->num_vars; j >= 0; j--)
+ {
+ pb->eqs[e + 1].coef[j] = int_mod (pb->eqs[e + 1].coef[j], g2);
+
+ if (2 * pb->eqs[e + 1].coef[j] >= g2)
+ pb->eqs[e + 1].coef[j] -= g2;
+ }
+
+ pb->eqs[e + 1].coef[i] = g2;
+ e += 2;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ omega_print_problem (dump_file, pb);
+
+ continue;
+ }
+
+ sv = pb->safe_vars;
+ if (g2 == 0)
+ sv = 0;
+
+ /* Find variable to eliminate. */
+ if (g2 > 1)
+ {
+ gcc_assert (in_approximate_mode);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "non-exact elimination: ");
+ omega_print_eq (dump_file, pb, eqn);
+ fprintf (dump_file, "\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ for (i = pb->num_vars; i > sv; i--)
+ if (pb->eqs[e].coef[i] != 0)
+ break;
+ }
+ else
+ for (i = pb->num_vars; i > sv; i--)
+ if (pb->eqs[e].coef[i] == 1 || pb->eqs[e].coef[i] == -1)
+ break;
+
+ if (i > sv)
+ {
+ pb->num_eqs--;
+ omega_do_elimination (pb, e, i);
+
+ if (dump_file && (dump_flags & TDF_DETAILS) && g2 > 1)
+ {
+ fprintf (dump_file, "result of non-exact elimination:\n");
+ omega_print_problem (dump_file, pb);
+ }
+ }
+ else
+ {
+ int factor = (INT_MAX);
+ j = 0;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "doing moding\n");
+
+ for (i = pb->num_vars; i != sv; i--)
+ if ((pb->eqs[e].coef[i] & 1) != 0)
+ {
+ j = i;
+ i--;
+
+ for (; i != sv; i--)
+ if ((pb->eqs[e].coef[i] & 1) != 0)
+ break;
+
+ break;
+ }
+
+ if (j != 0 && i == sv)
+ {
+ omega_do_mod (pb, 2, e, j);
+ e++;
+ continue;
+ }
+
+ j = 0;
+ for (i = pb->num_vars; i != sv; i--)
+ if (pb->eqs[e].coef[i] != 0
+ && factor > abs (pb->eqs[e].coef[i]) + 1)
+ {
+ factor = abs (pb->eqs[e].coef[i]) + 1;
+ j = i;
+ }
+
+ if (j == sv)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "should not have happened\n");
+ gcc_assert (0);
+ }
+
+ omega_do_mod (pb, factor, e, j);
+ /* Go back and try this equation again. */
+ e++;
+ }
+ }
+ }
+
+ pb->num_eqs = 0;
+ return omega_unknown;
+}
+
+/* Transform an inequation E to an equality, then solve DIFF problems
+ based on PB, and only differing by the constant part that is
+ diminished by one, trying to figure out which of the constants
+ satisfies PB. */
+
+static enum omega_result
+parallel_splinter (omega_pb pb, int e, int diff,
+ enum omega_result desired_res)
+{
+ omega_pb tmp_problem;
+ int i;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Using parallel splintering\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ tmp_problem = XNEW (struct omega_pb);
+ omega_copy_eqn (&pb->eqs[0], &pb->geqs[e], pb->num_vars);
+ pb->num_eqs = 1;
+
+ for (i = 0; i <= diff; i++)
+ {
+ omega_copy_problem (tmp_problem, pb);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Splinter # %i\n", i);
+ omega_print_problem (dump_file, pb);
+ }
+
+ if (omega_solve_problem (tmp_problem, desired_res) == omega_true)
+ {
+ free (tmp_problem);
+ return omega_true;
+ }
+
+ pb->eqs[0].coef[0]--;
+ }
+
+ free (tmp_problem);
+ return omega_false;
+}
+
+/* Helper function: solve equations one at a time. */
+
+static enum omega_result
+omega_solve_geq (omega_pb pb, enum omega_result desired_res)
+{
+ int i, e;
+ int n_vars, fv;
+ enum omega_result result;
+ bool coupled_subscripts = false;
+ bool smoothed = false;
+ bool eliminate_again;
+ bool tried_eliminating_redundant = false;
+
+ if (desired_res != omega_simplify)
+ {
+ pb->num_subs = 0;
+ pb->safe_vars = 0;
+ }
+
+ solve_geq_start:
+ do {
+ gcc_assert (desired_res == omega_simplify || pb->num_subs == 0);
+
+ /* Verify that there are not too many inequalities. */
+ gcc_assert (pb->num_geqs <= OMEGA_MAX_GEQS);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\nomega_solve_geq (%d,%d):\n",
+ desired_res, please_no_equalities_in_simplified_problems);
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ }
+
+ n_vars = pb->num_vars;
+
+ if (n_vars == 1)
+ {
+ enum omega_eqn_color u_color = omega_black;
+ enum omega_eqn_color l_color = omega_black;
+ int upper_bound = pos_infinity;
+ int lower_bound = neg_infinity;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ int a = pb->geqs[e].coef[1];
+ int c = pb->geqs[e].coef[0];
+
+ /* Our equation is ax + c >= 0, or ax >= -c, or c >= -ax. */
+ if (a == 0)
+ {
+ if (c < 0)
+ return omega_problem_has_no_solution ();
+ }
+ else if (a > 0)
+ {
+ if (a != 1)
+ c = int_div (c, a);
+
+ if (lower_bound < -c
+ || (lower_bound == -c
+ && !omega_eqn_is_red (&pb->geqs[e], desired_res)))
+ {
+ lower_bound = -c;
+ l_color = pb->geqs[e].color;
+ }
+ }
+ else
+ {
+ if (a != -1)
+ c = int_div (c, -a);
+
+ if (upper_bound > c
+ || (upper_bound == c
+ && !omega_eqn_is_red (&pb->geqs[e], desired_res)))
+ {
+ upper_bound = c;
+ u_color = pb->geqs[e].color;
+ }
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "upper bound = %d\n", upper_bound);
+ fprintf (dump_file, "lower bound = %d\n", lower_bound);
+ }
+
+ if (lower_bound > upper_bound)
+ return omega_problem_has_no_solution ();
+
+ if (desired_res == omega_simplify)
+ {
+ pb->num_geqs = 0;
+ if (pb->safe_vars == 1)
+ {
+
+ if (lower_bound == upper_bound
+ && u_color == omega_black
+ && l_color == omega_black)
+ {
+ pb->eqs[0].coef[0] = -lower_bound;
+ pb->eqs[0].coef[1] = 1;
+ pb->eqs[0].color = omega_black;
+ pb->num_eqs = 1;
+ return omega_solve_problem (pb, desired_res);
+ }
+ else
+ {
+ if (lower_bound > neg_infinity)
+ {
+ pb->geqs[0].coef[0] = -lower_bound;
+ pb->geqs[0].coef[1] = 1;
+ pb->geqs[0].key = 1;
+ pb->geqs[0].color = l_color;
+ pb->geqs[0].touched = 0;
+ pb->num_geqs = 1;
+ }
+
+ if (upper_bound < pos_infinity)
+ {
+ pb->geqs[pb->num_geqs].coef[0] = upper_bound;
+ pb->geqs[pb->num_geqs].coef[1] = -1;
+ pb->geqs[pb->num_geqs].key = -1;
+ pb->geqs[pb->num_geqs].color = u_color;
+ pb->geqs[pb->num_geqs].touched = 0;
+ pb->num_geqs++;
+ }
+ }
+ }
+ else
+ pb->num_vars = 0;
+
+ omega_problem_reduced (pb);
+ return omega_false;
+ }
+
+ if (original_problem != no_problem
+ && l_color == omega_black
+ && u_color == omega_black
+ && !conservative
+ && lower_bound == upper_bound)
+ {
+ pb->eqs[0].coef[0] = -lower_bound;
+ pb->eqs[0].coef[1] = 1;
+ pb->num_eqs = 1;
+ adding_equality_constraint (pb, 0);
+ }
+
+ return omega_true;
+ }
+
+ if (!pb->variables_freed)
+ {
+ pb->variables_freed = true;
+
+ if (desired_res != omega_simplify)
+ omega_free_eliminations (pb, 0);
+ else
+ omega_free_eliminations (pb, pb->safe_vars);
+
+ n_vars = pb->num_vars;
+
+ if (n_vars == 1)
+ continue;
+ }
+
+ switch (normalize_omega_problem (pb))
+ {
+ case normalize_false:
+ return omega_false;
+ break;
+
+ case normalize_coupled:
+ coupled_subscripts = true;
+ break;
+
+ case normalize_uncoupled:
+ coupled_subscripts = false;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+
+ n_vars = pb->num_vars;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\nafter normalization:\n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ fprintf (dump_file, "eliminating variable using Fourier-Motzkin.\n");
+ }
+
+ do {
+ int parallel_difference = INT_MAX;
+ int best_parallel_eqn = -1;
+ int minC, maxC, minCj = 0;
+ int lower_bound_count = 0;
+ int e2, Le = 0, Ue;
+ bool possible_easy_int_solution;
+ int max_splinters = 1;
+ bool exact = false;
+ bool lucky_exact = false;
+ int neweqns = 0;
+ int best = (INT_MAX);
+ int j = 0, jLe = 0, jLowerBoundCount = 0;
+
+
+ eliminate_again = false;
+
+ if (pb->num_eqs > 0)
+ return omega_solve_problem (pb, desired_res);
+
+ if (!coupled_subscripts)
+ {
+ if (pb->safe_vars == 0)
+ pb->num_geqs = 0;
+ else
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (!omega_safe_var_p (pb, abs (pb->geqs[e].key)))
+ omega_delete_geq (pb, e, n_vars);
+
+ pb->num_vars = pb->safe_vars;
+
+ if (desired_res == omega_simplify)
+ {
+ omega_problem_reduced (pb);
+ return omega_false;
+ }
+
+ return omega_true;
+ }
+
+ if (desired_res != omega_simplify)
+ fv = 0;
+ else
+ fv = pb->safe_vars;
+
+ if (pb->num_geqs == 0)
+ {
+ if (desired_res == omega_simplify)
+ {
+ pb->num_vars = pb->safe_vars;
+ omega_problem_reduced (pb);
+ return omega_false;
+ }
+ return omega_true;
+ }
+
+ if (desired_res == omega_simplify && n_vars == pb->safe_vars)
+ {
+ omega_problem_reduced (pb);
+ return omega_false;
+ }
+
+ if (pb->num_geqs > OMEGA_MAX_GEQS - 30
+ || pb->num_geqs > 2 * n_vars * n_vars + 4 * n_vars + 10)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "TOO MANY EQUATIONS; "
+ "%d equations, %d variables, "
+ "ELIMINATING REDUNDANT ONES\n",
+ pb->num_geqs, n_vars);
+
+ if (!omega_eliminate_redundant (pb, false))
+ return omega_false;
+
+ n_vars = pb->num_vars;
+
+ if (pb->num_eqs > 0)
+ return omega_solve_problem (pb, desired_res);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "END ELIMINATION OF REDUNDANT EQUATIONS\n");
+ }
+
+ if (desired_res != omega_simplify)
+ fv = 0;
+ else
+ fv = pb->safe_vars;
+
+ for (i = n_vars; i != fv; i--)
+ {
+ int score;
+ int ub = -2;
+ int lb = -2;
+ bool lucky = false;
+ int upper_bound_count = 0;
+
+ lower_bound_count = 0;
+ minC = maxC = 0;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i] < 0)
+ {
+ minC = MIN (minC, pb->geqs[e].coef[i]);
+ upper_bound_count++;
+ if (pb->geqs[e].coef[i] < -1)
+ {
+ if (ub == -2)
+ ub = e;
+ else
+ ub = -1;
+ }
+ }
+ else if (pb->geqs[e].coef[i] > 0)
+ {
+ maxC = MAX (maxC, pb->geqs[e].coef[i]);
+ lower_bound_count++;
+ Le = e;
+ if (pb->geqs[e].coef[i] > 1)
+ {
+ if (lb == -2)
+ lb = e;
+ else
+ lb = -1;
+ }
+ }
+
+ if (lower_bound_count == 0
+ || upper_bound_count == 0)
+ {
+ lower_bound_count = 0;
+ break;
+ }
+
+ if (ub >= 0 && lb >= 0
+ && pb->geqs[lb].key == -pb->geqs[ub].key)
+ {
+ int Lc = pb->geqs[lb].coef[i];
+ int Uc = -pb->geqs[ub].coef[i];
+ int diff =
+ Lc * pb->geqs[ub].coef[0] + Uc * pb->geqs[lb].coef[0];
+ lucky = (diff >= (Uc - 1) * (Lc - 1));
+ }
+
+ if (maxC == 1
+ || minC == -1
+ || lucky
+ || in_approximate_mode)
+ {
+ neweqns = score = upper_bound_count * lower_bound_count;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "For %s, exact, score = %d*%d, range = %d ... %d,"
+ "\nlucky = %d, in_approximate_mode=%d \n",
+ omega_variable_to_str (pb, i),
+ upper_bound_count,
+ lower_bound_count, minC, maxC, lucky,
+ in_approximate_mode);
+
+ if (!exact
+ || score < best)
+ {
+
+ best = score;
+ j = i;
+ minCj = minC;
+ jLe = Le;
+ jLowerBoundCount = lower_bound_count;
+ exact = true;
+ lucky_exact = lucky;
+ if (score == 1)
+ break;
+ }
+ }
+ else if (!exact)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "For %s, non-exact, score = %d*%d,"
+ "range = %d ... %d \n",
+ omega_variable_to_str (pb, i),
+ upper_bound_count,
+ lower_bound_count, minC, maxC);
+
+ neweqns = upper_bound_count * lower_bound_count;
+ score = maxC - minC;
+
+ if (best > score)
+ {
+ best = score;
+ j = i;
+ minCj = minC;
+ jLe = Le;
+ jLowerBoundCount = lower_bound_count;
+ }
+ }
+ }
+
+ if (lower_bound_count == 0)
+ {
+ omega_free_eliminations (pb, pb->safe_vars);
+ n_vars = pb->num_vars;
+ eliminate_again = true;
+ continue;
+ }
+
+ i = j;
+ minC = minCj;
+ Le = jLe;
+ lower_bound_count = jLowerBoundCount;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i] > 0)
+ {
+ if (pb->geqs[e].coef[i] == -minC)
+ max_splinters += -minC - 1;
+ else
+ max_splinters +=
+ check_pos_mul ((pb->geqs[e].coef[i] - 1),
+ (-minC - 1)) / (-minC) + 1;
+ }
+
+ /* #ifdef Omega3 */
+ /* Trying to produce exact elimination by finding redundant
+ constraints. */
+ if (!exact && !tried_eliminating_redundant)
+ {
+ omega_eliminate_redundant (pb, false);
+ tried_eliminating_redundant = true;
+ eliminate_again = true;
+ continue;
+ }
+ tried_eliminating_redundant = false;
+ /* #endif */
+
+ if (return_single_result && desired_res == omega_simplify && !exact)
+ {
+ omega_problem_reduced (pb);
+ return omega_true;
+ }
+
+ /* #ifndef Omega3 */
+ /* Trying to produce exact elimination by finding redundant
+ constraints. */
+ if (!exact && !tried_eliminating_redundant)
+ {
+ omega_eliminate_redundant (pb, false);
+ tried_eliminating_redundant = true;
+ continue;
+ }
+ tried_eliminating_redundant = false;
+ /* #endif */
+
+ if (!exact)
+ {
+ int e1, e2;
+
+ for (e1 = pb->num_geqs - 1; e1 >= 0; e1--)
+ if (pb->geqs[e1].color == omega_black)
+ for (e2 = e1 - 1; e2 >= 0; e2--)
+ if (pb->geqs[e2].color == omega_black
+ && pb->geqs[e1].key == -pb->geqs[e2].key
+ && ((pb->geqs[e1].coef[0] + pb->geqs[e2].coef[0])
+ * (3 - single_var_geq (&pb->geqs[e1], pb->num_vars))
+ / 2 < parallel_difference))
+ {
+ parallel_difference =
+ (pb->geqs[e1].coef[0] + pb->geqs[e2].coef[0])
+ * (3 - single_var_geq (&pb->geqs[e1], pb->num_vars))
+ / 2;
+ best_parallel_eqn = e1;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS)
+ && best_parallel_eqn >= 0)
+ {
+ fprintf (dump_file,
+ "Possible parallel projection, diff = %d, in ",
+ parallel_difference);
+ omega_print_geq (dump_file, pb, &(pb->geqs[best_parallel_eqn]));
+ fprintf (dump_file, "\n");
+ omega_print_problem (dump_file, pb);
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "going to eliminate %s, (%d,%d,%d)\n",
+ omega_variable_to_str (pb, i), i, minC,
+ lower_bound_count);
+ omega_print_problem (dump_file, pb);
+
+ if (lucky_exact)
+ fprintf (dump_file, "(a lucky exact elimination)\n");
+
+ else if (exact)
+ fprintf (dump_file, "(an exact elimination)\n");
+
+ fprintf (dump_file, "Max # of splinters = %d\n", max_splinters);
+ }
+
+ gcc_assert (max_splinters >= 1);
+
+ if (!exact && desired_res == omega_simplify && best_parallel_eqn >= 0
+ && parallel_difference <= max_splinters)
+ return parallel_splinter (pb, best_parallel_eqn, parallel_difference,
+ desired_res);
+
+ smoothed = false;
+
+ if (i != n_vars)
+ {
+ int t;
+ int j = pb->num_vars;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Swapping %d and %d\n", i, j);
+ omega_print_problem (dump_file, pb);
+ }
+
+ swap (&pb->var[i], &pb->var[j]);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i] != pb->geqs[e].coef[j])
+ {
+ pb->geqs[e].touched = 1;
+ t = pb->geqs[e].coef[i];
+ pb->geqs[e].coef[i] = pb->geqs[e].coef[j];
+ pb->geqs[e].coef[j] = t;
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ if (pb->subs[e].coef[i] != pb->subs[e].coef[j])
+ {
+ t = pb->subs[e].coef[i];
+ pb->subs[e].coef[i] = pb->subs[e].coef[j];
+ pb->subs[e].coef[j] = t;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Swapping complete \n");
+ omega_print_problem (dump_file, pb);
+ fprintf (dump_file, "\n");
+ }
+
+ i = j;
+ }
+
+ else if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "No swap needed\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ pb->num_vars--;
+ n_vars = pb->num_vars;
+
+ if (exact)
+ {
+ if (n_vars == 1)
+ {
+ int upper_bound = pos_infinity;
+ int lower_bound = neg_infinity;
+ enum omega_eqn_color ub_color = omega_black;
+ enum omega_eqn_color lb_color = omega_black;
+ int topeqn = pb->num_geqs - 1;
+ int Lc = pb->geqs[Le].coef[i];
+
+ for (Le = topeqn; Le >= 0; Le--)
+ if ((Lc = pb->geqs[Le].coef[i]) == 0)
+ {
+ if (pb->geqs[Le].coef[1] == 1)
+ {
+ int constantTerm = -pb->geqs[Le].coef[0];
+
+ if (constantTerm > lower_bound ||
+ (constantTerm == lower_bound &&
+ !omega_eqn_is_red (&pb->geqs[Le], desired_res)))
+ {
+ lower_bound = constantTerm;
+ lb_color = pb->geqs[Le].color;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (pb->geqs[Le].color == omega_black)
+ fprintf (dump_file, " :::=> %s >= %d\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ else
+ fprintf (dump_file,
+ " :::=> [%s >= %d]\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ }
+ }
+ else
+ {
+ int constantTerm = pb->geqs[Le].coef[0];
+ if (constantTerm < upper_bound ||
+ (constantTerm == upper_bound
+ && !omega_eqn_is_red (&pb->geqs[Le],
+ desired_res)))
+ {
+ upper_bound = constantTerm;
+ ub_color = pb->geqs[Le].color;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (pb->geqs[Le].color == omega_black)
+ fprintf (dump_file, " :::=> %s <= %d\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ else
+ fprintf (dump_file,
+ " :::=> [%s <= %d]\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ }
+ }
+ }
+ else if (Lc > 0)
+ for (Ue = topeqn; Ue >= 0; Ue--)
+ if (pb->geqs[Ue].coef[i] < 0
+ && pb->geqs[Le].key != -pb->geqs[Ue].key)
+ {
+ int Uc = -pb->geqs[Ue].coef[i];
+ int coefficient = pb->geqs[Ue].coef[1] * Lc
+ + pb->geqs[Le].coef[1] * Uc;
+ int constantTerm = pb->geqs[Ue].coef[0] * Lc
+ + pb->geqs[Le].coef[0] * Uc;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq_extra (dump_file, pb,
+ &(pb->geqs[Ue]));
+ fprintf (dump_file, "\n");
+ omega_print_geq_extra (dump_file, pb,
+ &(pb->geqs[Le]));
+ fprintf (dump_file, "\n");
+ }
+
+ if (coefficient > 0)
+ {
+ constantTerm = -int_div (constantTerm, coefficient);
+
+ if (constantTerm > lower_bound
+ || (constantTerm == lower_bound
+ && (desired_res != omega_simplify
+ || (pb->geqs[Ue].color == omega_black
+ && pb->geqs[Le].color == omega_black))))
+ {
+ lower_bound = constantTerm;
+ lb_color = (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ ? omega_red : omega_black;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ fprintf (dump_file,
+ " ::=> [%s >= %d]\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ else
+ fprintf (dump_file,
+ " ::=> %s >= %d\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ }
+ }
+ else
+ {
+ constantTerm = int_div (constantTerm, -coefficient);
+ if (constantTerm < upper_bound
+ || (constantTerm == upper_bound
+ && pb->geqs[Ue].color == omega_black
+ && pb->geqs[Le].color == omega_black))
+ {
+ upper_bound = constantTerm;
+ ub_color = (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ ? omega_red : omega_black;
+ }
+
+ if (dump_file
+ && (dump_flags & TDF_DETAILS))
+ {
+ if (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ fprintf (dump_file,
+ " ::=> [%s <= %d]\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ else
+ fprintf (dump_file,
+ " ::=> %s <= %d\n",
+ omega_variable_to_str (pb, 1),
+ constantTerm);
+ }
+ }
+ }
+
+ pb->num_geqs = 0;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ " therefore, %c%d <= %c%s%c <= %d%c\n",
+ lb_color == omega_red ? '[' : ' ', lower_bound,
+ (lb_color == omega_red && ub_color == omega_black)
+ ? ']' : ' ',
+ omega_variable_to_str (pb, 1),
+ (lb_color == omega_black && ub_color == omega_red)
+ ? '[' : ' ',
+ upper_bound, ub_color == omega_red ? ']' : ' ');
+
+ if (lower_bound > upper_bound)
+ return omega_false;
+
+ if (pb->safe_vars == 1)
+ {
+ if (upper_bound == lower_bound
+ && !(ub_color == omega_red || lb_color == omega_red)
+ && !please_no_equalities_in_simplified_problems)
+ {
+ pb->num_eqs++;
+ pb->eqs[0].coef[1] = -1;
+ pb->eqs[0].coef[0] = upper_bound;
+
+ if (ub_color == omega_red
+ || lb_color == omega_red)
+ pb->eqs[0].color = omega_red;
+
+ if (desired_res == omega_simplify
+ && pb->eqs[0].color == omega_black)
+ return omega_solve_problem (pb, desired_res);
+ }
+
+ if (upper_bound != pos_infinity)
+ {
+ pb->geqs[0].coef[1] = -1;
+ pb->geqs[0].coef[0] = upper_bound;
+ pb->geqs[0].color = ub_color;
+ pb->geqs[0].key = -1;
+ pb->geqs[0].touched = 0;
+ pb->num_geqs++;
+ }
+
+ if (lower_bound != neg_infinity)
+ {
+ pb->geqs[pb->num_geqs].coef[1] = 1;
+ pb->geqs[pb->num_geqs].coef[0] = -lower_bound;
+ pb->geqs[pb->num_geqs].color = lb_color;
+ pb->geqs[pb->num_geqs].key = 1;
+ pb->geqs[pb->num_geqs].touched = 0;
+ pb->num_geqs++;
+ }
+ }
+
+ if (desired_res == omega_simplify)
+ {
+ omega_problem_reduced (pb);
+ return omega_false;
+ }
+ else
+ {
+ if (!conservative
+ && (desired_res != omega_simplify
+ || (lb_color == omega_black
+ && ub_color == omega_black))
+ && original_problem != no_problem
+ && lower_bound == upper_bound)
+ {
+ for (i = original_problem->num_vars; i >= 0; i--)
+ if (original_problem->var[i] == pb->var[1])
+ break;
+
+ if (i == 0)
+ break;
+
+ e = original_problem->num_eqs++;
+ omega_init_eqn_zero (&original_problem->eqs[e],
+ original_problem->num_vars);
+ original_problem->eqs[e].coef[i] = -1;
+ original_problem->eqs[e].coef[0] = upper_bound;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "adding equality %d to outer problem\n", e);
+ omega_print_problem (dump_file, original_problem);
+ }
+ }
+ return omega_true;
+ }
+ }
+
+ eliminate_again = true;
+
+ if (lower_bound_count == 1)
+ {
+ eqn lbeqn = omega_alloc_eqns (0, 1);
+ int Lc = pb->geqs[Le].coef[i];
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "an inplace elimination\n");
+
+ omega_copy_eqn (lbeqn, &pb->geqs[Le], (n_vars + 1));
+ omega_delete_geq_extra (pb, Le, n_vars + 1);
+
+ for (Ue = pb->num_geqs - 1; Ue >= 0; Ue--)
+ if (pb->geqs[Ue].coef[i] < 0)
+ {
+ if (lbeqn->key == -pb->geqs[Ue].key)
+ omega_delete_geq_extra (pb, Ue, n_vars + 1);
+ else
+ {
+ int k;
+ int Uc = -pb->geqs[Ue].coef[i];
+ pb->geqs[Ue].touched = 1;
+ eliminate_again = false;
+
+ if (lbeqn->color == omega_red)
+ pb->geqs[Ue].color = omega_red;
+
+ for (k = 0; k <= n_vars; k++)
+ pb->geqs[Ue].coef[k] =
+ check_mul (pb->geqs[Ue].coef[k], Lc) +
+ check_mul (lbeqn->coef[k], Uc);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb,
+ &(pb->geqs[Ue]));
+ fprintf (dump_file, "\n");
+ }
+ }
+ }
+
+ omega_free_eqns (lbeqn, 1);
+ continue;
+ }
+ else
+ {
+ int *dead_eqns = XNEWVEC (int, OMEGA_MAX_GEQS);
+ bool *is_dead = XNEWVEC (bool, OMEGA_MAX_GEQS);
+ int num_dead = 0;
+ int top_eqn = pb->num_geqs - 1;
+ lower_bound_count--;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "lower bound count = %d\n",
+ lower_bound_count);
+
+ for (Le = top_eqn; Le >= 0; Le--)
+ if (pb->geqs[Le].coef[i] > 0)
+ {
+ int Lc = pb->geqs[Le].coef[i];
+ for (Ue = top_eqn; Ue >= 0; Ue--)
+ if (pb->geqs[Ue].coef[i] < 0)
+ {
+ if (pb->geqs[Le].key != -pb->geqs[Ue].key)
+ {
+ int k;
+ int Uc = -pb->geqs[Ue].coef[i];
+
+ if (num_dead == 0)
+ e2 = pb->num_geqs++;
+ else
+ e2 = dead_eqns[--num_dead];
+
+ gcc_assert (e2 < OMEGA_MAX_GEQS);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Le = %d, Ue = %d, gen = %d\n",
+ Le, Ue, e2);
+ omega_print_geq_extra (dump_file, pb,
+ &(pb->geqs[Le]));
+ fprintf (dump_file, "\n");
+ omega_print_geq_extra (dump_file, pb,
+ &(pb->geqs[Ue]));
+ fprintf (dump_file, "\n");
+ }
+
+ eliminate_again = false;
+
+ for (k = n_vars; k >= 0; k--)
+ pb->geqs[e2].coef[k] =
+ check_mul (pb->geqs[Ue].coef[k], Lc) +
+ check_mul (pb->geqs[Le].coef[k], Uc);
+
+ pb->geqs[e2].coef[n_vars + 1] = 0;
+ pb->geqs[e2].touched = 1;
+
+ if (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ pb->geqs[e2].color = omega_red;
+ else
+ pb->geqs[e2].color = omega_black;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb,
+ &(pb->geqs[e2]));
+ fprintf (dump_file, "\n");
+ }
+ }
+
+ if (lower_bound_count == 0)
+ {
+ dead_eqns[num_dead++] = Ue;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Killed %d\n", Ue);
+ }
+ }
+
+ lower_bound_count--;
+ dead_eqns[num_dead++] = Le;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Killed %d\n", Le);
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ is_dead[e] = false;
+
+ while (num_dead > 0)
+ is_dead[dead_eqns[--num_dead]] = true;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (is_dead[e])
+ omega_delete_geq_extra (pb, e, n_vars + 1);
+
+ free (dead_eqns);
+ free (is_dead);
+ continue;
+ }
+ }
+ else
+ {
+ omega_pb rS, iS;
+
+ rS = omega_alloc_problem (0, 0);
+ iS = omega_alloc_problem (0, 0);
+ e2 = 0;
+ possible_easy_int_solution = true;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].coef[i] == 0)
+ {
+ omega_copy_eqn (&(rS->geqs[e2]), &pb->geqs[e],
+ pb->num_vars);
+ omega_copy_eqn (&(iS->geqs[e2]), &pb->geqs[e],
+ pb->num_vars);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ int t;
+ fprintf (dump_file, "Copying (%d, %d): ", i,
+ pb->geqs[e].coef[i]);
+ omega_print_geq_extra (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file, "\n");
+ for (t = 0; t <= n_vars + 1; t++)
+ fprintf (dump_file, "%d ", pb->geqs[e].coef[t]);
+ fprintf (dump_file, "\n");
+
+ }
+ e2++;
+ gcc_assert (e2 < OMEGA_MAX_GEQS);
+ }
+
+ for (Le = pb->num_geqs - 1; Le >= 0; Le--)
+ if (pb->geqs[Le].coef[i] > 0)
+ for (Ue = pb->num_geqs - 1; Ue >= 0; Ue--)
+ if (pb->geqs[Ue].coef[i] < 0)
+ {
+ int k;
+ int Lc = pb->geqs[Le].coef[i];
+ int Uc = -pb->geqs[Ue].coef[i];
+
+ if (pb->geqs[Le].key != -pb->geqs[Ue].key)
+ {
+
+ rS->geqs[e2].touched = iS->geqs[e2].touched = 1;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "---\n");
+ fprintf (dump_file,
+ "Le(Lc) = %d(%d_, Ue(Uc) = %d(%d), gen = %d\n",
+ Le, Lc, Ue, Uc, e2);
+ omega_print_geq_extra (dump_file, pb, &pb->geqs[Le]);
+ fprintf (dump_file, "\n");
+ omega_print_geq_extra (dump_file, pb, &pb->geqs[Ue]);
+ fprintf (dump_file, "\n");
+ }
+
+ if (Uc == Lc)
+ {
+ for (k = n_vars; k >= 0; k--)
+ iS->geqs[e2].coef[k] = rS->geqs[e2].coef[k] =
+ pb->geqs[Ue].coef[k] + pb->geqs[Le].coef[k];
+
+ iS->geqs[e2].coef[0] -= (Uc - 1);
+ }
+ else
+ {
+ for (k = n_vars; k >= 0; k--)
+ iS->geqs[e2].coef[k] = rS->geqs[e2].coef[k] =
+ check_mul (pb->geqs[Ue].coef[k], Lc) +
+ check_mul (pb->geqs[Le].coef[k], Uc);
+
+ iS->geqs[e2].coef[0] -= (Uc - 1) * (Lc - 1);
+ }
+
+ if (pb->geqs[Ue].color == omega_red
+ || pb->geqs[Le].color == omega_red)
+ iS->geqs[e2].color = rS->geqs[e2].color = omega_red;
+ else
+ iS->geqs[e2].color = rS->geqs[e2].color = omega_black;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ omega_print_geq (dump_file, pb, &(rS->geqs[e2]));
+ fprintf (dump_file, "\n");
+ }
+
+ e2++;
+ gcc_assert (e2 < OMEGA_MAX_GEQS);
+ }
+ else if (pb->geqs[Ue].coef[0] * Lc +
+ pb->geqs[Le].coef[0] * Uc -
+ (Uc - 1) * (Lc - 1) < 0)
+ possible_easy_int_solution = false;
+ }
+
+ iS->variables_initialized = rS->variables_initialized = true;
+ iS->num_vars = rS->num_vars = pb->num_vars;
+ iS->num_geqs = rS->num_geqs = e2;
+ iS->num_eqs = rS->num_eqs = 0;
+ iS->num_subs = rS->num_subs = pb->num_subs;
+ iS->safe_vars = rS->safe_vars = pb->safe_vars;
+
+ for (e = n_vars; e >= 0; e--)
+ rS->var[e] = pb->var[e];
+
+ for (e = n_vars; e >= 0; e--)
+ iS->var[e] = pb->var[e];
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ omega_copy_eqn (&(rS->subs[e]), &(pb->subs[e]), pb->num_vars);
+ omega_copy_eqn (&(iS->subs[e]), &(pb->subs[e]), pb->num_vars);
+ }
+
+ pb->num_vars++;
+ n_vars = pb->num_vars;
+
+ if (desired_res != omega_true)
+ {
+ if (original_problem == no_problem)
+ {
+ original_problem = pb;
+ result = omega_solve_geq (rS, omega_false);
+ original_problem = no_problem;
+ }
+ else
+ result = omega_solve_geq (rS, omega_false);
+
+ if (result == omega_false)
+ {
+ free (rS);
+ free (iS);
+ return result;
+ }
+
+ if (pb->num_eqs > 0)
+ {
+ /* An equality constraint must have been found */
+ free (rS);
+ free (iS);
+ return omega_solve_problem (pb, desired_res);
+ }
+ }
+
+ if (desired_res != omega_false)
+ {
+ int j;
+ int lower_bounds = 0;
+ int *lower_bound = XNEWVEC (int, OMEGA_MAX_GEQS);
+
+ if (possible_easy_int_solution)
+ {
+ conservative++;
+ result = omega_solve_geq (iS, desired_res);
+ conservative--;
+
+ if (result != omega_false)
+ {
+ free (rS);
+ free (iS);
+ free (lower_bound);
+ return result;
+ }
+ }
+
+ if (!exact && best_parallel_eqn >= 0
+ && parallel_difference <= max_splinters)
+ {
+ free (rS);
+ free (iS);
+ free (lower_bound);
+ return parallel_splinter (pb, best_parallel_eqn,
+ parallel_difference,
+ desired_res);
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "have to do exact analysis\n");
+
+ conservative++;
+
+ for (e = 0; e < pb->num_geqs; e++)
+ if (pb->geqs[e].coef[i] > 1)
+ lower_bound[lower_bounds++] = e;
+
+ /* Sort array LOWER_BOUND. */
+ for (j = 0; j < lower_bounds; j++)
+ {
+ int k, smallest = j;
+
+ for (k = j + 1; k < lower_bounds; k++)
+ if (pb->geqs[lower_bound[smallest]].coef[i] >
+ pb->geqs[lower_bound[k]].coef[i])
+ smallest = k;
+
+ k = lower_bound[smallest];
+ lower_bound[smallest] = lower_bound[j];
+ lower_bound[j] = k;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "lower bound coeeficients = ");
+
+ for (j = 0; j < lower_bounds; j++)
+ fprintf (dump_file, " %d",
+ pb->geqs[lower_bound[j]].coef[i]);
+
+ fprintf (dump_file, "\n");
+ }
+
+ for (j = 0; j < lower_bounds; j++)
+ {
+ int max_incr;
+ int c;
+ int worst_lower_bound_constant = -minC;
+
+ e = lower_bound[j];
+ max_incr = (((pb->geqs[e].coef[i] - 1) *
+ (worst_lower_bound_constant - 1) - 1)
+ / worst_lower_bound_constant);
+ /* max_incr += 2; */
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "for equation ");
+ omega_print_geq (dump_file, pb, &pb->geqs[e]);
+ fprintf (dump_file,
+ "\ntry decrements from 0 to %d\n",
+ max_incr);
+ omega_print_problem (dump_file, pb);
+ }
+
+ if (max_incr > 50 && !smoothed
+ && smooth_weird_equations (pb))
+ {
+ conservative--;
+ free (rS);
+ free (iS);
+ smoothed = true;
+ goto solve_geq_start;
+ }
+
+ omega_copy_eqn (&pb->eqs[0], &pb->geqs[e],
+ pb->num_vars);
+ pb->eqs[0].color = omega_black;
+ omega_init_eqn_zero (&pb->geqs[e], pb->num_vars);
+ pb->geqs[e].touched = 1;
+ pb->num_eqs = 1;
+
+ for (c = max_incr; c >= 0; c--)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "trying next decrement of %d\n",
+ max_incr - c);
+ omega_print_problem (dump_file, pb);
+ }
+
+ omega_copy_problem (rS, pb);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ omega_print_problem (dump_file, rS);
+
+ result = omega_solve_problem (rS, desired_res);
+
+ if (result == omega_true)
+ {
+ free (rS);
+ free (iS);
+ free (lower_bound);
+ conservative--;
+ return omega_true;
+ }
+
+ pb->eqs[0].coef[0]--;
+ }
+
+ if (j + 1 < lower_bounds)
+ {
+ pb->num_eqs = 0;
+ omega_copy_eqn (&pb->geqs[e], &pb->eqs[0],
+ pb->num_vars);
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].color = omega_black;
+ omega_copy_problem (rS, pb);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "exhausted lower bound, "
+ "checking if still feasible ");
+
+ result = omega_solve_problem (rS, omega_false);
+
+ if (result == omega_false)
+ break;
+ }
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "fall-off the end\n");
+
+ free (rS);
+ free (iS);
+ free (lower_bound);
+ conservative--;
+ return omega_false;
+ }
+
+ free (rS);
+ free (iS);
+ }
+ return omega_unknown;
+ } while (eliminate_again);
+ } while (1);
+}
+
+/* Because the omega solver is recursive, this counter limits the
+ recursion depth. */
+static int omega_solve_depth = 0;
+
+/* Return omega_true when the problem PB has a solution following the
+ DESIRED_RES. */
+
+enum omega_result
+omega_solve_problem (omega_pb pb, enum omega_result desired_res)
+{
+ enum omega_result result;
+
+ gcc_assert (pb->num_vars >= pb->safe_vars);
+ omega_solve_depth++;
+
+ if (desired_res != omega_simplify)
+ pb->safe_vars = 0;
+
+ if (omega_solve_depth > 50)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Solve depth = %d, in_approximate_mode = %d, aborting\n",
+ omega_solve_depth, in_approximate_mode);
+ omega_print_problem (dump_file, pb);
+ }
+ gcc_assert (0);
+ }
+
+ if (omega_solve_eq (pb, desired_res) == omega_false)
+ {
+ omega_solve_depth--;
+ return omega_false;
+ }
+
+ if (in_approximate_mode && !pb->num_geqs)
+ {
+ result = omega_true;
+ pb->num_vars = pb->safe_vars;
+ omega_problem_reduced (pb);
+ }
+ else
+ result = omega_solve_geq (pb, desired_res);
+
+ omega_solve_depth--;
+
+ if (!omega_reduce_with_subs)
+ {
+ resurrect_subs (pb);
+ gcc_assert (please_no_equalities_in_simplified_problems
+ || !result || pb->num_subs == 0);
+ }
+
+ return result;
+}
+
+/* Return true if red equations constrain the set of possible solutions.
+ We assume that there are solutions to the black equations by
+ themselves, so if there is no solution to the combined problem, we
+ return true. */
+
+bool
+omega_problem_has_red_equations (omega_pb pb)
+{
+ bool result;
+ int e;
+ int i;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Checking for red equations:\n");
+ omega_print_problem (dump_file, pb);
+ }
+
+ please_no_equalities_in_simplified_problems++;
+ may_be_red++;
+
+ if (omega_single_result)
+ return_single_result++;
+
+ create_color = true;
+ result = (omega_simplify_problem (pb) == omega_false);
+
+ if (omega_single_result)
+ return_single_result--;
+
+ may_be_red--;
+ please_no_equalities_in_simplified_problems--;
+
+ if (result)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Gist is FALSE\n");
+
+ pb->num_subs = 0;
+ pb->num_geqs = 0;
+ pb->num_eqs = 1;
+ pb->eqs[0].color = omega_red;
+
+ for (i = pb->num_vars; i > 0; i--)
+ pb->eqs[0].coef[i] = 0;
+
+ pb->eqs[0].coef[0] = 1;
+ return true;
+ }
+
+ free_red_eliminations (pb);
+ gcc_assert (pb->num_eqs == 0);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_red)
+ result = true;
+
+ if (!result)
+ return false;
+
+ for (i = pb->safe_vars; i >= 1; i--)
+ {
+ int ub = 0;
+ int lb = 0;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ if (pb->geqs[e].coef[i])
+ {
+ if (pb->geqs[e].coef[i] > 0)
+ lb |= (1 + (pb->geqs[e].color == omega_red ? 1 : 0));
+
+ else
+ ub |= (1 + (pb->geqs[e].color == omega_red ? 1 : 0));
+ }
+ }
+
+ if (ub == 2 || lb == 2)
+ {
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "checks for upper/lower bounds worked!\n");
+
+ if (!omega_reduce_with_subs)
+ {
+ resurrect_subs (pb);
+ gcc_assert (pb->num_subs == 0);
+ }
+
+ return true;
+ }
+ }
+
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "*** Doing potentially expensive elimination tests "
+ "for red equations\n");
+
+ please_no_equalities_in_simplified_problems++;
+ omega_eliminate_red (pb, true);
+ please_no_equalities_in_simplified_problems--;
+
+ result = false;
+ gcc_assert (pb->num_eqs == 0);
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].color == omega_red)
+ result = true;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (!result)
+ fprintf (dump_file,
+ "******************** Redudant Red Equations eliminated!!\n");
+ else
+ fprintf (dump_file,
+ "******************** Red Equations remain\n");
+
+ omega_print_problem (dump_file, pb);
+ }
+
+ if (!omega_reduce_with_subs)
+ {
+ normalize_return_type r;
+
+ resurrect_subs (pb);
+ r = normalize_omega_problem (pb);
+ gcc_assert (r != normalize_false);
+
+ coalesce (pb);
+ cleanout_wildcards (pb);
+ gcc_assert (pb->num_subs == 0);
+ }
+
+ return result;
+}
+
+/* Calls omega_simplify_problem in approximate mode. */
+
+enum omega_result
+omega_simplify_approximate (omega_pb pb)
+{
+ enum omega_result result;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "(Entering approximate mode\n");
+
+ in_approximate_mode = true;
+ result = omega_simplify_problem (pb);
+ in_approximate_mode = false;
+
+ gcc_assert (pb->num_vars == pb->safe_vars);
+ if (!omega_reduce_with_subs)
+ gcc_assert (pb->num_subs == 0);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Leaving approximate mode)\n");
+
+ return result;
+}
+
+
+/* Simplifies problem PB by eliminating redundant constraints and
+ reducing the constraints system to a minimal form. Returns
+ omega_true when the problem was successfully reduced, omega_unknown
+ when the solver is unable to determine an answer. */
+
+enum omega_result
+omega_simplify_problem (omega_pb pb)
+{
+ int i;
+
+ omega_found_reduction = omega_false;
+
+ if (!pb->variables_initialized)
+ omega_initialize_variables (pb);
+
+ if (next_key * 3 > MAX_KEYS)
+ {
+ int e;
+
+ hash_version++;
+ next_key = OMEGA_MAX_VARS + 1;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].touched = 1;
+
+ for (i = 0; i < HASH_TABLE_SIZE; i++)
+ hash_master[i].touched = -1;
+
+ pb->hash_version = hash_version;
+ }
+
+ else if (pb->hash_version != hash_version)
+ {
+ int e;
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].touched = 1;
+
+ pb->hash_version = hash_version;
+ }
+
+ if (pb->num_vars > pb->num_eqs + 3 * pb->safe_vars)
+ omega_free_eliminations (pb, pb->safe_vars);
+
+ if (!may_be_red && pb->num_subs == 0 && pb->safe_vars == 0)
+ {
+ omega_found_reduction = omega_solve_problem (pb, omega_unknown);
+
+ if (omega_found_reduction != omega_false
+ && !return_single_result)
+ {
+ pb->num_geqs = 0;
+ pb->num_eqs = 0;
+ (*omega_when_reduced) (pb);
+ }
+
+ return omega_found_reduction;
+ }
+
+ omega_solve_problem (pb, omega_simplify);
+
+ if (omega_found_reduction != omega_false)
+ {
+ for (i = 1; omega_safe_var_p (pb, i); i++)
+ pb->forwarding_address[pb->var[i]] = i;
+
+ for (i = 0; i < pb->num_subs; i++)
+ pb->forwarding_address[pb->subs[i].key] = -i - 1;
+ }
+
+ if (!omega_reduce_with_subs)
+ gcc_assert (please_no_equalities_in_simplified_problems
+ || omega_found_reduction == omega_false
+ || pb->num_subs == 0);
+
+ return omega_found_reduction;
+}
+
+/* Make variable VAR unprotected: it then can be eliminated. */
+
+void
+omega_unprotect_variable (omega_pb pb, int var)
+{
+ int e, idx;
+ idx = pb->forwarding_address[var];
+
+ if (idx < 0)
+ {
+ idx = -1 - idx;
+ pb->num_subs--;
+
+ if (idx < pb->num_subs)
+ {
+ omega_copy_eqn (&pb->subs[idx], &pb->subs[pb->num_subs],
+ pb->num_vars);
+ pb->forwarding_address[pb->subs[idx].key] = -idx - 1;
+ }
+ }
+ else
+ {
+ int *bring_to_life = XNEWVEC (int, OMEGA_MAX_VARS);
+ int e2;
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ bring_to_life[e] = (pb->subs[e].coef[idx] != 0);
+
+ for (e2 = pb->num_subs - 1; e2 >= 0; e2--)
+ if (bring_to_life[e2])
+ {
+ pb->num_vars++;
+ pb->safe_vars++;
+
+ if (pb->safe_vars < pb->num_vars)
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ {
+ pb->geqs[e].coef[pb->num_vars] =
+ pb->geqs[e].coef[pb->safe_vars];
+
+ pb->geqs[e].coef[pb->safe_vars] = 0;
+ }
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ {
+ pb->eqs[e].coef[pb->num_vars] =
+ pb->eqs[e].coef[pb->safe_vars];
+
+ pb->eqs[e].coef[pb->safe_vars] = 0;
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ {
+ pb->subs[e].coef[pb->num_vars] =
+ pb->subs[e].coef[pb->safe_vars];
+
+ pb->subs[e].coef[pb->safe_vars] = 0;
+ }
+
+ pb->var[pb->num_vars] = pb->var[pb->safe_vars];
+ pb->forwarding_address[pb->var[pb->num_vars]] =
+ pb->num_vars;
+ }
+ else
+ {
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ pb->geqs[e].coef[pb->safe_vars] = 0;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ pb->eqs[e].coef[pb->safe_vars] = 0;
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ pb->subs[e].coef[pb->safe_vars] = 0;
+ }
+
+ pb->var[pb->safe_vars] = pb->subs[e2].key;
+ pb->forwarding_address[pb->subs[e2].key] = pb->safe_vars;
+
+ omega_copy_eqn (&(pb->eqs[pb->num_eqs]), &(pb->subs[e2]),
+ pb->num_vars);
+ pb->eqs[pb->num_eqs++].coef[pb->safe_vars] = -1;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+
+ if (e2 < pb->num_subs - 1)
+ omega_copy_eqn (&(pb->subs[e2]), &(pb->subs[pb->num_subs - 1]),
+ pb->num_vars);
+
+ pb->num_subs--;
+ }
+
+ omega_unprotect_1 (pb, &idx, NULL);
+ free (bring_to_life);
+ }
+
+ chain_unprotect (pb);
+}
+
+/* Unprotects VAR and simplifies PB. */
+
+enum omega_result
+omega_constrain_variable_sign (omega_pb pb, enum omega_eqn_color color,
+ int var, int sign)
+{
+ int n_vars = pb->num_vars;
+ int e, j;
+ int k = pb->forwarding_address[var];
+
+ if (k < 0)
+ {
+ k = -1 - k;
+
+ if (sign != 0)
+ {
+ e = pb->num_geqs++;
+ omega_copy_eqn (&pb->geqs[e], &pb->subs[k], pb->num_vars);
+
+ for (j = 0; j <= n_vars; j++)
+ pb->geqs[e].coef[j] *= sign;
+
+ pb->geqs[e].coef[0]--;
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].color = color;
+ }
+ else
+ {
+ e = pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ omega_copy_eqn (&pb->eqs[e], &pb->subs[k], pb->num_vars);
+ pb->eqs[e].color = color;
+ }
+ }
+ else if (sign != 0)
+ {
+ e = pb->num_geqs++;
+ omega_init_eqn_zero (&pb->geqs[e], pb->num_vars);
+ pb->geqs[e].coef[k] = sign;
+ pb->geqs[e].coef[0] = -1;
+ pb->geqs[e].touched = 1;
+ pb->geqs[e].color = color;
+ }
+ else
+ {
+ e = pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ omega_init_eqn_zero (&pb->eqs[e], pb->num_vars);
+ pb->eqs[e].coef[k] = 1;
+ pb->eqs[e].color = color;
+ }
+
+ omega_unprotect_variable (pb, var);
+ return omega_simplify_problem (pb);
+}
+
+/* Add an equation "VAR = VALUE" with COLOR to PB. */
+
+void
+omega_constrain_variable_value (omega_pb pb, enum omega_eqn_color color,
+ int var, int value)
+{
+ int e;
+ int k = pb->forwarding_address[var];
+
+ if (k < 0)
+ {
+ k = -1 - k;
+ e = pb->num_eqs++;
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ omega_copy_eqn (&pb->eqs[e], &pb->subs[k], pb->num_vars);
+ pb->eqs[e].coef[0] -= value;
+ }
+ else
+ {
+ e = pb->num_eqs++;
+ omega_init_eqn_zero (&pb->eqs[e], pb->num_vars);
+ pb->eqs[e].coef[k] = 1;
+ pb->eqs[e].coef[0] = -value;
+ }
+
+ pb->eqs[e].color = color;
+}
+
+/* Return false when the upper and lower bounds are not coupled.
+ Initialize the bounds LOWER_BOUND and UPPER_BOUND for the values of
+ variable I. */
+
+bool
+omega_query_variable (omega_pb pb, int i, int *lower_bound, int *upper_bound)
+{
+ int n_vars = pb->num_vars;
+ int e, j;
+ bool is_simple;
+ bool coupled = false;
+
+ *lower_bound = neg_infinity;
+ *upper_bound = pos_infinity;
+ i = pb->forwarding_address[i];
+
+ if (i < 0)
+ {
+ i = -i - 1;
+
+ for (j = 1; j <= n_vars; j++)
+ if (pb->subs[i].coef[j] != 0)
+ return true;
+
+ *upper_bound = *lower_bound = pb->subs[i].coef[0];
+ return false;
+ }
+
+ for (e = pb->num_subs - 1; e >= 0; e--)
+ if (pb->subs[e].coef[i] != 0)
+ coupled = true;
+
+ for (e = pb->num_eqs - 1; e >= 0; e--)
+ if (pb->eqs[e].coef[i] != 0)
+ {
+ is_simple = true;
+
+ for (j = 1; j <= n_vars; j++)
+ if (i != j && pb->eqs[e].coef[j] != 0)
+ {
+ is_simple = false;
+ coupled = true;
+ break;
+ }
+
+ if (!is_simple)
+ continue;
+ else
+ {
+ *lower_bound = *upper_bound =
+ -pb->eqs[e].coef[i] * pb->eqs[e].coef[0];
+ return false;
+ }
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[i] != 0)
+ {
+ if (pb->geqs[e].key == i)
+ *lower_bound = MAX (*lower_bound, -pb->geqs[e].coef[0]);
+
+ else if (pb->geqs[e].key == -i)
+ *upper_bound = MIN (*upper_bound, pb->geqs[e].coef[0]);
+
+ else
+ coupled = true;
+ }
+
+ return coupled;
+}
+
+/* Sets the lower bound L and upper bound U for the values of variable
+ I, and sets COULD_BE_ZERO to true if variable I might take value
+ zero. LOWER_BOUND and UPPER_BOUND are bounds on the values of
+ variable I. */
+
+static void
+query_coupled_variable (omega_pb pb, int i, int *l, int *u,
+ bool *could_be_zero, int lower_bound, int upper_bound)
+{
+ int e, b1, b2;
+ eqn eqn;
+ int sign;
+ int v;
+
+ /* Preconditions. */
+ gcc_assert (abs (pb->forwarding_address[i]) == 1
+ && pb->num_vars + pb->num_subs == 2
+ && pb->num_eqs + pb->num_subs == 1);
+
+ /* Define variable I in terms of variable V. */
+ if (pb->forwarding_address[i] == -1)
+ {
+ eqn = &pb->subs[0];
+ sign = 1;
+ v = 1;
+ }
+ else
+ {
+ eqn = &pb->eqs[0];
+ sign = -eqn->coef[1];
+ v = 2;
+ }
+
+ for (e = pb->num_geqs - 1; e >= 0; e--)
+ if (pb->geqs[e].coef[v] != 0)
+ {
+ if (pb->geqs[e].coef[v] == 1)
+ lower_bound = MAX (lower_bound, -pb->geqs[e].coef[0]);
+
+ else
+ upper_bound = MIN (upper_bound, pb->geqs[e].coef[0]);
+ }
+
+ if (lower_bound > upper_bound)
+ {
+ *l = pos_infinity;
+ *u = neg_infinity;
+ *could_be_zero = 0;
+ return;
+ }
+
+ if (lower_bound == neg_infinity)
+ {
+ if (eqn->coef[v] > 0)
+ b1 = sign * neg_infinity;
+
+ else
+ b1 = -sign * neg_infinity;
+ }
+ else
+ b1 = sign * (eqn->coef[0] + eqn->coef[v] * lower_bound);
+
+ if (upper_bound == pos_infinity)
+ {
+ if (eqn->coef[v] > 0)
+ b2 = sign * pos_infinity;
+
+ else
+ b2 = -sign * pos_infinity;
+ }
+ else
+ b2 = sign * (eqn->coef[0] + eqn->coef[v] * upper_bound);
+
+ *l = MAX (*l, b1 <= b2 ? b1 : b2);
+ *u = MIN (*u, b1 <= b2 ? b2 : b1);
+
+ *could_be_zero = (*l <= 0 && 0 <= *u
+ && int_mod (eqn->coef[0], abs (eqn->coef[v])) == 0);
+}
+
+/* Return false when a lower bound L and an upper bound U for variable
+ I in problem PB have been initialized. */
+
+bool
+omega_query_variable_bounds (omega_pb pb, int i, int *l, int *u)
+{
+ *l = neg_infinity;
+ *u = pos_infinity;
+
+ if (!omega_query_variable (pb, i, l, u)
+ || (pb->num_vars == 1 && pb->forwarding_address[i] == 1))
+ return false;
+
+ if (abs (pb->forwarding_address[i]) == 1
+ && pb->num_vars + pb->num_subs == 2
+ && pb->num_eqs + pb->num_subs == 1)
+ {
+ bool could_be_zero;
+ query_coupled_variable (pb, i, l, u, &could_be_zero, neg_infinity,
+ pos_infinity);
+ return false;
+ }
+
+ return true;
+}
+
+/* For problem PB, return an integer that represents the classic data
+ dependence direction in function of the DD_LT, DD_EQ and DD_GT bit
+ masks that are added to the result. When DIST_KNOWN is true, DIST
+ is set to the classic data dependence distance. LOWER_BOUND and
+ UPPER_BOUND are bounds on the value of variable I, for example, it
+ is possible to narrow the iteration domain with safe approximations
+ of loop counts, and thus discard some data dependences that cannot
+ occur. */
+
+int
+omega_query_variable_signs (omega_pb pb, int i, int dd_lt,
+ int dd_eq, int dd_gt, int lower_bound,
+ int upper_bound, bool *dist_known, int *dist)
+{
+ int result;
+ int l, u;
+ bool could_be_zero;
+
+ l = neg_infinity;
+ u = pos_infinity;
+
+ omega_query_variable (pb, i, &l, &u);
+ query_coupled_variable (pb, i, &l, &u, &could_be_zero, lower_bound,
+ upper_bound);
+ result = 0;
+
+ if (l < 0)
+ result |= dd_gt;
+
+ if (u > 0)
+ result |= dd_lt;
+
+ if (could_be_zero)
+ result |= dd_eq;
+
+ if (l == u)
+ {
+ *dist_known = true;
+ *dist = l;
+ }
+ else
+ *dist_known = false;
+
+ return result;
+}
+
+/* Initialize PB as an Omega problem with NVARS variables and NPROT
+ safe variables. Safe variables are not eliminated during the
+ Fourier-Motzkin elimination. Safe variables are all those
+ variables that are placed at the beginning of the array of
+ variables: P->var[0, ..., NPROT - 1]. */
+
+omega_pb
+omega_alloc_problem (int nvars, int nprot)
+{
+ omega_pb pb;
+
+ gcc_assert (nvars <= OMEGA_MAX_VARS);
+ omega_initialize ();
+
+ /* Allocate and initialize PB. */
+ pb = XCNEW (struct omega_pb);
+ pb->var = XCNEWVEC (int, OMEGA_MAX_VARS + 2);
+ pb->forwarding_address = XCNEWVEC (int, OMEGA_MAX_VARS + 2);
+ pb->geqs = omega_alloc_eqns (0, OMEGA_MAX_GEQS);
+ pb->eqs = omega_alloc_eqns (0, OMEGA_MAX_EQS);
+ pb->subs = omega_alloc_eqns (0, OMEGA_MAX_VARS + 1);
+
+ pb->hash_version = hash_version;
+ pb->num_vars = nvars;
+ pb->safe_vars = nprot;
+ pb->variables_initialized = false;
+ pb->variables_freed = false;
+ pb->num_eqs = 0;
+ pb->num_geqs = 0;
+ pb->num_subs = 0;
+ return pb;
+}
+
+/* Keeps the state of the initialization. */
+static bool omega_initialized = false;
+
+/* Initialization of the Omega solver. */
+
+void
+omega_initialize (void)
+{
+ int i;
+
+ if (omega_initialized)
+ return;
+
+ next_wild_card = 0;
+ next_key = OMEGA_MAX_VARS + 1;
+ packing = XCNEWVEC (int, OMEGA_MAX_VARS);
+ fast_lookup = XCNEWVEC (int, MAX_KEYS * 2);
+ fast_lookup_red = XCNEWVEC (int, MAX_KEYS * 2);
+ hash_master = omega_alloc_eqns (0, HASH_TABLE_SIZE);
+
+ for (i = 0; i < HASH_TABLE_SIZE; i++)
+ hash_master[i].touched = -1;
+
+ sprintf (wild_name[0], "1");
+ sprintf (wild_name[1], "a");
+ sprintf (wild_name[2], "b");
+ sprintf (wild_name[3], "c");
+ sprintf (wild_name[4], "d");
+ sprintf (wild_name[5], "e");
+ sprintf (wild_name[6], "f");
+ sprintf (wild_name[7], "g");
+ sprintf (wild_name[8], "h");
+ sprintf (wild_name[9], "i");
+ sprintf (wild_name[10], "j");
+ sprintf (wild_name[11], "k");
+ sprintf (wild_name[12], "l");
+ sprintf (wild_name[13], "m");
+ sprintf (wild_name[14], "n");
+ sprintf (wild_name[15], "o");
+ sprintf (wild_name[16], "p");
+ sprintf (wild_name[17], "q");
+ sprintf (wild_name[18], "r");
+ sprintf (wild_name[19], "s");
+ sprintf (wild_name[20], "t");
+ sprintf (wild_name[40 - 1], "alpha");
+ sprintf (wild_name[40 - 2], "beta");
+ sprintf (wild_name[40 - 3], "gamma");
+ sprintf (wild_name[40 - 4], "delta");
+ sprintf (wild_name[40 - 5], "tau");
+ sprintf (wild_name[40 - 6], "sigma");
+ sprintf (wild_name[40 - 7], "chi");
+ sprintf (wild_name[40 - 8], "omega");
+ sprintf (wild_name[40 - 9], "pi");
+ sprintf (wild_name[40 - 10], "ni");
+ sprintf (wild_name[40 - 11], "Alpha");
+ sprintf (wild_name[40 - 12], "Beta");
+ sprintf (wild_name[40 - 13], "Gamma");
+ sprintf (wild_name[40 - 14], "Delta");
+ sprintf (wild_name[40 - 15], "Tau");
+ sprintf (wild_name[40 - 16], "Sigma");
+ sprintf (wild_name[40 - 17], "Chi");
+ sprintf (wild_name[40 - 18], "Omega");
+ sprintf (wild_name[40 - 19], "xxx");
+
+ omega_initialized = true;
+}
diff --git a/gcc/omega.h b/gcc/omega.h
new file mode 100644
index 00000000000..c050a6e0329
--- /dev/null
+++ b/gcc/omega.h
@@ -0,0 +1,340 @@
+/* Source code for an implementation of the Omega test, a integer
+ programming algorithm for dependence analysis, by William Pugh,
+ appeared in Supercomputing '91 and CACM Aug 92.
+
+ This code has no license restrictions, and is considered public
+ domain.
+
+ Changes copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+ Contributed by Sebastian Pop <sebastian.pop@inria.fr>
+
+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 "params.h"
+
+#ifndef GCC_OMEGA_H
+#define GCC_OMEGA_H
+
+#define OMEGA_MAX_VARS PARAM_VALUE (PARAM_OMEGA_MAX_VARS)
+#define OMEGA_MAX_GEQS PARAM_VALUE (PARAM_OMEGA_MAX_GEQS)
+#define OMEGA_MAX_EQS PARAM_VALUE (PARAM_OMEGA_MAX_EQS)
+
+#define pos_infinity (0x7ffffff)
+#define neg_infinity (-0x7ffffff)
+
+/* Results of the Omega solver. */
+enum omega_result {
+ omega_false = 0,
+ omega_true = 1,
+
+ /* Value returned when the solver is unable to determine an
+ answer. */
+ omega_unknown = 2,
+
+ /* Value used for asking the solver to simplify the system. */
+ omega_simplify = 3
+};
+
+/* Values used for labeling equations. Private (not used outside the
+ solver). */
+enum omega_eqn_color {
+ omega_black = 0,
+ omega_red = 1
+};
+
+/* Structure for equations. */
+typedef struct eqn
+{
+ int key;
+ int touched;
+ enum omega_eqn_color color;
+
+ /* Array of coefficients for the equation. The layout of the data
+ is as follows: coef[0] is the constant, coef[i] for 1 <= i <=
+ OMEGA_MAX_VARS, are the coefficients for each dimension. Examples:
+ the equation 0 = 9 + x + 0y + 5z is encoded as [9 1 0 5], the
+ inequality 0 <= -8 + x + 2y + 3z is encoded as [-8 1 2 3]. */
+ int *coef;
+} *eqn;
+
+typedef struct omega_pb
+{
+ /* The number of variables in the system of equations. */
+ int num_vars;
+
+ /* Safe variables are not eliminated during the Fourier-Motzkin
+ simplification of the system. Safe variables are all those
+ variables that are placed at the beginning of the array of
+ variables: PB->var[1, ..., SAFE_VARS]. PB->var[0] is not used,
+ as PB->eqs[x]->coef[0] represents the constant of the equation. */
+ int safe_vars;
+
+ /* Number of elements in eqs[]. */
+ int num_eqs;
+ /* Number of elements in geqs[]. */
+ int num_geqs;
+ /* Number of elements in subs[]. */
+ int num_subs;
+
+ int hash_version;
+ bool variables_initialized;
+ bool variables_freed;
+
+ /* Index or name of variables. Negative integers are reserved for
+ wildcard variables. Maps the index of variables in the original
+ problem to the new index of the variable. The index for a
+ variable in the coef array of an equation can change as some
+ variables are eliminated. */
+ int *var;
+
+ int *forwarding_address;
+
+ /* Inequalities in the system of constraints. */
+ eqn geqs;
+
+ /* Equations in the system of constraints. */
+ eqn eqs;
+
+ /* A map of substituted variables. */
+ eqn subs;
+} *omega_pb;
+
+extern void omega_initialize (void);
+extern omega_pb omega_alloc_problem (int, int);
+extern enum omega_result omega_solve_problem (omega_pb, enum omega_result);
+extern enum omega_result omega_simplify_problem (omega_pb);
+extern enum omega_result omega_simplify_approximate (omega_pb);
+extern enum omega_result omega_constrain_variable_sign (omega_pb,
+ enum omega_eqn_color,
+ int, int);
+extern void debug_omega_problem (omega_pb);
+extern void omega_print_problem (FILE *, omega_pb);
+extern void omega_print_red_equations (FILE *, omega_pb);
+extern int omega_count_red_equations (omega_pb);
+extern void omega_pretty_print_problem (FILE *, omega_pb);
+extern void omega_unprotect_variable (omega_pb, int var);
+extern void omega_negate_geq (omega_pb, int);
+extern void omega_convert_eq_to_geqs (omega_pb, int eq);
+extern void omega_print_eqn (FILE *, omega_pb, eqn, bool, int);
+extern bool omega_problem_has_red_equations (omega_pb);
+extern enum omega_result omega_eliminate_redundant (omega_pb, bool);
+extern void omega_eliminate_red (omega_pb, bool);
+extern void omega_constrain_variable_value (omega_pb, enum omega_eqn_color,
+ int, int);
+extern bool omega_query_variable (omega_pb, int, int *, int *);
+extern int omega_query_variable_signs (omega_pb, int, int, int, int,
+ int, int, bool *, int *);
+extern bool omega_query_variable_bounds (omega_pb, int, int *, int *);
+extern void (*omega_when_reduced) (omega_pb);
+extern void omega_no_procedure (omega_pb);
+
+/* Return true when variable I in problem PB is a wildcard. */
+
+static inline bool
+omega_wildcard_p (omega_pb pb, int i)
+{
+ return (pb->var[i] < 0);
+}
+
+/* Return true when variable I in problem PB is a safe variable. */
+
+static inline bool
+omega_safe_var_p (omega_pb pb, int i)
+{
+ /* The constant of an equation is not a variable. */
+ gcc_assert (0 < i);
+ return (i <= pb->safe_vars);
+}
+
+/* Print to FILE equality E from PB. */
+
+static inline void
+omega_print_eq (FILE *file, omega_pb pb, eqn e)
+{
+ omega_print_eqn (file, pb, e, false, 0);
+}
+
+/* Print to FILE inequality E from PB. */
+
+static inline void
+omega_print_geq (FILE *file, omega_pb pb, eqn e)
+{
+ omega_print_eqn (file, pb, e, true, 0);
+}
+
+/* Print to FILE inequality E from PB. */
+
+static inline void
+omega_print_geq_extra (FILE *file, omega_pb pb, eqn e)
+{
+ omega_print_eqn (file, pb, e, true, 1);
+}
+
+/* E1 = E2, make a copy of E2 into E1. Equations contain S variables. */
+
+static inline void
+omega_copy_eqn (eqn e1, eqn e2, int s)
+{
+ e1->key = e2->key;
+ e1->touched = e2->touched;
+ e1->color = e2->color;
+
+ memcpy (e1->coef, e2->coef, (s + 1) * sizeof (int));
+}
+
+/* Intialize E = 0. Equation E contains S variables. */
+
+static inline void
+omega_init_eqn_zero (eqn e, int s)
+{
+ e->key = 0;
+ e->touched = 0;
+ e->color = omega_black;
+
+ memset (e->coef, 0, (s + 1) * sizeof (int));
+}
+
+/* Allocate N equations with S variables. */
+
+static inline eqn
+omega_alloc_eqns (int s, int n)
+{
+ int i;
+ eqn res = (eqn) (xcalloc (n, sizeof (struct eqn)));
+
+ for (i = n - 1; i >= 0; i--)
+ {
+ res[i].coef = (int *) (xcalloc (OMEGA_MAX_VARS + 1, sizeof (int)));
+ omega_init_eqn_zero (&res[i], s);
+ }
+
+ return res;
+}
+
+/* Free N equations from array EQ. */
+
+static inline void
+omega_free_eqns (eqn eq, int n)
+{
+ int i;
+
+ for (i = n - 1; i >= 0; i--)
+ free (eq[i].coef);
+
+ free (eq);
+}
+
+/* Returns true when E is an inequality with a single variable. */
+
+static inline bool
+single_var_geq (eqn e, int nv ATTRIBUTE_UNUSED)
+{
+ return (e->key != 0
+ && -OMEGA_MAX_VARS <= e->key && e->key <= OMEGA_MAX_VARS);
+}
+
+/* Allocate a new equality with all coefficients 0, and tagged with
+ COLOR. Return the index of this equality in problem PB. */
+
+static inline int
+omega_add_zero_eq (omega_pb pb, enum omega_eqn_color color)
+{
+ int idx = pb->num_eqs++;
+
+ gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
+ omega_init_eqn_zero (&pb->eqs[idx], pb->num_vars);
+ pb->eqs[idx].color = color;
+ return idx;
+}
+
+/* Allocate a new inequality with all coefficients 0, and tagged with
+ COLOR. Return the index of this inequality in problem PB. */
+
+static inline int
+omega_add_zero_geq (omega_pb pb, enum omega_eqn_color color)
+{
+ int idx = pb->num_geqs;
+
+ pb->num_geqs++;
+ gcc_assert (pb->num_geqs <= OMEGA_MAX_GEQS);
+ omega_init_eqn_zero (&pb->geqs[idx], pb->num_vars);
+ pb->geqs[idx].touched = 1;
+ pb->geqs[idx].color = color;
+ return idx;
+}
+
+/* Initialize variables for problem PB. */
+
+static inline void
+omega_initialize_variables (omega_pb pb)
+{
+ int i;
+
+ for (i = pb->num_vars; i >= 0; i--)
+ pb->forwarding_address[i] = pb->var[i] = i;
+
+ pb->variables_initialized = true;
+}
+
+/* Free problem PB. */
+
+static inline void
+omega_free_problem (omega_pb pb)
+{
+ free (pb->var);
+ free (pb->forwarding_address);
+ omega_free_eqns (pb->geqs, OMEGA_MAX_GEQS);
+ omega_free_eqns (pb->eqs, OMEGA_MAX_EQS);
+ omega_free_eqns (pb->subs, OMEGA_MAX_VARS + 1);
+ free (pb);
+}
+
+/* Copy omega problems: P1 = P2. */
+
+static inline void
+omega_copy_problem (omega_pb p1, omega_pb p2)
+{
+ int e, i;
+
+ p1->num_vars = p2->num_vars;
+ p1->hash_version = p2->hash_version;
+ p1->variables_initialized = p2->variables_initialized;
+ p1->variables_freed = p2->variables_freed;
+ p1->safe_vars = p2->safe_vars;
+ p1->num_eqs = p2->num_eqs;
+ p1->num_subs = p2->num_subs;
+ p1->num_geqs = p2->num_geqs;
+
+ for (e = p2->num_eqs - 1; e >= 0; e--)
+ omega_copy_eqn (&(p1->eqs[e]), &(p2->eqs[e]), p2->num_vars);
+
+ for (e = p2->num_geqs - 1; e >= 0; e--)
+ omega_copy_eqn (&(p1->geqs[e]), &(p2->geqs[e]), p2->num_vars);
+
+ for (e = p2->num_subs - 1; e >= 0; e--)
+ omega_copy_eqn (&(p1->subs[e]), &(p2->subs[e]), p2->num_vars);
+
+ for (i = p2->num_vars; i >= 0; i--)
+ p1->var[i] = p2->var[i];
+
+ for (i = OMEGA_MAX_VARS; i >= 0; i--)
+ p1->forwarding_address[i] = p2->forwarding_address[i];
+}
+
+#endif /* GCC_OMEGA_H */
diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index e7ffc1a646e..97abcf06b7a 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -139,6 +139,7 @@ for (i = 0; i < n_langs; i++) {
s = substr(" ", length (macros[i]))
print "#define " macros[i] s " (1 << " i ")"
}
+print "#define CL_LANG_ALL ((1 << " n_langs ") - 1)"
print ""
print "enum opt_code"
diff --git a/gcc/opts.c b/gcc/opts.c
index c84bc2a3c35..f8eeb1a7db9 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -268,6 +268,15 @@ handle_option (const char **argv, unsigned int lang_mask)
complain_wrong_lang (argv[0], option, lang_mask);
goto done;
}
+ else if ((option->flags & CL_TARGET)
+ && (option->flags & CL_LANG_ALL)
+ && !(option->flags & lang_mask))
+ {
+ /* Complain for target flag language mismatches if any languages
+ are specified. */
+ complain_wrong_lang (argv[0], option, lang_mask);
+ goto done;
+ }
if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
{
@@ -1085,6 +1094,11 @@ common_handle_option (size_t scode, const char *arg, int value,
break;
case OPT_Wstrict_overflow:
+ warn_strict_overflow = (value
+ ? (int) WARN_STRICT_OVERFLOW_CONDITIONAL
+ : 0);
+ break;
+
case OPT_Wstrict_overflow_:
warn_strict_overflow = value;
break;
@@ -1254,11 +1268,11 @@ common_handle_option (size_t scode, const char *arg, int value,
/* The real switch is -fno-random-seed. */
if (value)
return 0;
- flag_random_seed = NULL;
+ set_random_seed (NULL);
break;
case OPT_frandom_seed_:
- flag_random_seed = arg;
+ set_random_seed (arg);
break;
case OPT_fsched_verbose_:
diff --git a/gcc/output.h b/gcc/output.h
index 4e7ccf61308..4cb41d4f2f9 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -170,10 +170,6 @@ extern void emutls_finish (void);
Prefixes such as % are optional. */
extern int decode_reg_name (const char *);
-/* Make the rtl for variable VAR be volatile.
- Use this only for static variables. */
-extern void make_var_volatile (tree);
-
extern void assemble_alias (tree, tree);
extern void default_assemble_visibility (tree, int);
@@ -272,6 +268,9 @@ extern bool assemble_integer (rtx, unsigned, unsigned, int);
extern void assemble_real (REAL_VALUE_TYPE, enum machine_mode, unsigned);
#endif
+/* Write the address of the entity given by SYMBOL to SEC. */
+extern void assemble_addr_to_section (rtx, section *);
+
/* Return the size of the constant pool. */
extern int get_pool_size (void);
@@ -384,7 +383,6 @@ extern bool first_function_block_is_cold;
/* Decide whether DECL needs to be in a writable section.
RELOC is the same as for SELECT_SECTION. */
extern bool decl_readonly_section (tree, int);
-extern bool decl_readonly_section_1 (tree, int, int);
/* This can be used to compute RELOC for the function above, when
given a constant expression. */
@@ -572,17 +570,20 @@ extern section *function_section (tree);
extern section *unlikely_text_section (void);
extern section *current_function_section (void);
+/* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
+ not) section for PRIORITY. */
+extern section *get_cdtor_priority_section (int, bool);
+
extern bool unlikely_text_section_p (section *);
extern void switch_to_section (section *);
extern void output_section_asm_op (const void *);
extern unsigned int default_section_type_flags (tree, const char *, int);
-extern unsigned int default_section_type_flags_1 (tree, const char *, int, int);
extern bool have_global_bss_p (void);
extern void default_no_named_section (const char *, unsigned int, tree);
extern void default_elf_asm_named_section (const char *, unsigned int, tree);
-extern enum section_category categorize_decl_for_section (tree, int, int);
+extern enum section_category categorize_decl_for_section (tree, int);
extern void default_coff_asm_named_section (const char *, unsigned int, tree);
extern void default_pe_asm_named_section (const char *, unsigned int, tree);
@@ -593,15 +594,9 @@ extern void default_stabs_asm_out_constructor (rtx, int);
extern void default_named_section_asm_out_constructor (rtx, int);
extern void default_ctor_section_asm_out_constructor (rtx, int);
-extern section *default_select_section (tree, int,
- unsigned HOST_WIDE_INT);
-extern section *default_elf_select_section (tree, int,
- unsigned HOST_WIDE_INT);
-extern section *default_elf_select_section_1 (tree, int,
- unsigned HOST_WIDE_INT,
- int);
+extern section *default_select_section (tree, int, unsigned HOST_WIDE_INT);
+extern section *default_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
extern void default_unique_section (tree, int);
-extern void default_unique_section_1 (tree, int, int);
extern section *default_function_rodata_section (tree);
extern section *default_no_function_rodata_section (tree);
extern section *default_select_rtx_section (enum machine_mode, rtx,
diff --git a/gcc/params.def b/gcc/params.def
index e583025c879..3725148c99e 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -1,5 +1,6 @@
/* params.def - Run-time parameters.
- Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>.
This file is part of GCC.
@@ -452,6 +453,41 @@ DEFPARAM(PARAM_SCEV_MAX_EXPR_SIZE,
"Bound on size of expressions used in the scalar evolutions analyzer",
20, 0, 0)
+DEFPARAM(PARAM_OMEGA_MAX_VARS,
+ "omega-max-vars",
+ "Bound on the number of variables in Omega constraint systems",
+ 128, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_MAX_GEQS,
+ "omega-max-geqs",
+ "Bound on the number of inequalities in Omega constraint systems",
+ 256, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_MAX_EQS,
+ "omega-max-eqs",
+ "Bound on the number of equalities in Omega constraint systems",
+ 128, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_MAX_WILD_CARDS,
+ "omega-max-wild-cards",
+ "Bound on the number of wild cards in Omega constraint systems",
+ 18, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_HASH_TABLE_SIZE,
+ "omega-hash-table-size",
+ "Bound on the size of the hash table in Omega constraint systems",
+ 550, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_MAX_KEYS,
+ "omega-max-keys",
+ "Bound on the number of keys in Omega constraint systems",
+ 500, 0, 0)
+
+DEFPARAM(PARAM_OMEGA_ELIMINATE_REDUNDANT_CONSTRAINTS,
+ "omega-eliminate-redundant-constraints",
+ "When set to 1, use expensive methods to eliminate all redundant constraints",
+ 0, 0, 1)
+
DEFPARAM(PARAM_VECT_MAX_VERSION_CHECKS,
"vect-max-version-checks",
"Bound on number of runtime checks inserted by the vectorizer's loop versioning",
diff --git a/gcc/passes.c b/gcc/passes.c
index 0c28075cc08..b93cc6c262f 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -590,6 +590,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_scev_cprop);
NEXT_PASS (pass_empty_loop);
NEXT_PASS (pass_record_bounds);
+ NEXT_PASS (pass_check_data_deps);
NEXT_PASS (pass_linear_transform);
NEXT_PASS (pass_iv_canon);
NEXT_PASS (pass_if_conversion);
@@ -657,6 +658,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_initial_value_sets);
NEXT_PASS (pass_unshare_all_rtl);
NEXT_PASS (pass_instantiate_virtual_regs);
+ NEXT_PASS (pass_into_cfg_layout_mode);
NEXT_PASS (pass_jump2);
NEXT_PASS (pass_lower_subreg);
NEXT_PASS (pass_cse);
@@ -664,6 +666,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_gcse);
NEXT_PASS (pass_jump_bypass);
NEXT_PASS (pass_rtl_ifcvt);
+ NEXT_PASS (pass_outof_cfg_layout_mode);
NEXT_PASS (pass_tracer);
/* Perform loop optimizations. It might be better to do them a bit
sooner, but we want the profile feedback to work more
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 8874ea0db57..39644b0b15f 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,11 @@
+2007-03-08 Joseph S. Myers <joseph@codesourcery.com>
+
+ * sr.po: New.
+
+2007-03-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * gcc.pot: Regenerate.
+
2007-02-12 Joseph S. Myers <joseph@codesourcery.com>
* sv.po: Update.
diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot
index dc001171edc..6ea2ebb73ca 100644
--- a/gcc/po/gcc.pot
+++ b/gcc/po/gcc.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2006-10-22 12:37+0000\n"
+"POT-Creation-Date: 2007-03-07 17:59+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: c-decl.c:3777
+#: c-decl.c:3831
msgid "<anonymous>"
msgstr ""
@@ -77,7 +77,7 @@ msgid "the 'I' printf flag"
msgstr ""
#: c-format.c:354 c-format.c:376 c-format.c:430 c-format.c:452 c-format.c:479
-#: c-format.c:1606 config/sol2-c.c:46
+#: c-format.c:1616 config/sol2-c.c:46
msgid "field width"
msgstr ""
@@ -255,7 +255,7 @@ msgstr ""
msgid "length modifier in strfmon format"
msgstr ""
-#: c-format.c:1708
+#: c-format.c:1718
msgid "field precision"
msgstr ""
@@ -274,68 +274,68 @@ msgstr ""
msgid "ignoring nonexistent directory \"%s\"\n"
msgstr ""
-#: c-incpath.c:295
+#: c-incpath.c:306
#, c-format
msgid "#include \"...\" search starts here:\n"
msgstr ""
-#: c-incpath.c:299
+#: c-incpath.c:310
#, c-format
msgid "#include <...> search starts here:\n"
msgstr ""
-#: c-incpath.c:304
+#: c-incpath.c:315
#, c-format
msgid "End of search list.\n"
msgstr ""
-#: c-opts.c:1371
+#: c-opts.c:1433
msgid "<built-in>"
msgstr ""
-#: c-opts.c:1389
+#: c-opts.c:1451
msgid "<command-line>"
msgstr ""
-#: c-typeck.c:2328 c-typeck.c:4754 c-typeck.c:4756 c-typeck.c:4764
-#: c-typeck.c:4794 c-typeck.c:6170
+#: c-typeck.c:2341 c-typeck.c:4712 c-typeck.c:4714 c-typeck.c:4722
+#: c-typeck.c:4752 c-typeck.c:6128
msgid "initializer element is not constant"
msgstr ""
-#: c-typeck.c:4557
+#: c-typeck.c:4515
msgid "array initialized from parenthesized string constant"
msgstr ""
-#: c-typeck.c:4618 cp/typeck2.c:686
+#: c-typeck.c:4576 cp/typeck2.c:678
#, gcc-internal-format
msgid "char-array initialized from wide string"
msgstr ""
-#: c-typeck.c:4623
+#: c-typeck.c:4581
msgid "wchar_t-array initialized from non-wide string"
msgstr ""
-#: c-typeck.c:4641 cp/typeck2.c:706
+#: c-typeck.c:4599 cp/typeck2.c:698
#, gcc-internal-format
msgid "initializer-string for array of chars is too long"
msgstr ""
-#: c-typeck.c:4647
+#: c-typeck.c:4605
msgid "array of inappropriate type initialized from string constant"
msgstr ""
#. ??? This should not be an error when inlining calls to
#. unprototyped functions.
-#: c-typeck.c:4711 c-typeck.c:4206 cp/typeck.c:1503
+#: c-typeck.c:4669 c-typeck.c:4163 cp/typeck.c:1494
#, gcc-internal-format
msgid "invalid use of non-lvalue array"
msgstr ""
-#: c-typeck.c:4737
+#: c-typeck.c:4695
msgid "array initialized from non-constant array expression"
msgstr ""
-#: c-typeck.c:4801 c-typeck.c:6174
+#: c-typeck.c:4759 c-typeck.c:6132
#, gcc-internal-format
msgid "initializer element is not computable at load time"
msgstr ""
@@ -344,140 +344,140 @@ msgstr ""
#. of VLAs themselves count as VLAs, it does not make
#. sense to permit them to be initialized given that
#. ordinary VLAs may not be initialized.
-#: c-typeck.c:4812 c-decl.c:3221 c-decl.c:3236
+#: c-typeck.c:4770 c-decl.c:3244 c-decl.c:3259
#, gcc-internal-format
msgid "variable-sized object may not be initialized"
msgstr ""
-#: c-typeck.c:4816
+#: c-typeck.c:4774
msgid "invalid initializer"
msgstr ""
-#: c-typeck.c:5290
+#: c-typeck.c:5248
msgid "extra brace group at end of initializer"
msgstr ""
-#: c-typeck.c:5310
+#: c-typeck.c:5268
msgid "missing braces around initializer"
msgstr ""
-#: c-typeck.c:5371
+#: c-typeck.c:5329
msgid "braces around scalar initializer"
msgstr ""
-#: c-typeck.c:5428
+#: c-typeck.c:5386
msgid "initialization of flexible array member in a nested context"
msgstr ""
-#: c-typeck.c:5430
+#: c-typeck.c:5388
msgid "initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:5457
+#: c-typeck.c:5415
msgid "missing initializer"
msgstr ""
-#: c-typeck.c:5479
+#: c-typeck.c:5437
msgid "empty scalar initializer"
msgstr ""
-#: c-typeck.c:5484
+#: c-typeck.c:5442
msgid "extra elements in scalar initializer"
msgstr ""
-#: c-typeck.c:5581 c-typeck.c:5641
+#: c-typeck.c:5539 c-typeck.c:5599
msgid "array index in non-array initializer"
msgstr ""
-#: c-typeck.c:5586 c-typeck.c:5694
+#: c-typeck.c:5544 c-typeck.c:5652
msgid "field name not in record or union initializer"
msgstr ""
-#: c-typeck.c:5632
+#: c-typeck.c:5590
msgid "array index in initializer not of integer type"
msgstr ""
-#: c-typeck.c:5637 c-typeck.c:5639
+#: c-typeck.c:5595 c-typeck.c:5597
msgid "nonconstant array index in initializer"
msgstr ""
-#: c-typeck.c:5643 c-typeck.c:5646
+#: c-typeck.c:5601 c-typeck.c:5604
msgid "array index in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5657
+#: c-typeck.c:5615
msgid "empty index range in initializer"
msgstr ""
-#: c-typeck.c:5666
+#: c-typeck.c:5624
msgid "array index range in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5741 c-typeck.c:5764 c-typeck.c:6238
+#: c-typeck.c:5699 c-typeck.c:5722 c-typeck.c:6196
msgid "initialized field with side-effects overwritten"
msgstr ""
-#: c-typeck.c:5743 c-typeck.c:5766 c-typeck.c:6240
+#: c-typeck.c:5701 c-typeck.c:5724 c-typeck.c:6198
msgid "initialized field overwritten"
msgstr ""
-#: c-typeck.c:6448
+#: c-typeck.c:6406
msgid "excess elements in char array initializer"
msgstr ""
-#: c-typeck.c:6455 c-typeck.c:6501
+#: c-typeck.c:6413 c-typeck.c:6459
msgid "excess elements in struct initializer"
msgstr ""
-#: c-typeck.c:6516
+#: c-typeck.c:6474
msgid "non-static initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:6584
+#: c-typeck.c:6542
msgid "excess elements in union initializer"
msgstr ""
-#: c-typeck.c:6671
+#: c-typeck.c:6629
msgid "excess elements in array initializer"
msgstr ""
-#: c-typeck.c:6701
+#: c-typeck.c:6659
msgid "excess elements in vector initializer"
msgstr ""
-#: c-typeck.c:6725
+#: c-typeck.c:6683
msgid "excess elements in scalar initializer"
msgstr ""
-#: cfgrtl.c:1958
+#: cfgrtl.c:1886
msgid "flow control insn inside a basic block"
msgstr ""
-#: cfgrtl.c:2036
+#: cfgrtl.c:2005
msgid "wrong insn in the fallthru edge"
msgstr ""
-#: cfgrtl.c:2078
+#: cfgrtl.c:2049
msgid "insn outside basic block"
msgstr ""
-#: cfgrtl.c:2085
+#: cfgrtl.c:2056
msgid "return not followed by barrier"
msgstr ""
-#: cgraph.c:391 ipa-inline.c:313
+#: cgraph.c:340 ipa-inline.c:419
msgid "function body not available"
msgstr ""
-#: cgraph.c:393 cgraphunit.c:633
+#: cgraph.c:342 cgraphbuild.c:98
msgid "redefined extern inline functions are not considered for inlining"
msgstr ""
-#: cgraph.c:396 cgraphunit.c:638
+#: cgraph.c:345 cgraphbuild.c:103
msgid "function not considered for inlining"
msgstr ""
-#: cgraph.c:398 cgraphunit.c:636 ipa-inline.c:306
+#: cgraph.c:347 cgraphbuild.c:101 ipa-inline.c:412
msgid "function not inlinable"
msgstr ""
@@ -536,7 +536,7 @@ msgstr ""
msgid "cannot find '%s'"
msgstr ""
-#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2928
+#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2947
#, c-format
msgid "pex_init failed"
msgstr ""
@@ -625,12 +625,12 @@ msgstr ""
msgid "%s:%d: confused by earlier errors, bailing out\n"
msgstr ""
-#: diagnostic.c:254
+#: diagnostic.c:236
#, c-format
msgid "compilation terminated due to -Wfatal-errors.\n"
msgstr ""
-#: diagnostic.c:263
+#: diagnostic.c:245
#, c-format
msgid ""
"Please submit a full bug report,\n"
@@ -638,54 +638,54 @@ msgid ""
"See %s for instructions.\n"
msgstr ""
-#: diagnostic.c:272
+#: diagnostic.c:254
#, c-format
msgid "compilation terminated.\n"
msgstr ""
-#: diagnostic.c:623
+#: diagnostic.c:637
#, c-format
msgid "Internal compiler error: Error reporting routines re-entered.\n"
msgstr ""
-#: final.c:1104
+#: final.c:1105
msgid "negative insn length"
msgstr ""
-#: final.c:2449
+#: final.c:2447
msgid "could not split insn"
msgstr ""
-#: final.c:2798
+#: final.c:2796
msgid "invalid 'asm': "
msgstr ""
-#: final.c:2981
+#: final.c:2979
#, c-format
msgid "nested assembly dialect alternatives"
msgstr ""
-#: final.c:2998 final.c:3010
+#: final.c:2996 final.c:3008
#, c-format
msgid "unterminated assembly dialect alternative"
msgstr ""
-#: final.c:3057
+#: final.c:3055
#, c-format
msgid "operand number missing after %%-letter"
msgstr ""
-#: final.c:3060 final.c:3101
+#: final.c:3058 final.c:3099
#, c-format
msgid "operand number out of range"
msgstr ""
-#: final.c:3120
+#: final.c:3118
#, c-format
msgid "invalid %%-code"
msgstr ""
-#: final.c:3150
+#: final.c:3148
#, c-format
msgid "'%%l' operand isn't a label"
msgstr ""
@@ -696,14 +696,14 @@ msgstr ""
#. handle them.
#. We can't handle floating point constants;
#. PRINT_OPERAND must handle them.
-#: final.c:3251 vmsdbgout.c:487 config/i386/i386.c:7136
-#: config/pdp11/pdp11.c:1700
+#: final.c:3249 vmsdbgout.c:487 config/i386/i386.c:7740
+#: config/pdp11/pdp11.c:1702
#, c-format
msgid "floating constant misused"
msgstr ""
-#: final.c:3307 vmsdbgout.c:544 config/i386/i386.c:7212
-#: config/pdp11/pdp11.c:1747
+#: final.c:3305 vmsdbgout.c:544 config/i386/i386.c:7819
+#: config/pdp11/pdp11.c:1749
#, c-format
msgid "invalid expression as operand"
msgstr ""
@@ -712,101 +712,101 @@ msgstr ""
msgid "Attempt to delete prologue/epilogue insn:"
msgstr ""
-#: gcc.c:1665
+#: gcc.c:1683
#, c-format
msgid "Using built-in specs.\n"
msgstr ""
-#: gcc.c:1848
+#: gcc.c:1866
#, c-format
msgid ""
"Setting spec %s to '%s'\n"
"\n"
msgstr ""
-#: gcc.c:1963
+#: gcc.c:1981
#, c-format
msgid "Reading specs from %s\n"
msgstr ""
-#: gcc.c:2059 gcc.c:2078
+#: gcc.c:2077 gcc.c:2096
#, c-format
msgid "specs %%include syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:2086
+#: gcc.c:2104
#, c-format
msgid "could not find specs file %s\n"
msgstr ""
-#: gcc.c:2103 gcc.c:2111 gcc.c:2120 gcc.c:2129
+#: gcc.c:2121 gcc.c:2129 gcc.c:2138 gcc.c:2147
#, c-format
msgid "specs %%rename syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:2138
+#: gcc.c:2156
#, c-format
msgid "specs %s spec was not found to be renamed"
msgstr ""
-#: gcc.c:2145
+#: gcc.c:2163
#, c-format
msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
msgstr ""
-#: gcc.c:2150
+#: gcc.c:2168
#, c-format
msgid "rename spec %s to %s\n"
msgstr ""
-#: gcc.c:2152
+#: gcc.c:2170
#, c-format
msgid ""
"spec is '%s'\n"
"\n"
msgstr ""
-#: gcc.c:2165
+#: gcc.c:2183
#, c-format
msgid "specs unknown %% command after %ld characters"
msgstr ""
-#: gcc.c:2176 gcc.c:2189
+#: gcc.c:2194 gcc.c:2207
#, c-format
msgid "specs file malformed after %ld characters"
msgstr ""
-#: gcc.c:2242
+#: gcc.c:2260
#, c-format
msgid "spec file has no spec for linking"
msgstr ""
-#: gcc.c:2759
+#: gcc.c:2778
#, c-format
msgid "system path '%s' is not absolute"
msgstr ""
-#: gcc.c:2822
+#: gcc.c:2841
#, c-format
msgid "-pipe not supported"
msgstr ""
-#: gcc.c:2884
+#: gcc.c:2903
#, c-format
msgid ""
"\n"
"Go ahead? (y or n) "
msgstr ""
-#: gcc.c:2967
+#: gcc.c:2986
msgid "failed to get exit status"
msgstr ""
-#: gcc.c:2973
+#: gcc.c:2992
msgid "failed to get process times"
msgstr ""
-#: gcc.c:2999
+#: gcc.c:3018
#, c-format
msgid ""
"Internal error: %s (program %s)\n"
@@ -814,196 +814,213 @@ msgid ""
"See %s for instructions."
msgstr ""
-#: gcc.c:3025
+#: gcc.c:3044
#, c-format
msgid "# %s %.2f %.2f\n"
msgstr ""
-#: gcc.c:3161
+#: gcc.c:3180
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr ""
-#: gcc.c:3162
+#: gcc.c:3181
msgid "Options:\n"
msgstr ""
-#: gcc.c:3164
+#: gcc.c:3183
msgid " -pass-exit-codes Exit with highest error code from a phase\n"
msgstr ""
-#: gcc.c:3165
+#: gcc.c:3184
msgid " --help Display this information\n"
msgstr ""
-#: gcc.c:3166
+#: gcc.c:3185
msgid ""
" --target-help Display target specific command line options\n"
msgstr ""
-#: gcc.c:3168
+#: gcc.c:3186
+msgid ""
+" --help={target|optimizers|warnings|undocumented|params}[,{[^]joined|[^]"
+"separate}]\n"
+msgstr ""
+
+#: gcc.c:3187
+msgid ""
+" Display specific types of command line options\n"
+msgstr ""
+
+#: gcc.c:3189
msgid " (Use '-v --help' to display command line options of sub-processes)\n"
msgstr ""
-#: gcc.c:3169
+#: gcc.c:3190
msgid " -dumpspecs Display all of the built in spec strings\n"
msgstr ""
-#: gcc.c:3170
+#: gcc.c:3191
msgid " -dumpversion Display the version of the compiler\n"
msgstr ""
-#: gcc.c:3171
+#: gcc.c:3192
msgid " -dumpmachine Display the compiler's target processor\n"
msgstr ""
-#: gcc.c:3172
+#: gcc.c:3193
msgid ""
" -print-search-dirs Display the directories in the compiler's search "
"path\n"
msgstr ""
-#: gcc.c:3173
+#: gcc.c:3194
msgid ""
" -print-libgcc-file-name Display the name of the compiler's companion "
"library\n"
msgstr ""
-#: gcc.c:3174
+#: gcc.c:3195
msgid " -print-file-name=<lib> Display the full path to library <lib>\n"
msgstr ""
-#: gcc.c:3175
+#: gcc.c:3196
msgid ""
" -print-prog-name=<prog> Display the full path to compiler component "
"<prog>\n"
msgstr ""
-#: gcc.c:3176
+#: gcc.c:3197
msgid ""
" -print-multi-directory Display the root directory for versions of "
"libgcc\n"
msgstr ""
-#: gcc.c:3177
+#: gcc.c:3198
msgid ""
" -print-multi-lib Display the mapping between command line options "
"and\n"
" multiple library search directories\n"
msgstr ""
-#: gcc.c:3180
+#: gcc.c:3201
msgid " -print-multi-os-directory Display the relative path to OS libraries\n"
msgstr ""
-#: gcc.c:3181
+#: gcc.c:3202
+msgid ""
+" -print-sysroot-headers-suffix Display the sysroot suffix used to find "
+"headers\n"
+msgstr ""
+
+#: gcc.c:3203
msgid ""
" -Wa,<options> Pass comma-separated <options> on to the "
"assembler\n"
msgstr ""
-#: gcc.c:3182
+#: gcc.c:3204
msgid ""
" -Wp,<options> Pass comma-separated <options> on to the "
"preprocessor\n"
msgstr ""
-#: gcc.c:3183
+#: gcc.c:3205
msgid ""
" -Wl,<options> Pass comma-separated <options> on to the linker\n"
msgstr ""
-#: gcc.c:3184
+#: gcc.c:3206
msgid " -Xassembler <arg> Pass <arg> on to the assembler\n"
msgstr ""
-#: gcc.c:3185
+#: gcc.c:3207
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"
msgstr ""
-#: gcc.c:3186
+#: gcc.c:3208
msgid " -Xlinker <arg> Pass <arg> on to the linker\n"
msgstr ""
-#: gcc.c:3187
+#: gcc.c:3209
msgid ""
" -combine Pass multiple source files to compiler at once\n"
msgstr ""
-#: gcc.c:3188
+#: gcc.c:3210
msgid " -save-temps Do not delete intermediate files\n"
msgstr ""
-#: gcc.c:3189
+#: gcc.c:3211
msgid " -pipe Use pipes rather than intermediate files\n"
msgstr ""
-#: gcc.c:3190
+#: gcc.c:3212
msgid " -time Time the execution of each subprocess\n"
msgstr ""
-#: gcc.c:3191
+#: gcc.c:3213
msgid ""
" -specs=<file> Override built-in specs with the contents of "
"<file>\n"
msgstr ""
-#: gcc.c:3192
+#: gcc.c:3214
msgid ""
" -std=<standard> Assume that the input sources are for <standard>\n"
msgstr ""
-#: gcc.c:3193
+#: gcc.c:3215
msgid ""
" --sysroot=<directory> Use <directory> as the root directory for "
"headers\n"
" and libraries\n"
msgstr ""
-#: gcc.c:3196
+#: gcc.c:3218
msgid ""
" -B <directory> Add <directory> to the compiler's search paths\n"
msgstr ""
-#: gcc.c:3197
+#: gcc.c:3219
msgid " -b <machine> Run gcc for target <machine>, if installed\n"
msgstr ""
-#: gcc.c:3198
+#: gcc.c:3220
msgid ""
" -V <version> Run gcc version number <version>, if installed\n"
msgstr ""
-#: gcc.c:3199
+#: gcc.c:3221
msgid ""
" -v Display the programs invoked by the compiler\n"
msgstr ""
-#: gcc.c:3200
+#: gcc.c:3222
msgid ""
" -### Like -v but options quoted and commands not "
"executed\n"
msgstr ""
-#: gcc.c:3201
+#: gcc.c:3223
msgid ""
" -E Preprocess only; do not compile, assemble or "
"link\n"
msgstr ""
-#: gcc.c:3202
+#: gcc.c:3224
msgid " -S Compile only; do not assemble or link\n"
msgstr ""
-#: gcc.c:3203
+#: gcc.c:3225
msgid " -c Compile and assemble, but do not link\n"
msgstr ""
-#: gcc.c:3204
+#: gcc.c:3226
msgid " -o <file> Place the output into <file>\n"
msgstr ""
-#: gcc.c:3205
+#: gcc.c:3227
msgid ""
" -x <language> Specify the language of the following input "
"files\n"
@@ -1014,7 +1031,7 @@ msgid ""
"extension\n"
msgstr ""
-#: gcc.c:3212
+#: gcc.c:3234
#, c-format
msgid ""
"\n"
@@ -1023,28 +1040,27 @@ msgid ""
" other options on to these processes the -W<letter> options must be used.\n"
msgstr ""
-#: gcc.c:3335
+#: gcc.c:3358
#, c-format
msgid "'-%c' option must have argument"
msgstr ""
-#: gcc.c:3357
+#: gcc.c:3380
#, c-format
msgid "couldn't run '%s': %s"
msgstr ""
#. translate_options () has turned --version into -fversion.
-#: gcc.c:3550
+#: gcc.c:3581
#, c-format
msgid "%s (GCC) %s\n"
msgstr ""
-#: gcc.c:3552 gcov.c:419 fortran/gfortranspec.c:349 java/gjavah.c:2406
-#: java/jcf-dump.c:936 java/jv-scan.c:129
+#: gcc.c:3583 gcov.c:419 fortran/gfortranspec.c:350 java/jcf-dump.c:1168
msgid "(C)"
msgstr ""
-#: gcc.c:3553 java/gjavah.c:2407 java/jcf-dump.c:937 java/jv-scan.c:130
+#: gcc.c:3584 java/jcf-dump.c:1169
#, c-format
msgid ""
"This is free software; see the source for copying conditions. There is NO\n"
@@ -1052,142 +1068,149 @@ msgid ""
"\n"
msgstr ""
-#: gcc.c:3654
+#: gcc.c:3696
#, c-format
msgid "argument to '-Xlinker' is missing"
msgstr ""
-#: gcc.c:3662
+#: gcc.c:3704
#, c-format
msgid "argument to '-Xpreprocessor' is missing"
msgstr ""
-#: gcc.c:3669
+#: gcc.c:3711
#, c-format
msgid "argument to '-Xassembler' is missing"
msgstr ""
-#: gcc.c:3676
+#: gcc.c:3718
#, c-format
msgid "argument to '-l' is missing"
msgstr ""
-#: gcc.c:3697
+#: gcc.c:3739
#, c-format
msgid "argument to '-specs' is missing"
msgstr ""
-#: gcc.c:3711
+#: gcc.c:3753
#, c-format
msgid "argument to '-specs=' is missing"
msgstr ""
-#: gcc.c:3749
+#: gcc.c:3794
#, c-format
msgid "'-%c' must come at the start of the command line"
msgstr ""
-#: gcc.c:3758
+#: gcc.c:3803
#, c-format
msgid "argument to '-B' is missing"
msgstr ""
-#: gcc.c:4144
+#: gcc.c:4153
#, c-format
msgid "argument to '-x' is missing"
msgstr ""
-#: gcc.c:4172
+#: gcc.c:4181
#, c-format
msgid "argument to '-%s' is missing"
msgstr ""
-#: gcc.c:4510
+#: gcc.c:4499
#, c-format
msgid "switch '%s' does not start with '-'"
msgstr ""
-#: gcc.c:4687
+#: gcc.c:4676
#, c-format
msgid "spec '%s' invalid"
msgstr ""
-#: gcc.c:4753
+#: gcc.c:4742
#, c-format
msgid "%s\n"
msgstr ""
-#: gcc.c:4826
+#: gcc.c:4815
#, c-format
msgid "spec '%s' has invalid '%%0%c'"
msgstr ""
-#: gcc.c:5037
+#: gcc.c:5034
#, c-format
msgid "spec '%s' has invalid '%%W%c"
msgstr ""
-#: gcc.c:5068
+#: gcc.c:5065
#, c-format
msgid "spec '%s' has invalid '%%x%c'"
msgstr ""
-#: gcc.c:5290
+#: gcc.c:5287
#, c-format
msgid "Processing spec %c%s%c, which is '%s'\n"
msgstr ""
-#: gcc.c:5423
+#: gcc.c:5420
#, c-format
msgid "unknown spec function '%s'"
msgstr ""
-#: gcc.c:5442
+#: gcc.c:5439
#, c-format
msgid "error in args to spec function '%s'"
msgstr ""
-#: gcc.c:5490
+#: gcc.c:5487
#, c-format
msgid "malformed spec function name"
msgstr ""
#. )
-#: gcc.c:5493
+#: gcc.c:5490
#, c-format
msgid "no arguments for spec function"
msgstr ""
-#: gcc.c:5512
+#: gcc.c:5509
#, c-format
msgid "malformed spec function arguments"
msgstr ""
-#: gcc.c:5751
+#: gcc.c:5748
#, c-format
msgid "braced spec '%s' is invalid at '%c'"
msgstr ""
-#: gcc.c:5839
+#: gcc.c:5836
#, c-format
msgid "braced spec body '%s' is invalid"
msgstr ""
-#: gcc.c:6369
+#: gcc.c:6364
#, c-format
msgid "install: %s%s\n"
msgstr ""
-#: gcc.c:6370
+#: gcc.c:6367
#, c-format
msgid "programs: %s\n"
msgstr ""
-#: gcc.c:6372
+#: gcc.c:6369
#, c-format
msgid "libraries: %s\n"
msgstr ""
+#. The error status indicates that only one set of fixed
+#. headers should be built.
+#: gcc.c:6421
+#, c-format
+msgid "not configured with sysroot headers suffix"
+msgstr ""
+
#: gcc.c:6430
#, c-format
msgid ""
@@ -1255,22 +1278,27 @@ msgstr ""
msgid "multilib exclusion '%s' is invalid"
msgstr ""
-#: gcc.c:7732 gcc.c:7737
+#: gcc.c:7676
+#, c-format
+msgid "environment variable \"%s\" not defined"
+msgstr ""
+
+#: gcc.c:7753 gcc.c:7758
#, c-format
msgid "invalid version number `%s'"
msgstr ""
-#: gcc.c:7780
+#: gcc.c:7801
#, c-format
msgid "too few arguments to %%:version-compare"
msgstr ""
-#: gcc.c:7786
+#: gcc.c:7807
#, c-format
msgid "too many arguments to %%:version-compare"
msgstr ""
-#: gcc.c:7827
+#: gcc.c:7848
#, c-format
msgid "unknown operator '%s' in %%:version-compare"
msgstr ""
@@ -1380,7 +1408,7 @@ msgstr ""
msgid "%s:no functions found\n"
msgstr ""
-#: gcov.c:532 gcov.c:560 fortran/dump-parse-tree.c:63
+#: gcov.c:532 gcov.c:560 fortran/dump-parse-tree.c:64
#, c-format
msgid "\n"
msgstr ""
@@ -1569,39 +1597,37 @@ msgstr ""
msgid "GCSE disabled"
msgstr ""
-#: gcse.c:6531
+#: gcse.c:6538
msgid "jump bypassing disabled"
msgstr ""
-#: gengtype-yacc.c:678 java/parse-scan.c:2064
-#: java/parse-scan.y:1375 java/parse.c:3057
-#: java/parse.y:16547
+#: gengtype-yacc.c:678
msgid "syntax error: cannot back up"
msgstr ""
#. This is so xgettext sees the translatable formats that are
#. constructed on the fly.
-#: gengtype-yacc.c:1046 java/parse-scan.c:2432 java/parse.c:3425
+#: gengtype-yacc.c:1046
#, c-format
msgid "syntax error, unexpected %s"
msgstr ""
-#: gengtype-yacc.c:1047 java/parse-scan.c:2433 java/parse.c:3426
+#: gengtype-yacc.c:1047
#, c-format
msgid "syntax error, unexpected %s, expecting %s"
msgstr ""
-#: gengtype-yacc.c:1048 java/parse-scan.c:2434 java/parse.c:3427
+#: gengtype-yacc.c:1048
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s"
msgstr ""
-#: gengtype-yacc.c:1049 java/parse-scan.c:2435 java/parse.c:3428
+#: gengtype-yacc.c:1049
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s or %s"
msgstr ""
-#: gengtype-yacc.c:1050 java/parse-scan.c:2436 java/parse.c:3429
+#: gengtype-yacc.c:1050
#, c-format
msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
msgstr ""
@@ -1610,23 +1636,11 @@ msgstr ""
#. data in use in that stack, in bytes. This used to be a
#. conditional around just the two extra args, but that might
#. be undefined if yyoverflow is a macro.
-#: gengtype-yacc.c:1309 gengtype-yacc.c:1995 java/parse-scan.c:2695
-#: java/parse-scan.c:3514 java/parse.c:3688 java/parse.c:6606
+#: gengtype-yacc.c:1309 gengtype-yacc.c:1995
msgid "memory exhausted"
msgstr ""
-#. Depending on the version of Bison used to compile this grammar,
-#. it may issue generic diagnostics spelled "syntax error" or
-#. "parse error". To prevent this from changing the translation
-#. template randomly, we list all the variants of this particular
-#. diagnostic here. Translators: there is no fine distinction
-#. between diagnostics with "syntax error" in them, and diagnostics
-#. with "parse error" in them. It's okay to give them both the same
-#. translation.
-#: gengtype-yacc.c:1849 gengtype-yacc.c:1877 java/parse-scan.c:3368
-#: java/parse-scan.c:3396 java/parse-scan.y:1371
-#: java/parse.c:6460 java/parse.c:6488
-#: java/parse.y:16543
+#: gengtype-yacc.c:1849 gengtype-yacc.c:1877
msgid "syntax error"
msgstr ""
@@ -1640,85 +1654,127 @@ msgstr ""
msgid "'"
msgstr ""
-#: ipa-inline.c:288
+#: ipa-inline.c:379
msgid "--param large-function-growth limit reached"
msgstr ""
-#: ipa-inline.c:322
+#: ipa-inline.c:394
+msgid "--param large-stack-frame-growth limit reached"
+msgstr ""
+
+#: ipa-inline.c:428
msgid "--param max-inline-insns-single limit reached"
msgstr ""
-#: ipa-inline.c:331
+#: ipa-inline.c:437
msgid "--param max-inline-insns-auto limit reached"
msgstr ""
-#: ipa-inline.c:357 ipa-inline.c:803
+#: ipa-inline.c:463 ipa-inline.c:900 ipa-inline.c:1084 ipa-inline.c:1203
msgid "recursive inlining"
msgstr ""
-#: ipa-inline.c:816
+#: ipa-inline.c:913
msgid "call is unlikely"
msgstr ""
-#: ipa-inline.c:887
+#: ipa-inline.c:992
msgid "--param inline-unit-growth limit reached"
msgstr ""
-#: langhooks.c:517
+#: langhooks.c:511
msgid "At top level:"
msgstr ""
-#: langhooks.c:522
+#: langhooks.c:516
#, c-format
msgid "In member function %qs:"
msgstr ""
-#: langhooks.c:526
+#: langhooks.c:520
#, c-format
msgid "In function %qs:"
msgstr ""
-#: loop-iv.c:2700 tree-ssa-loop-niter.c:1139
+#: loop-iv.c:2771 tree-ssa-loop-niter.c:1121
msgid "assuming that the loop is not infinite"
msgstr ""
-#: loop-iv.c:2701 tree-ssa-loop-niter.c:1140
+#: loop-iv.c:2772 tree-ssa-loop-niter.c:1122
msgid "cannot optimize possibly infinite loops"
msgstr ""
-#: loop-iv.c:2709 tree-ssa-loop-niter.c:1144
+#: loop-iv.c:2780 tree-ssa-loop-niter.c:1126
msgid "assuming that the loop counter does not overflow"
msgstr ""
-#: loop-iv.c:2710 tree-ssa-loop-niter.c:1145
+#: loop-iv.c:2781 tree-ssa-loop-niter.c:1127
msgid "cannot optimize loop, the loop counter may overflow"
msgstr ""
#. What to print when a switch has no documentation.
-#: opts.c:95
+#: opts.c:97
msgid "This switch lacks documentation"
msgstr ""
-#: opts.c:1172
-#, c-format
-msgid ""
-"\n"
-"Target specific options:\n"
+#: opts.c:806
+msgid "[enabled]"
+msgstr ""
+
+#: opts.c:806
+msgid "[disabled]"
msgstr ""
-#: opts.c:1193
-msgid "The following options are language-independent:\n"
+#: opts.c:817
+#, c-format
+msgid " No options with the desired characteristics were found\n"
msgstr ""
-#: opts.c:1200
+#: opts.c:819
#, c-format
msgid ""
-"The %s front end recognizes the following options:\n"
-"\n"
+" All options with the desired characteristics have already been displayed\n"
+msgstr ""
+
+#: opts.c:873
+msgid "The following options are target specific"
+msgstr ""
+
+#: opts.c:876
+msgid "The following options control compiler warning messages"
+msgstr ""
+
+#: opts.c:879
+msgid "The following options control optimizations"
+msgstr ""
+
+#: opts.c:882 opts.c:919
+msgid "The following options are language-independent"
+msgstr ""
+
+#: opts.c:885
+msgid "The --param option recognizes the following as parameters"
msgstr ""
-#: opts.c:1213
-msgid "The --param option recognizes the following as parameters:\n"
+#: opts.c:892
+msgid "The following options are specific to the language "
+msgstr ""
+
+#: opts.c:896
+msgid "The following options are supported by, amoung others, the language "
+msgstr ""
+
+#: opts.c:906
+msgid "The following options are not documented"
+msgstr ""
+
+#: opts.c:917
+msgid "The following options are language-related"
+msgstr ""
+
+#: opts.c:1043
+#, c-format
+msgid "warning: unrecognized argument to --help= switch: %.*s\n"
msgstr ""
#: protoize.c:583
@@ -2028,21 +2084,21 @@ msgstr ""
msgid "unable to generate reloads for:"
msgstr ""
-#: reload1.c:1938
+#: reload1.c:1944
msgid "this is the insn:"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:5186
+#: reload1.c:5269
msgid "could not find a spill register"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:6842
+#: reload1.c:6928
msgid "VOIDmode on an output"
msgstr ""
-#: reload1.c:7835
+#: reload1.c:7936
msgid "Failure trying to reload:"
msgstr ""
@@ -2090,65 +2146,65 @@ msgstr ""
msgid "collect: recompiling %s\n"
msgstr ""
-#: tlink.c:714
+#: tlink.c:738
#, c-format
msgid "collect: tweaking %s in %s\n"
msgstr ""
-#: tlink.c:764
+#: tlink.c:788
#, c-format
msgid "collect: relinking\n"
msgstr ""
-#: toplev.c:601
+#: toplev.c:590
#, c-format
msgid "unrecoverable error"
msgstr ""
-#: toplev.c:1160
+#: toplev.c:1153
#, c-format
msgid ""
"%s%s%s version %s (%s)\n"
"%s\tcompiled by GNU C version %s.\n"
msgstr ""
-#: toplev.c:1162
+#: toplev.c:1155
#, c-format
msgid "%s%s%s version %s (%s) compiled by CC.\n"
msgstr ""
-#: toplev.c:1166
+#: toplev.c:1159
#, c-format
msgid ""
"%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
msgstr ""
-#: toplev.c:1228
+#: toplev.c:1284
msgid "options passed: "
msgstr ""
-#: toplev.c:1257
+#: toplev.c:1318
msgid "options enabled: "
msgstr ""
-#: toplev.c:1376
+#: toplev.c:1453
#, c-format
msgid "created and used with differing settings of '%s'"
msgstr ""
-#: toplev.c:1378
+#: toplev.c:1455
msgid "out of memory"
msgstr ""
-#: toplev.c:1393
+#: toplev.c:1470
msgid "created and used with different settings of -fpic"
msgstr ""
-#: toplev.c:1395
+#: toplev.c:1472
msgid "created and used with different settings of -fpie"
msgstr ""
-#: tree-inline.c:1992
+#: tree-inline.c:2426
msgid "originally indirect function call not considered for inlining"
msgstr ""
@@ -2255,453 +2311,481 @@ msgid ""
"that an individual variable will be expanded during loop unrolling"
msgstr ""
-#: params.def:157
+#: params.def:152
+msgid ""
+"If -ftree-vectorize is used, the minimal loop bound of a loop to be "
+"considered for vectorization"
+msgstr ""
+
+#: params.def:163
msgid "The maximum number of instructions to consider to fill a delay slot"
msgstr ""
-#: params.def:168
+#: params.def:174
msgid ""
"The maximum number of instructions to consider to find accurate live "
"register information"
msgstr ""
-#: params.def:178
+#: params.def:184
msgid "The maximum length of scheduling's pending operations list"
msgstr ""
-#: params.def:183
+#: params.def:189
msgid "The size of function body to be considered large"
msgstr ""
-#: params.def:187
+#: params.def:193
msgid "Maximal growth due to inlining of large function (in percent)"
msgstr ""
-#: params.def:191
+#: params.def:197
msgid "The size of translation unit to be considered large"
msgstr ""
-#: params.def:195
+#: params.def:201
msgid ""
"how much can given compilation unit grow because of the inlining (in percent)"
msgstr ""
-#: params.def:199
+#: params.def:205
msgid "expense of call operation relative to ordinary arithmetic operations"
msgstr ""
-#: params.def:206
+#: params.def:209
+msgid "The size of stack frame to be considered large"
+msgstr ""
+
+#: params.def:213
+msgid "Maximal stack frame growth due to inlining (in percent)"
+msgstr ""
+
+#: params.def:220
msgid "The maximum amount of memory to be allocated by GCSE"
msgstr ""
-#: params.def:211
+#: params.def:225
msgid "The maximum number of passes to make when doing GCSE"
msgstr ""
-#: params.def:221
+#: params.def:235
msgid ""
"The threshold ratio for performing partial redundancy elimination after "
"reload"
msgstr ""
-#: params.def:228
+#: params.def:242
msgid ""
"The threshold ratio of critical edges execution count that permit performing "
"redundancy elimination after reload"
msgstr ""
-#: params.def:239
+#: params.def:253
msgid "The maximum number of instructions to consider to unroll in a loop"
msgstr ""
-#: params.def:245
+#: params.def:259
msgid ""
"The maximum number of instructions to consider to unroll in a loop on average"
msgstr ""
-#: params.def:250
+#: params.def:264
msgid "The maximum number of unrollings of a single loop"
msgstr ""
-#: params.def:255
+#: params.def:269
msgid "The maximum number of insns of a peeled loop"
msgstr ""
-#: params.def:260
+#: params.def:274
msgid "The maximum number of peelings of a single loop"
msgstr ""
-#: params.def:265
+#: params.def:279
msgid "The maximum number of insns of a completely peeled loop"
msgstr ""
-#: params.def:270
+#: params.def:284
msgid ""
"The maximum number of peelings of a single loop that is peeled completely"
msgstr ""
-#: params.def:275
+#: params.def:289
msgid "The maximum number of insns of a peeled loop that rolls only once"
msgstr ""
-#: params.def:281
+#: params.def:295
msgid "The maximum number of insns of an unswitched loop"
msgstr ""
-#: params.def:286
+#: params.def:300
msgid "The maximum number of unswitchings in a single loop"
msgstr ""
-#: params.def:293
+#: params.def:307
msgid ""
"Bound on the number of iterations the brute force # of iterations analysis "
"algorithm evaluates"
msgstr ""
-#: params.def:299
+#: params.def:313
msgid "Bound on the cost of an expression to compute the number of iterations"
msgstr ""
-#: params.def:304
+#: params.def:318
msgid ""
"Maximum number of loops to perform swing modulo scheduling on (mainly for "
"debugging)"
msgstr ""
-#: params.def:310
+#: params.def:324
msgid ""
"A factor for tuning the upper bound that swing modulo scheduler uses for "
"scheduling a loop"
msgstr ""
-#: params.def:314
+#: params.def:328
msgid ""
"The number of cycles the swing modulo scheduler considers when checking "
"conflicts using DFA"
msgstr ""
-#: params.def:318
+#: params.def:332
msgid ""
"A threshold on the average loop count considered by the swing modulo "
"scheduler"
msgstr ""
-#: params.def:323
+#: params.def:337
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:327
+#: params.def:341
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:343
+#: params.def:357
msgid "The maximum number of loop iterations we predict statically"
msgstr ""
-#: params.def:347
+#: params.def:361
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:351
+#: params.def:365
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:355
+#: params.def:369
msgid "Maximal code growth caused by tail duplication (in percent)"
msgstr ""
-#: params.def:359
+#: params.def:373
msgid ""
"Stop reverse growth if the reverse probability of best edge is less than "
"this threshold (in percent)"
msgstr ""
-#: params.def:363
+#: params.def:377
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:367
+#: params.def:381
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:373
+#: params.def:387
msgid "The maximum number of incoming edges to consider for crossjumping"
msgstr ""
-#: params.def:379
+#: params.def:393
msgid ""
"The minimum number of matching instructions to consider for crossjumping"
msgstr ""
-#: params.def:385
+#: params.def:399
msgid "The maximum expansion factor when copying basic blocks"
msgstr ""
-#: params.def:391
+#: params.def:405
msgid ""
"The maximum number of insns to duplicate when unfactoring computed gotos"
msgstr ""
-#: params.def:397
+#: params.def:411
msgid "The maximum length of path considered in cse"
msgstr ""
-#: params.def:401
+#: params.def:415
msgid "The maximum instructions CSE process before flushing"
msgstr ""
-#: params.def:408
+#: params.def:422
msgid ""
"The minimum cost of an expensive expression in the loop invariant motion"
msgstr ""
-#: params.def:417
+#: params.def:431
msgid ""
"Bound on number of candidates below that all candidates are considered in iv "
"optimizations"
msgstr ""
-#: params.def:425
+#: params.def:439
msgid "Bound on number of iv uses in loop optimized in iv optimizations"
msgstr ""
-#: params.def:433
+#: params.def:447
msgid ""
"If number of candidates in the set is smaller, we always try to remove "
"unused ivs during its optimization"
msgstr ""
-#: params.def:438
+#: params.def:452
msgid "Bound on size of expressions used in the scalar evolutions analyzer"
msgstr ""
-#: params.def:443
+#: params.def:457
msgid ""
"Bound on number of runtime checks inserted by the vectorizer's loop "
"versioning"
msgstr ""
-#: params.def:450
-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:455
+#: params.def:462
msgid "The maximum memory locations recorded by cselib"
msgstr ""
-#: params.def:459
+#: params.def:466
msgid "The maximum memory locations recorded by flow"
msgstr ""
-#: params.def:472
+#: params.def:479
msgid ""
"Minimum heap expansion to trigger garbage collection, as a percentage of the "
"total size of the heap"
msgstr ""
-#: params.def:477
+#: params.def:484
msgid "Minimum heap size before we start collecting garbage, in kilobytes"
msgstr ""
-#: params.def:485
+#: params.def:492
msgid ""
"The maximum number of instructions to search backward when looking for "
"equivalent reload"
msgstr ""
-#: params.def:490
+#: params.def:497
msgid ""
-"The maximum number of virtual operands allowed to represent aliases before "
-"triggering alias grouping"
+"The maximum number of virtual operators per statement allowed to represent "
+"aliases before triggering alias grouping"
msgstr ""
-#: params.def:495
+#: params.def:502
msgid ""
"The maximum number of blocks in a region to be considered for interblock "
"scheduling"
msgstr ""
-#: params.def:500
+#: params.def:507
msgid ""
"The maximum number of insns in a region to be considered for interblock "
"scheduling"
msgstr ""
-#: params.def:505
+#: params.def:512
msgid ""
"The minimum probability of reaching a source block for interblock "
"speculative scheduling"
msgstr ""
-#: params.def:510
+#: params.def:517
msgid "The maximum number of iterations through CFG to extend regions"
msgstr ""
-#: params.def:515
+#: params.def:522
msgid ""
"The maximum conflict delay for an insn to be considered for speculative "
"motion"
msgstr ""
-#: params.def:520
+#: params.def:527
msgid ""
"The minimal probability of speculation success (in percents), so that "
"speculative insn will be scheduled."
msgstr ""
-#: params.def:525
+#: params.def:532
msgid ""
"The maximum number of RTL nodes that can be recorded as combiner's last value"
msgstr ""
-#: params.def:533
+#: params.def:540
msgid "The upper bound for sharing integer constants"
msgstr ""
-#: params.def:552
+#: params.def:559
msgid ""
"Minimum number of virtual mappings to consider switching to full virtual "
"renames"
msgstr ""
-#: params.def:557
+#: params.def:564
msgid ""
"Ratio between virtual mappings and virtual symbols to do full virtual renames"
msgstr ""
-#: params.def:562
+#: params.def:569
msgid ""
"The lower bound for a buffer to be considered for stack smashing protection"
msgstr ""
-#: params.def:580
+#: params.def:587
msgid ""
"Maximum number of statements allowed in a block that needs to be duplicated "
"when threading jumps"
msgstr ""
-#: params.def:589
+#: params.def:596
msgid ""
"Maximum number of fields in a structure before pointer analysis treats the "
"structure as a single variable"
msgstr ""
-#: params.def:594
+#: params.def:601
msgid ""
"The maximum number of instructions ready to be issued to be considered by "
"the scheduler during the first scheduling pass"
msgstr ""
-#: config/alpha/alpha.c:5105
+#: params.def:611
+msgid "The number of insns executed before prefetch is completed"
+msgstr ""
+
+#: params.def:618
+msgid "The number of prefetches that can run at the same time"
+msgstr ""
+
+#: params.def:625
+msgid "The size of L1 cache"
+msgstr ""
+
+#: params.def:632
+msgid "The size of L1 cache line"
+msgstr ""
+
+#: params.def:646
+msgid "Whether to verify canonical types"
+msgstr ""
+
+#: config/alpha/alpha.c:5016
#, c-format
msgid "invalid %%H value"
msgstr ""
-#: config/alpha/alpha.c:5126 config/bfin/bfin.c:1237
+#: config/alpha/alpha.c:5037 config/bfin/bfin.c:1273
#, c-format
msgid "invalid %%J value"
msgstr ""
-#: config/alpha/alpha.c:5156 config/ia64/ia64.c:4662
+#: config/alpha/alpha.c:5067 config/ia64/ia64.c:4694
#, c-format
msgid "invalid %%r value"
msgstr ""
-#: config/alpha/alpha.c:5166 config/rs6000/rs6000.c:10547
-#: config/xtensa/xtensa.c:1705
+#: config/alpha/alpha.c:5077 config/rs6000/rs6000.c:10928
+#: config/xtensa/xtensa.c:1779
#, c-format
msgid "invalid %%R value"
msgstr ""
-#: config/alpha/alpha.c:5172 config/rs6000/rs6000.c:10466
-#: config/xtensa/xtensa.c:1672
+#: config/alpha/alpha.c:5083 config/rs6000/rs6000.c:10847
+#: config/xtensa/xtensa.c:1746
#, c-format
msgid "invalid %%N value"
msgstr ""
-#: config/alpha/alpha.c:5180 config/rs6000/rs6000.c:10494
+#: config/alpha/alpha.c:5091 config/rs6000/rs6000.c:10875
#, c-format
msgid "invalid %%P value"
msgstr ""
-#: config/alpha/alpha.c:5188
+#: config/alpha/alpha.c:5099
#, c-format
msgid "invalid %%h value"
msgstr ""
-#: config/alpha/alpha.c:5196 config/xtensa/xtensa.c:1698
+#: config/alpha/alpha.c:5107 config/xtensa/xtensa.c:1772
#, c-format
msgid "invalid %%L value"
msgstr ""
-#: config/alpha/alpha.c:5235 config/rs6000/rs6000.c:10448
+#: config/alpha/alpha.c:5146 config/rs6000/rs6000.c:10829
#, c-format
msgid "invalid %%m value"
msgstr ""
-#: config/alpha/alpha.c:5243 config/rs6000/rs6000.c:10456
+#: config/alpha/alpha.c:5154 config/rs6000/rs6000.c:10837
#, c-format
msgid "invalid %%M value"
msgstr ""
-#: config/alpha/alpha.c:5287
+#: config/alpha/alpha.c:5198
#, c-format
msgid "invalid %%U value"
msgstr ""
-#: config/alpha/alpha.c:5299 config/alpha/alpha.c:5313
-#: config/rs6000/rs6000.c:10555
+#: config/alpha/alpha.c:5210 config/alpha/alpha.c:5224
+#: config/rs6000/rs6000.c:10936
#, c-format
msgid "invalid %%s value"
msgstr ""
-#: config/alpha/alpha.c:5336
+#: config/alpha/alpha.c:5247
#, c-format
msgid "invalid %%C value"
msgstr ""
-#: config/alpha/alpha.c:5373 config/rs6000/rs6000.c:10286
-#: config/rs6000/rs6000.c:10305
+#: config/alpha/alpha.c:5284 config/rs6000/rs6000.c:10667
+#: config/rs6000/rs6000.c:10686
#, c-format
msgid "invalid %%E value"
msgstr ""
-#: config/alpha/alpha.c:5398 config/alpha/alpha.c:5446
+#: config/alpha/alpha.c:5309 config/alpha/alpha.c:5357
#, c-format
msgid "unknown relocation unspec"
msgstr ""
-#: config/alpha/alpha.c:5407 config/crx/crx.c:1082
-#: config/rs6000/rs6000.c:10870
+#: config/alpha/alpha.c:5318 config/crx/crx.c:1082
+#: config/rs6000/rs6000.c:11254 config/spu/spu.c:1384
#, c-format
msgid "invalid %%xn code"
msgstr ""
-#: config/arc/arc.c:1726 config/m32r/m32r.c:1805
+#: config/arc/arc.c:1726 config/m32r/m32r.c:1809
#, c-format
msgid "invalid operand to %%R code"
msgstr ""
-#: config/arc/arc.c:1758 config/m32r/m32r.c:1828
+#: config/arc/arc.c:1758 config/m32r/m32r.c:1832
#, c-format
msgid "invalid operand to %%H/%%L code"
msgstr ""
-#: config/arc/arc.c:1780 config/m32r/m32r.c:1899
+#: config/arc/arc.c:1780 config/m32r/m32r.c:1903
#, c-format
msgid "invalid operand to %%U code"
msgstr ""
@@ -2713,89 +2797,89 @@ msgstr ""
#. Unknown flag.
#. Undocumented flag.
-#: config/arc/arc.c:1798 config/m32r/m32r.c:1926 config/sparc/sparc.c:6907
+#: config/arc/arc.c:1798 config/m32r/m32r.c:1930 config/sparc/sparc.c:6919
#, c-format
msgid "invalid operand output code"
msgstr ""
-#: config/arm/arm.c:10953 config/arm/arm.c:10971
+#: config/arm/arm.c:11579 config/arm/arm.c:11597
#, c-format
msgid "predicated Thumb instruction"
msgstr ""
-#: config/arm/arm.c:10959
+#: config/arm/arm.c:11585
#, c-format
msgid "predicated instruction in conditional sequence"
msgstr ""
-#: config/arm/arm.c:11028
+#: config/arm/arm.c:11731
#, c-format
msgid "invalid shift operand"
msgstr ""
-#: config/arm/arm.c:11075 config/arm/arm.c:11085 config/arm/arm.c:11095
-#: config/arm/arm.c:11121 config/arm/arm.c:11139 config/arm/arm.c:11174
-#: config/arm/arm.c:11193 config/arm/arm.c:11208 config/arm/arm.c:11234
-#: config/arm/arm.c:11241 config/arm/arm.c:11248
+#: config/arm/arm.c:11778 config/arm/arm.c:11788 config/arm/arm.c:11798
+#: config/arm/arm.c:11824 config/arm/arm.c:11842 config/arm/arm.c:11877
+#: config/arm/arm.c:11896 config/arm/arm.c:11911 config/arm/arm.c:11937
+#: config/arm/arm.c:11944 config/arm/arm.c:11951
#, c-format
msgid "invalid operand for code '%c'"
msgstr ""
-#: config/arm/arm.c:11134
+#: config/arm/arm.c:11837
#, c-format
msgid "instruction never exectued"
msgstr ""
-#: config/arm/arm.c:11259
+#: config/arm/arm.c:11962
#, c-format
msgid "missing operand"
msgstr ""
-#: config/avr/avr.c:1129
+#: config/avr/avr.c:1135
msgid "bad address, not (reg+disp):"
msgstr ""
-#: config/avr/avr.c:1136
+#: config/avr/avr.c:1142
msgid "bad address, not post_inc or pre_dec:"
msgstr ""
-#: config/avr/avr.c:1147
+#: config/avr/avr.c:1153
msgid "internal compiler error. Bad address:"
msgstr ""
-#: config/avr/avr.c:1160
+#: config/avr/avr.c:1166
msgid "internal compiler error. Unknown mode:"
msgstr ""
-#: config/avr/avr.c:1783 config/avr/avr.c:2466
+#: config/avr/avr.c:1766 config/avr/avr.c:2449
msgid "invalid insn:"
msgstr ""
-#: config/avr/avr.c:1817 config/avr/avr.c:1903 config/avr/avr.c:1952
-#: config/avr/avr.c:1980 config/avr/avr.c:2075 config/avr/avr.c:2244
-#: config/avr/avr.c:2500 config/avr/avr.c:2612
+#: config/avr/avr.c:1800 config/avr/avr.c:1886 config/avr/avr.c:1935
+#: config/avr/avr.c:1963 config/avr/avr.c:2058 config/avr/avr.c:2227
+#: config/avr/avr.c:2483 config/avr/avr.c:2595
msgid "incorrect insn:"
msgstr ""
-#: config/avr/avr.c:1999 config/avr/avr.c:2160 config/avr/avr.c:2315
-#: config/avr/avr.c:2678
+#: config/avr/avr.c:1982 config/avr/avr.c:2143 config/avr/avr.c:2298
+#: config/avr/avr.c:2661
msgid "unknown move insn:"
msgstr ""
-#: config/avr/avr.c:2908
+#: config/avr/avr.c:2891
msgid "bad shift insn:"
msgstr ""
-#: config/avr/avr.c:3024 config/avr/avr.c:3472 config/avr/avr.c:3858
+#: config/avr/avr.c:3007 config/avr/avr.c:3427 config/avr/avr.c:3785
msgid "internal compiler error. Incorrect shift:"
msgstr ""
-#: config/bfin/bfin.c:1199
+#: config/bfin/bfin.c:1235
#, c-format
msgid "invalid %%j value"
msgstr ""
-#: config/bfin/bfin.c:1367
+#: config/bfin/bfin.c:1405
#, c-format
msgid "invalid const_double operand"
msgstr ""
@@ -2883,104 +2967,103 @@ msgstr ""
#. Use `%s' to print the string in case there are any escape
#. characters in the message.
-#: config/cris/cris.c:492 fortran/dump-parse-tree.c:79
-#: fortran/dump-parse-tree.c:421 fortran/dump-parse-tree.c:754
-#: fortran/dump-parse-tree.c:801 c-typeck.c:4510 c-typeck.c:4525
-#: c-typeck.c:4540 final.c:2803 final.c:2805 gcc.c:4739 loop-iv.c:2702
-#: loop-iv.c:2711 rtl-error.c:113 toplev.c:605 tree-ssa-loop-niter.c:1150
-#: cp/parser.c:2064 cp/typeck.c:4433 java/expr.c:413
-#: java/parse.y:5005
+#: config/cris/cris.c:491 fortran/dump-parse-tree.c:79
+#: fortran/dump-parse-tree.c:418 fortran/dump-parse-tree.c:755
+#: fortran/dump-parse-tree.c:800 c-typeck.c:4468 c-typeck.c:4483
+#: c-typeck.c:4498 final.c:2801 final.c:2803 gcc.c:4728 loop-iv.c:2773
+#: loop-iv.c:2782 rtl-error.c:113 toplev.c:594 tree-ssa-loop-niter.c:1132
+#: cp/parser.c:2112 cp/typeck.c:4526 java/expr.c:410
#, gcc-internal-format
msgid "%s"
msgstr ""
-#: config/cris/cris.c:544
+#: config/cris/cris.c:542
msgid "unexpected index-type in cris_print_index"
msgstr ""
-#: config/cris/cris.c:558
+#: config/cris/cris.c:556
msgid "unexpected base-type in cris_print_base"
msgstr ""
-#: config/cris/cris.c:674
+#: config/cris/cris.c:672
msgid "invalid operand for 'b' modifier"
msgstr ""
-#: config/cris/cris.c:691
+#: config/cris/cris.c:689
msgid "invalid operand for 'o' modifier"
msgstr ""
-#: config/cris/cris.c:710
+#: config/cris/cris.c:708
msgid "invalid operand for 'O' modifier"
msgstr ""
-#: config/cris/cris.c:743
+#: config/cris/cris.c:741
msgid "invalid operand for 'p' modifier"
msgstr ""
-#: config/cris/cris.c:782
+#: config/cris/cris.c:780
msgid "invalid operand for 'z' modifier"
msgstr ""
-#: config/cris/cris.c:836 config/cris/cris.c:866
+#: config/cris/cris.c:834 config/cris/cris.c:864
msgid "invalid operand for 'H' modifier"
msgstr ""
-#: config/cris/cris.c:842
+#: config/cris/cris.c:840
msgid "bad register"
msgstr ""
-#: config/cris/cris.c:887
+#: config/cris/cris.c:885
msgid "invalid operand for 'e' modifier"
msgstr ""
-#: config/cris/cris.c:904
+#: config/cris/cris.c:902
msgid "invalid operand for 'm' modifier"
msgstr ""
-#: config/cris/cris.c:929
+#: config/cris/cris.c:927
msgid "invalid operand for 'A' modifier"
msgstr ""
-#: config/cris/cris.c:952
+#: config/cris/cris.c:950
msgid "invalid operand for 'D' modifier"
msgstr ""
-#: config/cris/cris.c:966
+#: config/cris/cris.c:964
msgid "invalid operand for 'T' modifier"
msgstr ""
-#: config/cris/cris.c:975
+#: config/cris/cris.c:973
msgid "invalid operand modifier letter"
msgstr ""
-#: config/cris/cris.c:1032
+#: config/cris/cris.c:1030
msgid "unexpected multiplicative operand"
msgstr ""
-#: config/cris/cris.c:1052
+#: config/cris/cris.c:1050
msgid "unexpected operand"
msgstr ""
-#: config/cris/cris.c:1085 config/cris/cris.c:1095
+#: config/cris/cris.c:1083 config/cris/cris.c:1093
msgid "unrecognized address"
msgstr ""
-#: config/cris/cris.c:2021
+#: config/cris/cris.c:2015
msgid "unrecognized supposed constant"
msgstr ""
-#: config/cris/cris.c:2396 config/cris/cris.c:2460
+#: config/cris/cris.c:2390 config/cris/cris.c:2454
msgid "unexpected side-effects in address"
msgstr ""
#. Can't possibly get a GOT-needing-fixup for a function-call,
#. right?
-#: config/cris/cris.c:3254
+#: config/cris/cris.c:3248
msgid "Unidentifiable call op"
msgstr ""
-#: config/cris/cris.c:3305
+#: config/cris/cris.c:3299
#, c-format
msgid "PIC register isn't set up"
msgstr ""
@@ -3123,28 +3206,28 @@ msgstr ""
msgid " (frv)"
msgstr ""
-#: config/i386/i386.c:7206
+#: config/i386/i386.c:7813
#, c-format
msgid "invalid UNSPEC as operand"
msgstr ""
-#: config/i386/i386.c:7801
+#: config/i386/i386.c:8413
#, c-format
msgid ""
"operand is neither a constant nor a condition code, invalid operand code 'c'"
msgstr ""
-#: config/i386/i386.c:7854
+#: config/i386/i386.c:8466
#, c-format
msgid "invalid operand code '%c'"
msgstr ""
-#: config/i386/i386.c:7897
+#: config/i386/i386.c:8509
#, c-format
msgid "invalid constraints for operand"
msgstr ""
-#: config/i386/i386.c:13555
+#: config/i386/i386.c:15301
msgid "unknown insn mode"
msgstr ""
@@ -3165,80 +3248,80 @@ msgstr ""
msgid "environment variable DJGPP points to corrupt file '%s'"
msgstr ""
-#: config/ia64/ia64.c:4714
+#: config/ia64/ia64.c:4746
#, c-format
msgid "ia64_print_operand: unknown code"
msgstr ""
-#: config/ia64/ia64.c:9747
+#: config/ia64/ia64.c:9796
msgid "invalid conversion from %<__fpreg%>"
msgstr ""
-#: config/ia64/ia64.c:9750
+#: config/ia64/ia64.c:9799
msgid "invalid conversion to %<__fpreg%>"
msgstr ""
-#: config/ia64/ia64.c:9763 config/ia64/ia64.c:9774
+#: config/ia64/ia64.c:9812 config/ia64/ia64.c:9823
msgid "invalid operation on %<__fpreg%>"
msgstr ""
-#: config/iq2000/iq2000.c:3129
+#: config/iq2000/iq2000.c:3127
#, c-format
msgid "invalid %%P operand"
msgstr ""
-#: config/iq2000/iq2000.c:3137 config/rs6000/rs6000.c:10484
+#: config/iq2000/iq2000.c:3135 config/rs6000/rs6000.c:10865
#, c-format
msgid "invalid %%p value"
msgstr ""
-#: config/iq2000/iq2000.c:3193 config/mips/mips.c:5643
+#: config/iq2000/iq2000.c:3191 config/mips/mips.c:5633
#, c-format
msgid "invalid use of %%d, %%x, or %%X"
msgstr ""
-#: config/m32r/m32r.c:1775
+#: config/m32r/m32r.c:1779
#, c-format
msgid "invalid operand to %%s code"
msgstr ""
-#: config/m32r/m32r.c:1782
+#: config/m32r/m32r.c:1786
#, c-format
msgid "invalid operand to %%p code"
msgstr ""
-#: config/m32r/m32r.c:1837
+#: config/m32r/m32r.c:1841
msgid "bad insn for 'A'"
msgstr ""
-#: config/m32r/m32r.c:1884
+#: config/m32r/m32r.c:1888
#, c-format
msgid "invalid operand to %%T/%%B code"
msgstr ""
-#: config/m32r/m32r.c:1907
+#: config/m32r/m32r.c:1911
#, c-format
msgid "invalid operand to %%N code"
msgstr ""
-#: config/m32r/m32r.c:1940
+#: config/m32r/m32r.c:1944
msgid "pre-increment address is not a register"
msgstr ""
-#: config/m32r/m32r.c:1947
+#: config/m32r/m32r.c:1951
msgid "pre-decrement address is not a register"
msgstr ""
-#: config/m32r/m32r.c:1954
+#: config/m32r/m32r.c:1958
msgid "post-increment address is not a register"
msgstr ""
-#: config/m32r/m32r.c:2030 config/m32r/m32r.c:2044
-#: config/rs6000/rs6000.c:17864
+#: config/m32r/m32r.c:2034 config/m32r/m32r.c:2048
+#: config/rs6000/rs6000.c:19072
msgid "bad address"
msgstr ""
-#: config/m32r/m32r.c:2049
+#: config/m32r/m32r.c:2053
msgid "lo_sum not of register"
msgstr ""
@@ -3280,41 +3363,41 @@ msgstr ""
msgid "invalid Z register replacement for insn"
msgstr ""
-#: config/mips/mips.c:5311
+#: config/mips/mips.c:5301
msgid "mips_debugger_offset called with non stack/frame/arg pointer"
msgstr ""
-#: config/mips/mips.c:5521
+#: config/mips/mips.c:5511
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%C"
msgstr ""
-#: config/mips/mips.c:5538
+#: config/mips/mips.c:5528
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%N"
msgstr ""
-#: config/mips/mips.c:5547
+#: config/mips/mips.c:5537
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%F"
msgstr ""
-#: config/mips/mips.c:5556
+#: config/mips/mips.c:5546
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%W"
msgstr ""
-#: config/mips/mips.c:5577
+#: config/mips/mips.c:5567
#, c-format
msgid "invalid %%Y value"
msgstr ""
-#: config/mips/mips.c:5594 config/mips/mips.c:5602
+#: config/mips/mips.c:5584 config/mips/mips.c:5592
#, c-format
msgid "PRINT_OPERAND, invalid insn for %%q"
msgstr ""
-#: config/mips/mips.c:5671
+#: config/mips/mips.c:5660
msgid "PRINT_OPERAND, invalid operand for relocation"
msgstr ""
@@ -3381,172 +3464,172 @@ msgstr ""
msgid "Try running '%s' in the shell to raise its limit.\n"
msgstr ""
-#: config/rs6000/rs6000.c:10314
+#: config/rs6000/rs6000.c:10695
#, c-format
msgid "invalid %%f value"
msgstr ""
-#: config/rs6000/rs6000.c:10323
+#: config/rs6000/rs6000.c:10704
#, c-format
msgid "invalid %%F value"
msgstr ""
-#: config/rs6000/rs6000.c:10332
+#: config/rs6000/rs6000.c:10713
#, c-format
msgid "invalid %%G value"
msgstr ""
-#: config/rs6000/rs6000.c:10367
+#: config/rs6000/rs6000.c:10748
#, c-format
msgid "invalid %%j code"
msgstr ""
-#: config/rs6000/rs6000.c:10377
+#: config/rs6000/rs6000.c:10758
#, c-format
msgid "invalid %%J code"
msgstr ""
-#: config/rs6000/rs6000.c:10387
+#: config/rs6000/rs6000.c:10768
#, c-format
msgid "invalid %%k value"
msgstr ""
-#: config/rs6000/rs6000.c:10407 config/xtensa/xtensa.c:1691
+#: config/rs6000/rs6000.c:10788 config/xtensa/xtensa.c:1765
#, c-format
msgid "invalid %%K value"
msgstr ""
-#: config/rs6000/rs6000.c:10474
+#: config/rs6000/rs6000.c:10855
#, c-format
msgid "invalid %%O value"
msgstr ""
-#: config/rs6000/rs6000.c:10521
+#: config/rs6000/rs6000.c:10902
#, c-format
msgid "invalid %%q value"
msgstr ""
-#: config/rs6000/rs6000.c:10565
+#: config/rs6000/rs6000.c:10946
#, c-format
msgid "invalid %%S value"
msgstr ""
-#: config/rs6000/rs6000.c:10605
+#: config/rs6000/rs6000.c:10986
#, c-format
msgid "invalid %%T value"
msgstr ""
-#: config/rs6000/rs6000.c:10615
+#: config/rs6000/rs6000.c:10996
#, c-format
msgid "invalid %%u value"
msgstr ""
-#: config/rs6000/rs6000.c:10624 config/xtensa/xtensa.c:1661
+#: config/rs6000/rs6000.c:11005 config/xtensa/xtensa.c:1735
#, c-format
msgid "invalid %%v value"
msgstr ""
-#: config/rs6000/rs6000.c:19464
+#: config/rs6000/rs6000.c:20844
msgid "AltiVec argument passed to unprototyped function"
msgstr ""
-#: config/s390/s390.c:4517
+#: config/s390/s390.c:4530
#, c-format
msgid "cannot decompose address"
msgstr ""
-#: config/s390/s390.c:4727
+#: config/s390/s390.c:4740
msgid "UNKNOWN in print_operand !?"
msgstr ""
-#: config/score/score.c:1168
+#: config/score/score.c:1212
#, c-format
msgid "invalid operand for code: '%c'"
msgstr ""
-#: config/sh/sh.c:759
+#: config/sh/sh.c:766
#, c-format
msgid "invalid operand to %%R"
msgstr ""
-#: config/sh/sh.c:786
+#: config/sh/sh.c:793
#, c-format
msgid "invalid operand to %%S"
msgstr ""
-#: config/sh/sh.c:7820
+#: config/sh/sh.c:8146
msgid "created and used with different architectures / ABIs"
msgstr ""
-#: config/sh/sh.c:7822
+#: config/sh/sh.c:8148
msgid "created and used with different ABIs"
msgstr ""
-#: config/sh/sh.c:7824
+#: config/sh/sh.c:8150
msgid "created and used with different endianness"
msgstr ""
-#: config/sparc/sparc.c:6715 config/sparc/sparc.c:6721
+#: config/sparc/sparc.c:6727 config/sparc/sparc.c:6733
#, c-format
msgid "invalid %%Y operand"
msgstr ""
-#: config/sparc/sparc.c:6791
+#: config/sparc/sparc.c:6803
#, c-format
msgid "invalid %%A operand"
msgstr ""
-#: config/sparc/sparc.c:6801
+#: config/sparc/sparc.c:6813
#, c-format
msgid "invalid %%B operand"
msgstr ""
-#: config/sparc/sparc.c:6840
+#: config/sparc/sparc.c:6852
#, c-format
msgid "invalid %%c operand"
msgstr ""
-#: config/sparc/sparc.c:6862
+#: config/sparc/sparc.c:6874
#, c-format
msgid "invalid %%d operand"
msgstr ""
-#: config/sparc/sparc.c:6879
+#: config/sparc/sparc.c:6891
#, c-format
msgid "invalid %%f operand"
msgstr ""
-#: config/sparc/sparc.c:6893
+#: config/sparc/sparc.c:6905
#, c-format
msgid "invalid %%s operand"
msgstr ""
-#: config/sparc/sparc.c:6947
+#: config/sparc/sparc.c:6959
#, c-format
msgid "long long constant not a valid immediate operand"
msgstr ""
-#: config/sparc/sparc.c:6950
+#: config/sparc/sparc.c:6962
#, c-format
msgid "floating point constant not a valid immediate operand"
msgstr ""
-#: config/stormy16/stormy16.c:1778 config/stormy16/stormy16.c:1849
+#: config/stormy16/stormy16.c:1776 config/stormy16/stormy16.c:1847
#, c-format
msgid "'B' operand is not constant"
msgstr ""
-#: config/stormy16/stormy16.c:1805
+#: config/stormy16/stormy16.c:1803
#, c-format
msgid "'B' operand has multiple bits set"
msgstr ""
-#: config/stormy16/stormy16.c:1831
+#: config/stormy16/stormy16.c:1829
#, c-format
msgid "'o' operand is not constant"
msgstr ""
-#: config/stormy16/stormy16.c:1863
+#: config/stormy16/stormy16.c:1861
#, c-format
msgid "xstormy16_print_operand: unknown code"
msgstr ""
@@ -3559,168 +3642,168 @@ msgstr ""
msgid "output_move_single:"
msgstr ""
-#: config/xtensa/xtensa.c:748 config/xtensa/xtensa.c:780
-#: config/xtensa/xtensa.c:789
+#: config/xtensa/xtensa.c:651 config/xtensa/xtensa.c:683
+#: config/xtensa/xtensa.c:692
msgid "bad test"
msgstr ""
-#: config/xtensa/xtensa.c:1649
+#: config/xtensa/xtensa.c:1723
#, c-format
msgid "invalid %%D value"
msgstr ""
-#: config/xtensa/xtensa.c:1686
+#: config/xtensa/xtensa.c:1760
msgid "invalid mask"
msgstr ""
-#: config/xtensa/xtensa.c:1712
+#: config/xtensa/xtensa.c:1786
#, c-format
msgid "invalid %%x value"
msgstr ""
-#: config/xtensa/xtensa.c:1719
+#: config/xtensa/xtensa.c:1793
#, c-format
msgid "invalid %%d value"
msgstr ""
-#: config/xtensa/xtensa.c:1740 config/xtensa/xtensa.c:1750
+#: config/xtensa/xtensa.c:1814 config/xtensa/xtensa.c:1824
#, c-format
msgid "invalid %%t/%%b value"
msgstr ""
-#: config/xtensa/xtensa.c:1792
+#: config/xtensa/xtensa.c:1866
msgid "invalid address"
msgstr ""
-#: config/xtensa/xtensa.c:1817
+#: config/xtensa/xtensa.c:1891
msgid "no register in address"
msgstr ""
-#: config/xtensa/xtensa.c:1825
+#: config/xtensa/xtensa.c:1899
msgid "address offset not a constant"
msgstr ""
-#: cp/call.c:2464
+#: cp/call.c:2492
msgid "candidates are:"
msgstr ""
-#: cp/call.c:6279
+#: cp/call.c:6337
msgid "candidate 1:"
msgstr ""
-#: cp/call.c:6280
+#: cp/call.c:6338
msgid "candidate 2:"
msgstr ""
-#: cp/decl2.c:673
+#: cp/decl2.c:663
msgid "candidates are: %+#D"
msgstr ""
-#: cp/decl2.c:675
+#: cp/decl2.c:665
msgid "candidate is: %+#D"
msgstr ""
-#: cp/g++spec.c:238 java/jvspec.c:424
+#: cp/g++spec.c:246 java/jvspec.c:407
#, c-format
msgid "argument to '%s' missing\n"
msgstr ""
-#: fortran/arith.c:141
+#: fortran/arith.c:90
msgid "Arithmetic OK at %L"
msgstr ""
-#: fortran/arith.c:144
+#: fortran/arith.c:93
msgid "Arithmetic overflow at %L"
msgstr ""
-#: fortran/arith.c:147
+#: fortran/arith.c:96
msgid "Arithmetic underflow at %L"
msgstr ""
-#: fortran/arith.c:150
+#: fortran/arith.c:99
msgid "Arithmetic NaN at %L"
msgstr ""
-#: fortran/arith.c:153
+#: fortran/arith.c:102
msgid "Division by zero at %L"
msgstr ""
-#: fortran/arith.c:156
+#: fortran/arith.c:105
msgid "Array operands are incommensurate at %L"
msgstr ""
-#: fortran/arith.c:160
+#: fortran/arith.c:109
msgid "Integer outside symmetric range implied by Standard Fortran at %L"
msgstr ""
-#: fortran/arith.c:1430
+#: fortran/arith.c:1344
msgid "Elemental binary operation"
msgstr ""
-#: fortran/arith.c:1988
+#: fortran/arith.c:1893
#, no-c-format
msgid "Arithmetic OK converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:1992
+#: fortran/arith.c:1897
#, no-c-format
msgid "Arithmetic overflow converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:1996
+#: fortran/arith.c:1901
#, no-c-format
msgid "Arithmetic underflow converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:2000
+#: fortran/arith.c:1905
#, no-c-format
msgid "Arithmetic NaN converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:2004
+#: fortran/arith.c:1909
#, no-c-format
msgid "Division by zero converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:2008
+#: fortran/arith.c:1913
#, no-c-format
msgid "Array operands are incommensurate converting %s to %s at %L"
msgstr ""
-#: fortran/arith.c:2012
+#: fortran/arith.c:1917
#, no-c-format
msgid ""
"Integer outside symmetric range implied by Standard Fortran converting %s to "
"%s at %L"
msgstr ""
-#: fortran/arith.c:2353 fortran/arith.c:2389 fortran/arith.c:2427
-#: fortran/arith.c:2479
+#: fortran/arith.c:2255 fortran/arith.c:2291 fortran/arith.c:2329
+#: fortran/arith.c:2381
#, no-c-format
msgid "The Hollerith constant at %L is too long to convert to %s"
msgstr ""
-#: fortran/arith.c:2526
+#: fortran/arith.c:2428
#, no-c-format
msgid "Enumerator exceeds the C integer type at %C"
msgstr ""
-#: fortran/array.c:97
+#: fortran/array.c:98
#, no-c-format
msgid "Expected array subscript at %C"
msgstr ""
-#: fortran/array.c:124
+#: fortran/array.c:125
#, no-c-format
msgid "Expected array subscript stride at %C"
msgstr ""
-#: fortran/array.c:167
+#: fortran/array.c:168
#, no-c-format
msgid "Invalid form of array reference at %C"
msgstr ""
-#: fortran/array.c:172
+#: fortran/array.c:173
#, no-c-format
msgid "Array reference at %C cannot have more than %d dimensions"
msgstr ""
@@ -3735,82 +3818,82 @@ msgstr ""
msgid "Expected expression in array specification at %C"
msgstr ""
-#: fortran/array.c:379
+#: fortran/array.c:387
#, no-c-format
msgid "Bad array specification for an explicitly shaped array at %C"
msgstr ""
-#: fortran/array.c:390
+#: fortran/array.c:397
#, no-c-format
msgid "Bad array specification for assumed shape array at %C"
msgstr ""
-#: fortran/array.c:403
+#: fortran/array.c:411
#, no-c-format
msgid "Bad specification for deferred shape array at %C"
msgstr ""
-#: fortran/array.c:407
+#: fortran/array.c:415
#, no-c-format
msgid "Bad specification for assumed size array at %C"
msgstr ""
-#: fortran/array.c:416
+#: fortran/array.c:424
#, no-c-format
msgid "Expected another dimension in array declaration at %C"
msgstr ""
-#: fortran/array.c:422
+#: fortran/array.c:430
#, no-c-format
msgid "Array specification at %C has more than %d dimensions"
msgstr ""
-#: fortran/array.c:627
+#: fortran/array.c:636
#, no-c-format
msgid "duplicated initializer"
msgstr ""
-#: fortran/array.c:720
+#: fortran/array.c:728
#, no-c-format
msgid "DO-iterator '%s' at %L is inside iterator of the same name"
msgstr ""
-#: fortran/array.c:822 fortran/array.c:931
+#: fortran/array.c:830 fortran/array.c:939
#, no-c-format
msgid "Syntax error in array constructor at %C"
msgstr ""
-#: fortran/array.c:877
+#: fortran/array.c:885
#, no-c-format
-msgid "New in Fortran 2003: [...] style array constructors at %C"
+msgid "Fortran 2003: [...] style array constructors at %C"
msgstr ""
-#: fortran/array.c:891
+#: fortran/array.c:899
#, no-c-format
msgid "Empty array constructor at %C is not allowed"
msgstr ""
-#: fortran/array.c:976
+#: fortran/array.c:983
#, no-c-format
msgid "Element in %s array constructor at %L is %s"
msgstr ""
-#: fortran/array.c:1305
+#: fortran/array.c:1309
#, no-c-format
msgid "Iterator step at %L cannot be zero"
msgstr ""
-#: fortran/check.c:44
+#: fortran/check.c:45
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be %s"
msgstr ""
-#: fortran/check.c:60
+#: fortran/check.c:61
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type"
msgstr ""
-#: fortran/check.c:75 fortran/check.c:767 fortran/check.c:777
+#: fortran/check.c:75 fortran/check.c:776 fortran/check.c:786
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL"
msgstr ""
@@ -3825,7 +3908,7 @@ msgstr ""
msgid "'%s' argument of '%s' intrinsic at %L must be a constant"
msgstr ""
-#: fortran/check.c:126
+#: fortran/check.c:127
#, no-c-format
msgid "Invalid kind for %s at %L"
msgstr ""
@@ -3840,873 +3923,955 @@ msgstr ""
msgid "'%s' argument of '%s' intrinsic at %L must be a logical array"
msgstr ""
-#: fortran/check.c:180
+#: fortran/check.c:181
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be an array"
msgstr ""
-#: fortran/check.c:195
+#: fortran/check.c:196
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a scalar"
msgstr ""
-#: fortran/check.c:210
+#: fortran/check.c:211
#, no-c-format
msgid ""
"'%s' argument of '%s' intrinsic at %L must be the same type and kind as '%s'"
msgstr ""
-#: fortran/check.c:225
+#: fortran/check.c:227
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d"
msgstr ""
-#: fortran/check.c:239
+#: fortran/check.c:242
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must not be OPTIONAL"
msgstr ""
-#: fortran/check.c:259
+#: fortran/check.c:261
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d"
msgstr ""
-#: fortran/check.c:280
+#: fortran/check.c:283
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)"
msgstr ""
-#: fortran/check.c:286
+#: fortran/check.c:289
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a variable"
msgstr ""
-#: fortran/check.c:303
+#: fortran/check.c:306
#, no-c-format
msgid "Missing DIM parameter in intrinsic '%s' at %L"
msgstr ""
-#: fortran/check.c:343
+#: fortran/check.c:349
#, no-c-format
msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index"
msgstr ""
-#: fortran/check.c:387
+#: fortran/check.c:395
#, no-c-format
msgid ""
"transformational intrinsic '%s' at %L is not permitted in an initialization "
"expression"
msgstr ""
-#: fortran/check.c:491 fortran/check.c:1834 fortran/check.c:1849
+#: fortran/check.c:501 fortran/check.c:1844 fortran/check.c:1859
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE"
msgstr ""
-#: fortran/check.c:512 fortran/check.c:3442
+#: fortran/check.c:522 fortran/check.c:3490
#, no-c-format
msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type"
msgstr ""
-#: fortran/check.c:521 fortran/check.c:1069 fortran/check.c:1204
-#: fortran/check.c:1277 fortran/check.c:1502
+#: fortran/check.c:531 fortran/check.c:1077 fortran/check.c:1212
+#: fortran/check.c:1285 fortran/check.c:1516
#, no-c-format
msgid "Extension: Different type kinds at %L"
msgstr ""
-#: fortran/check.c:551 fortran/check.c:1915
+#: fortran/check.c:561 fortran/check.c:1928
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER"
msgstr ""
-#: fortran/check.c:571
+#: fortran/check.c:581
#, no-c-format
msgid ""
"'%s' argument of '%s' intrinsic at %L must be a pointer or target VARIABLE "
"or FUNCTION"
msgstr ""
-#: fortran/check.c:579
+#: fortran/check.c:589
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET"
msgstr ""
-#: fortran/check.c:595
+#: fortran/check.c:605
#, no-c-format
msgid ""
"Array section with a vector subscript at %L shall not be the target of a "
"pointer"
msgstr ""
-#: fortran/check.c:606
+#: fortran/check.c:616
#, no-c-format
msgid ""
"NULL pointer at %L is not permitted as actual argument of '%s' intrinsic "
"function"
msgstr ""
-#: fortran/check.c:747 fortran/check.c:855
+#: fortran/check.c:757 fortran/check.c:865
#, no-c-format
msgid ""
"'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX"
msgstr ""
-#: fortran/check.c:904 fortran/check.c:1582 fortran/check.c:1590
+#: fortran/check.c:914 fortran/check.c:1596 fortran/check.c:1604
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL"
msgstr ""
-#: fortran/check.c:918
+#: fortran/check.c:928
#, no-c-format
msgid ""
"different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'"
msgstr ""
-#: fortran/check.c:1174
+#: fortran/check.c:1182
#, no-c-format
msgid "Argument of %s at %L must be of length one"
msgstr ""
-#: fortran/check.c:1226
+#: fortran/check.c:1234
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'"
msgstr ""
-#: fortran/check.c:1351
+#: fortran/check.c:1365
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type"
msgstr ""
-#: fortran/check.c:1474
+#: fortran/check.c:1489
#, no-c-format
msgid "Intrinsic '%s' at %L must have at least two arguments"
msgstr ""
-#: fortran/check.c:1508
+#: fortran/check.c:1522
#, no-c-format
msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)"
msgstr ""
-#: fortran/check.c:1533
+#: fortran/check.c:1546
#, no-c-format
msgid "'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL"
msgstr ""
-#: fortran/check.c:1604
+#: fortran/check.c:1618
#, no-c-format
msgid ""
"different shape on dimension 1 for arguments '%s' and '%s' at %L for "
"intrinsic matmul"
msgstr ""
-#: fortran/check.c:1624
+#: fortran/check.c:1637
#, no-c-format
msgid ""
"different shape on dimension 2 for argument '%s' and dimension 1 for "
"argument '%s' at %L for intrinsic matmul"
msgstr ""
-#: fortran/check.c:1633
+#: fortran/check.c:1646
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2"
msgstr ""
-#: fortran/check.c:1860
+#: fortran/check.c:1870
#, no-c-format
msgid ""
"the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %"
"d/%d"
msgstr ""
-#: fortran/check.c:1869
+#: fortran/check.c:1879
#, no-c-format
msgid ""
"the '%s' and '%s' arguments of '%s' intrinsic at %L must be of the same kind "
"%d/%d"
msgstr ""
-#: fortran/check.c:1965
+#: fortran/check.c:1978
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of type REAL or COMPLEX"
msgstr ""
-#: fortran/check.c:1986
+#: fortran/check.c:1999
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable"
msgstr ""
-#: fortran/check.c:1994
+#: fortran/check.c:2007
#, no-c-format
msgid ""
"'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable"
msgstr ""
-#: fortran/check.c:2010
+#: fortran/check.c:2023
#, no-c-format
-msgid "'%s' argument of '%s' intrinsic at %L must not be a sub-object of '%s'"
+msgid "'%s' argument of '%s' intrinsic at %L must not be a subobject of '%s'"
msgstr ""
-#: fortran/check.c:2126
+#: fortran/check.c:2140
#, no-c-format
msgid ""
"'shape' argument of 'reshape' intrinsic at %L must be an array of constant "
"size"
msgstr ""
-#: fortran/check.c:2136
+#: fortran/check.c:2150
#, no-c-format
msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements"
msgstr ""
-#: fortran/check.c:2224
+#: fortran/check.c:2188
+#, no-c-format
+msgid ""
+"Without padding, there are not enough elements in the intrinsic RESHAPE "
+"source at %L to match the shape"
+msgstr ""
+
+#: fortran/check.c:2266
#, no-c-format
msgid "Missing arguments to %s intrinsic at %L"
msgstr ""
-#: fortran/check.c:2265
+#: fortran/check.c:2307
#, no-c-format
msgid ""
"'source' argument of 'shape' intrinsic at %L must not be an assumed size "
"array"
msgstr ""
-#: fortran/check.c:2327
+#: fortran/check.c:2369
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d"
msgstr ""
-#: fortran/check.c:2793 fortran/check.c:2813
+#: fortran/check.c:2835 fortran/check.c:2855
#, no-c-format
msgid "Too many arguments to %s at %L"
msgstr ""
-#: fortran/check.c:2941 fortran/check.c:3356 fortran/check.c:3380
+#: fortran/check.c:2984 fortran/check.c:3403 fortran/check.c:3427
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE"
msgstr ""
-#: fortran/check.c:3427 fortran/check.c:3435
+#: fortran/check.c:3474 fortran/check.c:3482
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL"
msgstr ""
-#: fortran/data.c:63
+#: fortran/data.c:64
#, no-c-format
-msgid "non-constant array in DATA statement %L."
+msgid "non-constant array in DATA statement %L"
msgstr ""
-#: fortran/data.c:182
+#: fortran/data.c:193
#, no-c-format
-msgid "failure to simplify substring reference in DATAstatement at %L"
+msgid "failure to simplify substring reference in DATA statement at %L"
msgstr ""
-#: fortran/data.c:203
+#: fortran/data.c:214
#, no-c-format
msgid "initialization string truncated to match variable at %L"
msgstr ""
-#: fortran/data.c:354
+#: fortran/data.c:393
#, no-c-format
msgid "Extension: re-initialization of '%s' at %L"
msgstr ""
-#: fortran/decl.c:208
+#: fortran/decl.c:235
#, no-c-format
-msgid "Host associated variable '%s' may not be in the DATA statement at %C."
+msgid "Host associated variable '%s' may not be in the DATA statement at %C"
msgstr ""
-#: fortran/decl.c:215
+#: fortran/decl.c:242
#, no-c-format
msgid ""
"Extension: initialization of common block variable '%s' in DATA statement at "
"%C"
msgstr ""
-#: fortran/decl.c:301
+#: fortran/decl.c:329
#, no-c-format
msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C"
msgstr ""
-#: fortran/decl.c:411
+#: fortran/decl.c:440
#, no-c-format
msgid "Initialization at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:465
+#: fortran/decl.c:499
#, no-c-format
msgid "DATA statement at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:493
+#: fortran/decl.c:528
#, no-c-format
msgid "Bad INTENT specification at %C"
msgstr ""
-#: fortran/decl.c:557
+#: fortran/decl.c:591
#, no-c-format
msgid "Syntax error in character length specification at %C"
msgstr ""
-#: fortran/decl.c:640
+#: fortran/decl.c:674
#, no-c-format
msgid "Procedure '%s' at %C is already defined at %L"
msgstr ""
-#: fortran/decl.c:652
+#: fortran/decl.c:686
#, no-c-format
msgid ""
"Procedure '%s' at %C has an explicit interface and must not have attributes "
"declared at %L"
msgstr ""
-#: fortran/decl.c:829
+#: fortran/decl.c:779
+#, no-c-format
+msgid "CHARACTER expression at %L is being truncated (%d/%d)"
+msgstr ""
+
+#: fortran/decl.c:785
+#, no-c-format
+msgid ""
+"The CHARACTER elements of the array constructor at %L must have the same "
+"length (%d/%d)"
+msgstr ""
+
+#: fortran/decl.c:876
#, no-c-format
msgid "Initializer not allowed for PARAMETER '%s' at %C"
msgstr ""
-#: fortran/decl.c:838
+#: fortran/decl.c:885
#, no-c-format
msgid "Initializer not allowed for COMMON variable '%s' at %C"
msgstr ""
-#: fortran/decl.c:848
+#: fortran/decl.c:895
#, no-c-format
msgid "PARAMETER at %L is missing an initializer"
msgstr ""
-#: fortran/decl.c:859
+#: fortran/decl.c:905
#, no-c-format
msgid ""
"Variable '%s' at %C with an initializer already appears in a DATA statement"
msgstr ""
-#: fortran/decl.c:935
+#: fortran/decl.c:982
#, no-c-format
msgid "Component at %C must have the POINTER attribute"
msgstr ""
-#: fortran/decl.c:944
+#: fortran/decl.c:990
#, no-c-format
msgid "Array component of structure at %C must have explicit or deferred shape"
msgstr ""
-#: fortran/decl.c:970
+#: fortran/decl.c:1016
#, no-c-format
msgid "Allocatable component at %C must be an array"
msgstr ""
-#: fortran/decl.c:981
+#: fortran/decl.c:1027
#, no-c-format
msgid "Pointer array component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:990
+#: fortran/decl.c:1036
#, no-c-format
msgid "Allocatable component of structure at %C must have a deferred shape"
msgstr ""
-#: fortran/decl.c:1000
+#: fortran/decl.c:1045
#, no-c-format
msgid "Array component of structure at %C must have an explicit shape"
msgstr ""
-#: fortran/decl.c:1026
+#: fortran/decl.c:1071
#, no-c-format
msgid "NULL() initialization at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:1093
+#: fortran/decl.c:1191 fortran/decl.c:3590
#, no-c-format
-msgid "Enumerator cannot be array at %C"
+msgid "Duplicate array spec for Cray pointee at %C"
msgstr ""
-#: fortran/decl.c:1154 fortran/decl.c:3466
-#, no-c-format
-msgid "Duplicate array spec for Cray pointee at %C."
-msgstr ""
-
-#: fortran/decl.c:1205
+#: fortran/decl.c:1245
#, no-c-format
msgid "the type of '%s' at %C has not been declared within the interface"
msgstr ""
-#: fortran/decl.c:1220
+#: fortran/decl.c:1260
#, no-c-format
msgid "Function name '%s' not allowed at %C"
msgstr ""
-#: fortran/decl.c:1236
+#: fortran/decl.c:1276
#, no-c-format
msgid "Extension: Old-style initialization at %C"
msgstr ""
-#: fortran/decl.c:1252
+#: fortran/decl.c:1291
#, no-c-format
msgid "Initialization at %C isn't for a pointer variable"
msgstr ""
-#: fortran/decl.c:1260
+#: fortran/decl.c:1299
#, no-c-format
msgid "Pointer initialization requires a NULL() at %C"
msgstr ""
-#: fortran/decl.c:1267
+#: fortran/decl.c:1305
#, no-c-format
msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:1281
+#: fortran/decl.c:1318
#, no-c-format
msgid "Pointer initialization at %C requires '=>', not '='"
msgstr ""
-#: fortran/decl.c:1289
+#: fortran/decl.c:1327 fortran/decl.c:4458
#, no-c-format
msgid "Expected an initialization expression at %C"
msgstr ""
-#: fortran/decl.c:1296
+#: fortran/decl.c:1333
#, no-c-format
msgid "Initialization of variable at %C is not allowed in a PURE procedure"
msgstr ""
-#: fortran/decl.c:1309
+#: fortran/decl.c:1346
#, no-c-format
msgid "Initialization of allocatable component at %C is not allowed"
msgstr ""
-#: fortran/decl.c:1326
-#, no-c-format
-msgid "ENUMERATOR %L not initialized with integer expression"
-msgstr ""
-
-#: fortran/decl.c:1385 fortran/decl.c:1394
+#: fortran/decl.c:1400 fortran/decl.c:1409
#, no-c-format
msgid "Old-style type declaration %s*%d not supported at %C"
msgstr ""
-#: fortran/decl.c:1399
+#: fortran/decl.c:1414
#, no-c-format
msgid "Nonstandard type declaration %s*%d at %C"
msgstr ""
-#: fortran/decl.c:1433
+#: fortran/decl.c:1448
#, no-c-format
msgid "Expected initialization expression at %C"
msgstr ""
-#: fortran/decl.c:1439
+#: fortran/decl.c:1454
#, no-c-format
msgid "Expected scalar initialization expression at %C"
msgstr ""
-#: fortran/decl.c:1457
+#: fortran/decl.c:1472
#, no-c-format
msgid "Kind %d not supported for type %s at %C"
msgstr ""
-#: fortran/decl.c:1466
+#: fortran/decl.c:1481
#, no-c-format
-msgid "Missing right paren at %C"
+msgid "Missing right parenthesis at %C"
msgstr ""
-#: fortran/decl.c:1555 fortran/decl.c:1598
+#: fortran/decl.c:1570 fortran/decl.c:1613
#, no-c-format
msgid "Kind %d is not a CHARACTER kind at %C"
msgstr ""
-#: fortran/decl.c:1592
+#: fortran/decl.c:1607
#, no-c-format
msgid "Syntax error in CHARACTER declaration at %C"
msgstr ""
-#: fortran/decl.c:1653
+#: fortran/decl.c:1668
#, no-c-format
msgid "Extension: BYTE type at %C"
msgstr ""
-#: fortran/decl.c:1659
+#: fortran/decl.c:1674
#, no-c-format
msgid "BYTE type used at %C is not available on the target machine"
msgstr ""
-#: fortran/decl.c:1708
+#: fortran/decl.c:1723
#, no-c-format
msgid "DOUBLE COMPLEX at %C does not conform to the Fortran 95 standard"
msgstr ""
-#: fortran/decl.c:1731
+#: fortran/decl.c:1746 fortran/decl.c:2046
#, no-c-format
msgid "Type name '%s' at %C is ambiguous"
msgstr ""
-#: fortran/decl.c:1797
+#: fortran/decl.c:1811
#, no-c-format
msgid "Missing character range in IMPLICIT at %C"
msgstr ""
-#: fortran/decl.c:1843
+#: fortran/decl.c:1857
#, no-c-format
msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:1897
+#: fortran/decl.c:1911
#, no-c-format
msgid "Empty IMPLICIT statement at %C"
msgstr ""
-#: fortran/decl.c:2061
+#: fortran/decl.c:2013
+#, no-c-format
+msgid "IMPORT statement at %C only permitted in an INTERFACE body"
+msgstr ""
+
+#: fortran/decl.c:2018
#, no-c-format
-msgid "Enumerator cannot have attributes %C"
+msgid "Fortran 2003: IMPORT statement at %C"
msgstr ""
-#: fortran/decl.c:2074
+#: fortran/decl.c:2033
+#, no-c-format
+msgid "Expecting list of named entities at %C"
+msgstr ""
+
+#: fortran/decl.c:2052
+#, no-c-format
+msgid "Cannot IMPORT '%s' from host scoping unit at %C - does not exist."
+msgstr ""
+
+#: fortran/decl.c:2059
+#, no-c-format
+msgid "'%s' is already IMPORTed from host scoping unit at %C."
+msgstr ""
+
+#: fortran/decl.c:2088
+#, no-c-format
+msgid "Syntax error in IMPORT statement at %C"
+msgstr ""
+
+#: fortran/decl.c:2174
#, no-c-format
msgid "Missing dimension specification at %C"
msgstr ""
-#: fortran/decl.c:2156
+#: fortran/decl.c:2253
#, no-c-format
msgid "Duplicate %s attribute at %L"
msgstr ""
-#: fortran/decl.c:2175
+#: fortran/decl.c:2271
#, no-c-format
-msgid ""
-"In the selected standard, the ALLOCATABLE attribute at %C is not allowed in "
-"a TYPE definition"
+msgid "Fortran 2003: ALLOCATABLE attribute at %C in a TYPE definition"
msgstr ""
-#: fortran/decl.c:2185
+#: fortran/decl.c:2281
#, no-c-format
msgid "Attribute at %L is not allowed in a TYPE definition"
msgstr ""
-#: fortran/decl.c:2200
+#: fortran/decl.c:2296
#, no-c-format
msgid "%s attribute at %L is not allowed outside of a MODULE"
msgstr ""
+#: fortran/decl.c:2347 fortran/decl.c:3829
+#, no-c-format
+msgid "PROTECTED at %C only allowed in specification part of a module"
+msgstr ""
+
+#: fortran/decl.c:2353
+#, no-c-format
+msgid "Fortran 2003: PROTECTED attribute at %C"
+msgstr ""
+
+#: fortran/decl.c:2380
+#, no-c-format
+msgid "Fortran 2003: VALUE attribute at %C"
+msgstr ""
+
+#: fortran/decl.c:2390
+#, no-c-format
+msgid "Fortran 2003: VOLATILE attribute at %C"
+msgstr ""
+
#. Now we have an error, which we signal, and then fix up
#. because the knock-on is plain and simple confusing.
-#: fortran/decl.c:2338
+#: fortran/decl.c:2469
#, no-c-format
msgid ""
"Derived type at %C has not been previously defined and so cannot appear in a "
-"derived type definition."
+"derived type definition"
msgstr ""
-#: fortran/decl.c:2368
+#: fortran/decl.c:2500
#, no-c-format
msgid "Syntax error in data declaration at %C"
msgstr ""
-#: fortran/decl.c:2514
+#: fortran/decl.c:2647
#, no-c-format
msgid "Name '%s' at %C is the name of the procedure"
msgstr ""
-#: fortran/decl.c:2526
+#: fortran/decl.c:2659
#, no-c-format
msgid "Unexpected junk in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:2544
+#: fortran/decl.c:2676
#, no-c-format
msgid "Duplicate symbol '%s' in formal argument list at %C"
msgstr ""
-#: fortran/decl.c:2587
+#: fortran/decl.c:2719
#, no-c-format
msgid "Unexpected junk following RESULT variable at %C"
msgstr ""
-#: fortran/decl.c:2594
+#: fortran/decl.c:2725
#, no-c-format
msgid "RESULT variable at %C must be different than function name"
msgstr ""
-#: fortran/decl.c:2650
+#: fortran/decl.c:2781
#, no-c-format
msgid "Expected formal argument list in function definition at %C"
msgstr ""
-#: fortran/decl.c:2665
+#: fortran/decl.c:2796
#, no-c-format
msgid "Unexpected junk after function declaration at %C"
msgstr ""
-#: fortran/decl.c:2688
+#: fortran/decl.c:2818
#, no-c-format
msgid "Function '%s' at %C already has a type of %s"
msgstr ""
-#: fortran/decl.c:2760
+#: fortran/decl.c:2893
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a PROGRAM"
msgstr ""
-#: fortran/decl.c:2763
+#: fortran/decl.c:2896
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a MODULE"
msgstr ""
-#: fortran/decl.c:2767
+#: fortran/decl.c:2899
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
msgstr ""
-#: fortran/decl.c:2771
+#: fortran/decl.c:2903
#, no-c-format
msgid "ENTRY statement at %C cannot appear within an INTERFACE"
msgstr ""
-#: fortran/decl.c:2775
+#: fortran/decl.c:2907
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
msgstr ""
-#: fortran/decl.c:2780
+#: fortran/decl.c:2911
#, no-c-format
msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
msgstr ""
-#: fortran/decl.c:2784
+#: fortran/decl.c:2915
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a DO block"
msgstr ""
-#: fortran/decl.c:2788
+#: fortran/decl.c:2919
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a SELECT block"
msgstr ""
-#: fortran/decl.c:2792
+#: fortran/decl.c:2923
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a FORALL block"
msgstr ""
-#: fortran/decl.c:2796
+#: fortran/decl.c:2927
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a WHERE block"
msgstr ""
-#: fortran/decl.c:2800
+#: fortran/decl.c:2931
#, no-c-format
msgid "ENTRY statement at %C cannot appear within a contained subprogram"
msgstr ""
-#: fortran/decl.c:2817
+#: fortran/decl.c:2949
#, no-c-format
msgid "ENTRY statement at %C cannot appear in a contained procedure"
msgstr ""
-#: fortran/decl.c:2904
-#, no-c-format
-msgid "RESULT attribute required in ENTRY statement at %C"
-msgstr ""
-
-#: fortran/decl.c:3145
+#: fortran/decl.c:3271
#, no-c-format
msgid "Unexpected END statement at %C"
msgstr ""
#. We would have required END [something]
-#: fortran/decl.c:3154
+#: fortran/decl.c:3280
#, no-c-format
msgid "%s statement expected at %L"
msgstr ""
-#: fortran/decl.c:3165
+#: fortran/decl.c:3291
#, no-c-format
msgid "Expecting %s statement at %C"
msgstr ""
-#: fortran/decl.c:3179
+#: fortran/decl.c:3305
#, no-c-format
msgid "Expected block name of '%s' in %s statement at %C"
msgstr ""
-#: fortran/decl.c:3195
+#: fortran/decl.c:3321
#, no-c-format
msgid "Expected terminating name at %C"
msgstr ""
-#: fortran/decl.c:3204
+#: fortran/decl.c:3330
#, no-c-format
msgid "Expected label '%s' for %s statement at %C"
msgstr ""
-#: fortran/decl.c:3259
+#: fortran/decl.c:3384
#, no-c-format
msgid "Missing array specification at %L in DIMENSION statement"
msgstr ""
-#: fortran/decl.c:3268
+#: fortran/decl.c:3393
#, no-c-format
msgid "Array specification must be deferred at %L"
msgstr ""
-#: fortran/decl.c:3345
+#: fortran/decl.c:3470
#, no-c-format
msgid "Unexpected character in variable list at %C"
msgstr ""
-#: fortran/decl.c:3382
+#: fortran/decl.c:3507
#, no-c-format
msgid "Expected '(' at %C"
msgstr ""
-#: fortran/decl.c:3396 fortran/decl.c:3437
+#: fortran/decl.c:3521 fortran/decl.c:3561
#, no-c-format
msgid "Expected variable name at %C"
msgstr ""
-#: fortran/decl.c:3412
+#: fortran/decl.c:3537
#, no-c-format
-msgid "Cray pointer at %C must be an integer."
+msgid "Cray pointer at %C must be an integer"
msgstr ""
-#: fortran/decl.c:3416
+#: fortran/decl.c:3541
#, no-c-format
msgid ""
"Cray pointer at %C has %d bytes of precision; memory addresses require %d "
-"bytes."
+"bytes"
msgstr ""
-#: fortran/decl.c:3423
+#: fortran/decl.c:3547
#, no-c-format
msgid "Expected \",\" at %C"
msgstr ""
-#: fortran/decl.c:3486
+#: fortran/decl.c:3610
#, no-c-format
msgid "Expected \")\" at %C"
msgstr ""
-#: fortran/decl.c:3498
+#: fortran/decl.c:3622
#, no-c-format
msgid "Expected \",\" or end of statement at %C"
msgstr ""
-#: fortran/decl.c:3563
+#: fortran/decl.c:3686
#, no-c-format
-msgid "Cray pointer declaration at %C requires -fcray-pointer flag."
+msgid "Cray pointer declaration at %C requires -fcray-pointer flag"
msgstr ""
-#: fortran/decl.c:3661
+#: fortran/decl.c:3780
#, no-c-format
msgid ""
"Access specification of the %s operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:3679
+#: fortran/decl.c:3797
#, no-c-format
msgid ""
"Access specification of the .%s. operator at %C has already been specified"
msgstr ""
-#: fortran/decl.c:3766
+#: fortran/decl.c:3835
+#, no-c-format
+msgid "Fortran 2003: PROTECTED statement at %C"
+msgstr ""
+
+#: fortran/decl.c:3875
+#, no-c-format
+msgid "Syntax error in PROTECTED statement at %C"
+msgstr ""
+
+#: fortran/decl.c:3943
#, no-c-format
msgid "Expected variable name at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:3773
+#: fortran/decl.c:3950
#, no-c-format
msgid "Expected = sign in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:3779
+#: fortran/decl.c:3956
#, no-c-format
msgid "Expected expression at %C in PARAMETER statement"
msgstr ""
-#: fortran/decl.c:3837
+#: fortran/decl.c:4014
#, no-c-format
msgid "Unexpected characters in PARAMETER statement at %C"
msgstr ""
-#: fortran/decl.c:3862
+#: fortran/decl.c:4038
#, no-c-format
msgid "Blanket SAVE statement at %C follows previous SAVE statement"
msgstr ""
-#: fortran/decl.c:3875
+#: fortran/decl.c:4050
#, no-c-format
msgid "SAVE statement at %C follows blanket SAVE statement"
msgstr ""
-#: fortran/decl.c:3921
+#: fortran/decl.c:4097
#, no-c-format
msgid "Syntax error in SAVE statement at %C"
msgstr ""
-#: fortran/decl.c:3942
+#: fortran/decl.c:4108
+#, no-c-format
+msgid "Fortran 2003: VALUE statement at %C"
+msgstr ""
+
+#: fortran/decl.c:4148
+#, no-c-format
+msgid "Syntax error in VALUE statement at %C"
+msgstr ""
+
+#: fortran/decl.c:4158
+#, no-c-format
+msgid "Fortran 2003: VOLATILE statement at %C"
+msgstr ""
+
+#: fortran/decl.c:4200
+#, no-c-format
+msgid "Syntax error in VOLATILE statement at %C"
+msgstr ""
+
+#: fortran/decl.c:4221
#, no-c-format
msgid "MODULE PROCEDURE at %C must be in a generic module interface"
msgstr ""
-#: fortran/decl.c:4002
+#: fortran/decl.c:4283
#, no-c-format
msgid "Derived type at %C can only be PRIVATE within a MODULE"
msgstr ""
-#: fortran/decl.c:4015
+#: fortran/decl.c:4296
#, no-c-format
msgid "Derived type at %C can only be PUBLIC within a MODULE"
msgstr ""
-#: fortran/decl.c:4026
+#: fortran/decl.c:4307
#, no-c-format
msgid "Expected :: in TYPE definition at %C"
msgstr ""
-#: fortran/decl.c:4043
+#: fortran/decl.c:4323
#, no-c-format
msgid "Type name '%s' at %C cannot be the same as an intrinsic type"
msgstr ""
-#: fortran/decl.c:4053
+#: fortran/decl.c:4333
#, no-c-format
msgid "Derived type name '%s' at %C already has a basic type of %s"
msgstr ""
-#: fortran/decl.c:4070
+#: fortran/decl.c:4349
#, no-c-format
msgid "Derived type definition of '%s' at %C has already been defined"
msgstr ""
-#: fortran/decl.c:4104
+#: fortran/decl.c:4383
#, no-c-format
msgid "Cray Pointee at %C cannot be assumed shape array"
msgstr ""
-#: fortran/decl.c:4125
+#: fortran/decl.c:4403
+#, no-c-format
+msgid "Fortran 2003: ENUM and ENUMERATOR at %C"
+msgstr ""
+
+#: fortran/decl.c:4475
#, no-c-format
-msgid "New in Fortran 2003: ENUM AND ENUMERATOR at %C"
+msgid "ENUMERATOR %L not initialized with integer expression"
msgstr ""
-#: fortran/decl.c:4149
+#: fortran/decl.c:4524
#, no-c-format
msgid "ENUM definition statement expected before %C"
msgstr ""
-#: fortran/decl.c:4182
+#: fortran/decl.c:4557
#, no-c-format
msgid "Syntax error in ENUMERATOR definition at %C"
msgstr ""
-#: fortran/dump-parse-tree.c:48
+#: fortran/dump-parse-tree.c:49
#, c-format
msgid "%-5d "
msgstr ""
-#: fortran/dump-parse-tree.c:50
+#: fortran/dump-parse-tree.c:51
#, c-format
msgid " "
msgstr ""
-#: fortran/dump-parse-tree.c:74 fortran/dump-parse-tree.c:604
+#: fortran/dump-parse-tree.c:74 fortran/dump-parse-tree.c:607
#, c-format
msgid "(%s "
msgstr ""
@@ -4717,425 +4882,440 @@ msgstr ""
msgid "%d"
msgstr ""
-#: fortran/dump-parse-tree.c:91 fortran/dump-parse-tree.c:118
-#: fortran/dump-parse-tree.c:161 fortran/dump-parse-tree.c:408
-#: fortran/dump-parse-tree.c:503 fortran/dump-parse-tree.c:591
-#: fortran/dump-parse-tree.c:612
+#: fortran/dump-parse-tree.c:91 fortran/dump-parse-tree.c:117
+#: fortran/dump-parse-tree.c:160 fortran/dump-parse-tree.c:405
+#: fortran/dump-parse-tree.c:500 fortran/dump-parse-tree.c:594
+#: fortran/dump-parse-tree.c:615
#, c-format
msgid ")"
msgstr ""
-#: fortran/dump-parse-tree.c:101 fortran/dump-parse-tree.c:426
+#: fortran/dump-parse-tree.c:100 fortran/dump-parse-tree.c:423
#, c-format
msgid "("
msgstr ""
-#: fortran/dump-parse-tree.c:107
+#: fortran/dump-parse-tree.c:106
#, c-format
msgid "%s = "
msgstr ""
-#: fortran/dump-parse-tree.c:111
+#: fortran/dump-parse-tree.c:110
#, c-format
msgid "(arg not-present)"
msgstr ""
-#: fortran/dump-parse-tree.c:115 fortran/dump-parse-tree.c:402
-#: fortran/dump-parse-tree.c:499
+#: fortran/dump-parse-tree.c:114 fortran/dump-parse-tree.c:399
+#: fortran/dump-parse-tree.c:496
#, c-format
msgid " "
msgstr ""
-#: fortran/dump-parse-tree.c:132 fortran/dump-parse-tree.c:307
+#: fortran/dump-parse-tree.c:131 fortran/dump-parse-tree.c:304
#, c-format
msgid "()"
msgstr ""
-#: fortran/dump-parse-tree.c:136
+#: fortran/dump-parse-tree.c:135
#, c-format
msgid "(%d"
msgstr ""
-#: fortran/dump-parse-tree.c:150
+#: fortran/dump-parse-tree.c:149
#, c-format
msgid " %s "
msgstr ""
-#: fortran/dump-parse-tree.c:177
+#: fortran/dump-parse-tree.c:176
#, c-format
msgid "FULL"
msgstr ""
-#: fortran/dump-parse-tree.c:208 fortran/dump-parse-tree.c:217
-#: fortran/dump-parse-tree.c:292
+#: fortran/dump-parse-tree.c:207 fortran/dump-parse-tree.c:216
+#: fortran/dump-parse-tree.c:289
#, c-format
msgid " , "
msgstr ""
-#: fortran/dump-parse-tree.c:222
+#: fortran/dump-parse-tree.c:221
#, c-format
msgid "UNKNOWN"
msgstr ""
-#: fortran/dump-parse-tree.c:247
+#: fortran/dump-parse-tree.c:245
#, c-format
msgid " %% %s"
msgstr ""
-#: fortran/dump-parse-tree.c:319 fortran/dump-parse-tree.c:386
+#: fortran/dump-parse-tree.c:316 fortran/dump-parse-tree.c:383
#, c-format
msgid "''"
msgstr ""
-#: fortran/dump-parse-tree.c:321
+#: fortran/dump-parse-tree.c:318
#, c-format
msgid "%c"
msgstr ""
-#: fortran/dump-parse-tree.c:328
+#: fortran/dump-parse-tree.c:325
#, c-format
msgid "%s("
msgstr ""
-#: fortran/dump-parse-tree.c:334
+#: fortran/dump-parse-tree.c:331
#, c-format
msgid "(/ "
msgstr ""
-#: fortran/dump-parse-tree.c:336
+#: fortran/dump-parse-tree.c:333
#, c-format
msgid " /)"
msgstr ""
-#: fortran/dump-parse-tree.c:342
+#: fortran/dump-parse-tree.c:339
#, c-format
msgid "NULL()"
msgstr ""
-#: fortran/dump-parse-tree.c:348
+#: fortran/dump-parse-tree.c:345
#, c-format
msgid "%dH"
msgstr ""
-#: fortran/dump-parse-tree.c:362 fortran/dump-parse-tree.c:375
-#: fortran/dump-parse-tree.c:400 fortran/dump-parse-tree.c:406
+#: fortran/dump-parse-tree.c:359 fortran/dump-parse-tree.c:372
+#: fortran/dump-parse-tree.c:397 fortran/dump-parse-tree.c:403
#, c-format
msgid "_%d"
msgstr ""
-#: fortran/dump-parse-tree.c:367
+#: fortran/dump-parse-tree.c:364
#, c-format
msgid ".true."
msgstr ""
-#: fortran/dump-parse-tree.c:369
+#: fortran/dump-parse-tree.c:366
#, c-format
msgid ".false."
msgstr ""
-#: fortran/dump-parse-tree.c:396
+#: fortran/dump-parse-tree.c:393
#, c-format
msgid "(complex "
msgstr ""
-#: fortran/dump-parse-tree.c:412
+#: fortran/dump-parse-tree.c:409
#, c-format
msgid "???"
msgstr ""
-#: fortran/dump-parse-tree.c:420 fortran/dump-parse-tree.c:708
+#: fortran/dump-parse-tree.c:417 fortran/dump-parse-tree.c:711
#, c-format
msgid "%s:"
msgstr ""
-#: fortran/dump-parse-tree.c:430
+#: fortran/dump-parse-tree.c:427
#, c-format
msgid "U+ "
msgstr ""
-#: fortran/dump-parse-tree.c:433
+#: fortran/dump-parse-tree.c:430
#, c-format
msgid "U- "
msgstr ""
-#: fortran/dump-parse-tree.c:436
+#: fortran/dump-parse-tree.c:433
#, c-format
msgid "+ "
msgstr ""
-#: fortran/dump-parse-tree.c:439
+#: fortran/dump-parse-tree.c:436
#, c-format
msgid "- "
msgstr ""
-#: fortran/dump-parse-tree.c:442
+#: fortran/dump-parse-tree.c:439
#, c-format
msgid "* "
msgstr ""
-#: fortran/dump-parse-tree.c:445
+#: fortran/dump-parse-tree.c:442
#, c-format
msgid "/ "
msgstr ""
-#: fortran/dump-parse-tree.c:448
+#: fortran/dump-parse-tree.c:445
#, c-format
msgid "** "
msgstr ""
-#: fortran/dump-parse-tree.c:451
+#: fortran/dump-parse-tree.c:448
#, c-format
msgid "// "
msgstr ""
-#: fortran/dump-parse-tree.c:454
+#: fortran/dump-parse-tree.c:451
#, c-format
msgid "AND "
msgstr ""
-#: fortran/dump-parse-tree.c:457
+#: fortran/dump-parse-tree.c:454
#, c-format
msgid "OR "
msgstr ""
-#: fortran/dump-parse-tree.c:460
+#: fortran/dump-parse-tree.c:457
#, c-format
msgid "EQV "
msgstr ""
-#: fortran/dump-parse-tree.c:463
+#: fortran/dump-parse-tree.c:460
#, c-format
msgid "NEQV "
msgstr ""
-#: fortran/dump-parse-tree.c:466
+#: fortran/dump-parse-tree.c:463
#, c-format
msgid "= "
msgstr ""
-#: fortran/dump-parse-tree.c:469
+#: fortran/dump-parse-tree.c:466
#, c-format
msgid "<> "
msgstr ""
-#: fortran/dump-parse-tree.c:472
+#: fortran/dump-parse-tree.c:469
#, c-format
msgid "> "
msgstr ""
-#: fortran/dump-parse-tree.c:475
+#: fortran/dump-parse-tree.c:472
#, c-format
msgid ">= "
msgstr ""
-#: fortran/dump-parse-tree.c:478
+#: fortran/dump-parse-tree.c:475
#, c-format
msgid "< "
msgstr ""
-#: fortran/dump-parse-tree.c:481
+#: fortran/dump-parse-tree.c:478
#, c-format
msgid "<= "
msgstr ""
-#: fortran/dump-parse-tree.c:484
+#: fortran/dump-parse-tree.c:481
#, c-format
msgid "NOT "
msgstr ""
-#: fortran/dump-parse-tree.c:487
+#: fortran/dump-parse-tree.c:484
#, c-format
msgid "parens"
msgstr ""
-#: fortran/dump-parse-tree.c:509
+#: fortran/dump-parse-tree.c:506
#, c-format
msgid "%s["
msgstr ""
-#: fortran/dump-parse-tree.c:515
+#: fortran/dump-parse-tree.c:512
#, c-format
msgid "%s[["
msgstr ""
-#: fortran/dump-parse-tree.c:536
+#: fortran/dump-parse-tree.c:533
#, c-format
msgid "(%s %s %s %s"
msgstr ""
-#: fortran/dump-parse-tree.c:542
+#: fortran/dump-parse-tree.c:539
#, c-format
msgid " ALLOCATABLE"
msgstr ""
-#: fortran/dump-parse-tree.c:544 fortran/dump-parse-tree.c:609
+#: fortran/dump-parse-tree.c:541 fortran/dump-parse-tree.c:612
#, c-format
msgid " DIMENSION"
msgstr ""
-#: fortran/dump-parse-tree.c:546
+#: fortran/dump-parse-tree.c:543
#, c-format
msgid " EXTERNAL"
msgstr ""
-#: fortran/dump-parse-tree.c:548
+#: fortran/dump-parse-tree.c:545
#, c-format
msgid " INTRINSIC"
msgstr ""
-#: fortran/dump-parse-tree.c:550
+#: fortran/dump-parse-tree.c:547
#, c-format
msgid " OPTIONAL"
msgstr ""
-#: fortran/dump-parse-tree.c:552 fortran/dump-parse-tree.c:607
+#: fortran/dump-parse-tree.c:549 fortran/dump-parse-tree.c:610
#, c-format
msgid " POINTER"
msgstr ""
-#: fortran/dump-parse-tree.c:554
+#: fortran/dump-parse-tree.c:551
+#, c-format
+msgid " PROTECTED"
+msgstr ""
+
+#: fortran/dump-parse-tree.c:553
#, c-format
msgid " SAVE"
msgstr ""
-#: fortran/dump-parse-tree.c:556
+#: fortran/dump-parse-tree.c:555
+#, c-format
+msgid " VALUE"
+msgstr ""
+
+#: fortran/dump-parse-tree.c:557
+#, c-format
+msgid " VOLATILE"
+msgstr ""
+
+#: fortran/dump-parse-tree.c:559
#, c-format
msgid " THREADPRIVATE"
msgstr ""
-#: fortran/dump-parse-tree.c:558
+#: fortran/dump-parse-tree.c:561
#, c-format
msgid " TARGET"
msgstr ""
-#: fortran/dump-parse-tree.c:560
+#: fortran/dump-parse-tree.c:563
#, c-format
msgid " DUMMY"
msgstr ""
-#: fortran/dump-parse-tree.c:562
+#: fortran/dump-parse-tree.c:565
#, c-format
msgid " RESULT"
msgstr ""
-#: fortran/dump-parse-tree.c:564
+#: fortran/dump-parse-tree.c:567
#, c-format
msgid " ENTRY"
msgstr ""
-#: fortran/dump-parse-tree.c:567
+#: fortran/dump-parse-tree.c:570
#, c-format
msgid " DATA"
msgstr ""
-#: fortran/dump-parse-tree.c:569
+#: fortran/dump-parse-tree.c:572
#, c-format
msgid " USE-ASSOC"
msgstr ""
-#: fortran/dump-parse-tree.c:571
+#: fortran/dump-parse-tree.c:574
#, c-format
msgid " IN-NAMELIST"
msgstr ""
-#: fortran/dump-parse-tree.c:573
+#: fortran/dump-parse-tree.c:576
#, c-format
msgid " IN-COMMON"
msgstr ""
-#: fortran/dump-parse-tree.c:576
+#: fortran/dump-parse-tree.c:579
#, c-format
msgid " FUNCTION"
msgstr ""
-#: fortran/dump-parse-tree.c:578
+#: fortran/dump-parse-tree.c:581
#, c-format
msgid " SUBROUTINE"
msgstr ""
-#: fortran/dump-parse-tree.c:580
+#: fortran/dump-parse-tree.c:583
#, c-format
msgid " IMPLICIT-TYPE"
msgstr ""
-#: fortran/dump-parse-tree.c:583
+#: fortran/dump-parse-tree.c:586
#, c-format
msgid " SEQUENCE"
msgstr ""
-#: fortran/dump-parse-tree.c:585
+#: fortran/dump-parse-tree.c:588
#, c-format
msgid " ELEMENTAL"
msgstr ""
-#: fortran/dump-parse-tree.c:587
+#: fortran/dump-parse-tree.c:590
#, c-format
msgid " PURE"
msgstr ""
-#: fortran/dump-parse-tree.c:589
+#: fortran/dump-parse-tree.c:592
#, c-format
msgid " RECURSIVE"
msgstr ""
-#: fortran/dump-parse-tree.c:635
+#: fortran/dump-parse-tree.c:638
#, c-format
msgid "symbol %s "
msgstr ""
-#: fortran/dump-parse-tree.c:642
+#: fortran/dump-parse-tree.c:645
#, c-format
msgid "value: "
msgstr ""
-#: fortran/dump-parse-tree.c:649
+#: fortran/dump-parse-tree.c:652
#, c-format
msgid "Array spec:"
msgstr ""
-#: fortran/dump-parse-tree.c:656
+#: fortran/dump-parse-tree.c:659
#, c-format
msgid "Generic interfaces:"
msgstr ""
-#: fortran/dump-parse-tree.c:658 fortran/dump-parse-tree.c:682
-#: fortran/dump-parse-tree.c:711 fortran/dump-parse-tree.c:1254
+#: fortran/dump-parse-tree.c:661 fortran/dump-parse-tree.c:685
+#: fortran/dump-parse-tree.c:714 fortran/dump-parse-tree.c:1254
#: fortran/dump-parse-tree.c:1260 fortran/dump-parse-tree.c:1762
#, c-format
msgid " %s"
msgstr ""
-#: fortran/dump-parse-tree.c:664
+#: fortran/dump-parse-tree.c:667
#, c-format
msgid "result: %s"
msgstr ""
-#: fortran/dump-parse-tree.c:670
+#: fortran/dump-parse-tree.c:673
#, c-format
msgid "components: "
msgstr ""
-#: fortran/dump-parse-tree.c:677
+#: fortran/dump-parse-tree.c:680
#, c-format
msgid "Formal arglist:"
msgstr ""
-#: fortran/dump-parse-tree.c:684
+#: fortran/dump-parse-tree.c:687
#, c-format
msgid " [Alt Return]"
msgstr ""
-#: fortran/dump-parse-tree.c:691
+#: fortran/dump-parse-tree.c:694
#, c-format
msgid "Formal namespace"
msgstr ""
-#: fortran/dump-parse-tree.c:749
+#: fortran/dump-parse-tree.c:750
#, c-format
msgid "common: /%s/ "
msgstr ""
-#: fortran/dump-parse-tree.c:757 fortran/dump-parse-tree.c:1698
+#: fortran/dump-parse-tree.c:758 fortran/dump-parse-tree.c:1698
#, c-format
msgid ", "
msgstr ""
@@ -5150,77 +5330,77 @@ msgstr ""
msgid " from namespace %s"
msgstr ""
-#: fortran/dump-parse-tree.c:800
+#: fortran/dump-parse-tree.c:799
#, c-format
msgid "%s,"
msgstr ""
-#: fortran/dump-parse-tree.c:832
+#: fortran/dump-parse-tree.c:831
#, c-format
msgid "!$OMP %s"
msgstr ""
-#: fortran/dump-parse-tree.c:847 fortran/dump-parse-tree.c:990
+#: fortran/dump-parse-tree.c:846 fortran/dump-parse-tree.c:989
#, c-format
msgid " (%s)"
msgstr ""
-#: fortran/dump-parse-tree.c:852
+#: fortran/dump-parse-tree.c:851
#, c-format
msgid " ("
msgstr ""
-#: fortran/dump-parse-tree.c:868
+#: fortran/dump-parse-tree.c:867
#, c-format
msgid " IF("
msgstr ""
-#: fortran/dump-parse-tree.c:874
+#: fortran/dump-parse-tree.c:873
#, c-format
msgid " NUM_THREADS("
msgstr ""
-#: fortran/dump-parse-tree.c:890
+#: fortran/dump-parse-tree.c:889
#, c-format
msgid " SCHEDULE (%s"
msgstr ""
-#: fortran/dump-parse-tree.c:910
+#: fortran/dump-parse-tree.c:909
#, c-format
msgid " DEFAULT(%s)"
msgstr ""
-#: fortran/dump-parse-tree.c:913
+#: fortran/dump-parse-tree.c:912
#, c-format
msgid " ORDERED"
msgstr ""
-#: fortran/dump-parse-tree.c:938
+#: fortran/dump-parse-tree.c:937
#, c-format
msgid " REDUCTION(%s:"
msgstr ""
-#: fortran/dump-parse-tree.c:952
+#: fortran/dump-parse-tree.c:951
#, c-format
msgid " %s("
msgstr ""
-#: fortran/dump-parse-tree.c:968
+#: fortran/dump-parse-tree.c:967
#, c-format
msgid "!$OMP SECTION\n"
msgstr ""
-#: fortran/dump-parse-tree.c:977
+#: fortran/dump-parse-tree.c:976
#, c-format
msgid "!$OMP END %s"
msgstr ""
-#: fortran/dump-parse-tree.c:982
+#: fortran/dump-parse-tree.c:981
#, c-format
msgid " COPYPRIVATE("
msgstr ""
-#: fortran/dump-parse-tree.c:987
+#: fortran/dump-parse-tree.c:986
#, c-format
msgid " NOWAIT"
msgstr ""
@@ -5688,285 +5868,290 @@ msgstr ""
msgid "CONTAINS\n"
msgstr ""
-#: fortran/error.c:137
+#: fortran/error.c:204
#, no-c-format
-msgid "In file %s:%d\n"
+msgid " Included at %s:%d:"
msgstr ""
-#: fortran/error.c:152
+#: fortran/error.c:315
#, no-c-format
-msgid " Included at %s:%d\n"
+msgid "<During initialization>\n"
msgstr ""
-#: fortran/error.c:204
+#: fortran/error.c:603
#, no-c-format
-msgid "<During initialization>\n"
+msgid "Error count reached limit of %d."
msgstr ""
-#: fortran/error.c:479 fortran/error.c:535 fortran/error.c:561
+#: fortran/error.c:622 fortran/error.c:677 fortran/error.c:714
msgid "Warning:"
msgstr ""
-#: fortran/error.c:537 fortran/error.c:611 fortran/error.c:635
+#: fortran/error.c:679 fortran/error.c:762 fortran/error.c:788
msgid "Error:"
msgstr ""
-#: fortran/error.c:656
+#: fortran/error.c:812
msgid "Fatal Error:"
msgstr ""
-#: fortran/error.c:675
+#: fortran/error.c:831
#, no-c-format
msgid "Internal Error at (1):"
msgstr ""
-#: fortran/expr.c:258
+#: fortran/expr.c:254
#, c-format
msgid "Constant expression required at %C"
msgstr ""
-#: fortran/expr.c:261
+#: fortran/expr.c:257
#, c-format
msgid "Integer expression required at %C"
msgstr ""
-#: fortran/expr.c:266
+#: fortran/expr.c:262
#, c-format
msgid "Integer value too large in expression at %C"
msgstr ""
-#: fortran/expr.c:937 fortran/expr.c:1114
+#: fortran/expr.c:925 fortran/expr.c:1082 fortran/expr.c:1133
#, no-c-format
msgid "index in dimension %d is out of bounds at %L"
msgstr ""
-#: fortran/expr.c:1553
+#: fortran/expr.c:1585
#, no-c-format
msgid "Numeric or CHARACTER operands are required in expression at %L"
msgstr ""
-#: fortran/expr.c:1573
+#: fortran/expr.c:1605
#, no-c-format
-msgid "Exponent at %L must be INTEGER for an initialization expression"
+msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L"
msgstr ""
-#: fortran/expr.c:1586
+#: fortran/expr.c:1620
#, no-c-format
msgid ""
"Concatenation operator in expression at %L must have two CHARACTER operands"
msgstr ""
-#: fortran/expr.c:1593
+#: fortran/expr.c:1627
#, no-c-format
msgid "Concat operator at %L must concatenate strings of the same kind"
msgstr ""
-#: fortran/expr.c:1603
+#: fortran/expr.c:1637
#, no-c-format
msgid ".NOT. operator in expression at %L must have a LOGICAL operand"
msgstr ""
-#: fortran/expr.c:1619
+#: fortran/expr.c:1653
#, no-c-format
msgid "LOGICAL operands are required in expression at %L"
msgstr ""
-#: fortran/expr.c:1630
+#: fortran/expr.c:1664
#, no-c-format
msgid "Only intrinsic operators can be used in expression at %L"
msgstr ""
-#: fortran/expr.c:1638
+#: fortran/expr.c:1672
#, no-c-format
msgid "Numeric operands are required in expression at %L"
msgstr ""
-#: fortran/expr.c:1702
+#: fortran/expr.c:1736
#, no-c-format
msgid "assumed character length variable '%s' in constant expression at %L"
msgstr ""
-#: fortran/expr.c:1755
+#: fortran/expr.c:1789
#, no-c-format
msgid ""
"Function '%s' in initialization expression at %L must be an intrinsic "
"function"
msgstr ""
-#: fortran/expr.c:1777
+#: fortran/expr.c:1814
#, no-c-format
msgid ""
"Parameter '%s' at %L has not been declared or is a variable, which does not "
"reduce to a constant expression"
msgstr ""
-#: fortran/expr.c:1862
+#: fortran/expr.c:1899
#, no-c-format
msgid "Initialization expression didn't reduce %C"
msgstr ""
-#: fortran/expr.c:1906
+#: fortran/expr.c:1942
#, no-c-format
msgid "Specification function '%s' at %L cannot be a statement function"
msgstr ""
-#: fortran/expr.c:1913
+#: fortran/expr.c:1949
#, no-c-format
msgid "Specification function '%s' at %L cannot be an internal function"
msgstr ""
-#: fortran/expr.c:1920
+#: fortran/expr.c:1956
#, no-c-format
msgid "Specification function '%s' at %L must be PURE"
msgstr ""
-#: fortran/expr.c:1927
+#: fortran/expr.c:1963
#, no-c-format
msgid "Specification function '%s' at %L cannot be RECURSIVE"
msgstr ""
-#: fortran/expr.c:1984
+#: fortran/expr.c:2020
#, no-c-format
msgid "Dummy argument '%s' at %L cannot be OPTIONAL"
msgstr ""
-#: fortran/expr.c:1991
+#: fortran/expr.c:2027
#, no-c-format
msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)"
msgstr ""
-#: fortran/expr.c:2011
+#: fortran/expr.c:2049
#, no-c-format
msgid "Variable '%s' cannot appear in the expression at %L"
msgstr ""
-#: fortran/expr.c:2059
+#: fortran/expr.c:2097
#, no-c-format
msgid "Expression at %L must be of INTEGER type"
msgstr ""
-#: fortran/expr.c:2065
+#: fortran/expr.c:2103
#, no-c-format
msgid "Expression at %L must be scalar"
msgstr ""
-#: fortran/expr.c:2093
+#: fortran/expr.c:2130
#, no-c-format
msgid "Incompatible ranks in %s at %L"
msgstr ""
-#: fortran/expr.c:2107
+#: fortran/expr.c:2144
#, no-c-format
msgid "different shape for %s at %L on dimension %d (%d/%d)"
msgstr ""
-#: fortran/expr.c:2140
+#: fortran/expr.c:2190 fortran/expr.c:2351
#, no-c-format
-msgid "Can't assign to INTENT(IN) variable '%s' at %L"
+msgid "Cannot assign to INTENT(IN) variable '%s' at %L"
msgstr ""
-#: fortran/expr.c:2184
+#: fortran/expr.c:2233
#, no-c-format
msgid "'%s' at %L is not a VALUE"
msgstr ""
-#: fortran/expr.c:2191
+#: fortran/expr.c:2240
#, no-c-format
msgid "Incompatible ranks %d and %d in assignment at %L"
msgstr ""
-#: fortran/expr.c:2198
+#: fortran/expr.c:2247
#, no-c-format
msgid "Variable type is UNKNOWN in assignment at %L"
msgstr ""
-#: fortran/expr.c:2205
+#: fortran/expr.c:2254
#, no-c-format
msgid "NULL appears on right-hand side in assignment at %L"
msgstr ""
-#: fortran/expr.c:2215
+#: fortran/expr.c:2264
#, no-c-format
-msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal."
+msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal"
msgstr ""
-#: fortran/expr.c:2224
+#: fortran/expr.c:2273
#, no-c-format
msgid "POINTER valued function appears on right-hand side of assignment at %L"
msgstr ""
-#: fortran/expr.c:2229
+#: fortran/expr.c:2278
msgid "Array assignment"
msgstr ""
-#: fortran/expr.c:2246
+#: fortran/expr.c:2295
#, no-c-format
msgid "Incompatible types in assignment at %L, %s to %s"
msgstr ""
-#: fortran/expr.c:2269
+#: fortran/expr.c:2320
#, no-c-format
msgid "Pointer assignment target is not a POINTER at %L"
msgstr ""
-#: fortran/expr.c:2277
+#: fortran/expr.c:2328
#, no-c-format
msgid ""
"'%s' in the pointer assignment at %L cannot be an l-value since it is a "
"procedure"
msgstr ""
-#: fortran/expr.c:2286
+#: fortran/expr.c:2358
#, no-c-format
msgid "Pointer assignment to non-POINTER at %L"
msgstr ""
-#: fortran/expr.c:2294
+#: fortran/expr.c:2366
#, no-c-format
msgid "Bad pointer object in PURE procedure at %L"
msgstr ""
-#: fortran/expr.c:2307
+#: fortran/expr.c:2378
#, no-c-format
msgid "Different types in pointer assignment at %L"
msgstr ""
-#: fortran/expr.c:2314
+#: fortran/expr.c:2385
#, no-c-format
msgid "Different kind type parameters in pointer assignment at %L"
msgstr ""
-#: fortran/expr.c:2321
+#: fortran/expr.c:2392
#, no-c-format
msgid "Different ranks in pointer assignment at %L"
msgstr ""
-#: fortran/expr.c:2335
+#: fortran/expr.c:2406
#, no-c-format
msgid "Different character lengths in pointer assignment at %L"
msgstr ""
-#: fortran/expr.c:2343
+#: fortran/expr.c:2414
#, no-c-format
msgid "Pointer assignment target is neither TARGET nor POINTER at %L"
msgstr ""
-#: fortran/expr.c:2350
+#: fortran/expr.c:2421
#, no-c-format
msgid "Bad target in pointer assignment in PURE procedure at %L"
msgstr ""
-#: fortran/expr.c:2356
+#: fortran/expr.c:2427
#, no-c-format
msgid "Pointer assignment with vector subscript on rhs at %L"
msgstr ""
-#: fortran/gfortranspec.c:230
+#: fortran/expr.c:2434
+#, no-c-format
+msgid "Pointer assigment target has PROTECTED attribute at %L"
+msgstr ""
+
+#: fortran/gfortranspec.c:231
#, c-format
msgid "overflowed output arg list for '%s'"
msgstr ""
-#: fortran/gfortranspec.c:350
+#: fortran/gfortranspec.c:351
#, c-format
msgid ""
"GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n"
@@ -5976,677 +6161,741 @@ msgid ""
"\n"
msgstr ""
-#: fortran/gfortranspec.c:372
+#: fortran/gfortranspec.c:373
#, c-format
msgid "argument to '%s' missing"
msgstr ""
-#: fortran/gfortranspec.c:376
+#: fortran/gfortranspec.c:377
#, c-format
msgid "no input files; unwilling to write output files"
msgstr ""
-#: fortran/gfortranspec.c:528
+#: fortran/gfortranspec.c:529
#, c-format
msgid "Driving:"
msgstr ""
-#: fortran/interface.c:175
+#: fortran/interface.c:174
#, no-c-format
msgid "Syntax error in generic specification at %C"
msgstr ""
-#: fortran/interface.c:204
+#: fortran/interface.c:200
#, no-c-format
msgid "Syntax error: Trailing garbage in INTERFACE statement at %C"
msgstr ""
-#: fortran/interface.c:222
+#: fortran/interface.c:219
#, no-c-format
msgid "Dummy procedure '%s' at %C cannot have a generic interface"
msgstr ""
-#: fortran/interface.c:269
+#: fortran/interface.c:264
#, no-c-format
msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C"
msgstr ""
-#: fortran/interface.c:280
+#: fortran/interface.c:276
#, no-c-format
msgid "Expected a nameless interface at %C"
msgstr ""
-#: fortran/interface.c:291
+#: fortran/interface.c:287
#, no-c-format
msgid "Expected 'END INTERFACE ASSIGNMENT (=)' at %C"
msgstr ""
-#: fortran/interface.c:293
+#: fortran/interface.c:289
#, no-c-format
msgid "Expecting 'END INTERFACE OPERATOR (%s)' at %C"
msgstr ""
-#: fortran/interface.c:307
+#: fortran/interface.c:303
#, no-c-format
msgid "Expecting 'END INTERFACE OPERATOR (.%s.)' at %C"
msgstr ""
-#: fortran/interface.c:318
+#: fortran/interface.c:314
#, no-c-format
msgid "Expecting 'END INTERFACE %s' at %C"
msgstr ""
-#: fortran/interface.c:511
+#: fortran/interface.c:510
#, no-c-format
msgid "Alternate return cannot appear in operator interface at %L"
msgstr ""
-#: fortran/interface.c:538
+#: fortran/interface.c:536
#, no-c-format
msgid "Assignment operator interface at %L must be a SUBROUTINE"
msgstr ""
-#: fortran/interface.c:545
+#: fortran/interface.c:542
#, no-c-format
msgid "Assignment operator interface at %L must have two arguments"
msgstr ""
-#: fortran/interface.c:556
+#: fortran/interface.c:552
#, no-c-format
msgid ""
"Assignment operator interface at %L must not redefine an INTRINSIC type "
"assignment"
msgstr ""
-#: fortran/interface.c:565
+#: fortran/interface.c:561
#, no-c-format
msgid "Intrinsic operator interface at %L must be a FUNCTION"
msgstr ""
-#: fortran/interface.c:652
+#: fortran/interface.c:646
#, no-c-format
msgid ""
"First argument of defined assignment at %L must be INTENT(IN) or INTENT"
"(INOUT)"
msgstr ""
-#: fortran/interface.c:656
+#: fortran/interface.c:650
#, no-c-format
msgid "Second argument of defined assignment at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:662 fortran/resolve.c:6916
+#: fortran/interface.c:656 fortran/resolve.c:7211
#, no-c-format
msgid "First argument of operator interface at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:666 fortran/resolve.c:6928
+#: fortran/interface.c:660 fortran/resolve.c:7223
#, no-c-format
msgid "Second argument of operator interface at %L must be INTENT(IN)"
msgstr ""
-#: fortran/interface.c:673
+#: fortran/interface.c:667
#, no-c-format
msgid "Operator interface at %L conflicts with intrinsic interface"
msgstr ""
-#: fortran/interface.c:678
+#: fortran/interface.c:672
#, no-c-format
msgid "Operator interface at %L has the wrong number of arguments"
msgstr ""
-#: fortran/interface.c:927
+#: fortran/interface.c:920
#, no-c-format
msgid "Procedure '%s' in %s at %L is neither function nor subroutine"
msgstr ""
-#: fortran/interface.c:981
+#: fortran/interface.c:976 fortran/interface.c:982
#, no-c-format
msgid "Ambiguous interfaces '%s' and '%s' in %s at %L"
msgstr ""
-#: fortran/interface.c:1253
+#: fortran/interface.c:1017
+#, no-c-format
+msgid "MODULE PROCEDURE '%s' at %L does not come from a module"
+msgstr ""
+
+#: fortran/interface.c:1289
#, no-c-format
msgid "Keyword argument '%s' at %L is not in the procedure"
msgstr ""
-#: fortran/interface.c:1262
+#: fortran/interface.c:1297
#, no-c-format
msgid ""
"Keyword argument '%s' at %L is already associated with another actual "
"argument"
msgstr ""
-#: fortran/interface.c:1272
+#: fortran/interface.c:1307
#, no-c-format
msgid "More actual than formal arguments in procedure call at %L"
msgstr ""
-#: fortran/interface.c:1285
+#: fortran/interface.c:1319 fortran/interface.c:1484
#, no-c-format
msgid "Missing alternate return spec in subroutine call at %L"
msgstr ""
-#: fortran/interface.c:1294
+#: fortran/interface.c:1327
#, no-c-format
msgid "Unexpected alternate return spec in subroutine call at %L"
msgstr ""
-#: fortran/interface.c:1309
+#: fortran/interface.c:1340
#, no-c-format
msgid "Type/rank mismatch in argument '%s' at %L"
msgstr ""
-#: fortran/interface.c:1326
+#: fortran/interface.c:1352
#, no-c-format
msgid "Expected a procedure for argument '%s' at %L"
msgstr ""
-#: fortran/interface.c:1338
+#: fortran/interface.c:1362
#, no-c-format
msgid "Expected a PURE procedure for argument '%s' at %L"
msgstr ""
-#: fortran/interface.c:1353
+#: fortran/interface.c:1376
#, no-c-format
msgid "Actual argument for '%s' cannot be an assumed-size array at %L"
msgstr ""
-#: fortran/interface.c:1362
+#: fortran/interface.c:1385
#, no-c-format
msgid "Actual argument for '%s' must be a pointer at %L"
msgstr ""
-#: fortran/interface.c:1371
+#: fortran/interface.c:1394
#, no-c-format
msgid "Actual argument for '%s' must be ALLOCATABLE at %L"
msgstr ""
-#: fortran/interface.c:1381
+#: fortran/interface.c:1405
#, no-c-format
msgid ""
"Actual argument at %L must be definable to match dummy INTENT = OUT/INOUT"
msgstr ""
-#: fortran/interface.c:1402
+#: fortran/interface.c:1413
+#, no-c-format
+msgid ""
+"Actual argument at %L is use-associated with PROTECTED attribute and dummy "
+"argument '%s' is INTENT = OUT/INOUT"
+msgstr ""
+
+#: fortran/interface.c:1430
+#, no-c-format
+msgid ""
+"Assumed-shape actual argument at %L is incompatible with the non-assumed-"
+"shape dummy argument '%s' due to VOLATILE attribute"
+msgstr ""
+
+#: fortran/interface.c:1442
+#, no-c-format
+msgid ""
+"Array-section actual argument at %L is incompatible with the non-assumed-"
+"shape dummy argument '%s' due to VOLATILE attribute"
+msgstr ""
+
+#: fortran/interface.c:1461
+#, no-c-format
+msgid ""
+"Pointer-array actual argument at %L requires an assumed-shape or pointer-"
+"array dummy argument '%s' due to VOLATILE attribute"
+msgstr ""
+
+#: fortran/interface.c:1491
#, no-c-format
msgid "Missing actual argument for argument '%s' at %L"
msgstr ""
-#: fortran/interface.c:1587
+#: fortran/interface.c:1677
#, no-c-format
msgid ""
"Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) "
"argument '%s' at %L"
msgstr ""
-#: fortran/interface.c:1628
+#: fortran/interface.c:1733
#, no-c-format
msgid ""
"Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)"
msgstr ""
-#: fortran/interface.c:1639
+#: fortran/interface.c:1743
#, no-c-format
msgid ""
"Procedure argument at %L is local to a PURE procedure and is passed to an "
"INTENT(%s) argument"
msgstr ""
-#: fortran/interface.c:1648
+#: fortran/interface.c:1751
#, no-c-format
msgid ""
"Procedure argument at %L is local to a PURE procedure and has the POINTER "
"attribute"
msgstr ""
-#: fortran/interface.c:1670
+#: fortran/interface.c:1774
#, no-c-format
msgid "Procedure '%s' called with an implicit interface at %L"
msgstr ""
-#: fortran/interface.c:1837
+#: fortran/interface.c:1940
#, no-c-format
msgid "Function '%s' called in lieu of an operator at %L must be PURE"
msgstr ""
-#: fortran/interface.c:1917
+#: fortran/interface.c:2019
#, no-c-format
msgid "Entity '%s' at %C is already present in the interface"
msgstr ""
-#: fortran/intrinsic.c:2856
+#: fortran/intrinsic.c:2847
#, no-c-format
msgid "Too many arguments in call to '%s' at %L"
msgstr ""
-#: fortran/intrinsic.c:2870
+#: fortran/intrinsic.c:2862
+#, no-c-format
+msgid "Argument list function at %L is not allowed in this context"
+msgstr ""
+
+#: fortran/intrinsic.c:2865
#, no-c-format
msgid "Can't find keyword named '%s' in call to '%s' at %L"
msgstr ""
-#: fortran/intrinsic.c:2877
+#: fortran/intrinsic.c:2872
#, no-c-format
msgid "Argument '%s' is appears twice in call to '%s' at %L"
msgstr ""
-#: fortran/intrinsic.c:2891
+#: fortran/intrinsic.c:2886
#, no-c-format
msgid "Missing actual argument '%s' in call to '%s' at %L"
msgstr ""
+#: fortran/intrinsic.c:2901
+#, no-c-format
+msgid "ALTERNATE RETURN not permitted at %L"
+msgstr ""
+
#: fortran/intrinsic.c:2950
#, no-c-format
msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s"
msgstr ""
-#: fortran/intrinsic.c:3254
+#: fortran/intrinsic.c:3253
#, no-c-format
msgid "Ranks of arguments to elemental intrinsic '%s' differ at %L"
msgstr ""
-#: fortran/intrinsic.c:3300
+#: fortran/intrinsic.c:3299
#, no-c-format
msgid "Intrinsic '%s' at %L is not included in the selected standard"
msgstr ""
-#: fortran/intrinsic.c:3403
+#: fortran/intrinsic.c:3401
#, no-c-format
msgid "Extension: Evaluation of nonstandard initialization expression at %L"
msgstr ""
-#: fortran/intrinsic.c:3463
+#: fortran/intrinsic.c:3461
#, no-c-format
msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
msgstr ""
-#: fortran/intrinsic.c:3538
+#: fortran/intrinsic.c:3533
#, no-c-format
msgid "Extension: Conversion from %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:3541
+#: fortran/intrinsic.c:3536
#, no-c-format
msgid "Conversion from %s to %s at %L"
msgstr ""
-#: fortran/intrinsic.c:3589
+#: fortran/intrinsic.c:3584
#, no-c-format
msgid "Can't convert %s to %s at %L"
msgstr ""
-#: fortran/io.c:417
+#: fortran/io.c:180 fortran/primary.c:769
+#, no-c-format
+msgid "Extension: backslash character at %C"
+msgstr ""
+
+#: fortran/io.c:457
msgid "Positive width required"
msgstr ""
-#: fortran/io.c:418
+#: fortran/io.c:458
msgid "Nonnegative width required"
msgstr ""
-#: fortran/io.c:419
+#: fortran/io.c:459
msgid "Unexpected element"
msgstr ""
-#: fortran/io.c:420
+#: fortran/io.c:460
msgid "Unexpected end of format string"
msgstr ""
-#: fortran/io.c:437
+#: fortran/io.c:477
msgid "Missing leading left parenthesis"
msgstr ""
-#: fortran/io.c:475
+#: fortran/io.c:515
msgid "Expected P edit descriptor"
msgstr ""
#. P requires a prior number.
-#: fortran/io.c:483
+#: fortran/io.c:523
msgid "P descriptor requires leading scale factor"
msgstr ""
#. X requires a prior number if we're being pedantic.
-#: fortran/io.c:488
+#: fortran/io.c:528
#, no-c-format
msgid "Extension: X descriptor requires leading space count at %C"
msgstr ""
-#: fortran/io.c:508
+#: fortran/io.c:548
#, no-c-format
msgid "Extension: $ descriptor at %C"
msgstr ""
-#: fortran/io.c:513
-msgid "$ must be the last specifier"
+#: fortran/io.c:553
+#, no-c-format
+msgid "$ should be the last specifier in format at %C"
msgstr ""
-#: fortran/io.c:558
+#: fortran/io.c:598
msgid "Repeat count cannot follow P descriptor"
msgstr ""
-#: fortran/io.c:577
+#: fortran/io.c:616
#, no-c-format
msgid "Extension: Missing positive width after L descriptor at %C"
msgstr ""
-#: fortran/io.c:616 fortran/io.c:618 fortran/io.c:664 fortran/io.c:666
+#: fortran/io.c:656 fortran/io.c:658 fortran/io.c:704 fortran/io.c:706
#, no-c-format
msgid "Period required in format specifier at %C"
msgstr ""
-#: fortran/io.c:644
+#: fortran/io.c:684
msgid "Positive exponent width required"
msgstr ""
-#: fortran/io.c:750 fortran/io.c:802
+#: fortran/io.c:790 fortran/io.c:843
#, no-c-format
msgid "Extension: Missing comma at %C"
msgstr ""
-#: fortran/io.c:817 fortran/io.c:820
+#: fortran/io.c:858 fortran/io.c:861
#, no-c-format
msgid "%s in format string at %C"
msgstr ""
-#: fortran/io.c:861
+#: fortran/io.c:901
#, no-c-format
-msgid "Format statement in module main block at %C."
+msgid "Format statement in module main block at %C"
msgstr ""
-#: fortran/io.c:867
+#: fortran/io.c:907
#, no-c-format
msgid "Missing format label at %C"
msgstr ""
-#: fortran/io.c:925 fortran/io.c:949
+#: fortran/io.c:965 fortran/io.c:989
#, no-c-format
msgid "Duplicate %s specification at %C"
msgstr ""
-#: fortran/io.c:956
+#: fortran/io.c:996
#, no-c-format
msgid "Variable tag cannot be INTENT(IN) at %C"
msgstr ""
-#: fortran/io.c:963
+#: fortran/io.c:1003
#, no-c-format
msgid "Variable tag cannot be assigned in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:1000
+#: fortran/io.c:1040
#, no-c-format
msgid "Duplicate %s label specification at %C"
msgstr ""
-#: fortran/io.c:1026
+#: fortran/io.c:1065
#, no-c-format
msgid "%s tag at %L must be of type %s"
msgstr ""
-#: fortran/io.c:1037
+#: fortran/io.c:1076
#, no-c-format
msgid ""
"Constant expression in FORMAT tag at %L must be of type default CHARACTER"
msgstr ""
-#: fortran/io.c:1050
+#: fortran/io.c:1089
#, no-c-format
msgid "%s tag at %L must be of type %s or %s"
msgstr ""
-#: fortran/io.c:1058
+#: fortran/io.c:1096
#, no-c-format
msgid "Obsolete: ASSIGNED variable in FORMAT tag at %L"
msgstr ""
-#: fortran/io.c:1063
+#: fortran/io.c:1102
#, no-c-format
msgid "Variable '%s' at %L has not been assigned a format label"
msgstr ""
-#: fortran/io.c:1070
+#: fortran/io.c:1110
#, no-c-format
msgid "scalar '%s' FORMAT tag at %L is not an ASSIGNED variable"
msgstr ""
-#: fortran/io.c:1085
+#: fortran/io.c:1125
#, no-c-format
msgid "Extension: Character array in FORMAT tag at %L"
msgstr ""
-#: fortran/io.c:1092
+#: fortran/io.c:1132
#, no-c-format
msgid "Extension: Non-character in FORMAT tag at %L"
msgstr ""
-#: fortran/io.c:1103
+#: fortran/io.c:1144
#, no-c-format
msgid "%s tag at %L must be scalar"
msgstr ""
-#: fortran/io.c:1109
+#: fortran/io.c:1150
#, no-c-format
msgid "Fortran 2003: IOMSG tag at %L"
msgstr ""
-#: fortran/io.c:1116
+#: fortran/io.c:1157
#, no-c-format
msgid "Fortran 95 requires default INTEGER in IOSTAT tag at %L"
msgstr ""
-#: fortran/io.c:1124
+#: fortran/io.c:1165
#, no-c-format
msgid "Fortran 95 requires default INTEGER in SIZE tag at %L"
msgstr ""
-#: fortran/io.c:1132
+#: fortran/io.c:1173
#, no-c-format
msgid "Extension: CONVERT tag at %L"
msgstr ""
-#: fortran/io.c:1291 fortran/io.c:1299
+#: fortran/io.c:1180
+#, no-c-format
+msgid "Fortran 95 requires default INTEGER in IOLENGTH tag at %L"
+msgstr ""
+
+#: fortran/io.c:1338 fortran/io.c:1346
#, no-c-format
msgid "Fortran 2003: %s specifier in %s statement at %C has value '%s'"
msgstr ""
-#: fortran/io.c:1317 fortran/io.c:1325
+#: fortran/io.c:1364 fortran/io.c:1372
#, no-c-format
msgid "Extension: %s specifier in %s statement at %C has value '%s'"
msgstr ""
-#: fortran/io.c:1337 fortran/io.c:1343
+#: fortran/io.c:1384 fortran/io.c:1390
#, no-c-format
msgid "%s specifier in %s statement at %C has invalid value '%s'"
msgstr ""
-#: fortran/io.c:1396
+#: fortran/io.c:1444
#, no-c-format
msgid "OPEN statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:1739
+#: fortran/io.c:1789
#, no-c-format
msgid "CLOSE statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:1878 fortran/match.c:1497
+#: fortran/io.c:1926 fortran/match.c:1500
#, no-c-format
msgid "%s statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:1938
+#: fortran/io.c:1982
#, no-c-format
msgid "Fortran 2003: FLUSH statement at %C"
msgstr ""
-#: fortran/io.c:1998
+#: fortran/io.c:2043
#, no-c-format
msgid "Duplicate UNIT specification at %C"
msgstr ""
-#: fortran/io.c:2054
+#: fortran/io.c:2099
#, no-c-format
msgid "Duplicate format specification at %C"
msgstr ""
-#: fortran/io.c:2071
+#: fortran/io.c:2116
#, no-c-format
msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C"
msgstr ""
-#: fortran/io.c:2107
+#: fortran/io.c:2152
#, no-c-format
msgid "Duplicate NML specification at %C"
msgstr ""
-#: fortran/io.c:2116
+#: fortran/io.c:2161
#, no-c-format
msgid "Symbol '%s' at %C must be a NAMELIST group name"
msgstr ""
-#: fortran/io.c:2157
+#: fortran/io.c:2202
#, no-c-format
msgid "END tag at %C not allowed in output statement"
msgstr ""
-#: fortran/io.c:2218
+#: fortran/io.c:2259
#, no-c-format
msgid ""
"UNIT specification at %L must be an INTEGER expression or a CHARACTER "
"variable"
msgstr ""
-#: fortran/io.c:2227
+#: fortran/io.c:2268
#, no-c-format
msgid "Internal unit with vector subscript at %L"
msgstr ""
-#: fortran/io.c:2235
+#: fortran/io.c:2275
#, no-c-format
msgid "External IO UNIT cannot be an array at %L"
msgstr ""
-#: fortran/io.c:2245
+#: fortran/io.c:2285
#, no-c-format
msgid "ERR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:2257
+#: fortran/io.c:2297
#, no-c-format
msgid "END tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:2269
+#: fortran/io.c:2309
#, no-c-format
msgid "EOR tag label %d at %L not defined"
msgstr ""
-#: fortran/io.c:2279
+#: fortran/io.c:2319
#, no-c-format
msgid "FORMAT label %d at %L not defined"
msgstr ""
-#: fortran/io.c:2400
+#: fortran/io.c:2440
#, no-c-format
msgid "Syntax error in I/O iterator at %C"
msgstr ""
-#: fortran/io.c:2431
+#: fortran/io.c:2471
#, no-c-format
msgid "Expected variable in READ statement at %C"
msgstr ""
-#: fortran/io.c:2437
+#: fortran/io.c:2477
#, no-c-format
msgid "Expected expression in %s statement at %C"
msgstr ""
-#: fortran/io.c:2448
+#: fortran/io.c:2487
#, no-c-format
msgid "Variable '%s' in input list at %C cannot be INTENT(IN)"
msgstr ""
-#: fortran/io.c:2457
+#: fortran/io.c:2496
#, no-c-format
msgid "Cannot read to variable '%s' in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:2474
+#: fortran/io.c:2512
#, no-c-format
msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure"
msgstr ""
#. A general purpose syntax error.
-#: fortran/io.c:2534 fortran/io.c:2935 fortran/gfortran.h:1801
+#: fortran/io.c:2573 fortran/io.c:2975 fortran/gfortran.h:1815
#, no-c-format
msgid "Syntax error in %s statement at %C"
msgstr ""
-#: fortran/io.c:2762
+#: fortran/io.c:2641
+#, no-c-format
+msgid "Fortran 2003: Internal file at %L with namelist"
+msgstr ""
+
+#: fortran/io.c:2803
#, no-c-format
msgid "PRINT namelist at %C is an extension"
msgstr ""
-#: fortran/io.c:2896
+#: fortran/io.c:2936
#, no-c-format
msgid "Extension: Comma before output item list at %C is an extension"
msgstr ""
-#: fortran/io.c:2905
+#: fortran/io.c:2945
#, no-c-format
msgid "Expected comma in I/O list at %C"
msgstr ""
-#: fortran/io.c:2967
+#: fortran/io.c:3007
#, no-c-format
msgid "PRINT statement at %C not allowed within PURE procedure"
msgstr ""
-#: fortran/io.c:3108 fortran/io.c:3159
+#: fortran/io.c:3147 fortran/io.c:3198
#, no-c-format
msgid "INQUIRE statement not allowed in PURE procedure at %C"
msgstr ""
-#: fortran/io.c:3135
+#: fortran/io.c:3174
#, no-c-format
msgid "IOLENGTH tag invalid in INQUIRE statement at %C"
msgstr ""
-#: fortran/io.c:3145
+#: fortran/io.c:3184 fortran/trans-io.c:1008
#, no-c-format
msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers"
msgstr ""
-#: fortran/io.c:3152
+#: fortran/io.c:3191
#, no-c-format
msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
msgstr ""
-#: fortran/match.c:181
+#: fortran/match.c:180
#, no-c-format
msgid "Integer too large at %C"
msgstr ""
-#: fortran/match.c:242 fortran/parse.c:431
+#: fortran/match.c:241 fortran/parse.c:437
#, no-c-format
msgid "Too many digits in statement label at %C"
msgstr ""
-#: fortran/match.c:248
+#: fortran/match.c:247
#, no-c-format
msgid "Statement label at %C is zero"
msgstr ""
-#: fortran/match.c:281
+#: fortran/match.c:280
#, no-c-format
msgid "Label name '%s' at %C is ambiguous"
msgstr ""
-#: fortran/match.c:287
+#: fortran/match.c:286
#, no-c-format
msgid "Duplicate construct label '%s' at %C"
msgstr ""
-#: fortran/match.c:411
+#: fortran/match.c:400
+#, no-c-format
+msgid "Invalid character in name at %C"
+msgstr ""
+
+#: fortran/match.c:413
#, no-c-format
msgid "Name at %C is too long"
msgstr ""
@@ -6661,107 +6910,112 @@ msgstr ""
msgid "Loop variable '%s' at %C cannot be INTENT(IN)"
msgstr ""
-#: fortran/match.c:541
-#, no-c-format
-msgid "Loop variable at %C cannot have the POINTER attribute"
-msgstr ""
-
-#: fortran/match.c:571
+#: fortran/match.c:565
#, no-c-format
msgid "Expected a step value in iterator at %C"
msgstr ""
-#: fortran/match.c:583
+#: fortran/match.c:577
#, no-c-format
msgid "Syntax error in iterator at %C"
msgstr ""
-#: fortran/match.c:819
+#: fortran/match.c:813
#, no-c-format
msgid "Invalid form of PROGRAM statement at %C"
msgstr ""
-#: fortran/match.c:939 fortran/match.c:1015
+#: fortran/match.c:854
+#, no-c-format
+msgid "Setting value of PROTECTED variable at %C"
+msgstr ""
+
+#: fortran/match.c:907
#, no-c-format
-msgid "Obsolete: arithmetic IF statement at %C"
+msgid "Assigning to a PROTECTED pointer at %C"
msgstr ""
-#: fortran/match.c:986
+#: fortran/match.c:951 fortran/match.c:1024
+#, no-c-format
+msgid "Obsolescent: arithmetic IF statement at %C"
+msgstr ""
+
+#: fortran/match.c:999
#, no-c-format
msgid "Syntax error in IF-expression at %C"
msgstr ""
-#: fortran/match.c:998
+#: fortran/match.c:1010
#, no-c-format
msgid "Block label not appropriate for arithmetic IF statement at %C"
msgstr ""
-#: fortran/match.c:1040
+#: fortran/match.c:1048
#, no-c-format
msgid "Block label is not appropriate IF statement at %C"
msgstr ""
-#: fortran/match.c:1120 fortran/primary.c:2326
+#: fortran/match.c:1127 fortran/primary.c:2410
#, no-c-format
msgid "Cannot assign to a named constant at %C"
msgstr ""
-#: fortran/match.c:1130
+#: fortran/match.c:1137
#, no-c-format
msgid "Unclassifiable statement in IF-clause at %C"
msgstr ""
-#: fortran/match.c:1137
+#: fortran/match.c:1144
#, no-c-format
msgid "Syntax error in IF-clause at %C"
msgstr ""
-#: fortran/match.c:1181
+#: fortran/match.c:1188
#, no-c-format
msgid "Unexpected junk after ELSE statement at %C"
msgstr ""
-#: fortran/match.c:1187 fortran/match.c:1222
+#: fortran/match.c:1194 fortran/match.c:1229
#, no-c-format
msgid "Label '%s' at %C doesn't match IF label '%s'"
msgstr ""
-#: fortran/match.c:1216
+#: fortran/match.c:1223
#, no-c-format
msgid "Unexpected junk after ELSE IF statement at %C"
msgstr ""
-#: fortran/match.c:1379
+#: fortran/match.c:1384
#, no-c-format
msgid "Name '%s' in %s statement at %C is not a loop name"
msgstr ""
-#: fortran/match.c:1396
+#: fortran/match.c:1401
#, no-c-format
msgid "%s statement at %C is not within a loop"
msgstr ""
-#: fortran/match.c:1399
+#: fortran/match.c:1404
#, no-c-format
msgid "%s statement at %C is not within loop '%s'"
msgstr ""
-#: fortran/match.c:1407
+#: fortran/match.c:1412
#, no-c-format
msgid "%s statement at %C leaving OpenMP structured block"
msgstr ""
-#: fortran/match.c:1420
+#: fortran/match.c:1425
#, no-c-format
msgid "EXIT statement at %C terminating !$OMP DO loop"
msgstr ""
-#: fortran/match.c:1475
+#: fortran/match.c:1478
#, no-c-format
msgid "Too many digits in STOP code at %C"
msgstr ""
-#: fortran/match.c:1528
+#: fortran/match.c:1530
#, no-c-format
msgid "Obsolete: PAUSE statement at %C"
msgstr ""
@@ -6786,62 +7040,67 @@ msgstr ""
msgid "Bad allocate-object in ALLOCATE statement at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:1829
+#: fortran/match.c:1828
#, no-c-format
msgid "STAT variable '%s' of ALLOCATE statement at %C cannot be INTENT(IN)"
msgstr ""
-#: fortran/match.c:1837
+#: fortran/match.c:1835
#, no-c-format
msgid "Illegal STAT variable in ALLOCATE statement at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:1844 fortran/match.c:2010
+#: fortran/match.c:1842 fortran/match.c:2006
#, no-c-format
msgid "STAT expression at %C must be a variable"
msgstr ""
-#: fortran/match.c:1899
+#: fortran/match.c:1896
#, no-c-format
msgid "Illegal variable in NULLIFY at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:1977
+#: fortran/match.c:1973
#, no-c-format
msgid "Illegal deallocate-expression in DEALLOCATE at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:1996
+#: fortran/match.c:1992
#, no-c-format
msgid "STAT variable '%s' of DEALLOCATE statement at %C cannot be INTENT(IN)"
msgstr ""
-#: fortran/match.c:2003
+#: fortran/match.c:1999
#, no-c-format
msgid ""
"Illegal STAT variable in DEALLOCATE statement at %C for a PURE procedure"
msgstr ""
-#: fortran/match.c:2052
+#: fortran/match.c:2048
#, no-c-format
msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
msgstr ""
-#: fortran/match.c:2083
+#: fortran/match.c:2079
#, no-c-format
msgid "Extension: RETURN statement in main program at %C"
msgstr ""
-#: fortran/match.c:2278
+#: fortran/match.c:2274
#, no-c-format
msgid "Syntax error in common block name at %C"
msgstr ""
-#: fortran/match.c:2314
+#: fortran/match.c:2310
#, no-c-format
msgid "Symbol '%s' at %C is already an external symbol that is not COMMON"
msgstr ""
+#: fortran/match.c:2328
+#, no-c-format
+msgid "BLOCK DATA unit cannot contain blank COMMON at %C"
+msgstr ""
+
#: fortran/match.c:2361
#, no-c-format
msgid "Symbol '%s' at %C is already in a COMMON block"
@@ -6857,52 +7116,57 @@ msgstr ""
msgid "Previously initialized symbol '%s' in COMMON block '%s' at %C"
msgstr ""
-#: fortran/match.c:2388
+#: fortran/match.c:2387
#, no-c-format
msgid ""
"Derived type variable in COMMON at %C does not have the SEQUENCE attribute"
msgstr ""
-#: fortran/match.c:2411
+#: fortran/match.c:2409
#, no-c-format
msgid "Array specification for symbol '%s' in COMMON at %C must be explicit"
msgstr ""
-#: fortran/match.c:2422
+#: fortran/match.c:2419
#, no-c-format
msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array"
msgstr ""
-#: fortran/match.c:2454
+#: fortran/match.c:2451
#, no-c-format
msgid ""
"Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to "
"another COMMON block '%s'"
msgstr ""
-#: fortran/match.c:2564
+#: fortran/match.c:2559
#, no-c-format
msgid "Namelist group name '%s' at %C already has a basic type of %s"
msgstr ""
-#: fortran/match.c:2571
+#: fortran/match.c:2567
#, no-c-format
msgid ""
"Namelist group name '%s' at %C already is USE associated and cannot be "
"respecified."
msgstr ""
-#: fortran/match.c:2598
+#: fortran/match.c:2594
+#, no-c-format
+msgid "Assumed size array '%s' in namelist '%s' at %C is not allowed"
+msgstr ""
+
+#: fortran/match.c:2601
#, no-c-format
-msgid "Assumed size array '%s' in namelist '%s'at %C is not allowed."
+msgid "Assumed character length '%s' in namelist '%s' at %C is not allowed"
msgstr ""
-#: fortran/match.c:2604
+#: fortran/match.c:2607
#, no-c-format
msgid "Assumed shape array '%s' in namelist '%s' at %C is an extension."
msgstr ""
-#: fortran/match.c:2733
+#: fortran/match.c:2734
#, no-c-format
msgid "Derived type component %C is not a permitted EQUIVALENCE member"
msgstr ""
@@ -6912,73 +7176,73 @@ msgstr ""
msgid "Array reference in EQUIVALENCE at %C cannot be an array section"
msgstr ""
-#: fortran/match.c:2771
+#: fortran/match.c:2770
#, no-c-format
msgid "EQUIVALENCE at %C requires two or more objects"
msgstr ""
-#: fortran/match.c:2785
+#: fortran/match.c:2784
#, no-c-format
msgid ""
"Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C"
msgstr ""
-#: fortran/match.c:2947
+#: fortran/match.c:2945
#, no-c-format
msgid "Statement function at %L is recursive"
msgstr ""
-#: fortran/match.c:3037
+#: fortran/match.c:3033
#, no-c-format
msgid "Expected initialization expression in CASE at %C"
msgstr ""
-#: fortran/match.c:3060
+#: fortran/match.c:3056
#, no-c-format
msgid "Expected the name of the select case construct at %C"
msgstr ""
-#: fortran/match.c:3072
+#: fortran/match.c:3068
#, no-c-format
msgid "Expected case name of '%s' at %C"
msgstr ""
-#: fortran/match.c:3116
+#: fortran/match.c:3112
#, no-c-format
msgid "Unexpected CASE statement at %C"
msgstr ""
-#: fortran/match.c:3168
+#: fortran/match.c:3164
#, no-c-format
msgid "Syntax error in CASE-specification at %C"
msgstr ""
-#: fortran/match.c:3288
+#: fortran/match.c:3283
#, no-c-format
msgid "ELSEWHERE statement at %C not enclosed in WHERE block"
msgstr ""
-#: fortran/match.c:3319
+#: fortran/match.c:3314
#, no-c-format
msgid "Label '%s' at %C doesn't match WHERE label '%s'"
msgstr ""
-#: fortran/match.c:3417
+#: fortran/match.c:3414
#, no-c-format
msgid "Syntax error in FORALL iterator at %C"
msgstr ""
-#: fortran/matchexp.c:30
+#: fortran/matchexp.c:29
#, c-format
msgid "Syntax error in expression at %C"
msgstr ""
-#: fortran/matchexp.c:74
+#: fortran/matchexp.c:73
#, no-c-format
msgid "Bad character '%c' in OPERATOR name at %C"
msgstr ""
-#: fortran/matchexp.c:82
+#: fortran/matchexp.c:81
#, no-c-format
msgid "The name '%s' cannot be used as a defined operator at %C"
msgstr ""
@@ -6988,170 +7252,248 @@ msgstr ""
msgid "Expected a right parenthesis in expression at %C"
msgstr ""
-#: fortran/matchexp.c:312
+#: fortran/matchexp.c:310
#, no-c-format
msgid "Expected exponent in expression at %C"
msgstr ""
-#: fortran/matchexp.c:348 fortran/matchexp.c:452
+#: fortran/matchexp.c:346 fortran/matchexp.c:450
#, no-c-format
msgid ""
"Extension: Unary operator following arithmetic operator (use parentheses) at "
"%C"
msgstr ""
-#: fortran/misc.c:42
+#: fortran/misc.c:40
#, no-c-format
msgid "Out of memory-- malloc() failed"
msgstr ""
-#: fortran/module.c:532
+#: fortran/module.c:502
+#, no-c-format
+msgid "Fortran 2003: module nature in USE statement at %C"
+msgstr ""
+
+#: fortran/module.c:514
+#, no-c-format
+msgid ""
+"Module nature in USE statement at %C shall be either INTRINSIC or "
+"NON_INTRINSIC"
+msgstr ""
+
+#: fortran/module.c:527
+#, no-c-format
+msgid "\"::\" was expected after module nature at %C but was not found"
+msgstr ""
+
+#: fortran/module.c:536
+#, no-c-format
+msgid "Fortran 2003: \"USE :: module\" at %C"
+msgstr ""
+
+#: fortran/module.c:588
#, no-c-format
msgid "Missing generic specification in USE statement at %C"
msgstr ""
-#: fortran/module.c:840
+#: fortran/module.c:893
#, no-c-format
msgid "Reading module %s at line %d column %d: %s"
msgstr ""
-#: fortran/module.c:844
+#: fortran/module.c:897
#, no-c-format
msgid "Writing module %s at line %d column %d: %s"
msgstr ""
-#: fortran/module.c:848
+#: fortran/module.c:901
#, no-c-format
msgid "Module %s at line %d column %d: %s"
msgstr ""
-#: fortran/module.c:890
+#: fortran/module.c:941
msgid "Unexpected EOF"
msgstr ""
-#: fortran/module.c:922
+#: fortran/module.c:973
msgid "Unexpected end of module in string constant"
msgstr ""
-#: fortran/module.c:976
+#: fortran/module.c:1027
msgid "Integer overflow"
msgstr ""
-#: fortran/module.c:1007
+#: fortran/module.c:1058
msgid "Name too long"
msgstr ""
-#: fortran/module.c:1114
+#: fortran/module.c:1165
msgid "Bad name"
msgstr ""
-#: fortran/module.c:1158
+#: fortran/module.c:1209
msgid "Expected name"
msgstr ""
-#: fortran/module.c:1161
+#: fortran/module.c:1212
msgid "Expected left parenthesis"
msgstr ""
-#: fortran/module.c:1164
+#: fortran/module.c:1215
msgid "Expected right parenthesis"
msgstr ""
-#: fortran/module.c:1167
+#: fortran/module.c:1218
msgid "Expected integer"
msgstr ""
-#: fortran/module.c:1170
+#: fortran/module.c:1221
msgid "Expected string"
msgstr ""
-#: fortran/module.c:1194
+#: fortran/module.c:1245
msgid "find_enum(): Enum not found"
msgstr ""
-#: fortran/module.c:1209
+#: fortran/module.c:1259
#, no-c-format
msgid "Error writing modules file: %s"
msgstr ""
-#: fortran/module.c:1574
+#: fortran/module.c:1627
msgid "Expected attribute bit name"
msgstr ""
-#: fortran/module.c:2343
+#: fortran/module.c:2398
msgid "Expected integer string"
msgstr ""
-#: fortran/module.c:2347
+#: fortran/module.c:2402
msgid "Error converting integer"
msgstr ""
-#: fortran/module.c:2370
+#: fortran/module.c:2424
msgid "Expected real string"
msgstr ""
-#: fortran/module.c:2517
+#: fortran/module.c:2611
msgid "Expected expression type"
msgstr ""
-#: fortran/module.c:2563
+#: fortran/module.c:2659
msgid "Bad operator"
msgstr ""
-#: fortran/module.c:2649
+#: fortran/module.c:2744
msgid "Bad type in constant expression"
msgstr ""
-#: fortran/module.c:2686
+#: fortran/module.c:2781
#, no-c-format
-msgid "Namelist %s cannot be renamed by USE association to %s."
+msgid "Namelist %s cannot be renamed by USE association to %s"
msgstr ""
-#: fortran/module.c:3382
+#: fortran/module.c:3551
#, no-c-format
msgid "Symbol '%s' referenced at %L not found in module '%s'"
msgstr ""
-#: fortran/module.c:3390
+#: fortran/module.c:3558
#, no-c-format
msgid "User operator '%s' referenced at %L not found in module '%s'"
msgstr ""
-#: fortran/module.c:3396
+#: fortran/module.c:3563
#, no-c-format
msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'"
msgstr ""
-#: fortran/module.c:3756
+#: fortran/module.c:3925
#, no-c-format
msgid "Can't open module file '%s' for writing at %C: %s"
msgstr ""
-#: fortran/module.c:3781
+#: fortran/module.c:3950
#, no-c-format
msgid "Error writing module file '%s' for writing: %s"
msgstr ""
-#: fortran/module.c:3802
+#: fortran/module.c:3968
+#, no-c-format
+msgid "Symbol '%s' already declared"
+msgstr ""
+
+#: fortran/module.c:4020
+#, no-c-format
+msgid ""
+"Use of intrinsic module '%s' at %C conflicts with non-intrinsic module name "
+"used previously"
+msgstr ""
+
+#: fortran/module.c:4033
+#, no-c-format
+msgid ""
+"Symbol '%s' referenced at %L does not exist in intrinsic module "
+"ISO_FORTRAN_ENV"
+msgstr ""
+
+#: fortran/module.c:4041
+#, no-c-format
+msgid ""
+"Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module "
+"ISO_FORTRAN_ENV at %L is incompatible with option %s"
+msgstr ""
+
+#: fortran/module.c:4068
+#, no-c-format
+msgid ""
+"Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module "
+"ISO_FORTRAN_ENV at %C is incompatible with option %s"
+msgstr ""
+
+#: fortran/module.c:4083
+#, no-c-format
+msgid ""
+"Symbol '%s' referenced at %L not found in intrinsic module ISO_FORTRAN_ENV"
+msgstr ""
+
+#: fortran/module.c:4116
+#, no-c-format
+msgid "Fortran 2003: ISO_FORTRAN_ENV intrinsic module at %C"
+msgstr ""
+
+#: fortran/module.c:4126
+#, no-c-format
+msgid "Can't find an intrinsic module named '%s' at %C"
+msgstr ""
+
+#: fortran/module.c:4131
#, no-c-format
msgid "Can't open module file '%s' for reading at %C: %s"
msgstr ""
-#: fortran/module.c:3817
+#: fortran/module.c:4139
+#, no-c-format
+msgid ""
+"Use of non-intrinsic module '%s' at %C conflicts with intrinsic module name "
+"used previously"
+msgstr ""
+
+#: fortran/module.c:4154
msgid "Unexpected end of module"
msgstr ""
-#: fortran/module.c:3822
+#: fortran/module.c:4159
#, no-c-format
msgid "File '%s' opened at %C is not a GFORTRAN module file"
msgstr ""
-#: fortran/module.c:3832
+#: fortran/module.c:4169
#, no-c-format
msgid "Can't USE the same module we're building!"
msgstr ""
-#: fortran/openmp.c:135 fortran/openmp.c:502
+#: fortran/openmp.c:135 fortran/openmp.c:500
#, no-c-format
msgid "COMMON block /%s/ not found at %C"
msgstr ""
@@ -7166,525 +7508,538 @@ msgstr ""
msgid "%s is not INTRINSIC procedure name at %C"
msgstr ""
-#: fortran/openmp.c:481
+#: fortran/openmp.c:479
#, no-c-format
msgid "Threadprivate variable at %C is an element of a COMMON block"
msgstr ""
-#: fortran/openmp.c:521
+#: fortran/openmp.c:519
#, no-c-format
msgid "Syntax error in !$OMP THREADPRIVATE list at %C"
msgstr ""
-#: fortran/openmp.c:686 fortran/resolve.c:4990
+#: fortran/openmp.c:697 fortran/resolve.c:4918 fortran/resolve.c:5178
#, no-c-format
msgid "IF clause at %L requires a scalar LOGICAL expression"
msgstr ""
-#: fortran/openmp.c:694
+#: fortran/openmp.c:705
#, no-c-format
msgid "NUM_THREADS clause at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:702
+#: fortran/openmp.c:713
#, no-c-format
msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression"
msgstr ""
-#: fortran/openmp.c:716 fortran/openmp.c:726 fortran/openmp.c:733
-#: fortran/openmp.c:743
+#: fortran/openmp.c:727 fortran/openmp.c:737 fortran/openmp.c:744
+#: fortran/openmp.c:754
#, no-c-format
msgid "Symbol '%s' present on multiple clauses at %L"
msgstr ""
-#: fortran/openmp.c:766
+#: fortran/openmp.c:777
#, no-c-format
msgid "Non-THREADPRIVATE object '%s' in COPYIN clause at %L"
msgstr ""
-#: fortran/openmp.c:769
+#: fortran/openmp.c:780
#, no-c-format
msgid "COPYIN clause object '%s' is ALLOCATABLE at %L"
msgstr ""
-#: fortran/openmp.c:777
+#: fortran/openmp.c:788
#, no-c-format
msgid "Assumed size array '%s' in COPYPRIVATE clause at %L"
msgstr ""
-#: fortran/openmp.c:780
+#: fortran/openmp.c:791
#, no-c-format
msgid "COPYPRIVATE clause object '%s' is ALLOCATABLE at %L"
msgstr ""
-#: fortran/openmp.c:788
+#: fortran/openmp.c:799
#, no-c-format
msgid "THREADPRIVATE object '%s' in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:791
+#: fortran/openmp.c:802
#, no-c-format
msgid "Cray pointee '%s' in SHARED clause at %L"
msgstr ""
-#: fortran/openmp.c:799
+#: fortran/openmp.c:810
#, no-c-format
msgid "THREADPRIVATE object '%s' in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:802
+#: fortran/openmp.c:813
#, no-c-format
msgid "Cray pointee '%s' in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:807
+#: fortran/openmp.c:818
#, no-c-format
msgid "POINTER object '%s' in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:810
+#: fortran/openmp.c:821
#, no-c-format
msgid "%s clause object '%s' is ALLOCATABLE at %L"
msgstr ""
-#: fortran/openmp.c:813
+#: fortran/openmp.c:824
#, no-c-format
msgid "Cray pointer '%s' in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:817
+#: fortran/openmp.c:828
#, no-c-format
msgid "Assumed size array '%s' in %s clause at %L"
msgstr ""
-#: fortran/openmp.c:822
+#: fortran/openmp.c:833
#, no-c-format
msgid "Variable '%s' in %s clause is used in NAMELIST statement at %L"
msgstr ""
-#: fortran/openmp.c:831
+#: fortran/openmp.c:842
#, no-c-format
msgid "%c REDUCTION variable '%s' is %s at %L"
msgstr ""
-#: fortran/openmp.c:842
+#: fortran/openmp.c:853
#, no-c-format
msgid "%s REDUCTION variable '%s' must be LOGICAL at %L"
msgstr ""
-#: fortran/openmp.c:853
+#: fortran/openmp.c:864
#, no-c-format
msgid "%s REDUCTION variable '%s' must be INTEGER or REAL at %L"
msgstr ""
-#: fortran/openmp.c:862
+#: fortran/openmp.c:873
#, no-c-format
msgid "%s REDUCTION variable '%s' must be INTEGER at %L"
msgstr ""
-#: fortran/openmp.c:971
+#: fortran/openmp.c:985
#, no-c-format
msgid ""
"!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
msgstr ""
-#: fortran/openmp.c:1011
+#: fortran/openmp.c:1025
#, no-c-format
msgid ""
"!$OMP ATOMIC assignment operator must be +, *, -, /, .AND., .OR., .EQV. or ."
"NEQV. at %L"
msgstr ""
-#: fortran/openmp.c:1059
+#: fortran/openmp.c:1073
#, no-c-format
msgid ""
"!$OMP ATOMIC assignment must be var = var op expr or var = expr op var at %L"
msgstr ""
-#: fortran/openmp.c:1073
+#: fortran/openmp.c:1087
#, no-c-format
msgid ""
"!$OMP ATOMIC var = var op expr not mathematically equivalent to var = var op "
"(expr) at %L"
msgstr ""
-#: fortran/openmp.c:1105
+#: fortran/openmp.c:1119
#, no-c-format
msgid ""
"expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot "
"reference var at %L"
msgstr ""
-#: fortran/openmp.c:1129
+#: fortran/openmp.c:1143
#, no-c-format
msgid ""
-"!$OMP ATOMIC assignment intrinsic IAND, IORor IEOR must have two arguments "
+"!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments "
"at %L"
msgstr ""
-#: fortran/openmp.c:1136
+#: fortran/openmp.c:1150
#, no-c-format
msgid ""
"!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L"
msgstr ""
-#: fortran/openmp.c:1152
+#: fortran/openmp.c:1166
#, no-c-format
msgid ""
"!$OMP ATOMIC intrinsic arguments except one must not reference '%s' at %L"
msgstr ""
-#: fortran/openmp.c:1155
+#: fortran/openmp.c:1169
#, no-c-format
msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L"
msgstr ""
-#: fortran/openmp.c:1161
+#: fortran/openmp.c:1175
#, no-c-format
msgid "First or last !$OMP ATOMIC intrinsic argument must be '%s' at %L"
msgstr ""
-#: fortran/openmp.c:1179
+#: fortran/openmp.c:1193
#, no-c-format
msgid ""
"!$OMP ATOMIC assignment must have an operator or intrinsic on right hand "
"side at %L"
msgstr ""
-#: fortran/openmp.c:1276
+#: fortran/openmp.c:1295
#, no-c-format
msgid "!$OMP DO cannot be a DO WHILE or DO without loop control at %L"
msgstr ""
-#: fortran/openmp.c:1282
+#: fortran/openmp.c:1301
#, no-c-format
msgid "!$OMP DO iteration variable must be of type integer at %L"
msgstr ""
-#: fortran/openmp.c:1286
+#: fortran/openmp.c:1305
#, no-c-format
msgid "!$OMP DO iteration variable must not be THREADPRIVATE at %L"
msgstr ""
-#: fortran/openmp.c:1294
+#: fortran/openmp.c:1313
#, no-c-format
msgid ""
"!$OMP DO iteration variable present on clause other than PRIVATE or "
"LASTPRIVATE at %L"
msgstr ""
-#: fortran/options.c:242
+#: fortran/options.c:258
#, no-c-format
-msgid "Reading file '%s' as free form."
+msgid "Reading file '%s' as free form"
msgstr ""
-#: fortran/options.c:252
+#: fortran/options.c:268
#, no-c-format
-msgid "'-fd-lines-as-comments' has no effect in free form."
+msgid "'-fd-lines-as-comments' has no effect in free form"
msgstr ""
-#: fortran/options.c:255
+#: fortran/options.c:271
#, no-c-format
-msgid "'-fd-lines-as-code' has no effect in free form."
+msgid "'-fd-lines-as-code' has no effect in free form"
msgstr ""
-#: fortran/options.c:327
+#: fortran/options.c:346
#, c-format
msgid "gfortran: Only one -M option allowed\n"
msgstr ""
-#: fortran/options.c:333
+#: fortran/options.c:352
#, c-format
msgid "gfortran: Directory required after -M\n"
msgstr ""
-#: fortran/options.c:373
+#: fortran/options.c:397
#, no-c-format
msgid "Argument to -ffpe-trap is not valid: %s"
msgstr ""
-#: fortran/options.c:485
+#: fortran/options.c:523
#, no-c-format
msgid "Fixed line length must be at least seven."
msgstr ""
-#: fortran/options.c:547
+#: fortran/options.c:586
#, no-c-format
msgid "Maximum supported identifier length is %d"
msgstr ""
-#: fortran/options.c:554
+#: fortran/options.c:678
#, no-c-format
-msgid "Argument to -fqkind isn't a valid real kind"
+msgid "Maximum subrecord length cannot exceed %d"
msgstr ""
-#: fortran/parse.c:294
+#: fortran/parse.c:299
#, no-c-format
msgid "Unclassifiable statement at %C"
msgstr ""
-#: fortran/parse.c:318
+#: fortran/parse.c:323
#, no-c-format
msgid "OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures"
msgstr ""
-#: fortran/parse.c:395
+#: fortran/parse.c:401
#, no-c-format
msgid "Unclassifiable OpenMP directive at %C"
msgstr ""
-#: fortran/parse.c:434 fortran/parse.c:574
+#: fortran/parse.c:440 fortran/parse.c:581
#, no-c-format
msgid "Zero is not a valid statement label at %C"
msgstr ""
-#: fortran/parse.c:441 fortran/parse.c:566
+#: fortran/parse.c:447 fortran/parse.c:573
#, no-c-format
msgid "Non-numeric character in statement label at %C"
msgstr ""
-#: fortran/parse.c:454 fortran/parse.c:488 fortran/parse.c:614
+#: fortran/parse.c:459 fortran/parse.c:495 fortran/parse.c:621
#, no-c-format
msgid "Semicolon at %C needs to be preceded by statement"
msgstr ""
-#: fortran/parse.c:462 fortran/parse.c:626
+#: fortran/parse.c:467 fortran/parse.c:633
#, no-c-format
msgid "Ignoring statement label in empty statement at %C"
msgstr ""
-#: fortran/parse.c:553 fortran/parse.c:593
+#: fortran/parse.c:560 fortran/parse.c:600
#, no-c-format
msgid "Bad continuation line at %C"
msgstr ""
-#: fortran/parse.c:652
+#: fortran/parse.c:659
#, no-c-format
msgid "Line truncated at %C"
msgstr ""
-#: fortran/parse.c:830
+#: fortran/parse.c:833
#, no-c-format
msgid "FORMAT statement at %L does not have a statement label"
msgstr ""
-#: fortran/parse.c:902
+#: fortran/parse.c:905
msgid "arithmetic IF"
msgstr ""
-#: fortran/parse.c:908
+#: fortran/parse.c:911
msgid "attribute declaration"
msgstr ""
-#: fortran/parse.c:938
+#: fortran/parse.c:941
msgid "data declaration"
msgstr ""
-#: fortran/parse.c:947
+#: fortran/parse.c:950
msgid "derived type declaration"
msgstr ""
-#: fortran/parse.c:1026
+#: fortran/parse.c:1029
msgid "block IF"
msgstr ""
-#: fortran/parse.c:1035
+#: fortran/parse.c:1038
msgid "implied END DO"
msgstr ""
-#: fortran/parse.c:1102
+#: fortran/parse.c:1108
msgid "assignment"
msgstr ""
-#: fortran/parse.c:1105
+#: fortran/parse.c:1111
msgid "pointer assignment"
msgstr ""
-#: fortran/parse.c:1114
+#: fortran/parse.c:1120
msgid "simple IF"
msgstr ""
-#: fortran/parse.c:1332
+#: fortran/parse.c:1336
#, no-c-format
msgid "Unexpected %s statement at %C"
msgstr ""
-#: fortran/parse.c:1464
+#: fortran/parse.c:1475
#, no-c-format
msgid "%s statement at %C cannot follow %s statement at %L"
msgstr ""
-#: fortran/parse.c:1481
+#: fortran/parse.c:1492
#, no-c-format
msgid "Unexpected end of file in '%s'"
msgstr ""
-#: fortran/parse.c:1535
+#: fortran/parse.c:1546
#, no-c-format
msgid "Derived type definition at %C has no components"
msgstr ""
-#: fortran/parse.c:1546
+#: fortran/parse.c:1556
#, no-c-format
msgid "PRIVATE statement in TYPE at %C must be inside a MODULE"
msgstr ""
-#: fortran/parse.c:1553
+#: fortran/parse.c:1564
#, no-c-format
msgid "PRIVATE statement at %C must precede structure components"
msgstr ""
-#: fortran/parse.c:1561
+#: fortran/parse.c:1572
#, no-c-format
msgid "Duplicate PRIVATE statement at %C"
msgstr ""
-#: fortran/parse.c:1573
+#: fortran/parse.c:1584
#, no-c-format
msgid "SEQUENCE statement at %C must precede structure components"
msgstr ""
-#: fortran/parse.c:1580
+#: fortran/parse.c:1591
#, no-c-format
msgid "SEQUENCE attribute at %C already specified in TYPE statement"
msgstr ""
-#: fortran/parse.c:1585
+#: fortran/parse.c:1596
#, no-c-format
msgid "Duplicate SEQUENCE statement at %C"
msgstr ""
-#: fortran/parse.c:1652
+#: fortran/parse.c:1662
#, no-c-format
msgid "ENUM declaration at %C has no ENUMERATORS"
msgstr ""
-#: fortran/parse.c:1726
+#: fortran/parse.c:1739
#, no-c-format
msgid "Unexpected %s statement in INTERFACE block at %C"
msgstr ""
-#: fortran/parse.c:1753
+#: fortran/parse.c:1765
#, no-c-format
msgid "SUBROUTINE at %C does not belong in a generic function interface"
msgstr ""
-#: fortran/parse.c:1758
+#: fortran/parse.c:1769
#, no-c-format
msgid "FUNCTION at %C does not belong in a generic subroutine interface"
msgstr ""
-#: fortran/parse.c:1775
+#: fortran/parse.c:1787
#, no-c-format
msgid "Unexpected %s statement at %C in INTERFACE body"
msgstr ""
-#: fortran/parse.c:1847
+#: fortran/parse.c:1801
+#, no-c-format
+msgid ""
+"INTERFACE procedure '%s' at %L has the same name as the enclosing procedure"
+msgstr ""
+
+#: fortran/parse.c:1867
#, no-c-format
msgid "%s statement must appear in a MODULE"
msgstr ""
-#: fortran/parse.c:1854
+#: fortran/parse.c:1874
#, no-c-format
msgid "%s statement at %C follows another accessibility specification"
msgstr ""
-#: fortran/parse.c:1931
+#: fortran/parse.c:1950
#, no-c-format
msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE"
msgstr ""
-#: fortran/parse.c:1952
+#: fortran/parse.c:1971
#, no-c-format
msgid "Unexpected %s statement in WHERE block at %C"
msgstr ""
-#: fortran/parse.c:2012
+#: fortran/parse.c:2030
#, no-c-format
msgid "Unexpected %s statement in FORALL block at %C"
msgstr ""
-#: fortran/parse.c:2064
+#: fortran/parse.c:2081
#, no-c-format
msgid "ELSE IF statement at %C cannot follow ELSE statement at %L"
msgstr ""
-#: fortran/parse.c:2082
+#: fortran/parse.c:2099
#, no-c-format
msgid "Duplicate ELSE statements at %L and %C"
msgstr ""
-#: fortran/parse.c:2144
+#: fortran/parse.c:2160
#, no-c-format
msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C"
msgstr ""
-#: fortran/parse.c:2202
+#: fortran/parse.c:2218
#, no-c-format
msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
msgstr ""
-#: fortran/parse.c:2237
+#: fortran/parse.c:2252
#, no-c-format
msgid "End of nonblock DO statement at %C is within another block"
msgstr ""
-#: fortran/parse.c:2246
+#: fortran/parse.c:2261
#, no-c-format
msgid "End of nonblock DO statement at %C is interwoven with another DO loop"
msgstr ""
-#: fortran/parse.c:2296
+#: fortran/parse.c:2310
#, no-c-format
msgid "Statement label in ENDDO at %C doesn't match DO label"
msgstr ""
-#: fortran/parse.c:2312
+#: fortran/parse.c:2326
#, no-c-format
msgid "named block DO at %L requires matching ENDDO name"
msgstr ""
-#: fortran/parse.c:2568
+#: fortran/parse.c:2582
#, no-c-format
msgid "Name after !$omp critical and !$omp end critical does not match at %C"
msgstr ""
-#: fortran/parse.c:2625
+#: fortran/parse.c:2638
#, no-c-format
msgid "%s statement at %C cannot terminate a non-block DO loop"
msgstr ""
-#: fortran/parse.c:2789
+#: fortran/parse.c:2803
#, no-c-format
msgid "Contained procedure '%s' at %C is already ambiguous"
msgstr ""
-#: fortran/parse.c:2840
+#: fortran/parse.c:2853
#, no-c-format
msgid "Unexpected %s statement in CONTAINS section at %C"
msgstr ""
-#: fortran/parse.c:2925
+#. This is valid in Fortran 2008.
+#: fortran/parse.c:2874
+#, no-c-format
+msgid ""
+"Extension: CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
+msgstr ""
+
+#: fortran/parse.c:2942
#, no-c-format
msgid "CONTAINS statement at %C is already in a contained program unit"
msgstr ""
-#: fortran/parse.c:2974
+#: fortran/parse.c:2991
#, no-c-format
msgid "Global name '%s' at %L is already being used as a %s at %L"
msgstr ""
-#: fortran/parse.c:2995
+#: fortran/parse.c:3012
#, no-c-format
msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L"
msgstr ""
-#: fortran/parse.c:3020
+#: fortran/parse.c:3038
#, no-c-format
msgid "Unexpected %s statement in BLOCK DATA at %C"
msgstr ""
-#: fortran/parse.c:3063
+#: fortran/parse.c:3081
#, no-c-format
msgid "Unexpected %s statement in MODULE at %C"
msgstr ""
@@ -7692,142 +8047,137 @@ msgstr ""
#. If we see a duplicate main program, shut down. If the second
#. instance is an implied main program, ie data decls or executable
#. statements, we're in for lots of errors.
-#: fortran/parse.c:3242
+#: fortran/parse.c:3261
#, no-c-format
msgid "Two main PROGRAMs at %L and %C"
msgstr ""
-#: fortran/primary.c:89
+#: fortran/primary.c:88
#, no-c-format
msgid "Missing kind-parameter at %C"
msgstr ""
-#: fortran/primary.c:212
+#: fortran/primary.c:211
#, no-c-format
msgid "Integer kind %d at %C not available"
msgstr ""
-#: fortran/primary.c:220
+#: fortran/primary.c:219
#, no-c-format
msgid "Integer too big for its kind at %C"
msgstr ""
-#: fortran/primary.c:250
+#: fortran/primary.c:248
#, no-c-format
msgid "Extension: Hollerith constant at %C"
msgstr ""
-#: fortran/primary.c:262
+#: fortran/primary.c:260
#, no-c-format
msgid "Invalid Hollerith constant: %L must contain at least one character"
msgstr ""
-#: fortran/primary.c:268
+#: fortran/primary.c:266
#, no-c-format
msgid "Invalid Hollerith constant: Integer kind at %L should be default"
msgstr ""
-#: fortran/primary.c:355
+#: fortran/primary.c:354
#, no-c-format
msgid "Extension: Hexadecimal constant at %C uses non-standard syntax."
msgstr ""
-#: fortran/primary.c:365
+#: fortran/primary.c:364
#, no-c-format
msgid "Empty set of digits in BOZ constant at %C"
msgstr ""
-#: fortran/primary.c:371
+#: fortran/primary.c:370
#, no-c-format
msgid "Illegal character in BOZ constant at %C"
msgstr ""
-#: fortran/primary.c:393
+#: fortran/primary.c:392
#, no-c-format
msgid "Extension: BOZ constant at %C uses non-standard postfix syntax."
msgstr ""
-#: fortran/primary.c:419
+#: fortran/primary.c:418
#, no-c-format
msgid "Integer too big for integer kind %i at %C"
msgstr ""
-#: fortran/primary.c:519
+#: fortran/primary.c:518
#, no-c-format
msgid "Missing exponent in real number at %C"
msgstr ""
-#: fortran/primary.c:576
+#: fortran/primary.c:574
#, no-c-format
msgid "Real number at %C has a 'd' exponent and an explicit kind"
msgstr ""
-#: fortran/primary.c:586
-#, no-c-format
-msgid "Real number at %C has a 'q' exponent and an explicit kind"
-msgstr ""
-
-#: fortran/primary.c:598
+#: fortran/primary.c:587
#, no-c-format
msgid "Invalid real kind %d at %C"
msgstr ""
-#: fortran/primary.c:612
+#: fortran/primary.c:601
#, no-c-format
msgid "Real constant overflows its kind at %C"
msgstr ""
-#: fortran/primary.c:617
+#: fortran/primary.c:606
#, no-c-format
msgid "Real constant underflows its kind at %C"
msgstr ""
-#: fortran/primary.c:709
+#: fortran/primary.c:698
#, no-c-format
msgid "Syntax error in SUBSTRING specification at %C"
msgstr ""
-#: fortran/primary.c:941
+#: fortran/primary.c:933
#, no-c-format
msgid "Invalid kind %d for CHARACTER constant at %C"
msgstr ""
-#: fortran/primary.c:962
+#: fortran/primary.c:954
#, no-c-format
msgid "Unterminated character constant beginning at %C"
msgstr ""
-#: fortran/primary.c:1036
+#: fortran/primary.c:1035
#, no-c-format
msgid "Bad kind for logical constant at %C"
msgstr ""
-#: fortran/primary.c:1071
+#: fortran/primary.c:1072
#, no-c-format
msgid "Expected PARAMETER symbol in complex constant at %C"
msgstr ""
-#: fortran/primary.c:1077
+#: fortran/primary.c:1078
#, no-c-format
msgid "Numeric PARAMETER required in complex constant at %C"
msgstr ""
-#: fortran/primary.c:1083
+#: fortran/primary.c:1084
#, no-c-format
msgid "Scalar PARAMETER required in complex constant at %C"
msgstr ""
-#: fortran/primary.c:1087
+#: fortran/primary.c:1088
#, no-c-format
msgid "Fortran 2003: PARAMETER symbol in complex constant at %C"
msgstr ""
-#: fortran/primary.c:1117
+#: fortran/primary.c:1118
#, no-c-format
msgid "Error converting PARAMETER constant in complex constant at %C"
msgstr ""
-#: fortran/primary.c:1244
+#: fortran/primary.c:1245
#, no-c-format
msgid "Syntax error in COMPLEX constant at %C"
msgstr ""
@@ -7837,648 +8187,688 @@ msgstr ""
msgid "Keyword '%s' at %C has already appeared in the current argument list"
msgstr ""
-#: fortran/primary.c:1483
+#: fortran/primary.c:1490
+#, no-c-format
+msgid "Extension: argument list function at %C"
+msgstr ""
+
+#: fortran/primary.c:1557
#, no-c-format
msgid "Expected alternate return label at %C"
msgstr ""
-#: fortran/primary.c:1502
+#: fortran/primary.c:1575
#, no-c-format
msgid "Missing keyword name in actual argument list at %C"
msgstr ""
-#: fortran/primary.c:1538
+#: fortran/primary.c:1620
#, no-c-format
msgid "Syntax error in argument list at %C"
msgstr ""
-#: fortran/primary.c:1625
+#: fortran/primary.c:1704
#, no-c-format
msgid "Expected structure component name at %C"
msgstr ""
-#: fortran/primary.c:1866
+#: fortran/primary.c:1944
#, no-c-format
msgid "Too many components in structure constructor at %C"
msgstr ""
-#: fortran/primary.c:1881
+#: fortran/primary.c:1959
#, no-c-format
msgid "Too few components in structure constructor at %C"
msgstr ""
-#: fortran/primary.c:1899
+#: fortran/primary.c:1977
#, no-c-format
msgid "Syntax error in structure constructor at %C"
msgstr ""
-#: fortran/primary.c:1954
+#: fortran/primary.c:2033
#, no-c-format
msgid ""
"'%s' is array valued and directly recursive at %C , so the keyword RESULT "
"must be specified in the FUNCTION statement"
msgstr ""
-#: fortran/primary.c:2029
+#: fortran/primary.c:2108
#, no-c-format
msgid "Unexpected use of subroutine name '%s' at %C"
msgstr ""
-#: fortran/primary.c:2060
+#: fortran/primary.c:2139
#, no-c-format
msgid "Statement function '%s' requires argument list at %C"
msgstr ""
-#: fortran/primary.c:2063
+#: fortran/primary.c:2142
#, no-c-format
msgid "Function '%s' requires an argument list at %C"
msgstr ""
-#: fortran/primary.c:2229
+#: fortran/primary.c:2308
#, no-c-format
msgid "Missing argument list in function '%s' at %C"
msgstr ""
-#: fortran/primary.c:2257
+#: fortran/primary.c:2336
#, no-c-format
msgid "Symbol at %C is not appropriate for an expression"
msgstr ""
-#: fortran/primary.c:2324
+#: fortran/primary.c:2395
+#, no-c-format
+msgid "Assigning to PROTECTED variable at %C"
+msgstr ""
+
+#: fortran/primary.c:2408
#, no-c-format
msgid "Named constant at %C in an EQUIVALENCE"
msgstr ""
-#: fortran/primary.c:2346
+#: fortran/primary.c:2430
#, no-c-format
msgid "Expected VARIABLE at %C"
msgstr ""
-#: fortran/resolve.c:114
+#: fortran/resolve.c:111
#, no-c-format
msgid ""
"Alternate return specifier in elemental subroutine '%s' at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:118
+#: fortran/resolve.c:115
#, no-c-format
msgid "Alternate return specifier in function '%s' at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:132
+#: fortran/resolve.c:128
#, no-c-format
msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE"
msgstr ""
-#: fortran/resolve.c:140
+#: fortran/resolve.c:135
#, no-c-format
msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure"
msgstr ""
-#: fortran/resolve.c:184
+#: fortran/resolve.c:148 fortran/resolve.c:949
#, no-c-format
-msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)"
+msgid ""
+"Unable to find a specific INTRINSIC procedure for the reference '%s' at %L"
msgstr ""
#: fortran/resolve.c:192
#, no-c-format
+msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)"
+msgstr ""
+
+#: fortran/resolve.c:197
+#, no-c-format
msgid ""
"Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified"
msgstr ""
-#: fortran/resolve.c:203
+#: fortran/resolve.c:206
#, no-c-format
msgid "Argument '%s' of elemental procedure at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:211
+#: fortran/resolve.c:213
#, no-c-format
msgid ""
"Argument '%s' of elemental procedure at %L cannot have the POINTER attribute"
msgstr ""
-#: fortran/resolve.c:223
+#: fortran/resolve.c:225
#, no-c-format
msgid "Argument '%s' of statement function at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:234
+#: fortran/resolve.c:235
#, no-c-format
msgid ""
-"Character-valued argument '%s' of statement function at %L must has constant "
-"length"
+"Character-valued argument '%s' of statement function at %L must have "
+"constant length"
msgstr ""
-#: fortran/resolve.c:295
+#: fortran/resolve.c:292
#, no-c-format
msgid "Contained function '%s' at %L has no IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:310
+#: fortran/resolve.c:308
#, no-c-format
msgid ""
"Character-valued internal function '%s' at %L must not be assumed length"
msgstr ""
-#: fortran/resolve.c:446
+#: fortran/resolve.c:470
#, no-c-format
msgid "Procedure %s at %L has entries with mismatched array specifications"
msgstr ""
-#: fortran/resolve.c:473
+#: fortran/resolve.c:496
#, no-c-format
msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:477
+#: fortran/resolve.c:500
#, no-c-format
msgid "ENTRY result %s can't be an array in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:484
+#: fortran/resolve.c:507
#, no-c-format
msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:488
+#: fortran/resolve.c:511
#, no-c-format
msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:526
+#: fortran/resolve.c:549
#, no-c-format
msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:531
+#: fortran/resolve.c:554
#, no-c-format
msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L"
msgstr ""
-#: fortran/resolve.c:623
+#: fortran/resolve.c:652
#, no-c-format
msgid ""
"The rank of the element in the derived type constructor at %L does not match "
"that of the component (%d/%d)"
msgstr ""
-#: fortran/resolve.c:636
+#: fortran/resolve.c:665
#, no-c-format
msgid ""
"The element in the derived type constructor at %L, for pointer component '%"
"s', is %s but should be %s"
msgstr ""
-#: fortran/resolve.c:653
+#: fortran/resolve.c:682
#, no-c-format
msgid ""
"The element in the derived type constructor at %L, for pointer component '%"
"s' should be a POINTER or a TARGET"
msgstr ""
-#: fortran/resolve.c:775
+#: fortran/resolve.c:801
#, no-c-format
msgid ""
"The upper bound in the last dimension must appear in the reference to the "
-"assumed size array '%s' at %L."
+"assumed size array '%s' at %L"
msgstr ""
-#: fortran/resolve.c:840 fortran/resolve.c:4238 fortran/resolve.c:4955
+#: fortran/resolve.c:864 fortran/resolve.c:4391 fortran/resolve.c:5143
#, no-c-format
msgid "Label %d referenced at %L is never defined"
msgstr ""
-#: fortran/resolve.c:876
+#: fortran/resolve.c:899
#, no-c-format
msgid "Statement function '%s' at %L is not allowed as an actual argument"
msgstr ""
-#: fortran/resolve.c:883
+#: fortran/resolve.c:907
#, no-c-format
msgid "Intrinsic '%s' at %L is not allowed as an actual argument"
msgstr ""
-#. We need a special case for CHAR, which is the only intrinsic
-#. function allowed as actual argument in F2003 and not allowed
-#. in F95.
-#: fortran/resolve.c:890
-#, no-c-format
-msgid "Fortran 2003: CHAR intrinsic allowed as actual argument at %L"
-msgstr ""
-
-#: fortran/resolve.c:896
+#: fortran/resolve.c:914
#, no-c-format
msgid "Internal procedure '%s' is not allowed as an actual argument at %L"
msgstr ""
-#: fortran/resolve.c:902
+#: fortran/resolve.c:920
#, no-c-format
msgid ""
"ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument "
"at %L"
msgstr ""
-#: fortran/resolve.c:909
+#: fortran/resolve.c:927
#, no-c-format
msgid ""
"GENERIC non-INTRINSIC procedure '%s' is not allowed as an actual argument at "
"%L"
msgstr ""
-#: fortran/resolve.c:933
+#: fortran/resolve.c:965
#, no-c-format
msgid "Symbol '%s' at %L is ambiguous"
msgstr ""
-#: fortran/resolve.c:1072
+#: fortran/resolve.c:1003
+#, no-c-format
+msgid "By-value argument at %L is not of numeric type"
+msgstr ""
+
+#: fortran/resolve.c:1010
+#, no-c-format
+msgid "By-value argument at %L cannot be an array or an array section"
+msgstr ""
+
+#: fortran/resolve.c:1023
+#, no-c-format
+msgid "By-value argument at %L is not allowed in this context"
+msgstr ""
+
+#: fortran/resolve.c:1035
+#, no-c-format
+msgid "Passing internal procedure at %L by location not allowed"
+msgstr ""
+
+#: fortran/resolve.c:1152
#, no-c-format
msgid ""
"'%s' at %L is an array and OPTIONAL; IF IT IS MISSING, it cannot be the "
-"actual argument of an ELEMENTAL procedure unless there is a non-"
-"optionalargument with the same rank (12.4.1.5)"
+"actual argument of an ELEMENTAL procedure unless there is a non-optional "
+"argument with the same rank (12.4.1.5)"
msgstr ""
-#: fortran/resolve.c:1097
+#: fortran/resolve.c:1177
msgid "elemental subroutine"
msgstr ""
-#: fortran/resolve.c:1230
+#: fortran/resolve.c:1312
#, no-c-format
msgid "There is no specific function for the generic '%s' at %L"
msgstr ""
-#: fortran/resolve.c:1240
+#: fortran/resolve.c:1321
#, no-c-format
msgid ""
"Generic function '%s' at %L is not consistent with a specific intrinsic "
"interface"
msgstr ""
-#: fortran/resolve.c:1278
+#: fortran/resolve.c:1359
#, no-c-format
msgid ""
"Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
msgstr ""
-#: fortran/resolve.c:1324
+#: fortran/resolve.c:1405
#, no-c-format
msgid "Unable to resolve the specific function '%s' at %L"
msgstr ""
-#: fortran/resolve.c:1380 fortran/resolve.c:6835
+#: fortran/resolve.c:1461 fortran/resolve.c:7129
#, no-c-format
msgid "Function '%s' at %L has no IMPLICIT type"
msgstr ""
+#: fortran/resolve.c:1532
+#, no-c-format
+msgid "'%s' at %L is not a function"
+msgstr ""
+
#. Internal procedures are taken care of in resolve_contained_fntype.
-#: fortran/resolve.c:1466
+#: fortran/resolve.c:1564
#, no-c-format
msgid ""
"Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is "
"not a dummy argument"
msgstr ""
-#: fortran/resolve.c:1519
+#: fortran/resolve.c:1617
#, no-c-format
msgid ""
"User defined non-ELEMENTAL function '%s' at %L not allowed in WORKSHARE "
"construct"
msgstr ""
-#: fortran/resolve.c:1559
+#: fortran/resolve.c:1666
#, no-c-format
msgid "reference to non-PURE function '%s' at %L inside a FORALL %s"
msgstr ""
-#: fortran/resolve.c:1566
+#: fortran/resolve.c:1673
#, no-c-format
msgid ""
"Function reference to '%s' at %L is to a non-PURE procedure within a PURE "
"procedure"
msgstr ""
-#: fortran/resolve.c:1581
+#: fortran/resolve.c:1688
#, no-c-format
msgid "Function '%s' at %L cannot call itself, as it is not RECURSIVE"
msgstr ""
-#: fortran/resolve.c:1589
+#: fortran/resolve.c:1696
#, no-c-format
msgid ""
"Call to ENTRY '%s' at %L is recursive, but function '%s' is not declared as "
"RECURSIVE"
msgstr ""
-#: fortran/resolve.c:1623
+#: fortran/resolve.c:1740
#, no-c-format
msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
msgstr ""
-#: fortran/resolve.c:1626
+#: fortran/resolve.c:1743
#, no-c-format
msgid "Subroutine call to '%s' at %L is not PURE"
msgstr ""
-#: fortran/resolve.c:1688
+#: fortran/resolve.c:1806
#, no-c-format
msgid "There is no specific subroutine for the generic '%s' at %L"
msgstr ""
-#: fortran/resolve.c:1697
+#: fortran/resolve.c:1815
#, no-c-format
msgid ""
"Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine "
"interface"
msgstr ""
-#: fortran/resolve.c:1732
+#: fortran/resolve.c:1850
#, no-c-format
msgid ""
"Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
msgstr ""
-#: fortran/resolve.c:1776
+#: fortran/resolve.c:1894
#, no-c-format
msgid "Unable to resolve the specific subroutine '%s' at %L"
msgstr ""
-#: fortran/resolve.c:1832
+#: fortran/resolve.c:1951
#, no-c-format
msgid "'%s' at %L has a type, which is not consistent with the CALL at %L"
msgstr ""
-#: fortran/resolve.c:1855
+#: fortran/resolve.c:1974
#, no-c-format
msgid "SUBROUTINE '%s' at %L cannot call itself, as it is not RECURSIVE"
msgstr ""
-#: fortran/resolve.c:1863
+#: fortran/resolve.c:1982
#, no-c-format
msgid ""
"Call to ENTRY '%s' at %L is recursive, but subroutine '%s' is not declared "
"as RECURSIVE"
msgstr ""
-#: fortran/resolve.c:1930
+#: fortran/resolve.c:2052
#, no-c-format
msgid "Shapes for operands at %L and %L are not conformable"
msgstr ""
-#: fortran/resolve.c:1987
+#: fortran/resolve.c:2110
#, c-format
msgid "Operand of unary numeric operator '%s' at %%L is %s"
msgstr ""
-#: fortran/resolve.c:2003
+#: fortran/resolve.c:2126
#, c-format
msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
msgstr ""
-#: fortran/resolve.c:2017
+#: fortran/resolve.c:2140
#, c-format
msgid "Operands of string concatenation operator at %%L are %s/%s"
msgstr ""
-#: fortran/resolve.c:2036
+#: fortran/resolve.c:2159
#, c-format
msgid "Operands of logical operator '%s' at %%L are %s/%s"
msgstr ""
-#: fortran/resolve.c:2050
+#: fortran/resolve.c:2173
#, c-format
msgid "Operand of .NOT. operator at %%L is %s"
msgstr ""
-#: fortran/resolve.c:2060
+#: fortran/resolve.c:2183
msgid "COMPLEX quantities cannot be compared at %L"
msgstr ""
-#: fortran/resolve.c:2086
+#: fortran/resolve.c:2209
#, c-format
msgid "Logicals at %%L must be compared with %s instead of %s"
msgstr ""
-#: fortran/resolve.c:2091
+#: fortran/resolve.c:2214
#, c-format
msgid "Operands of comparison operator '%s' at %%L are %s/%s"
msgstr ""
-#: fortran/resolve.c:2099
+#: fortran/resolve.c:2222
#, c-format
msgid "Operand of user operator '%s' at %%L is %s"
msgstr ""
-#: fortran/resolve.c:2102
+#: fortran/resolve.c:2225
#, c-format
msgid "Operands of user operator '%s' at %%L are %s/%s"
msgstr ""
-#: fortran/resolve.c:2173
+#: fortran/resolve.c:2296
#, no-c-format
msgid "Inconsistent ranks for operator at %L and %L"
msgstr ""
-#: fortran/resolve.c:2370
+#: fortran/resolve.c:2499
#, no-c-format
msgid "Illegal stride of zero at %L"
msgstr ""
-#: fortran/resolve.c:2419
+#: fortran/resolve.c:2548
#, no-c-format
msgid "Array reference at %L is out of bounds"
msgstr ""
-#: fortran/resolve.c:2440
+#: fortran/resolve.c:2569
#, no-c-format
msgid "Rightmost upper bound of assumed size array section not specified at %L"
msgstr ""
-#: fortran/resolve.c:2450
+#: fortran/resolve.c:2579
#, no-c-format
msgid "Rank mismatch in array reference at %L (%d/%d)"
msgstr ""
-#: fortran/resolve.c:2478
+#: fortran/resolve.c:2607
#, no-c-format
msgid "Array index at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:2484
+#: fortran/resolve.c:2613
#, no-c-format
msgid "Array index at %L must be of INTEGER type"
msgstr ""
-#: fortran/resolve.c:2490
+#: fortran/resolve.c:2619
#, no-c-format
msgid "Extension: REAL array index at %L"
msgstr ""
-#: fortran/resolve.c:2520
+#: fortran/resolve.c:2649
#, no-c-format
msgid "Argument dim at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:2526
+#: fortran/resolve.c:2655
#, no-c-format
msgid "Argument dim at %L must be of INTEGER type"
msgstr ""
-#: fortran/resolve.c:2646
+#: fortran/resolve.c:2775
#, no-c-format
msgid "Array index at %L is an array of rank %d"
msgstr ""
-#: fortran/resolve.c:2684
+#: fortran/resolve.c:2812
#, no-c-format
msgid "Substring start index at %L must be of type INTEGER"
msgstr ""
-#: fortran/resolve.c:2691
+#: fortran/resolve.c:2819
#, no-c-format
msgid "Substring start index at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:2700
+#: fortran/resolve.c:2828
#, no-c-format
msgid "Substring start index at %L is less than one"
msgstr ""
-#: fortran/resolve.c:2713
+#: fortran/resolve.c:2841
#, no-c-format
msgid "Substring end index at %L must be of type INTEGER"
msgstr ""
-#: fortran/resolve.c:2720
+#: fortran/resolve.c:2848
#, no-c-format
msgid "Substring end index at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:2730
+#: fortran/resolve.c:2858
#, no-c-format
msgid "Substring end index at %L exceeds the string length"
msgstr ""
-#: fortran/resolve.c:2804
+#: fortran/resolve.c:2932
#, no-c-format
msgid ""
"Component to the right of a part reference with nonzero rank must not have "
"the POINTER attribute at %L"
msgstr ""
-#: fortran/resolve.c:2823
+#: fortran/resolve.c:2939
+#, no-c-format
+msgid ""
+"Component to the right of a part reference with nonzero rank must not have "
+"the ALLOCATABLE attribute at %L"
+msgstr ""
+
+#: fortran/resolve.c:2958
#, no-c-format
msgid ""
"Two or more part references with nonzero rank must not be specified at %L"
msgstr ""
-#: fortran/resolve.c:2998
+#: fortran/resolve.c:3133
#, no-c-format
msgid ""
"Variable '%s',used in a specification expression, is referenced at %L before "
"the ENTRY statement in which it is a parameter"
msgstr ""
-#: fortran/resolve.c:3003
+#: fortran/resolve.c:3138
#, no-c-format
msgid ""
"Variable '%s' is used at %L before the ENTRY statement in which it is a "
"parameter"
msgstr ""
-#: fortran/resolve.c:3126
+#: fortran/resolve.c:3262
#, no-c-format
msgid "%s at %L must be a scalar"
msgstr ""
-#: fortran/resolve.c:3134
+#: fortran/resolve.c:3270
#, no-c-format
msgid "%s at %L must be INTEGER or REAL"
msgstr ""
-#: fortran/resolve.c:3137
+#: fortran/resolve.c:3273
#, no-c-format
msgid "%s at %L must be INTEGER"
msgstr ""
-#: fortran/resolve.c:3153
+#: fortran/resolve.c:3288
#, no-c-format
msgid "Obsolete: REAL DO loop iterator at %L"
msgstr ""
-#: fortran/resolve.c:3162
+#: fortran/resolve.c:3297
#, no-c-format
msgid "Cannot assign to loop variable in PURE procedure at %L"
msgstr ""
-#: fortran/resolve.c:3186
+#: fortran/resolve.c:3321
#, no-c-format
msgid "Step expression in DO loop at %L cannot be zero"
msgstr ""
-#: fortran/resolve.c:3221
+#: fortran/resolve.c:3355
#, no-c-format
msgid "FORALL index-name at %L must be a scalar INTEGER"
msgstr ""
-#: fortran/resolve.c:3226
+#: fortran/resolve.c:3360
#, no-c-format
msgid "FORALL start expression at %L must be a scalar INTEGER"
msgstr ""
-#: fortran/resolve.c:3233
+#: fortran/resolve.c:3367
#, no-c-format
msgid "FORALL end expression at %L must be a scalar INTEGER"
msgstr ""
-#: fortran/resolve.c:3241
+#: fortran/resolve.c:3375
#, no-c-format
msgid "FORALL stride expression at %L must be a scalar %s"
msgstr ""
-#: fortran/resolve.c:3246
+#: fortran/resolve.c:3380
#, no-c-format
msgid "FORALL stride expression at %L cannot be zero"
msgstr ""
-#: fortran/resolve.c:3344
+#: fortran/resolve.c:3486
#, no-c-format
msgid ""
"Expression in DEALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
msgstr ""
-#: fortran/resolve.c:3350
+#: fortran/resolve.c:3493
#, no-c-format
-msgid "Can't deallocate INTENT(IN) variable '%s' at %L"
+msgid "Cannot deallocate INTENT(IN) variable '%s' at %L"
msgstr ""
-#: fortran/resolve.c:3511
+#: fortran/resolve.c:3662
#, no-c-format
msgid ""
"The STAT variable '%s' in an ALLOCATE statement must not be allocated in the "
"same statement at %L"
msgstr ""
-#: fortran/resolve.c:3542
+#: fortran/resolve.c:3698
#, no-c-format
msgid "Expression in ALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
msgstr ""
-#: fortran/resolve.c:3549
+#: fortran/resolve.c:3706
#, no-c-format
-msgid "Can't allocate INTENT(IN) variable '%s' at %L"
+msgid "Cannot allocate INTENT(IN) variable '%s' at %L"
msgstr ""
-#: fortran/resolve.c:3573
+#: fortran/resolve.c:3730
#, no-c-format
msgid "Array specification required in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:3603
+#: fortran/resolve.c:3760
#, no-c-format
msgid "Bad array specification in ALLOCATE statement at %L"
msgstr ""
-#: fortran/resolve.c:3621
+#: fortran/resolve.c:3778
#, no-c-format
msgid ""
"'%s' must not appear an the array specification at %L in the same ALLOCATE "
@@ -8489,859 +8879,920 @@ msgstr ""
#. element in the list. Either way, we must
#. issue an error and get the next case from P.
#. FIXME: Sort P and Q by line number.
-#: fortran/resolve.c:3780
+#: fortran/resolve.c:3936
#, no-c-format
msgid "CASE label at %L overlaps with CASE label at %L"
msgstr ""
-#: fortran/resolve.c:3831
+#: fortran/resolve.c:3987
#, no-c-format
msgid "Expression in CASE statement at %L must be of type %s"
msgstr ""
-#: fortran/resolve.c:3842
+#: fortran/resolve.c:3998
#, no-c-format
msgid "Expression in CASE statement at %L must be kind %d"
msgstr ""
-#: fortran/resolve.c:3854
+#: fortran/resolve.c:4010
#, no-c-format
msgid "Expression in CASE statement at %L must be scalar"
msgstr ""
-#: fortran/resolve.c:3901
+#: fortran/resolve.c:4056
#, no-c-format
msgid ""
"Selection expression in computed GOTO statement at %L must be a scalar "
"integer expression"
msgstr ""
-#: fortran/resolve.c:3919
+#: fortran/resolve.c:4074
#, no-c-format
msgid "Argument of SELECT statement at %L cannot be %s"
msgstr ""
-#: fortran/resolve.c:3928
+#: fortran/resolve.c:4083
#, no-c-format
msgid "Argument of SELECT statement at %L must be a scalar expression"
msgstr ""
-#: fortran/resolve.c:3993
+#: fortran/resolve.c:4148
#, no-c-format
msgid ""
"The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L"
msgstr ""
-#: fortran/resolve.c:4020
+#: fortran/resolve.c:4174
#, no-c-format
msgid "Logical range in CASE statement at %L is not allowed"
msgstr ""
-#: fortran/resolve.c:4032
+#: fortran/resolve.c:4186
#, no-c-format
msgid "constant logical value in CASE statement is repeated at %L"
msgstr ""
-#: fortran/resolve.c:4046
+#: fortran/resolve.c:4200
#, no-c-format
msgid "Range specification at %L can never be matched"
msgstr ""
-#: fortran/resolve.c:4149
+#: fortran/resolve.c:4303
#, no-c-format
msgid "Logical SELECT CASE block at %L has more that two cases"
msgstr ""
-#: fortran/resolve.c:4188
+#: fortran/resolve.c:4341
#, no-c-format
msgid "Data transfer element at %L cannot have POINTER components"
msgstr ""
-#: fortran/resolve.c:4195
+#: fortran/resolve.c:4348
#, no-c-format
msgid "Data transfer element at %L cannot have ALLOCATABLE components"
msgstr ""
-#: fortran/resolve.c:4202
+#: fortran/resolve.c:4355
#, no-c-format
msgid "Data transfer element at %L cannot have PRIVATE components"
msgstr ""
-#: fortran/resolve.c:4211
+#: fortran/resolve.c:4364
#, no-c-format
msgid ""
"Data transfer element at %L cannot be a full reference to an assumed-size "
"array"
msgstr ""
-#: fortran/resolve.c:4245
+#: fortran/resolve.c:4398
#, no-c-format
msgid ""
"Statement at %L is not a valid branch target statement for the branch "
"statement at %L"
msgstr ""
-#: fortran/resolve.c:4254
+#: fortran/resolve.c:4407
#, no-c-format
msgid "Branch at %L causes an infinite loop"
msgstr ""
-#: fortran/resolve.c:4287
+#. The label is not in an enclosing block, so illegal. This was
+#. allowed in Fortran 66, so we allow it as extension. We also
+#. forego further checks if we run into this.
+#: fortran/resolve.c:4439
#, no-c-format
msgid "Label at %L is not in the same block as the GOTO statement at %L"
msgstr ""
-#: fortran/resolve.c:4303
+#: fortran/resolve.c:4454
#, no-c-format
msgid "Obsolete: GOTO at %L jumps to END of construct at %L"
msgstr ""
-#: fortran/resolve.c:4377
+#: fortran/resolve.c:4528
#, no-c-format
msgid "WHERE mask at %L has inconsistent shape"
msgstr ""
-#: fortran/resolve.c:4393
+#: fortran/resolve.c:4544
#, no-c-format
msgid "WHERE assignment target at %L has inconsistent shape"
msgstr ""
-#: fortran/resolve.c:4403 fortran/resolve.c:4602
+#: fortran/resolve.c:4559 fortran/resolve.c:4765
#, no-c-format
msgid "Unsupported statement inside WHERE at %L"
msgstr ""
-#: fortran/resolve.c:4479
+#: fortran/resolve.c:4635
#, no-c-format
msgid "expression reference type error at %L"
msgstr ""
-#: fortran/resolve.c:4511
+#: fortran/resolve.c:4667
#, no-c-format
msgid "Unsupported statement while finding forall index in expression"
msgstr ""
-#: fortran/resolve.c:4558
+#: fortran/resolve.c:4714
#, no-c-format
msgid "Assignment to a FORALL index variable at %L"
msgstr ""
-#: fortran/resolve.c:4566
+#: fortran/resolve.c:4722
#, no-c-format
msgid ""
"The FORALL with index '%s' cause more than one assignment to this object at %"
"L"
msgstr ""
-#: fortran/resolve.c:4691
+#: fortran/resolve.c:4858
#, no-c-format
msgid "An outer FORALL construct already has an index with this name %L"
msgstr ""
-#: fortran/resolve.c:4703 fortran/resolve.c:4706 fortran/resolve.c:4709
+#: fortran/resolve.c:4870 fortran/resolve.c:4873 fortran/resolve.c:4876
#, no-c-format
msgid ""
"A FORALL index must not appear in a limit or stride expression in the same "
"FORALL at %L"
msgstr ""
-#: fortran/resolve.c:4752
-#, no-c-format
-msgid "ELSE IF clause at %L requires a scalar LOGICAL expression"
-msgstr ""
-
-#: fortran/resolve.c:4762
+#: fortran/resolve.c:4926
#, no-c-format
msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array"
msgstr ""
-#: fortran/resolve.c:4892
+#: fortran/resolve.c:5056
#, no-c-format
msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
msgstr ""
-#: fortran/resolve.c:4895
+#: fortran/resolve.c:5059
#, no-c-format
msgid "Variable '%s' has not been assigned a target label at %L"
msgstr ""
-#: fortran/resolve.c:4906
+#: fortran/resolve.c:5070
#, no-c-format
msgid ""
"Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier"
msgstr ""
-#: fortran/resolve.c:4921
+#: fortran/resolve.c:5085
#, no-c-format
msgid "Subroutine '%s' called instead of assignment at %L must be PURE"
msgstr ""
-#: fortran/resolve.c:4934
+#: fortran/resolve.c:5113
+#, no-c-format
+msgid "rhs of CHARACTER assignment at %L will be truncated (%d/%d)"
+msgstr ""
+
+#: fortran/resolve.c:5121
#, no-c-format
msgid "Cannot assign to variable '%s' in PURE procedure at %L"
msgstr ""
-#: fortran/resolve.c:4943
+#: fortran/resolve.c:5131
#, no-c-format
msgid ""
"Right side of assignment at %L is a derived type containing a POINTER in a "
"PURE procedure"
msgstr ""
-#: fortran/resolve.c:4963
+#: fortran/resolve.c:5151
#, no-c-format
msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
msgstr ""
-#: fortran/resolve.c:4978
+#: fortran/resolve.c:5166
#, no-c-format
msgid "Arithmetic IF statement at %L requires a numeric expression"
msgstr ""
-#: fortran/resolve.c:5020
+#: fortran/resolve.c:5208
#, no-c-format
msgid ""
"Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression"
msgstr ""
-#: fortran/resolve.c:5027
+#: fortran/resolve.c:5215
#, no-c-format
msgid "STAT tag in ALLOCATE statement at %L must be of type INTEGER"
msgstr ""
-#: fortran/resolve.c:5039
+#: fortran/resolve.c:5227
#, no-c-format
msgid "STAT tag in DEALLOCATE statement at %L must be of type INTEGER"
msgstr ""
-#: fortran/resolve.c:5105
+#: fortran/resolve.c:5292
#, no-c-format
msgid "FORALL mask clause at %L requires a LOGICAL expression"
msgstr ""
-#: fortran/resolve.c:5308
+#: fortran/resolve.c:5494
#, no-c-format
msgid "Allocatable array '%s' at %L must have a deferred shape"
msgstr ""
-#: fortran/resolve.c:5311
+#: fortran/resolve.c:5497
#, no-c-format
msgid "Scalar object '%s' at %L may not be ALLOCATABLE"
msgstr ""
-#: fortran/resolve.c:5318
+#: fortran/resolve.c:5504
#, no-c-format
msgid "Array pointer '%s' at %L must have a deferred shape"
msgstr ""
-#: fortran/resolve.c:5329
+#: fortran/resolve.c:5515
#, no-c-format
msgid "Array '%s' at %L cannot have a deferred shape"
msgstr ""
-#: fortran/resolve.c:5369
+#: fortran/resolve.c:5572
#, no-c-format
msgid "The module or main program array '%s' at %L must have constant shape"
msgstr ""
-#: fortran/resolve.c:5383
+#: fortran/resolve.c:5586
#, no-c-format
msgid ""
"Entity with assumed character length at %L must be a dummy argument or a "
"PARAMETER"
msgstr ""
-#: fortran/resolve.c:5402
+#: fortran/resolve.c:5605
#, no-c-format
msgid "'%s' at %L must have constant character length in this context"
msgstr ""
-#: fortran/resolve.c:5440
+#: fortran/resolve.c:5643
#, no-c-format
msgid "Allocatable '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5443
+#: fortran/resolve.c:5646
#, no-c-format
msgid "External '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5446
+#: fortran/resolve.c:5649
#, no-c-format
msgid "Dummy '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5449
+#: fortran/resolve.c:5652
#, no-c-format
msgid "Intrinsic '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5452
+#: fortran/resolve.c:5655
#, no-c-format
msgid "Function result '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5455
+#: fortran/resolve.c:5658
#, no-c-format
msgid "Automatic array '%s' at %L cannot have an initializer"
msgstr ""
-#: fortran/resolve.c:5470
+#: fortran/resolve.c:5673
#, no-c-format
msgid ""
"The type %s cannot be host associated at %L because it is blocked by an "
"incompatible object of the same name at %L"
msgstr ""
-#: fortran/resolve.c:5493
+#: fortran/resolve.c:5697
#, no-c-format
msgid "Object '%s' at %L must have the SAVE attribute %s"
msgstr ""
-#: fortran/resolve.c:5526
+#: fortran/resolve.c:5723
+#, no-c-format
+msgid "Although not referenced, '%s' at %L has ambiguous interfaces"
+msgstr ""
+
+#: fortran/resolve.c:5737
#, no-c-format
msgid ""
"Character-valued statement function '%s' at %L must have constant length"
msgstr ""
-#: fortran/resolve.c:5549
+#: fortran/resolve.c:5745
+#, no-c-format
+msgid ""
+"Automatic character length function '%s' at %L must have an explicit "
+"interface"
+msgstr ""
+
+#: fortran/resolve.c:5769
#, no-c-format
msgid ""
"'%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is "
"PUBLIC at %L"
msgstr ""
-#: fortran/resolve.c:5564
+#: fortran/resolve.c:5784
#, no-c-format
msgid "External object '%s' at %L may not have an initializer"
msgstr ""
-#: fortran/resolve.c:5572
+#: fortran/resolve.c:5792
#, no-c-format
msgid "ELEMENTAL function '%s' at %L must have a scalar result"
msgstr ""
-#: fortran/resolve.c:5593
+#: fortran/resolve.c:5813
#, no-c-format
msgid "CHARACTER(*) function '%s' at %L cannot be array-valued"
msgstr ""
-#: fortran/resolve.c:5597
+#: fortran/resolve.c:5817
#, no-c-format
msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued"
msgstr ""
-#: fortran/resolve.c:5601
+#: fortran/resolve.c:5821
#, no-c-format
msgid "CHARACTER(*) function '%s' at %L cannot be pure"
msgstr ""
-#: fortran/resolve.c:5605
+#: fortran/resolve.c:5825
#, no-c-format
msgid "CHARACTER(*) function '%s' at %L cannot be recursive"
msgstr ""
-#: fortran/resolve.c:5614
+#: fortran/resolve.c:5834
#, no-c-format
msgid "CHARACTER(*) function '%s' at %L is obsolescent in fortran 95"
msgstr ""
-#: fortran/resolve.c:5639
+#: fortran/resolve.c:5859
#, no-c-format
msgid ""
"Character length of component '%s' needs to be a constant specification "
-"expression at %L."
+"expression at %L"
msgstr ""
-#: fortran/resolve.c:5654
+#: fortran/resolve.c:5874
#, no-c-format
msgid ""
"The component '%s' is a PRIVATE type and cannot be a component of '%s', "
"which is PUBLIC at %L"
msgstr ""
-#: fortran/resolve.c:5664
+#: fortran/resolve.c:5884
#, no-c-format
msgid ""
"Component %s of SEQUENCE type declared at %L does not have the SEQUENCE "
"attribute"
msgstr ""
-#: fortran/resolve.c:5674
+#: fortran/resolve.c:5894
#, no-c-format
msgid ""
"The pointer component '%s' of '%s' at %L is a type that has not been declared"
msgstr ""
-#: fortran/resolve.c:5692
+#: fortran/resolve.c:5912
#, no-c-format
-msgid "Component '%s' of '%s' at %L must have constant array bounds."
+msgid "Component '%s' of '%s' at %L must have constant array bounds"
msgstr ""
-#: fortran/resolve.c:5733
+#: fortran/resolve.c:5953
#, no-c-format
msgid "PRIVATE symbol '%s' cannot be member of PUBLIC namelist at %L"
msgstr ""
-#: fortran/resolve.c:5746
+#: fortran/resolve.c:5966
#, no-c-format
msgid "The array '%s' must have constant shape to be a NAMELIST object at %L"
msgstr ""
-#: fortran/resolve.c:5759
+#: fortran/resolve.c:5979
#, no-c-format
msgid "NAMELIST object '%s' at %L cannot have ALLOCATABLE components"
msgstr ""
-#: fortran/resolve.c:5778
+#: fortran/resolve.c:5998
#, no-c-format
msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L"
msgstr ""
-#: fortran/resolve.c:5795
+#: fortran/resolve.c:6015
#, no-c-format
msgid "Parameter array '%s' at %L cannot be automatic or assumed shape"
msgstr ""
-#: fortran/resolve.c:5807
+#: fortran/resolve.c:6026
#, no-c-format
msgid ""
"Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:5818
+#: fortran/resolve.c:6037
#, no-c-format
msgid "Incompatible derived type in PARAMETER at %L"
msgstr ""
-#: fortran/resolve.c:5920
+#: fortran/resolve.c:6139
#, no-c-format
msgid "Assumed size array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:5923
+#: fortran/resolve.c:6142
#, no-c-format
msgid "Assumed shape array at %L must be a dummy argument"
msgstr ""
-#: fortran/resolve.c:5936
+#: fortran/resolve.c:6154
#, no-c-format
msgid "Symbol at %L is not a DUMMY variable"
msgstr ""
-#: fortran/resolve.c:5951
+#: fortran/resolve.c:6160
+#, no-c-format
+msgid ""
+"'%s' at %L cannot have the VALUE attribute because it is not a dummy argument"
+msgstr ""
+
+#: fortran/resolve.c:6170
#, no-c-format
msgid ""
-"The derived type '%s' at %L is of type '%s', which has not been defined."
+"Character dummy variable '%s' at %L with VALUE attribute must have constant "
+"length"
msgstr ""
-#: fortran/resolve.c:5970
+#: fortran/resolve.c:6187
+#, no-c-format
+msgid "The derived type '%s' at %L is of type '%s', which has not been defined"
+msgstr ""
+
+#: fortran/resolve.c:6206
#, no-c-format
msgid ""
"The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have "
"a default initializer"
msgstr ""
-#: fortran/resolve.c:6010
+#: fortran/resolve.c:6244
#, no-c-format
msgid "Intrinsic at %L does not exist"
msgstr ""
-#: fortran/resolve.c:6034
+#: fortran/resolve.c:6277
#, no-c-format
msgid "Threadprivate at %L isn't SAVEd"
msgstr ""
-#: fortran/resolve.c:6109
+#: fortran/resolve.c:6354
#, no-c-format
msgid "BLOCK DATA element '%s' at %L must be in COMMON"
msgstr ""
-#: fortran/resolve.c:6153
+#: fortran/resolve.c:6398
#, no-c-format
msgid "Nonconstant array section at %L in DATA statement"
msgstr ""
-#: fortran/resolve.c:6166
+#: fortran/resolve.c:6411
#, no-c-format
msgid "DATA statement at %L has more variables than values"
msgstr ""
-#: fortran/resolve.c:6364
+#: fortran/resolve.c:6503
+#, no-c-format
+msgid "iterator start at %L does not simplify"
+msgstr ""
+
+#: fortran/resolve.c:6510
+#, no-c-format
+msgid "iterator end at %L does not simplify"
+msgstr ""
+
+#: fortran/resolve.c:6517
+#, no-c-format
+msgid "iterator step at %L does not simplify"
+msgstr ""
+
+#: fortran/resolve.c:6639
#, no-c-format
msgid "DATA statement at %L has more values than variables"
msgstr ""
-#: fortran/resolve.c:6440
+#: fortran/resolve.c:6715
#, no-c-format
msgid "Label %d at %L defined but not used"
msgstr ""
-#: fortran/resolve.c:6445
+#: fortran/resolve.c:6720
#, no-c-format
msgid "Label %d at %L defined but cannot be used"
msgstr ""
-#: fortran/resolve.c:6530
+#: fortran/resolve.c:6805
#, no-c-format
msgid ""
"Derived type variable '%s' at %L must have SEQUENCE attribute to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6538
+#: fortran/resolve.c:6814
#, no-c-format
msgid ""
"Derived type variable '%s' at %L cannot have ALLOCATABLE components to be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6553
+#: fortran/resolve.c:6831
#, no-c-format
msgid ""
"Derived type variable '%s' at %L with pointer component(s) cannot be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6560
+#: fortran/resolve.c:6839
#, no-c-format
msgid ""
"Derived type variable '%s' at %L with default initializer cannot be an "
"EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6661
+#: fortran/resolve.c:6944
#, no-c-format
msgid "Syntax error in EQUIVALENCE statement at %L"
msgstr ""
-#: fortran/resolve.c:6678
+#: fortran/resolve.c:6959
+#, no-c-format
+msgid ""
+"Either all or none of the objects in the EQUIVALENCE set at %L shall have "
+"the PROTECTED attribute"
+msgstr ""
+
+#: fortran/resolve.c:6972
#, no-c-format
msgid ""
-"Initialized objects '%s' and '%s' cannot both be in the EQUIVALENCE "
+"Initialized objects '%s' and '%s' cannot both be in the EQUIVALENCE "
"statement at %L"
msgstr ""
-#: fortran/resolve.c:6692
+#: fortran/resolve.c:6986
#, no-c-format
msgid ""
"Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure "
"procedure '%s'"
msgstr ""
-#: fortran/resolve.c:6701
+#: fortran/resolve.c:6995
#, no-c-format
msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6780
+#: fortran/resolve.c:7074
#, no-c-format
msgid ""
"Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6791
+#: fortran/resolve.c:7085
#, no-c-format
msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object"
msgstr ""
-#: fortran/resolve.c:6802
+#: fortran/resolve.c:7096
#, no-c-format
msgid "Substring at %L has length zero"
msgstr ""
-#: fortran/resolve.c:6845
+#: fortran/resolve.c:7139
#, no-c-format
msgid "PUBLIC function '%s' at %L cannot be of PRIVATE type '%s'"
msgstr ""
-#: fortran/resolve.c:6872
+#: fortran/resolve.c:7166
#, no-c-format
msgid "ENTRY '%s' at %L has no IMPLICIT type"
msgstr ""
-#: fortran/resolve.c:6898
+#: fortran/resolve.c:7192
#, no-c-format
msgid "User operator procedure '%s' at %L must be a FUNCTION"
msgstr ""
-#: fortran/resolve.c:6904
+#: fortran/resolve.c:7199
#, no-c-format
msgid "User operator procedure '%s' at %L cannot be assumed character length"
msgstr ""
-#: fortran/resolve.c:6910
+#: fortran/resolve.c:7205
#, no-c-format
msgid "User operator procedure '%s' at %L must have at least one argument"
msgstr ""
-#: fortran/resolve.c:6920
+#: fortran/resolve.c:7215
#, no-c-format
msgid "First argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:6932
+#: fortran/resolve.c:7227
#, no-c-format
msgid "Second argument of operator interface at %L cannot be optional"
msgstr ""
-#: fortran/resolve.c:6936
+#: fortran/resolve.c:7231
#, no-c-format
msgid "Operator interface at %L must have, at most, two arguments"
msgstr ""
-#: fortran/resolve.c:6969
+#: fortran/resolve.c:7264
#, no-c-format
msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE"
msgstr ""
-#: fortran/scanner.c:669 fortran/scanner.c:790
+#: fortran/scanner.c:719 fortran/scanner.c:840
#, no-c-format
msgid "Limit of %d continuations exceeded in statement at %C"
msgstr ""
-#: fortran/scanner.c:714
+#: fortran/scanner.c:764
#, no-c-format
msgid "Missing '&' in continued character constant at %C"
msgstr ""
-#: fortran/scanner.c:923
+#: fortran/scanner.c:974
#, no-c-format
msgid "Nonconforming tab character at %C"
msgstr ""
-#: fortran/scanner.c:1014 fortran/scanner.c:1017
+#: fortran/scanner.c:1056 fortran/scanner.c:1059
#, no-c-format
msgid "'&' not allowed by itself in line %d"
msgstr ""
-#: fortran/scanner.c:1046 fortran/scanner.c:1049
+#: fortran/scanner.c:1081 fortran/scanner.c:1084
#, no-c-format
msgid "'&' not allowed by itself with comment in line %d"
msgstr ""
-#: fortran/scanner.c:1065
+#: fortran/scanner.c:1100
#, no-c-format
msgid "Nonconforming tab character in column 1 of line %d"
msgstr ""
-#: fortran/scanner.c:1262
+#: fortran/scanner.c:1298
#, no-c-format
msgid "%s:%d: file %s left but not entered"
msgstr ""
-#: fortran/scanner.c:1289
+#: fortran/scanner.c:1325
#, no-c-format
msgid "%s:%d: Illegal preprocessor directive"
msgstr ""
-#: fortran/scanner.c:1382
+#: fortran/scanner.c:1419
#, no-c-format
msgid "File '%s' is being included recursively"
msgstr ""
-#: fortran/scanner.c:1397
+#: fortran/scanner.c:1434
#, no-c-format
msgid "Can't open file '%s'"
msgstr ""
-#: fortran/scanner.c:1406
+#: fortran/scanner.c:1443
#, no-c-format
msgid "Can't open included file '%s'"
msgstr ""
-#: fortran/scanner.c:1508
+#: fortran/scanner.c:1545
#, c-format
msgid "%s:%3d %s\n"
msgstr ""
-#: fortran/simplify.c:105
+#: fortran/simplify.c:79
#, no-c-format
msgid "Result of %s overflows its kind at %L"
msgstr ""
-#: fortran/simplify.c:109
+#: fortran/simplify.c:84
#, no-c-format
msgid "Result of %s underflows its kind at %L"
msgstr ""
-#: fortran/simplify.c:113
+#: fortran/simplify.c:89
#, no-c-format
msgid "Result of %s is NaN at %L"
msgstr ""
-#: fortran/simplify.c:117
+#: fortran/simplify.c:93
#, no-c-format
msgid "Result of %s gives range error for its kind at %L"
msgstr ""
-#: fortran/simplify.c:139
+#: fortran/simplify.c:116
#, no-c-format
msgid "KIND parameter of %s at %L must be an initialization expression"
msgstr ""
-#: fortran/simplify.c:149
+#: fortran/simplify.c:126
#, no-c-format
msgid "Invalid KIND parameter of %s at %L"
msgstr ""
-#: fortran/simplify.c:246
+#: fortran/simplify.c:263
#, no-c-format
-msgid ""
-"Extended ASCII not implemented: argument of ACHAR at %L must be between 0 "
-"and 127"
+msgid "Argument of ACHAR function at %L outside of range [0,127]"
msgstr ""
-#: fortran/simplify.c:273
+#: fortran/simplify.c:289
#, no-c-format
msgid "Argument of ACOS at %L must be between -1 and 1"
msgstr ""
-#: fortran/simplify.c:295
+#: fortran/simplify.c:311
#, no-c-format
msgid "Argument of ACOSH at %L must not be less than 1"
msgstr ""
-#: fortran/simplify.c:522
+#: fortran/simplify.c:528
#, no-c-format
msgid "Argument of ASIN at %L must be between -1 and 1"
msgstr ""
-#: fortran/simplify.c:578
+#: fortran/simplify.c:584
#, no-c-format
msgid "Argument of ATANH at %L must be inside the range -1 to 1"
msgstr ""
-#: fortran/simplify.c:604
+#: fortran/simplify.c:609
#, no-c-format
msgid ""
"If first argument of ATAN2 %L is zero, then the second argument must not be "
"zero"
msgstr ""
-#: fortran/simplify.c:690
+#: fortran/simplify.c:696
#, no-c-format
-msgid "Bad character in CHAR function at %L"
+msgid "Argument of CHAR function at %L outside of range [0,255]"
msgstr ""
-#: fortran/simplify.c:1228
+#: fortran/simplify.c:1211
#, no-c-format
msgid "Argument of IACHAR at %L must be of length one"
msgstr ""
-#: fortran/simplify.c:1268
+#: fortran/simplify.c:1218
+#, no-c-format
+msgid "Argument of IACHAR function at %L outside of range 0..127"
+msgstr ""
+
+#: fortran/simplify.c:1255
#, no-c-format
msgid "Invalid second argument of IBCLR at %L"
msgstr ""
-#: fortran/simplify.c:1276
+#: fortran/simplify.c:1263
#, no-c-format
msgid "Second argument of IBCLR exceeds bit size at %L"
msgstr ""
-#: fortran/simplify.c:1303
+#: fortran/simplify.c:1297
#, no-c-format
msgid "Invalid second argument of IBITS at %L"
msgstr ""
-#: fortran/simplify.c:1309
+#: fortran/simplify.c:1303
#, no-c-format
msgid "Invalid third argument of IBITS at %L"
msgstr ""
-#: fortran/simplify.c:1320
+#: fortran/simplify.c:1313
#, no-c-format
msgid "Sum of second and third arguments of IBITS exceeds bit size at %L"
msgstr ""
-#: fortran/simplify.c:1368
+#: fortran/simplify.c:1355
#, no-c-format
msgid "Invalid second argument of IBSET at %L"
msgstr ""
-#: fortran/simplify.c:1376
+#: fortran/simplify.c:1363
#, no-c-format
msgid "Second argument of IBSET exceeds bit size at %L"
msgstr ""
-#: fortran/simplify.c:1402
+#: fortran/simplify.c:1393
#, no-c-format
msgid "Argument of ICHAR at %L must be of length one"
msgstr ""
-#: fortran/simplify.c:1410
-#, no-c-format
-msgid "Argument of ICHAR at %L out of range of this processor"
-msgstr ""
-
-#: fortran/simplify.c:1618
+#: fortran/simplify.c:1603
#, no-c-format
msgid "Argument of INT at %L is not a valid type"
msgstr ""
-#: fortran/simplify.c:1660
+#: fortran/simplify.c:1645
#, no-c-format
msgid "Argument of %s at %L is not a valid type"
msgstr ""
-#: fortran/simplify.c:1755
+#: fortran/simplify.c:1743
#, no-c-format
msgid "Invalid second argument of ISHFT at %L"
msgstr ""
-#: fortran/simplify.c:1771
+#: fortran/simplify.c:1758
#, no-c-format
msgid "Magnitude of second argument of ISHFT exceeds bit size at %L"
msgstr ""
-#: fortran/simplify.c:1835
+#: fortran/simplify.c:1822
#, no-c-format
msgid "Invalid second argument of ISHFTC at %L"
msgstr ""
-#: fortran/simplify.c:1845
+#: fortran/simplify.c:1836
#, no-c-format
msgid "Invalid third argument of ISHFTC at %L"
msgstr ""
-#: fortran/simplify.c:1860
+#: fortran/simplify.c:1842
+#, no-c-format
+msgid ""
+"Magnitude of third argument of ISHFTC exceeds BIT_SIZE of first argument at %"
+"L"
+msgstr ""
+
+#: fortran/simplify.c:1858
#, no-c-format
msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L"
msgstr ""
-#: fortran/simplify.c:1930
+#: fortran/simplify.c:1861
+#, no-c-format
+msgid ""
+"Magnitude of second argument of ISHFTC exceeds BIT_SIZE of first argument at "
+"%L"
+msgstr ""
+
+#: fortran/simplify.c:1932
#, no-c-format
msgid "Argument of KIND at %L is a DERIVED type"
msgstr ""
-#: fortran/simplify.c:2001
+#: fortran/simplify.c:2003
#, no-c-format
msgid "DIM argument at %L is out of bounds"
msgstr ""
-#: fortran/simplify.c:2141
+#: fortran/simplify.c:2166
#, no-c-format
msgid "Argument of LOG at %L cannot be less than or equal to zero"
msgstr ""
-#: fortran/simplify.c:2154
+#: fortran/simplify.c:2179
#, no-c-format
msgid "Complex argument of LOG at %L cannot be zero"
msgstr ""
-#: fortran/simplify.c:2203
+#: fortran/simplify.c:2222
#, no-c-format
msgid "Argument of LOG10 at %L cannot be less than or equal to zero"
msgstr ""
#. Result is processor-dependent.
-#: fortran/simplify.c:2380
+#: fortran/simplify.c:2399
#, no-c-format
msgid "Second argument MOD at %L is zero"
msgstr ""
#. Result is processor-dependent.
-#: fortran/simplify.c:2391
+#: fortran/simplify.c:2410
#, no-c-format
msgid "Second argument of MOD at %L is zero"
msgstr ""
@@ -9349,78 +9800,78 @@ msgstr ""
#. Result is processor-dependent. This processor just opts
#. to not handle it at all.
#. Result is processor-dependent.
-#: fortran/simplify.c:2439 fortran/simplify.c:2451
+#: fortran/simplify.c:2458 fortran/simplify.c:2470
#, no-c-format
msgid "Second argument of MODULO at %L is zero"
msgstr ""
-#: fortran/simplify.c:2506
+#: fortran/simplify.c:2522
#, no-c-format
msgid "Second argument of NEAREST at %L shall not be zero"
msgstr ""
-#: fortran/simplify.c:2847
+#: fortran/simplify.c:2798
#, no-c-format
msgid "Invalid second argument of REPEAT at %L"
msgstr ""
-#: fortran/simplify.c:2921
+#: fortran/simplify.c:2870
#, no-c-format
msgid "Integer too large in shape specification at %L"
msgstr ""
-#: fortran/simplify.c:2931
+#: fortran/simplify.c:2880
#, no-c-format
msgid "Too many dimensions in shape specification for RESHAPE at %L"
msgstr ""
-#: fortran/simplify.c:2939
+#: fortran/simplify.c:2888
#, no-c-format
msgid "Shape specification at %L cannot be negative"
msgstr ""
-#: fortran/simplify.c:2949
+#: fortran/simplify.c:2898
#, no-c-format
msgid "Shape specification at %L cannot be the null array"
msgstr ""
-#: fortran/simplify.c:2973
+#: fortran/simplify.c:2919
#, no-c-format
msgid ""
"ORDER parameter of RESHAPE at %L is not the same size as SHAPE parameter"
msgstr ""
-#: fortran/simplify.c:2980
+#: fortran/simplify.c:2926
#, no-c-format
msgid "Error in ORDER parameter of RESHAPE at %L"
msgstr ""
-#: fortran/simplify.c:2990
+#: fortran/simplify.c:2936
#, no-c-format
msgid "ORDER parameter of RESHAPE at %L is out of range"
msgstr ""
-#: fortran/simplify.c:2999
+#: fortran/simplify.c:2945
#, no-c-format
msgid "Invalid permutation in ORDER parameter at %L"
msgstr ""
-#: fortran/simplify.c:3056
+#: fortran/simplify.c:3001
#, no-c-format
msgid "PAD parameter required for short SOURCE parameter at %L"
msgstr ""
-#: fortran/simplify.c:3226
+#: fortran/simplify.c:3120
#, no-c-format
msgid "Result of SCALE overflows its kind at %L"
msgstr ""
-#: fortran/simplify.c:3844
+#: fortran/simplify.c:3686
#, no-c-format
msgid "Argument of SQRT at %L has a negative value"
msgstr ""
-#: fortran/simplify.c:3906
+#: fortran/simplify.c:3747
#, no-c-format
msgid "TRANSFER intrinsic not implemented for initialization at %L"
msgstr ""
@@ -9445,162 +9896,169 @@ msgstr ""
msgid "Letter %c already has an IMPLICIT type at %C"
msgstr ""
-#: fortran/symbol.c:233
+#: fortran/symbol.c:239
#, no-c-format
msgid "Symbol '%s' at %L has no IMPLICIT type"
msgstr ""
-#: fortran/symbol.c:314
+#: fortran/symbol.c:324
#, no-c-format
msgid "%s attribute not allowed in BLOCK DATA program unit at %L"
msgstr ""
-#: fortran/symbol.c:522 fortran/symbol.c:1046
+#: fortran/symbol.c:570 fortran/symbol.c:1125
#, no-c-format
msgid "%s attribute conflicts with %s attribute at %L"
msgstr ""
-#: fortran/symbol.c:525
+#: fortran/symbol.c:573
#, no-c-format
msgid "%s attribute conflicts with %s attribute in '%s' at %L"
msgstr ""
-#: fortran/symbol.c:533
+#: fortran/symbol.c:581
#, no-c-format
-msgid ""
-"In the selected standard, %s attribute conflicts with %s attribute at %L"
+msgid "Fortran 2003: %s attribute with %s attribute at %L"
msgstr ""
-#: fortran/symbol.c:539
+#: fortran/symbol.c:587
#, no-c-format
-msgid ""
-"In the selected standard, %s attribute conflicts with %s attribute in '%s' "
-"at %L"
+msgid "Fortran 2003: %s attribute with %s attribute in '%s' at %L"
msgstr ""
-#: fortran/symbol.c:582
+#: fortran/symbol.c:630
#, no-c-format
msgid "Cannot change attributes of USE-associated symbol at %L"
msgstr ""
-#: fortran/symbol.c:585
+#: fortran/symbol.c:633
#, no-c-format
msgid "Cannot change attributes of USE-associated symbol %s at %L"
msgstr ""
-#: fortran/symbol.c:607
+#: fortran/symbol.c:649
#, no-c-format
-msgid "Cannot change attributes of symbol at %L after it has been used"
+msgid "Duplicate %s attribute specified at %L"
msgstr ""
-#: fortran/symbol.c:623
+#: fortran/symbol.c:788
#, no-c-format
-msgid "Duplicate %s attribute specified at %L"
+msgid "Cray Pointee at %L appears in multiple pointer() statements"
msgstr ""
-#: fortran/symbol.c:765
+#: fortran/symbol.c:806
#, no-c-format
-msgid "Cray Pointee at %L appears in multiple pointer() statements."
+msgid "Duplicate PROTECTED attribute specified at %L"
msgstr ""
-#: fortran/symbol.c:797
+#: fortran/symbol.c:838
#, no-c-format
msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
msgstr ""
-#: fortran/symbol.c:805
+#: fortran/symbol.c:846
#, no-c-format
msgid "Duplicate SAVE attribute specified at %L"
msgstr ""
-#: fortran/symbol.c:1076
+#: fortran/symbol.c:866
+#, no-c-format
+msgid "Duplicate VALUE attribute specified at %L"
+msgstr ""
+
+#: fortran/symbol.c:885
+#, no-c-format
+msgid "Duplicate VOLATILE attribute specified at %L"
+msgstr ""
+
+#: fortran/symbol.c:1155
#, no-c-format
msgid "%s procedure at %L is already declared as %s procedure"
msgstr ""
-#: fortran/symbol.c:1111
+#: fortran/symbol.c:1190
#, no-c-format
msgid "INTENT (%s) conflicts with INTENT(%s) at %L"
msgstr ""
-#: fortran/symbol.c:1134
+#: fortran/symbol.c:1213
#, no-c-format
msgid "ACCESS specification at %L was already specified"
msgstr ""
-#: fortran/symbol.c:1154
+#: fortran/symbol.c:1233
#, no-c-format
msgid "Symbol '%s' at %L already has an explicit interface"
msgstr ""
-#: fortran/symbol.c:1203
+#: fortran/symbol.c:1278
#, no-c-format
msgid "Symbol '%s' at %L cannot have a type"
msgstr ""
-#: fortran/symbol.c:1343
+#: fortran/symbol.c:1424
#, no-c-format
msgid "Component '%s' at %C already declared at %L"
msgstr ""
-#: fortran/symbol.c:1421
+#: fortran/symbol.c:1502
#, no-c-format
msgid "Symbol '%s' at %C is ambiguous"
msgstr ""
-#: fortran/symbol.c:1453
+#: fortran/symbol.c:1534
#, no-c-format
msgid "Derived type '%s' at %C is being used before it is defined"
msgstr ""
-#: fortran/symbol.c:1481
+#: fortran/symbol.c:1562
#, no-c-format
msgid "'%s' at %C is not a member of the '%s' structure"
msgstr ""
-#: fortran/symbol.c:1487
+#: fortran/symbol.c:1568
#, no-c-format
msgid "Component '%s' at %C is a PRIVATE component of '%s'"
msgstr ""
-#: fortran/symbol.c:1640
+#: fortran/symbol.c:1721
#, no-c-format
msgid "Duplicate statement label %d at %L and %L"
msgstr ""
-#: fortran/symbol.c:1650
+#: fortran/symbol.c:1731
#, no-c-format
msgid "Label %d at %C already referenced as branch target"
msgstr ""
-#: fortran/symbol.c:1659
+#: fortran/symbol.c:1740
#, no-c-format
msgid "Label %d at %C already referenced as a format label"
msgstr ""
-#: fortran/symbol.c:1701
+#: fortran/symbol.c:1782
#, no-c-format
msgid "Label %d at %C previously used as a FORMAT label"
msgstr ""
-#: fortran/symbol.c:1709
+#: fortran/symbol.c:1790
#, no-c-format
msgid "Label %d at %C previously used as branch target"
msgstr ""
-#: fortran/symbol.c:1962
+#: fortran/symbol.c:2044
#, no-c-format
msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'"
msgstr ""
-#: fortran/symbol.c:1965
+#: fortran/symbol.c:2047
#, no-c-format
msgid ""
"Name '%s' at %C is an ambiguous reference to '%s' from current program unit"
msgstr ""
#. Symbol is from another namespace.
-#: fortran/symbol.c:2102
+#: fortran/symbol.c:2188
#, no-c-format
msgid "Symbol '%s' at %C has already been host associated"
msgstr ""
@@ -9662,40 +10120,49 @@ msgstr ""
msgid "COMMON '%s' at %L requires %d bytes of padding at start"
msgstr ""
-#: fortran/trans-decl.c:450
+#: fortran/trans-decl.c:452
#, no-c-format
msgid "storage size not known"
msgstr ""
-#: fortran/trans-decl.c:457
+#: fortran/trans-decl.c:459
#, no-c-format
msgid "storage size not constant"
msgstr ""
-#: fortran/trans-decl.c:2958
+#: fortran/trans-decl.c:2987
#, no-c-format
msgid "Unused parameter %s declared at %L"
msgstr ""
-#: fortran/trans-decl.c:2964
+#: fortran/trans-decl.c:2993
#, no-c-format
msgid "Unused variable %s declared at %L"
msgstr ""
-#: fortran/trans-io.c:994
+#: fortran/trans-expr.c:1951
#, no-c-format
-msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers."
+msgid "Unknown argument list function at %L"
+msgstr ""
+
+#: fortran/trans-intrinsic.c:771
+#, no-c-format
+msgid "'dim' argument of %s intrinsic at %L is not a valid dimension index"
+msgstr ""
+
+#: fortran/trans-intrinsic.c:3402
+msgid "Argument NCOPIES of REPEAT intrinsic is negative"
msgstr ""
-#: fortran/trans-stmt.c:159
+#: fortran/trans-stmt.c:157
msgid "Assigned label is not a target label"
msgstr ""
-#: fortran/trans-stmt.c:186
+#: fortran/trans-stmt.c:184
msgid "Assigned label is not in the list"
msgstr ""
-#: fortran/trans-stmt.c:441
+#: fortran/trans-stmt.c:439
#, no-c-format
msgid "An alternate return at %L without a * dummy argument"
msgstr ""
@@ -9712,313 +10179,130 @@ msgstr ""
msgid "Incorrect function return value"
msgstr ""
-#. FIXME: i18n bug here. Order of prints should not be
-#. fixed.
-#: java/gjavah.c:916
-#, c-format
-msgid "ignored method '"
-msgstr ""
-
-#: java/gjavah.c:918
-#, c-format
-msgid "' marked virtual\n"
-msgstr ""
-
-#: java/gjavah.c:2356
-#, c-format
-msgid "Try '"
-msgstr ""
-
-#: java/gjavah.c:2363
-#, c-format
-msgid "Usage: "
-msgstr ""
-
-#: java/gjavah.c:2364
-#, c-format
-msgid ""
-"Generate C or C++ header files from .class files\n"
-"\n"
-msgstr ""
-
-#: java/gjavah.c:2365
-#, c-format
-msgid " -stubs Generate an implementation stub file\n"
-msgstr ""
-
-#: java/gjavah.c:2366
-#, c-format
-msgid " -jni Generate a JNI header or stub\n"
-msgstr ""
-
-#: java/gjavah.c:2367
-#, c-format
-msgid " -force Always overwrite output files\n"
-msgstr ""
-
-#: java/gjavah.c:2368
-#, c-format
-msgid " -old Unused compatibility option\n"
-msgstr ""
-
-#: java/gjavah.c:2369
-#, c-format
-msgid " -trace Unused compatibility option\n"
-msgstr ""
-
-#: java/gjavah.c:2370
-#, c-format
-msgid " -J OPTION Unused compatibility option\n"
-msgstr ""
-
-#: java/gjavah.c:2372
-#, c-format
-msgid " -add TEXT Insert TEXT into class body\n"
-msgstr ""
-
-#: java/gjavah.c:2373
-#, c-format
-msgid " -append TEXT Insert TEXT after class declaration\n"
-msgstr ""
-
-#: java/gjavah.c:2374
-#, c-format
-msgid " -friend TEXT Insert TEXT as 'friend' declaration\n"
-msgstr ""
-
-#: java/gjavah.c:2375
-#, c-format
-msgid " -prepend TEXT Insert TEXT before start of class\n"
-msgstr ""
-
-#: java/gjavah.c:2377 java/jcf-dump.c:917
-#, c-format
-msgid " --classpath PATH Set path to find .class files\n"
-msgstr ""
-
-#: java/gjavah.c:2378 java/jcf-dump.c:918
-#, c-format
-msgid " -IDIR Append directory to class path\n"
-msgstr ""
-
-#: java/gjavah.c:2379 java/jcf-dump.c:919
-#, c-format
-msgid " --bootclasspath PATH Override built-in class path\n"
-msgstr ""
-
-#: java/gjavah.c:2380 java/jcf-dump.c:920
-#, c-format
-msgid " --extdirs PATH Set extensions directory path\n"
-msgstr ""
-
-#: java/gjavah.c:2381
-#, c-format
-msgid " -d DIRECTORY Set output directory name\n"
-msgstr ""
-
-#: java/gjavah.c:2382 java/jcf-dump.c:921 java/jv-scan.c:115
-#, c-format
-msgid " -o FILE Set output file name\n"
-msgstr ""
-
-#: java/gjavah.c:2383
-#, c-format
-msgid " -td DIRECTORY Set temporary directory name\n"
-msgstr ""
-
-#: java/gjavah.c:2385 java/jcf-dump.c:923 java/jv-scan.c:117
-#, c-format
-msgid " --help Print this help, then exit\n"
-msgstr ""
-
-#: java/gjavah.c:2386 java/jcf-dump.c:924 java/jv-scan.c:118
-#, c-format
-msgid " --version Print version number, then exit\n"
-msgstr ""
-
-#: java/gjavah.c:2387 java/jcf-dump.c:925
-#, c-format
-msgid " -v, --verbose Print extra information while running\n"
-msgstr ""
-
-#: java/gjavah.c:2389
-#, c-format
-msgid ""
-" -M Print all dependencies to stdout;\n"
-" suppress ordinary output\n"
-msgstr ""
-
-#: java/gjavah.c:2391
-#, c-format
-msgid ""
-" -MM Print non-system dependencies to stdout;\n"
-" suppress ordinary output\n"
-msgstr ""
-
-#: java/gjavah.c:2393
-#, c-format
-msgid " -MD Print all dependencies to stdout\n"
-msgstr ""
-
-#: java/gjavah.c:2394
-#, c-format
-msgid " -MMD Print non-system dependencies to stdout\n"
-msgstr ""
-
-#: java/gjavah.c:2397 java/jcf-dump.c:927 java/jv-scan.c:120
-#, c-format
-msgid ""
-"For bug reporting instructions, please see:\n"
-"%s.\n"
-msgstr ""
-
-#: java/gjavah.c:2581
-#, c-format
-msgid "Processing %s\n"
-msgstr ""
-
-#: java/gjavah.c:2591
-#, c-format
-msgid "Found in %s\n"
-msgstr ""
-
-#: java/jcf-dump.c:834
+#: java/jcf-dump.c:1066
#, c-format
msgid "Not a valid Java .class file.\n"
msgstr ""
-#: java/jcf-dump.c:840
+#: java/jcf-dump.c:1072
#, c-format
msgid "error while parsing constant pool\n"
msgstr ""
-#: java/jcf-dump.c:846 java/jcf-parse.c:756
+#: java/jcf-dump.c:1078 java/jcf-parse.c:1461
#, gcc-internal-format
msgid "error in constant pool entry #%d\n"
msgstr ""
-#: java/jcf-dump.c:856
+#: java/jcf-dump.c:1088
#, c-format
msgid "error while parsing fields\n"
msgstr ""
-#: java/jcf-dump.c:862
+#: java/jcf-dump.c:1094
#, c-format
msgid "error while parsing methods\n"
msgstr ""
-#: java/jcf-dump.c:868
+#: java/jcf-dump.c:1100
#, c-format
msgid "error while parsing final attributes\n"
msgstr ""
-#: java/jcf-dump.c:905
+#: java/jcf-dump.c:1137
#, c-format
msgid "Try 'jcf-dump --help' for more information.\n"
msgstr ""
-#: java/jcf-dump.c:912
+#: java/jcf-dump.c:1144
#, c-format
msgid ""
"Usage: jcf-dump [OPTION]... CLASS...\n"
"\n"
msgstr ""
-#: java/jcf-dump.c:913
+#: java/jcf-dump.c:1145
#, c-format
msgid ""
"Display contents of a class file in readable form.\n"
"\n"
msgstr ""
-#: java/jcf-dump.c:914
+#: java/jcf-dump.c:1146
#, c-format
msgid " -c Disassemble method bodies\n"
msgstr ""
-#: java/jcf-dump.c:915
+#: java/jcf-dump.c:1147
#, c-format
msgid " --javap Generate output in 'javap' format\n"
msgstr ""
-#: java/jcf-dump.c:955 java/jcf-dump.c:1023
-#, c-format
-msgid "jcf-dump: no classes specified\n"
-msgstr ""
-
-#: java/jcf-dump.c:1043
-#, c-format
-msgid "Cannot open '%s' for output.\n"
-msgstr ""
-
-#: java/jcf-dump.c:1089
+#: java/jcf-dump.c:1149
#, c-format
-msgid "bad format of .zip/.jar archive\n"
+msgid " --classpath PATH Set path to find .class files\n"
msgstr ""
-#: java/jcf-dump.c:1207
+#: java/jcf-dump.c:1150
#, c-format
-msgid "Bad byte codes.\n"
+msgid " -IDIR Append directory to class path\n"
msgstr ""
-#: java/jv-scan.c:100
+#: java/jcf-dump.c:1151
#, c-format
-msgid "Try 'jv-scan --help' for more information.\n"
+msgid " --bootclasspath PATH Override built-in class path\n"
msgstr ""
-#: java/jv-scan.c:107
+#: java/jcf-dump.c:1152
#, c-format
-msgid ""
-"Usage: jv-scan [OPTION]... FILE...\n"
-"\n"
+msgid " --extdirs PATH Set extensions directory path\n"
msgstr ""
-#: java/jv-scan.c:108
+#: java/jcf-dump.c:1153
#, c-format
-msgid ""
-"Print useful information read from Java source files.\n"
-"\n"
+msgid " -o FILE Set output file name\n"
msgstr ""
-#: java/jv-scan.c:109
+#: java/jcf-dump.c:1155
#, c-format
-msgid " --no-assert Don't recognize the assert keyword\n"
+msgid " --help Print this help, then exit\n"
msgstr ""
-#: java/jv-scan.c:110
+#: java/jcf-dump.c:1156
#, c-format
-msgid " --complexity Print cyclomatic complexity of input file\n"
+msgid " --version Print version number, then exit\n"
msgstr ""
-#: java/jv-scan.c:111
+#: java/jcf-dump.c:1157
#, c-format
-msgid " --encoding NAME Specify encoding of input file\n"
+msgid " -v, --verbose Print extra information while running\n"
msgstr ""
-#: java/jv-scan.c:112
+#: java/jcf-dump.c:1159
#, c-format
-msgid " --print-main Print name of class containing 'main'\n"
+msgid ""
+"For bug reporting instructions, please see:\n"
+"%s.\n"
msgstr ""
-#: java/jv-scan.c:113
+#: java/jcf-dump.c:1187 java/jcf-dump.c:1255
#, c-format
-msgid " --list-class List all classes defined in file\n"
+msgid "jcf-dump: no classes specified\n"
msgstr ""
-#: java/jv-scan.c:114
+#: java/jcf-dump.c:1275
#, c-format
-msgid ""
-" --list-filename Print input filename when listing class names\n"
+msgid "Cannot open '%s' for output.\n"
msgstr ""
-#: java/jv-scan.c:257
+#: java/jcf-dump.c:1321
#, c-format
-msgid "%s: error: "
+msgid "bad format of .zip/.jar archive\n"
msgstr ""
-#: java/jv-scan.c:269 java/jv-scan.c:280
+#: java/jcf-dump.c:1439
#, c-format
-msgid "%s: warning: "
+msgid "Bad byte codes.\n"
msgstr ""
#: java/jvgenmain.c:48
@@ -10026,368 +10310,151 @@ msgstr ""
msgid "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n"
msgstr ""
-#: java/jvgenmain.c:101
+#: java/jvgenmain.c:110
#, c-format
msgid "%s: Cannot open output file: %s\n"
msgstr ""
-#: java/jvgenmain.c:138
+#: java/jvgenmain.c:152
#, c-format
msgid "%s: Failed to close output file %s\n"
msgstr ""
-#: java/jvspec.c:427
+#: java/jvspec.c:410
#, c-format
msgid "can't specify '-D' without '--main'\n"
msgstr ""
-#: java/jvspec.c:430
+#: java/jvspec.c:413
#, c-format
msgid "'%s' is not a valid class name"
msgstr ""
-#: java/jvspec.c:436
+#: java/jvspec.c:419
#, c-format
msgid "--resource requires -o"
msgstr ""
-#: java/jvspec.c:450
+#: java/jvspec.c:433
#, c-format
msgid "cannot specify both -C and -o"
msgstr ""
-#: java/jvspec.c:462
+#: java/jvspec.c:445
#, c-format
msgid "cannot create temporary file"
msgstr ""
-#: java/jvspec.c:490
+#: java/jvspec.c:467
#, c-format
msgid "using both @FILE with multiple files not implemented"
msgstr ""
-#: java/jvspec.c:555
+#: java/jvspec.c:589
#, c-format
msgid "cannot specify 'main' class when not linking"
msgstr ""
-#: java/parse-scan.y:879
-#: java/parse.y:961
-#: java/parse.y:1307
-#: java/parse.y:1369
-#: java/parse.y:1577
-#: java/parse.y:1800
-#: java/parse.y:1809
-#: java/parse.y:1820
-#: java/parse.y:1831
-#: java/parse.y:1843
-#: java/parse.y:1858
-#: java/parse.y:1875
-#: java/parse.y:1877
-#: java/parse.y:1958
-#: java/parse.y:2135
-#: java/parse.y:2204
-#: java/parse.y:2368
-#: java/parse.y:2381
-#: java/parse.y:2388
-#: java/parse.y:2395
-#: java/parse.y:2406
-#: java/parse.y:2408
-#: java/parse.y:2446
-#: java/parse.y:2448
-#: java/parse.y:2450
-#: java/parse.y:2471
-#: java/parse.y:2473
-#: java/parse.y:2475
-#: java/parse.y:2491
-#: java/parse.y:2493
-#: java/parse.y:2514
-#: java/parse.y:2516
-#: java/parse.y:2518
-#: java/parse.y:2546
-#: java/parse.y:2548
-#: java/parse.y:2550
-#: java/parse.y:2552
-#: java/parse.y:2570
-#: java/parse.y:2572
-#: java/parse.y:2583
-#: java/parse.y:2594
-#: java/parse.y:2605
-#: java/parse.y:2616
-#: java/parse.y:2627
-#: java/parse.y:2640
-#: java/parse.y:2644
-#: java/parse.y:2646
-#: java/parse.y:2659
-msgid "Missing term"
-msgstr ""
-
-#: java/parse-scan.y:881
-#: java/parse.y:741
-#: java/parse.y:779
-#: java/parse.y:804
-#: java/parse.y:982
-#: java/parse.y:1343
-#: java/parse.y:1553
-#: java/parse.y:1555
-#: java/parse.y:1785
-#: java/parse.y:1811
-#: java/parse.y:1822
-#: java/parse.y:1833
-#: java/parse.y:1845
-#: java/parse.y:1860
-msgid "';' expected"
-msgstr ""
-
-#: java/parse-scan.y:1372
-#: java/parse.y:16544
-msgid "parse error"
-msgstr ""
-
-#: java/parse-scan.y:1373
-#: java/parse.y:16545
-msgid "syntax error; also virtual memory exhausted"
-msgstr ""
-
-#: java/parse-scan.y:1374
-#: java/parse.y:16546
-msgid "parse error; also virtual memory exhausted"
-msgstr ""
-
-#: java/parse-scan.y:1376
-#: java/parse.y:16548
-msgid "parse error: cannot back up"
-msgstr ""
-
-#: java/parse.y:739
-#: java/parse.y:777
-msgid "Missing name"
-msgstr ""
-
-#: java/parse.y:802
-msgid "'*' expected"
-msgstr ""
-
-#: java/parse.y:816
-msgid "Class or interface declaration expected"
-msgstr ""
-
-#: java/parse.y:853
-#: java/parse.y:855
-msgid "Missing class name"
-msgstr ""
-
-#: java/parse.y:858
-#: java/parse.y:862
-#: java/parse.y:870
-#: java/parse.y:1022
-#: java/parse.y:1288
-#: java/parse.y:1290
-#: java/parse.y:1620
-#: java/parse.y:1871
-#: java/parse.y:1903
-#: java/parse.y:1965
-msgid "'{' expected"
-msgstr ""
-
-#: java/parse.y:872
-msgid "Missing super class name"
-msgstr ""
-
-#: java/parse.y:882
-#: java/parse.y:898
-msgid "Missing interface name"
-msgstr ""
-
-#: java/parse.y:976
-msgid "Missing variable initializer"
-msgstr ""
-
-#: java/parse.y:993
-msgid "Invalid declaration"
-msgstr ""
-
-#: java/parse.y:996
-#: java/parse.y:1086
-#: java/parse.y:2150
-#: java/parse.y:2179
-#: java/parse.y:2201
-#: java/parse.y:2205
-#: java/parse.y:2240
-#: java/parse.y:2319
-#: java/parse.y:2329
-#: java/parse.y:2339
-msgid "']' expected"
-msgstr ""
-
-#: java/parse.y:1000
-msgid "Unbalanced ']'"
-msgstr ""
-
-#: java/parse.y:1036
-msgid "Invalid method declaration, method name required"
-msgstr ""
-
-#: java/parse.y:1042
-#: java/parse.y:1048
-#: java/parse.y:1054
-#: java/parse.y:2053
-msgid "Identifier expected"
-msgstr ""
-
-#: java/parse.y:1060
-#: java/parse.y:4738
-#, gcc-internal-format
-msgid "Invalid method declaration, return type required"
-msgstr ""
-
-#: java/parse.y:1084
-#: java/parse.y:1533
-#: java/parse.y:1540
-#: java/parse.y:1549
-#: java/parse.y:1551
-#: java/parse.y:1579
-#: java/parse.y:1688
-#: java/parse.y:1995
-#: java/parse.y:2048
-msgid "')' expected"
-msgstr ""
-
-#: java/parse.y:1100
-msgid "Missing formal parameter term"
-msgstr ""
-
-#: java/parse.y:1115
-#: java/parse.y:1120
-msgid "Missing identifier"
-msgstr ""
-
-#: java/parse.y:1140
-#: java/parse.y:1149
-msgid "Missing class type term"
-msgstr ""
-
-#: java/parse.y:1305
-msgid "Invalid interface type"
-msgstr ""
-
-#: java/parse.y:1493
-#: java/parse.y:1667
-#: java/parse.y:1669
-msgid "':' expected"
-msgstr ""
-
-#: java/parse.y:1519
-#: java/parse.y:1524
-#: java/parse.y:1529
-msgid "Invalid expression statement"
+#: config/i386/nwld.h:35
+msgid "Static linking is not supported.\n"
msgstr ""
-#: java/parse.y:1547
-#: java/parse.y:1575
-#: java/parse.y:1616
-#: java/parse.y:1684
-#: java/parse.y:1752
-#: java/parse.y:1873
-#: java/parse.y:1951
-#: java/parse.y:2042
-#: java/parse.y:2044
-#: java/parse.y:2057
-#: java/parse.y:2300
-#: java/parse.y:2302
-msgid "'(' expected"
+#: gcc.c:779
+msgid "GCC does not support -C or -CC without -E"
msgstr ""
-#: java/parse.y:1618
-msgid "Missing term or ')'"
+#: gcc.c:807 java/jvspec.c:81 ada/lang-specs.h:34
+msgid "-pg and -fomit-frame-pointer are incompatible"
msgstr ""
-#: java/parse.y:1665
-msgid "Missing or invalid constant expression"
+#: gcc.c:983
+msgid "-E or -x required when input is from standard input"
msgstr ""
-#: java/parse.y:1686
-msgid "Missing term and ')' expected"
+#: config/i386/cygwin.h:29
+msgid "mno-cygwin and mno-win32 are not compatible"
msgstr ""
-#: java/parse.y:1725
-msgid "Invalid control expression"
+#: config/i386/cygwin.h:70 config/i386/mingw32.h:58
+msgid "shared and mdll are not compatible"
msgstr ""
-#: java/parse.y:1727
-#: java/parse.y:1729
-msgid "Invalid update expression"
+#: config/arm/arm.h:143
+msgid "-msoft-float and -mhard_float may not be used together"
msgstr ""
-#: java/parse.y:1754
-msgid "Invalid init statement"
+#: config/arm/arm.h:145
+msgid "-mbig-endian and -mlittle-endian may not be used together"
msgstr ""
-#: java/parse.y:1954
-msgid "Missing term or ')' expected"
+#: config/mcore/mcore.h:57
+msgid "the m210 does not have little endian support"
msgstr ""
-#: java/parse.y:1997
-msgid "'class' or 'this' expected"
+#: config/vax/netbsd-elf.h:42
+msgid "the -shared option is not currently supported for VAX ELF"
msgstr ""
-#: java/parse.y:1999
-#: java/parse.y:2001
-msgid "'class' expected"
+#: config/sparc/netbsd-elf.h:126 config/sparc/netbsd-elf.h:145
+#: config/sparc/sol2-bi.h:207 config/sparc/sol2-bi.h:217
+#: config/sparc/linux64.h:211 config/sparc/linux64.h:222
+msgid "may not use both -m32 and -m64"
msgstr ""
-#: java/parse.y:2046
-msgid "')' or term expected"
+#: config/sparc/sol2-bi.h:179 config/sparc/sol2-bi.h:184
+#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
+msgid "does not support multilib"
msgstr ""
-#: java/parse.y:2148
-#: java/parse.y:2177
-msgid "'[' expected"
+#: config/sh/sh.h:460
+msgid "SH2a does not support little-endian"
msgstr ""
-#: java/parse.y:2255
-msgid "Field expected"
+#: config/i386/sco5.h:189
+msgid "-pg not supported on this platform"
msgstr ""
-#: java/parse.y:2314
-#: java/parse.y:2324
-#: java/parse.y:2334
-msgid "Missing term and ']' expected"
+#: config/i386/sco5.h:190
+msgid "-p and -pp specified - pick one"
msgstr ""
-#: java/parse.y:2439
-msgid "']' expected, invalid type expression"
+#: config/i386/sco5.h:259
+msgid "-G and -static are mutually exclusive"
msgstr ""
-#: java/parse.y:2442
-msgid "Invalid type expression"
+#: java/lang-specs.h:34
+msgid "-fjni and -femit-class-files are incompatible"
msgstr ""
-#: java/parse.y:2554
-msgid "Invalid reference type"
+#: java/lang-specs.h:35
+msgid "-fjni and -femit-class-file are incompatible"
msgstr ""
-#: java/parse.y:3025
-msgid "Constructor invocation must be first thing in a constructor"
+#: java/lang-specs.h:36 java/lang-specs.h:37
+msgid "-femit-class-file should used along with -fsyntax-only"
msgstr ""
-#: java/parse.y:3027
-msgid "Only constructors can invoke constructors"
+#: config/alpha/linux-elf.h:34 config/alpha/linux-elf.h:36 config/linux.h:107
+#: config/linux.h:109 config/rs6000/linux64.h:348 config/rs6000/linux64.h:350
+#: config/sparc/linux.h:127 config/sparc/linux.h:129
+#: config/sparc/linux64.h:152 config/sparc/linux64.h:154
+#: config/rs6000/sysv4.h:900 config/rs6000/sysv4.h:902
+msgid "-mglibc and -muclibc used together"
msgstr ""
-#: gcc.c:773
-msgid "GCC does not support -C or -CC without -E"
+#: config/vax/vax.h:50 config/vax/vax.h:51
+msgid "profiling not supported with -mg\n"
msgstr ""
-#: gcc.c:800 ada/lang-specs.h:34 java/jvspec.c:80
-msgid "-pg and -fomit-frame-pointer are incompatible"
+#: config/rs6000/darwin.h:95
+msgid " conflicting code gen style switches are used"
msgstr ""
-#: gcc.c:975
-msgid "-E or -x required when input is from standard input"
+#: config/s390/tpf.h:120
+msgid "static is not supported on TPF-OS"
msgstr ""
-#: config/mips/mips.h:871 config/arc/arc.h:62
+#: config/mips/mips.h:859 config/arc/arc.h:62
msgid "may not use both -EB and -EL"
msgstr ""
@@ -10399,14 +10466,6 @@ msgstr ""
msgid "-msingle-float and -msoft-float cannot both be specified"
msgstr ""
-#: config/alpha/linux-elf.h:34 config/alpha/linux-elf.h:36 config/linux.h:106
-#: config/linux.h:108 config/rs6000/linux64.h:344 config/rs6000/linux64.h:346
-#: config/sparc/linux.h:127 config/sparc/linux.h:129
-#: config/sparc/linux64.h:152 config/sparc/linux64.h:154
-#: config/rs6000/sysv4.h:904 config/rs6000/sysv4.h:906
-msgid "-mglibc and -muclibc used together"
-msgstr ""
-
#: config/lynx.h:71
msgid "cannot use mthreads and mlegacy-threads together"
msgstr ""
@@ -10415,125 +10474,46 @@ msgstr ""
msgid "cannot use mshared and static together"
msgstr ""
-#: config/vax/netbsd-elf.h:42
-msgid "the -shared option is not currently supported for VAX ELF"
-msgstr ""
-
-#: config/i386/mingw32.h:58 config/i386/cygwin.h:70
-msgid "shared and mdll are not compatible"
-msgstr ""
-
-#: config/vax/vax.h:50 config/vax/vax.h:51
-msgid "profiling not supported with -mg\n"
-msgstr ""
-
-#: config/sparc/linux64.h:211 config/sparc/linux64.h:222
-#: config/sparc/netbsd-elf.h:126 config/sparc/netbsd-elf.h:145
-#: config/sparc/sol2-bi.h:207 config/sparc/sol2-bi.h:217
-msgid "may not use both -m32 and -m64"
-msgstr ""
-
-#: config/sh/sh.h:458
-msgid "SH2a does not support little-endian"
-msgstr ""
-
-#: java/lang-specs.h:34
-msgid "-fjni and -femit-class-files are incompatible"
-msgstr ""
-
-#: java/lang-specs.h:35
-msgid "-fjni and -femit-class-file are incompatible"
-msgstr ""
-
-#: java/lang-specs.h:36 java/lang-specs.h:37
-msgid "-femit-class-file should used along with -fsyntax-only"
+#: ada/lang-specs.h:35
+msgid "-c or -S required for Ada"
msgstr ""
-#: config/i386/nwld.h:35
-msgid "Static linking is not supported.\n"
+#: config/vxworks.h:69
+msgid "-Xbind-now and -Xbind-lazy are incompatible"
msgstr ""
-#: config/darwin.h:264
+#: config/darwin.h:268
msgid "-current_version only allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:266
+#: config/darwin.h:270
msgid "-install_name only allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:271
+#: config/darwin.h:275
msgid "-bundle not allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:272
+#: config/darwin.h:276
msgid "-bundle_loader not allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:273
+#: config/darwin.h:277
msgid "-client_name not allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:278
+#: config/darwin.h:282
msgid "-force_flat_namespace not allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:280
+#: config/darwin.h:284
msgid "-keep_private_externs not allowed with -dynamiclib"
msgstr ""
-#: config/darwin.h:281
+#: config/darwin.h:285
msgid "-private_bundle not allowed with -dynamiclib"
msgstr ""
-#: config/rs6000/darwin.h:126
-msgid " conflicting code gen style switches are used"
-msgstr ""
-
-#: config/mcore/mcore.h:57
-msgid "the m210 does not have little endian support"
-msgstr ""
-
-#: config/vxworks.h:66
-msgid "-Xbind-now and -Xbind-lazy are incompatible"
-msgstr ""
-
-#: ada/lang-specs.h:35
-msgid "-c or -S required for Ada"
-msgstr ""
-
-#: config/sparc/sol2-bi.h:179 config/sparc/sol2-bi.h:184
-#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
-msgid "does not support multilib"
-msgstr ""
-
-#: config/i386/cygwin.h:29
-msgid "mno-cygwin and mno-win32 are not compatible"
-msgstr ""
-
-#: config/i386/sco5.h:189
-msgid "-pg not supported on this platform"
-msgstr ""
-
-#: config/i386/sco5.h:190
-msgid "-p and -pp specified - pick one"
-msgstr ""
-
-#: config/i386/sco5.h:259
-msgid "-G and -static are mutually exclusive"
-msgstr ""
-
-#: config/arm/arm.h:141
-msgid "-msoft-float and -mhard_float may not be used together"
-msgstr ""
-
-#: config/arm/arm.h:143
-msgid "-mbig-endian and -mlittle-endian may not be used together"
-msgstr ""
-
-#: config/s390/tpf.h:120
-msgid "static is not supported on TPF-OS"
-msgstr ""
-
#: java/lang.opt:66
msgid "Warn if a deprecated compiler feature, class, method, or field is used"
msgstr ""
@@ -10554,89 +10534,97 @@ msgstr ""
msgid "Deprecated; use --classpath instead"
msgstr ""
-#: java/lang.opt:86
+#: java/lang.opt:89
msgid "Permit the use of the assert keyword"
msgstr ""
-#: java/lang.opt:108
+#: java/lang.opt:111
msgid "Replace system path"
msgstr ""
-#: java/lang.opt:112
+#: java/lang.opt:115
msgid "Generate checks for references to NULL"
msgstr ""
-#: java/lang.opt:116
+#: java/lang.opt:119
msgid "Set class path"
msgstr ""
-#: java/lang.opt:123
+#: java/lang.opt:126
msgid "Output a class file"
msgstr ""
-#: java/lang.opt:127
+#: java/lang.opt:130
msgid "Alias for -femit-class-file"
msgstr ""
-#: java/lang.opt:131
+#: java/lang.opt:134
msgid "Choose input encoding (defaults from your locale)"
msgstr ""
-#: java/lang.opt:135
+#: java/lang.opt:138
msgid "Set the extension directory path"
msgstr ""
-#: java/lang.opt:139
+#: java/lang.opt:145
msgid "Input file is a file with a list of filenames to compile"
msgstr ""
-#: java/lang.opt:143
+#: java/lang.opt:152
msgid "Always check for non gcj generated classes archives"
msgstr ""
-#: java/lang.opt:147
+#: java/lang.opt:156
msgid ""
"Assume the runtime uses a hash table to map an object to its synchronization "
"structure"
msgstr ""
-#: java/lang.opt:151
+#: java/lang.opt:160
msgid "Generate instances of Class at runtime"
msgstr ""
-#: java/lang.opt:155
+#: java/lang.opt:164
msgid "Use offset tables for virtual method calls"
msgstr ""
-#: java/lang.opt:162
+#: java/lang.opt:171
msgid "Assume native functions are implemented using JNI"
msgstr ""
-#: java/lang.opt:166
+#: java/lang.opt:175
msgid "Enable optimization of static class initialization code"
msgstr ""
-#: java/lang.opt:173
+#: java/lang.opt:182
msgid "Reduce the amount of reflection meta-data generated"
msgstr ""
-#: java/lang.opt:177
+#: java/lang.opt:186
msgid "Enable assignability checks for stores into object arrays"
msgstr ""
-#: java/lang.opt:181
+#: java/lang.opt:190
msgid "Generate code for the Boehm GC"
msgstr ""
-#: java/lang.opt:185
+#: java/lang.opt:194
msgid "Call a library routine to do integer divisions"
msgstr ""
-#: java/lang.opt:189
+#: java/lang.opt:198
msgid "Generated should be loaded by bootstrap loader"
msgstr ""
-#: ada/lang.opt:86
+#: java/lang.opt:202
+msgid "Set the source language version"
+msgstr ""
+
+#: java/lang.opt:206
+msgid "Set the target VM version"
+msgstr ""
+
+#: ada/lang.opt:90
msgid "Specify options to GNAT"
msgstr ""
@@ -10657,219 +10645,227 @@ msgid "Warn about missing ampersand in continued character constants"
msgstr ""
#: fortran/lang.opt:50
-msgid "Warn about implicit conversion"
+msgid "Warn about truncated character expressions"
msgstr ""
#: fortran/lang.opt:54
-msgid "Warn about calls with implicit interface"
+msgid "Warn about implicit conversion"
msgstr ""
#: fortran/lang.opt:58
-msgid "Warn about truncated source lines"
+msgid "Warn about calls with implicit interface"
msgstr ""
#: fortran/lang.opt:62
-msgid "Warn about usage of non-standard intrinsics"
+msgid "Warn about truncated source lines"
msgstr ""
#: fortran/lang.opt:66
-msgid "Warn about \"suspicious\" constructs"
+msgid "Warn about usage of non-standard intrinsics"
msgstr ""
#: fortran/lang.opt:70
-msgid "Permit nonconforming uses of the tab character"
+msgid "Warn about \"suspicious\" constructs"
msgstr ""
#: fortran/lang.opt:74
-msgid "Warn about underflow of numerical constant expressions"
+msgid "Permit nonconforming uses of the tab character"
msgstr ""
#: fortran/lang.opt:78
-msgid "All intrinsics procedures are available regardless of selected standard"
+msgid "Warn about underflow of numerical constant expressions"
msgstr ""
#: fortran/lang.opt:82
+msgid "All intrinsics procedures are available regardless of selected standard"
+msgstr ""
+
+#: fortran/lang.opt:90
msgid ""
"Do not treat local variables and COMMON blocks as if they were named in SAVE "
"statements"
msgstr ""
-#: fortran/lang.opt:86
+#: fortran/lang.opt:94
msgid "Specify that backslash in string introduces an escape character"
msgstr ""
-#: fortran/lang.opt:90
-msgid ""
-"Specify that an external BLAS library should be used for matmul calls on "
-"large-size arrays"
-msgstr ""
-
-#: fortran/lang.opt:94
+#: fortran/lang.opt:98
msgid ""
"-fblas-matmul-limit=<n> Size of the smallest matrix for which matmul "
"will use BLAS"
msgstr ""
-#: fortran/lang.opt:98
-msgid "Set the default double precision kind to an 8 byte wide type"
-msgstr ""
-
#: fortran/lang.opt:102
-msgid "Set the default integer kind to an 8 byte wide type"
+msgid "Use big-endian format for unformatted files"
msgstr ""
#: fortran/lang.opt:106
-msgid "Set the default real kind to an 8 byte wide type"
+msgid "Use little-endian format for unformatted files"
msgstr ""
#: fortran/lang.opt:110
-msgid "Ignore 'D' in column one in fixed form"
+msgid "Use native format for unformatted files"
msgstr ""
#: fortran/lang.opt:114
-msgid "Treat lines with 'D' in column one as comments"
+msgid "Swap endianness for unformatted files"
msgstr ""
#: fortran/lang.opt:118
-msgid "Allow dollar signs in entity names"
+msgid "Use the Cray Pointer extension"
msgstr ""
#: fortran/lang.opt:122
-msgid "Display the code tree after parsing"
+msgid "Ignore 'D' in column one in fixed form"
msgstr ""
#: fortran/lang.opt:126
-msgid "Use f2c calling convention"
+msgid "Treat lines with 'D' in column one as comments"
msgstr ""
#: fortran/lang.opt:130
-msgid "Assume that the source file is fixed form"
+msgid "Set the default double precision kind to an 8 byte wide type"
msgstr ""
#: fortran/lang.opt:134
-msgid "Assume that the source file is free form"
+msgid "Set the default integer kind to an 8 byte wide type"
msgstr ""
-#: fortran/lang.opt:138 c.opt:626
-msgid "Enable OpenMP"
+#: fortran/lang.opt:138
+msgid "Set the default real kind to an 8 byte wide type"
msgstr ""
#: fortran/lang.opt:142
-msgid "Append underscores to externally visible names"
+msgid "Allow dollar signs in entity names"
msgstr ""
#: fortran/lang.opt:146
-msgid "Use the Cray Pointer extension"
+msgid "Dump a core file when a runtime error occurs"
msgstr ""
#: fortran/lang.opt:150
-msgid "Append a second underscore if the name already contains an underscore"
+msgid "Display the code tree after parsing"
msgstr ""
#: fortran/lang.opt:154
msgid ""
-"Specify that no implicit typing is allowed, unless overridden by explicit "
-"IMPLICIT statements"
+"Specify that an external BLAS library should be used for matmul calls on "
+"large-size arrays"
msgstr ""
#: fortran/lang.opt:158
-msgid "Allow arbitrary character line width in fixed mode"
+msgid "Use f2c calling convention"
msgstr ""
#: fortran/lang.opt:162
-msgid "Use n as character line width in fixed mode"
+msgid "Assume that the source file is fixed form"
msgstr ""
#: fortran/lang.opt:166
-msgid "Allow arbitrary character line width in free mode"
+msgid "Specify where to find the compiled intrinsic modules"
msgstr ""
#: fortran/lang.opt:170
-msgid "Use n as character line width in free mode"
+msgid "Allow arbitrary character line width in fixed mode"
msgstr ""
#: fortran/lang.opt:174
-msgid "Maximum identifier length"
+msgid "Use n as character line width in fixed mode"
msgstr ""
#: fortran/lang.opt:178
-msgid "Size in bytes of the largest array that will be put on the stack"
+msgid "Stop on following floating point exceptions"
msgstr ""
#: fortran/lang.opt:182
-msgid "Set default accessibility of module entities to PRIVATE"
+msgid "Assume that the source file is free form"
msgstr ""
#: fortran/lang.opt:186
-msgid "Don't generate code, just do syntax and semantics checking"
+msgid "Allow arbitrary character line width in free mode"
msgstr ""
#: fortran/lang.opt:190
-msgid "Enable range checking during compilation"
+msgid "Use n as character line width in free mode"
msgstr ""
#: fortran/lang.opt:194
-msgid "Try to layout derived types as compact as possible"
+msgid ""
+"Specify that no implicit typing is allowed, unless overridden by explicit "
+"IMPLICIT statements"
msgstr ""
#: fortran/lang.opt:198
-msgid "Copy array sections into a contiguous block on procedure entry"
+msgid "Maximum number of errors to report"
msgstr ""
#: fortran/lang.opt:202
-msgid "Treat the input file as preprocessed"
+msgid "Maximum identifier length"
msgstr ""
#: fortran/lang.opt:206
-msgid "Set the kind for a real with the 'q' exponent to 'n'"
+msgid "Maximum length for subrecords"
msgstr ""
#: fortran/lang.opt:210
-msgid "Stop on following floating point exceptions"
+msgid "Size in bytes of the largest array that will be put on the stack"
msgstr ""
-#: fortran/lang.opt:214
-msgid "Conform to the ISO Fortran 95 standard"
+#: fortran/lang.opt:214 c.opt:652
+msgid "Enable OpenMP"
msgstr ""
#: fortran/lang.opt:218
-msgid "Conform to the ISO Fortran 2003 standard"
+msgid "Try to layout derived types as compact as possible"
msgstr ""
#: fortran/lang.opt:222
-msgid "Conform nothing in particular"
+msgid "Treat the input file as preprocessed"
msgstr ""
#: fortran/lang.opt:226
-msgid "Accept extensions to support legacy code"
+msgid "Enable range checking during compilation"
msgstr ""
-#: fortran/lang.opt:230 c.opt:669
-msgid "Use the narrowest integer type possible for enumeration types"
+#: fortran/lang.opt:230
+msgid "Use a 4-byte record marker for unformatted files"
msgstr ""
#: fortran/lang.opt:234
-msgid "Use little-endian format for unformatted files"
+msgid "Use an 8-byte record marker for unformatted files"
msgstr ""
#: fortran/lang.opt:238
-msgid "Use big-endian format for unformatted files"
+msgid "Copy array sections into a contiguous block on procedure entry"
msgstr ""
#: fortran/lang.opt:242
-msgid "Use native format for unformatted files"
+msgid "Append a second underscore if the name already contains an underscore"
msgstr ""
-#: fortran/lang.opt:246
-msgid "Swap endianness for unformatted files"
+#: fortran/lang.opt:246 c.opt:695
+msgid "Use the narrowest integer type possible for enumeration types"
msgstr ""
#: fortran/lang.opt:250
-msgid "Use a 4-byte record marker for unformatted files"
+msgid "Append underscores to externally visible names"
msgstr ""
#: fortran/lang.opt:254
-msgid "Use an 8-byte record marker for unformatted files"
+msgid "Conform to the ISO Fortran 2003 standard"
+msgstr ""
+
+#: fortran/lang.opt:258
+msgid "Conform to the ISO Fortran 95 standard"
+msgstr ""
+
+#: fortran/lang.opt:262
+msgid "Conform nothing in particular"
+msgstr ""
+
+#: fortran/lang.opt:266
+msgid "Accept extensions to support legacy code"
msgstr ""
#: treelang/lang.opt:30
@@ -10880,7 +10876,7 @@ msgstr ""
msgid "Trace the parsing process"
msgstr ""
-#: config/alpha/alpha.opt:24 config/i386/i386.opt:186
+#: config/alpha/alpha.opt:24 config/i386/i386.opt:190
msgid "Do not use hardware fp"
msgstr ""
@@ -11045,7 +11041,7 @@ msgstr ""
msgid "Change the ABI to allow double word insns"
msgstr ""
-#: config/frv/frv.opt:93 config/bfin/bfin.opt:53
+#: config/frv/frv.opt:93 config/bfin/bfin.opt:62
msgid "Enable Function Descriptor PIC mode"
msgstr ""
@@ -11073,7 +11069,7 @@ msgstr ""
msgid "Enable use of GPREL for read-only data in FDPIC"
msgstr ""
-#: config/frv/frv.opt:121 config/rs6000/rs6000.opt:101
+#: config/frv/frv.opt:121 config/rs6000/rs6000.opt:113
#: config/pdp11/pdp11.opt:72
msgid "Use hardware floating point"
msgstr ""
@@ -11239,7 +11235,7 @@ msgid ""
msgstr ""
#: config/s390/s390.opt:84 config/ia64/ia64.opt:97 config/sparc/sparc.opt:96
-#: config/i386/i386.opt:226 config/rs6000/rs6000.opt:211
+#: config/i386/i386.opt:254 config/rs6000/rs6000.opt:223
msgid "Schedule code for given CPU"
msgstr ""
@@ -11347,7 +11343,7 @@ msgstr ""
msgid "Enable earlier placing stop bits for better scheduling"
msgstr ""
-#: config/ia64/ia64.opt:89 config/pa/pa.opt:52
+#: config/ia64/ia64.opt:89 config/spu/spu.opt:57 config/pa/pa.opt:52
msgid "Specify range of registers to make fixed"
msgstr ""
@@ -11500,7 +11496,7 @@ msgstr ""
msgid "Optimize tail call instructions in assembler and linker"
msgstr ""
-#: config/sparc/sparc.opt:92 config/rs6000/rs6000.opt:207
+#: config/sparc/sparc.opt:92 config/rs6000/rs6000.opt:219
msgid "Use features of and schedule code for given CPU"
msgstr ""
@@ -11592,15 +11588,15 @@ msgstr ""
msgid "Generate code for a 5407"
msgstr ""
-#: config/m68k/m68k.opt:44
-msgid "Generate code for a ColdFire v4e"
+#: config/m68k/m68k.opt:44 config/m68k/m68k.opt:105
+msgid "Generate code for a 68000"
msgstr ""
-#: config/m68k/m68k.opt:48 config/m68k/m68k.opt:101
-msgid "Generate code for a 68000"
+#: config/m68k/m68k.opt:48
+msgid "Generate code for a 68010"
msgstr ""
-#: config/m68k/m68k.opt:52 config/m68k/m68k.opt:105
+#: config/m68k/m68k.opt:52 config/m68k/m68k.opt:109
msgid "Generate code for a 68020"
msgstr ""
@@ -11644,58 +11640,82 @@ msgstr ""
msgid "Align variables on a 32-bit boundary"
msgstr ""
-#: config/m68k/m68k.opt:97
+#: config/m68k/m68k.opt:97 config/arm/arm.opt:50
+msgid "Specify the name of the target architecture"
+msgstr ""
+
+#: config/m68k/m68k.opt:101
msgid "Use the bit-field instructions"
msgstr ""
-#: config/m68k/m68k.opt:109
+#: config/m68k/m68k.opt:113
+msgid "Generate code for a ColdFire v4e"
+msgstr ""
+
+#: config/m68k/m68k.opt:117
+msgid "Specify the target CPU"
+msgstr ""
+
+#: config/m68k/m68k.opt:121
msgid "Generate code for a cpu32"
msgstr ""
-#: config/m68k/m68k.opt:113
+#: config/m68k/m68k.opt:125
+msgid "Use hardware division instructions on ColdFire"
+msgstr ""
+
+#: config/m68k/m68k.opt:129
+msgid "Generate code which uses hardware floating point instructions"
+msgstr ""
+
+#: config/m68k/m68k.opt:133
msgid "Enable ID based shared library"
msgstr ""
-#: config/m68k/m68k.opt:117
+#: config/m68k/m68k.opt:137
msgid "Do not use the bit-field instructions"
msgstr ""
-#: config/m68k/m68k.opt:121
+#: config/m68k/m68k.opt:141
msgid "Use normal calling convention"
msgstr ""
-#: config/m68k/m68k.opt:125
+#: config/m68k/m68k.opt:145
msgid "Consider type 'int' to be 32 bits wide"
msgstr ""
-#: config/m68k/m68k.opt:129
+#: config/m68k/m68k.opt:149
msgid "Generate pc-relative code"
msgstr ""
-#: config/m68k/m68k.opt:133
+#: config/m68k/m68k.opt:153
msgid "Use different calling convention using 'rtd'"
msgstr ""
-#: config/m68k/m68k.opt:137
+#: config/m68k/m68k.opt:157 config/bfin/bfin.opt:54
msgid "Enable separate data segment"
msgstr ""
-#: config/m68k/m68k.opt:141 config/bfin/bfin.opt:45
+#: config/m68k/m68k.opt:161 config/bfin/bfin.opt:50
msgid "ID of shared library to build"
msgstr ""
-#: config/m68k/m68k.opt:145
+#: config/m68k/m68k.opt:165
msgid "Consider type 'int' to be 16 bits wide"
msgstr ""
-#: config/m68k/m68k.opt:149
+#: config/m68k/m68k.opt:169
msgid "Generate code with library calls for floating point"
msgstr ""
-#: config/m68k/m68k.opt:153
+#: config/m68k/m68k.opt:173
msgid "Do not use unaligned memory references"
msgstr ""
+#: config/m68k/m68k.opt:177
+msgid "Tune for the specified target CPU or architecture"
+msgstr ""
+
#: config/m68k/ieee.opt:25 config/i386/i386.opt:122
msgid "Use IEEE math for fp comparisons"
msgstr ""
@@ -11782,71 +11802,100 @@ msgstr ""
msgid "Inline all known string operations"
msgstr ""
-#: config/i386/i386.opt:134
-msgid "Support MMX built-in functions"
+#: config/i386/i386.opt:130
+msgid ""
+"Inline memset/memcpy string operations, but perform inline version only for "
+"small blocks"
msgstr ""
#: config/i386/i386.opt:138
+msgid "Support MMX built-in functions"
+msgstr ""
+
+#: config/i386/i386.opt:142
msgid "Use native (MS) bitfield layout"
msgstr ""
-#: config/i386/i386.opt:154
+#: config/i386/i386.opt:158
msgid "Omit the frame pointer in leaf functions"
msgstr ""
-#: config/i386/i386.opt:166
+#: config/i386/i386.opt:170
msgid "Attempt to keep stack aligned to this power of 2"
msgstr ""
-#: config/i386/i386.opt:170
+#: config/i386/i386.opt:174
msgid "Use push instructions to save outgoing arguments"
msgstr ""
-#: config/i386/i386.opt:174
+#: config/i386/i386.opt:178
msgid "Use red-zone in the x86-64 code"
msgstr ""
-#: config/i386/i386.opt:178
+#: config/i386/i386.opt:182
msgid "Number of registers used to pass integer arguments"
msgstr ""
-#: config/i386/i386.opt:182
+#: config/i386/i386.opt:186
msgid "Alternate calling convention"
msgstr ""
-#: config/i386/i386.opt:190
+#: config/i386/i386.opt:194
msgid "Support MMX and SSE built-in functions and code generation"
msgstr ""
-#: config/i386/i386.opt:194
+#: config/i386/i386.opt:198
msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
msgstr ""
-#: config/i386/i386.opt:198
+#: config/i386/i386.opt:202
msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
msgstr ""
-#: config/i386/i386.opt:202
+#: config/i386/i386.opt:206
+msgid ""
+"Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation"
+msgstr ""
+
+#: config/i386/i386.opt:210
+msgid ""
+"Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation"
+msgstr ""
+
+#: config/i386/i386.opt:214
+msgid "Support code generation of popcount instruction for popcount built-ins "
+msgstr ""
+
+#: config/i386/i386.opt:219
+msgid ""
+"Support code generation of Advanced Bit Manipulation (ABM) instructions,"
+msgstr ""
+
+#: config/i386/i386.opt:226
msgid "Use SSE register passing conventions for SF and DF mode"
msgstr ""
-#: config/i386/i386.opt:206
+#: config/i386/i386.opt:230
msgid "Realign stack in prologue"
msgstr ""
-#: config/i386/i386.opt:210
+#: config/i386/i386.opt:234
msgid "Uninitialized locals in .bss"
msgstr ""
-#: config/i386/i386.opt:214
+#: config/i386/i386.opt:238
msgid "Enable stack probing"
msgstr ""
-#: config/i386/i386.opt:218
+#: config/i386/i386.opt:242
+msgid "Chose strategy to generate stringop using"
+msgstr ""
+
+#: config/i386/i386.opt:246
msgid "Use given thread-local storage dialect"
msgstr ""
-#: config/i386/i386.opt:222
+#: config/i386/i386.opt:250
#, c-format
msgid "Use direct references against %gs when accessing tls data"
msgstr ""
@@ -11887,7 +11936,7 @@ msgstr ""
msgid "Support message passing with the Parallel Environment"
msgstr ""
-#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:136
+#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:148
msgid "Conform more closely to IBM XLC semantics"
msgstr ""
@@ -11948,158 +11997,170 @@ msgid "Use PowerPC V2.02 floating point rounding instructions"
msgstr ""
#: config/rs6000/rs6000.opt:69
-msgid "Use AltiVec instructions"
+msgid "Use PowerPC V2.05 compare bytes instruction"
msgstr ""
#: config/rs6000/rs6000.opt:73
-msgid "Use 4xx half-word multiply instructions"
+msgid "Use extended PowerPC V2.05 move floating point to/from GPR instructions"
msgstr ""
#: config/rs6000/rs6000.opt:77
-msgid "Use 4xx string-search dlmzb instruction"
+msgid "Use AltiVec instructions"
msgstr ""
#: config/rs6000/rs6000.opt:81
-msgid "Generate load/store multiple instructions"
+msgid "Use decimal floating point instructions"
msgstr ""
#: config/rs6000/rs6000.opt:85
-msgid "Generate string instructions for block moves"
+msgid "Use 4xx half-word multiply instructions"
msgstr ""
#: config/rs6000/rs6000.opt:89
-msgid "Use new mnemonics for PowerPC architecture"
+msgid "Use 4xx string-search dlmzb instruction"
msgstr ""
#: config/rs6000/rs6000.opt:93
+msgid "Generate load/store multiple instructions"
+msgstr ""
+
+#: config/rs6000/rs6000.opt:97
+msgid "Generate string instructions for block moves"
+msgstr ""
+
+#: config/rs6000/rs6000.opt:101
+msgid "Use new mnemonics for PowerPC architecture"
+msgstr ""
+
+#: config/rs6000/rs6000.opt:105
msgid "Use old mnemonics for PowerPC architecture"
msgstr ""
-#: config/rs6000/rs6000.opt:97 config/pdp11/pdp11.opt:84
+#: config/rs6000/rs6000.opt:109 config/pdp11/pdp11.opt:84
msgid "Do not use hardware floating point"
msgstr ""
-#: config/rs6000/rs6000.opt:105
+#: config/rs6000/rs6000.opt:117
msgid "Do not generate load/store with update instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:109
+#: config/rs6000/rs6000.opt:121
msgid "Generate load/store with update instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:113
+#: config/rs6000/rs6000.opt:125
msgid "Do not generate fused multiply/add instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:117
+#: config/rs6000/rs6000.opt:129
msgid "Generate fused multiply/add instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:121
+#: config/rs6000/rs6000.opt:133
msgid "Schedule the start and end of the procedure"
msgstr ""
-#: config/rs6000/rs6000.opt:128
+#: config/rs6000/rs6000.opt:140
msgid "Return all structures in memory (AIX default)"
msgstr ""
-#: config/rs6000/rs6000.opt:132
+#: config/rs6000/rs6000.opt:144
msgid "Return small structures in registers (SVR4 default)"
msgstr ""
-#: config/rs6000/rs6000.opt:140
+#: config/rs6000/rs6000.opt:152
msgid "Generate software floating point divide for better throughput"
msgstr ""
-#: config/rs6000/rs6000.opt:144
+#: config/rs6000/rs6000.opt:156
msgid "Do not place floating point constants in TOC"
msgstr ""
-#: config/rs6000/rs6000.opt:148
+#: config/rs6000/rs6000.opt:160
msgid "Place floating point constants in TOC"
msgstr ""
-#: config/rs6000/rs6000.opt:152
+#: config/rs6000/rs6000.opt:164
msgid "Do not place symbol+offset constants in TOC"
msgstr ""
-#: config/rs6000/rs6000.opt:156
+#: config/rs6000/rs6000.opt:168
msgid "Place symbol+offset constants in TOC"
msgstr ""
-#: config/rs6000/rs6000.opt:167
+#: config/rs6000/rs6000.opt:179
msgid "Use only one TOC entry per procedure"
msgstr ""
-#: config/rs6000/rs6000.opt:171
+#: config/rs6000/rs6000.opt:183
msgid "Put everything in the regular TOC"
msgstr ""
-#: config/rs6000/rs6000.opt:175
+#: config/rs6000/rs6000.opt:187
msgid "Generate VRSAVE instructions when generating AltiVec code"
msgstr ""
-#: config/rs6000/rs6000.opt:179
+#: config/rs6000/rs6000.opt:191
msgid "Deprecated option. Use -mvrsave/-mno-vrsave instead"
msgstr ""
-#: config/rs6000/rs6000.opt:183
+#: config/rs6000/rs6000.opt:195
msgid "Generate isel instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:187
+#: config/rs6000/rs6000.opt:199
msgid "Deprecated option. Use -misel/-mno-isel instead"
msgstr ""
-#: config/rs6000/rs6000.opt:191
+#: config/rs6000/rs6000.opt:203
msgid "Generate SPE SIMD instructions on E500"
msgstr ""
-#: config/rs6000/rs6000.opt:195
+#: config/rs6000/rs6000.opt:207
msgid "Deprecated option. Use -mspe/-mno-spe instead"
msgstr ""
-#: config/rs6000/rs6000.opt:199
+#: config/rs6000/rs6000.opt:211
msgid "Enable debug output"
msgstr ""
-#: config/rs6000/rs6000.opt:203
+#: config/rs6000/rs6000.opt:215
msgid "Specify ABI to use"
msgstr ""
-#: config/rs6000/rs6000.opt:215
+#: config/rs6000/rs6000.opt:227
msgid "Select full, part, or no traceback table"
msgstr ""
-#: config/rs6000/rs6000.opt:219
+#: config/rs6000/rs6000.opt:231
msgid "Avoid all range limits on call instructions"
msgstr ""
-#: config/rs6000/rs6000.opt:223
+#: config/rs6000/rs6000.opt:235
msgid "Warn about deprecated 'vector long ...' AltiVec type usage"
msgstr ""
-#: config/rs6000/rs6000.opt:227
+#: config/rs6000/rs6000.opt:239
msgid "Select GPR floating point method"
msgstr ""
-#: config/rs6000/rs6000.opt:231
+#: config/rs6000/rs6000.opt:243
msgid "Specify size of long double (64 or 128 bits)"
msgstr ""
-#: config/rs6000/rs6000.opt:235
+#: config/rs6000/rs6000.opt:247
msgid "Determine which dependences between insns are considered costly"
msgstr ""
-#: config/rs6000/rs6000.opt:239
+#: config/rs6000/rs6000.opt:251
msgid "Specify which post scheduling nop insertion scheme to apply"
msgstr ""
-#: config/rs6000/rs6000.opt:243
+#: config/rs6000/rs6000.opt:255
msgid "Specify alignment of structure fields default/natural"
msgstr ""
-#: config/rs6000/rs6000.opt:247
+#: config/rs6000/rs6000.opt:259
msgid "Specify scheduling priority for dispatch slot restricted insns"
msgstr ""
@@ -12193,6 +12254,42 @@ msgstr ""
msgid "Generate code for old exec BSS PLT"
msgstr ""
+#: config/spu/spu.opt:21
+msgid "Emit warnings when run-time relocations are generated"
+msgstr ""
+
+#: config/spu/spu.opt:25
+msgid "Emit errors when run-time relocations are generated"
+msgstr ""
+
+#: config/spu/spu.opt:29
+msgid "Specify cost of branches (Default 20)"
+msgstr ""
+
+#: config/spu/spu.opt:33
+msgid "Make sure loads and stores are not moved past DMA instructions"
+msgstr ""
+
+#: config/spu/spu.opt:37
+msgid "volatile must be specified on any memory that is effected by DMA"
+msgstr ""
+
+#: config/spu/spu.opt:41
+msgid "Use standard main function as entry for startup"
+msgstr ""
+
+#: config/spu/spu.opt:45
+msgid "Generate branch hints for branches"
+msgstr ""
+
+#: config/spu/spu.opt:49
+msgid "Generate code for 18 bit addressing"
+msgstr ""
+
+#: config/spu/spu.opt:53
+msgid "Generate code for 32 bit addressing"
+msgstr ""
+
#: config/mcore/mcore.opt:24
msgid "Generate code for the M*Core M210"
msgstr ""
@@ -12317,181 +12414,238 @@ msgstr ""
msgid "Generate SH4-200 code"
msgstr ""
-#: config/sh/sh.opt:93
+#: config/sh/sh.opt:95
+msgid "Generate SH4-300 code"
+msgstr ""
+
+#: config/sh/sh.opt:99
msgid "Generate SH4 FPU-less code"
msgstr ""
-#: config/sh/sh.opt:97
+#: config/sh/sh.opt:103
+msgid "Generate SH4-100 FPU-less code"
+msgstr ""
+
+#: config/sh/sh.opt:107
+msgid "Generate SH4-200 FPU-less code"
+msgstr ""
+
+#: config/sh/sh.opt:111
+msgid "Generate SH4-300 FPU-less code"
+msgstr ""
+
+#: config/sh/sh.opt:115
+msgid "Generate code for SH4 340 series (MMU/FPU-less)"
+msgstr ""
+
+#: config/sh/sh.opt:120
msgid "Generate code for SH4 400 series (MMU/FPU-less)"
msgstr ""
-#: config/sh/sh.opt:102
+#: config/sh/sh.opt:125
msgid "Generate code for SH4 500 series (FPU-less)."
msgstr ""
-#: config/sh/sh.opt:107
+#: config/sh/sh.opt:130
msgid "Generate default single-precision SH4 code"
msgstr ""
-#: config/sh/sh.opt:111
+#: config/sh/sh.opt:134
msgid "Generate default single-precision SH4-100 code"
msgstr ""
-#: config/sh/sh.opt:115
+#: config/sh/sh.opt:138
msgid "Generate default single-precision SH4-200 code"
msgstr ""
-#: config/sh/sh.opt:119
+#: config/sh/sh.opt:142
+msgid "Generate default single-precision SH4-300 code"
+msgstr ""
+
+#: config/sh/sh.opt:146
msgid "Generate only single-precision SH4 code"
msgstr ""
-#: config/sh/sh.opt:123
+#: config/sh/sh.opt:150
msgid "Generate only single-precision SH4-100 code"
msgstr ""
-#: config/sh/sh.opt:127
+#: config/sh/sh.opt:154
msgid "Generate only single-precision SH4-200 code"
msgstr ""
-#: config/sh/sh.opt:131
+#: config/sh/sh.opt:158
+msgid "Generate only single-precision SH4-300 code"
+msgstr ""
+
+#: config/sh/sh.opt:162
msgid "Generate SH4a code"
msgstr ""
-#: config/sh/sh.opt:135
+#: config/sh/sh.opt:166
msgid "Generate SH4a FPU-less code"
msgstr ""
-#: config/sh/sh.opt:139
+#: config/sh/sh.opt:170
msgid "Generate default single-precision SH4a code"
msgstr ""
-#: config/sh/sh.opt:143
+#: config/sh/sh.opt:174
msgid "Generate only single-precision SH4a code"
msgstr ""
-#: config/sh/sh.opt:147
+#: config/sh/sh.opt:178
msgid "Generate SH4al-dsp code"
msgstr ""
-#: config/sh/sh.opt:151
+#: config/sh/sh.opt:182
msgid "Generate 32-bit SHmedia code"
msgstr ""
-#: config/sh/sh.opt:155
+#: config/sh/sh.opt:186
msgid "Generate 32-bit FPU-less SHmedia code"
msgstr ""
-#: config/sh/sh.opt:159
+#: config/sh/sh.opt:190
msgid "Generate 64-bit SHmedia code"
msgstr ""
-#: config/sh/sh.opt:163
+#: config/sh/sh.opt:194
msgid "Generate 64-bit FPU-less SHmedia code"
msgstr ""
-#: config/sh/sh.opt:167
+#: config/sh/sh.opt:198
msgid "Generate SHcompact code"
msgstr ""
-#: config/sh/sh.opt:171
+#: config/sh/sh.opt:202
msgid "Generate FPU-less SHcompact code"
msgstr ""
-#: config/sh/sh.opt:175
+#: config/sh/sh.opt:206
msgid ""
"Throttle unrolling to avoid thrashing target registers unless the unroll "
"benefit outweighs this"
msgstr ""
-#: config/sh/sh.opt:179
+#: config/sh/sh.opt:210
msgid "Generate code in big endian mode"
msgstr ""
-#: config/sh/sh.opt:183
+#: config/sh/sh.opt:214
msgid "Generate 32-bit offsets in switch tables"
msgstr ""
-#: config/sh/sh.opt:187
+#: config/sh/sh.opt:218
+msgid "Cost to assume for a branch insn"
+msgstr ""
+
+#: config/sh/sh.opt:222
+msgid "Enable cbranchdi4 pattern"
+msgstr ""
+
+#: config/sh/sh.opt:226
+msgid "Expand cbranchdi4 pattern early into separate comparisons and branches."
+msgstr ""
+
+#: config/sh/sh.opt:230
+msgid ""
+"Emit cmpeqdi_t pattern even when -mcbranchdi and -mexpand-cbranchdi are in "
+"effect."
+msgstr ""
+
+#: config/sh/sh.opt:234
msgid "Enable SH5 cut2 workaround"
msgstr ""
-#: config/sh/sh.opt:191
+#: config/sh/sh.opt:238
msgid "Align doubles at 64-bit boundaries"
msgstr ""
-#: config/sh/sh.opt:195
+#: config/sh/sh.opt:242
msgid ""
"Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, "
-"inv:call, inv:call2, inv:fp call-div1 call-fp call-table"
+"inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
msgstr ""
-#: config/sh/sh.opt:199
+#: config/sh/sh.opt:246
msgid "Specify name for 32 bit signed division function"
msgstr ""
-#: config/sh/sh.opt:206
+#: config/sh/sh.opt:253
+msgid ""
+"Enable the use of the fused floating point multiply-accumulate operation"
+msgstr ""
+
+#: config/sh/sh.opt:257
msgid "Cost to assume for gettr insn"
msgstr ""
-#: config/sh/sh.opt:210 config/sh/sh.opt:256
+#: config/sh/sh.opt:261 config/sh/sh.opt:311
msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions"
msgstr ""
-#: config/sh/sh.opt:214
+#: config/sh/sh.opt:265
msgid "Increase the IEEE compliance for floating-point code"
msgstr ""
-#: config/sh/sh.opt:218
+#: config/sh/sh.opt:269
msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact"
msgstr ""
-#: config/sh/sh.opt:222
+#: config/sh/sh.opt:273
+msgid ""
+"inline code to invalidate instruction cache entries after setting up nested "
+"function trampolines"
+msgstr ""
+
+#: config/sh/sh.opt:277
msgid "Assume symbols might be invalid"
msgstr ""
-#: config/sh/sh.opt:226
+#: config/sh/sh.opt:281
msgid "Annotate assembler instructions with estimated addresses"
msgstr ""
-#: config/sh/sh.opt:230
+#: config/sh/sh.opt:285
msgid "Generate code in little endian mode"
msgstr ""
-#: config/sh/sh.opt:234
+#: config/sh/sh.opt:289
msgid "Mark MAC register as call-clobbered"
msgstr ""
-#: config/sh/sh.opt:240
+#: config/sh/sh.opt:295
msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
msgstr ""
-#: config/sh/sh.opt:244
+#: config/sh/sh.opt:299
msgid "Emit function-calls using global offset table when generating PIC"
msgstr ""
-#: config/sh/sh.opt:248
+#: config/sh/sh.opt:303
msgid "Assume pt* instructions won't trap"
msgstr ""
-#: config/sh/sh.opt:252
+#: config/sh/sh.opt:307
msgid "Shorten address references during linking"
msgstr ""
-#: config/sh/sh.opt:260
+#: config/sh/sh.opt:315
msgid "Deprecated. Use -Os instead"
msgstr ""
-#: config/sh/sh.opt:264
+#: config/sh/sh.opt:319
msgid "Cost to assume for a multiply insn"
msgstr ""
-#: config/sh/sh.opt:268
+#: config/sh/sh.opt:323
msgid ""
-"Generate library function call to invalidate instruction cache entries after "
-"fixing trampoline"
+"Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate "
+"if the inline code would not work in user mode."
msgstr ""
-#: config/sh/sh.opt:274
+#: config/sh/sh.opt:329
msgid "Pretend a branch-around-a-move is a conditional move."
msgstr ""
@@ -12523,10 +12677,6 @@ msgstr ""
msgid "Generate re-entrant, PIC code"
msgstr ""
-#: config/arm/arm.opt:50
-msgid "Specify the name of the target architecture"
-msgstr ""
-
#: config/arm/arm.opt:57
msgid "Assume target CPU is configured as big endian"
msgstr ""
@@ -13541,10 +13691,19 @@ msgstr ""
msgid "Enabled ID based shared library"
msgstr ""
-#: config/bfin/bfin.opt:49
+#: config/bfin/bfin.opt:45
+msgid ""
+"Generate code that won't be linked against any other ID shared libraries,"
+msgstr ""
+
+#: config/bfin/bfin.opt:58
msgid "Avoid generating pc-relative calls; use indirection"
msgstr ""
+#: config/bfin/bfin.opt:66
+msgid "Do stack checking using bounds in L1 scratch memory"
+msgstr ""
+
#: config/mt/mt.opt:24
msgid "Use byte loads and stores when generating code."
msgstr ""
@@ -13570,20 +13729,24 @@ msgstr ""
msgid "Generate code suitable for fast turn around debugging"
msgstr ""
-#: config/darwin.opt:28
+#: config/darwin.opt:32
msgid "The earliest MacOS X version on which this program will run"
msgstr ""
-#: config/darwin.opt:32
+#: config/darwin.opt:36
msgid "Set sizeof(bool) to 1"
msgstr ""
-#: config/darwin.opt:36
-msgid "Generate code for darwin loadable kernel extentions"
+#: config/darwin.opt:40
+msgid "Generate code for darwin loadable kernel extensions"
msgstr ""
-#: config/darwin.opt:40
-msgid "Generate code for the kernel or loadable kernel extentions"
+#: config/darwin.opt:44
+msgid "Generate code for the kernel or loadable kernel extensions"
+msgstr ""
+
+#: config/darwin.opt:48
+msgid "Add <dir> to the end of the system framework include path"
msgstr ""
#: config/lynx.opt:24
@@ -13646,7 +13809,7 @@ msgstr ""
msgid "Print the name of header files as they are used"
msgstr ""
-#: c.opt:69 c.opt:798
+#: c.opt:69 c.opt:824
msgid "Add <dir> to the end of the main include path"
msgstr ""
@@ -13701,686 +13864,740 @@ msgid ""
msgstr ""
#: c.opt:121
-msgid "Enable most warning messages"
+msgid "Warn about suspicious uses of memory addresses"
msgstr ""
#: c.opt:125
+msgid "Enable most warning messages"
+msgstr ""
+
+#: c.opt:129
msgid ""
"Warn whenever an Objective-C assignment is being intercepted by the garbage "
"collector"
msgstr ""
-#: c.opt:129
+#: c.opt:133
msgid "Warn about casting functions to incompatible types"
msgstr ""
-#: c.opt:133
+#: c.opt:137
msgid "Warn about C constructs that are not in the common subset of C and C++"
msgstr ""
-#: c.opt:138
+#: c.opt:141
+msgid ""
+"Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO "
+"C++ 200x"
+msgstr ""
+
+#: c.opt:145
msgid "Warn about casts which discard qualifiers"
msgstr ""
-#: c.opt:142
+#: c.opt:149
msgid "Warn about subscripts whose type is \"char\""
msgstr ""
-#: c.opt:146
+#: c.opt:153
+msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\""
+msgstr ""
+
+#: c.opt:157
msgid ""
"Warn about possibly nested block comments, and C++ comments spanning more "
"than one physical line"
msgstr ""
-#: c.opt:150
+#: c.opt:161
msgid "Synonym for -Wcomment"
msgstr ""
-#: c.opt:154
-msgid "Warn about possibly confusing type conversions"
+#: c.opt:165
+msgid "Warn for implicit type conversions that may change a value"
msgstr ""
-#: c.opt:158
+#: c.opt:169
msgid "Warn when all constructors and destructors are private"
msgstr ""
-#: c.opt:162
+#: c.opt:173
msgid "Warn when a declaration is found after a statement"
msgstr ""
-#: c.opt:166
+#: c.opt:177
msgid "Warn about deprecated compiler features"
msgstr ""
-#: c.opt:170
+#: c.opt:181
msgid "Warn about compile-time integer division by zero"
msgstr ""
-#: c.opt:174
+#: c.opt:185
msgid "Warn about violations of Effective C++ style rules"
msgstr ""
-#: c.opt:178
+#: c.opt:189
+msgid "Warn about an empty body in an if or else statement"
+msgstr ""
+
+#: c.opt:193
msgid "Warn about stray tokens after #elif and #endif"
msgstr ""
-#: c.opt:186
-msgid "Make implicit function declarations an error"
+#: c.opt:201
+msgid ""
+"This switch is deprecated; use -Werror=implicit-function-declaration instead"
msgstr ""
-#: c.opt:190
+#: c.opt:205
msgid "Warn if testing floating point numbers for equality"
msgstr ""
-#: c.opt:194
+#: c.opt:209
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
msgstr ""
-#: c.opt:198
+#: c.opt:213
msgid "Warn if passing too many arguments to a function for its format string"
msgstr ""
-#: c.opt:202
+#: c.opt:217
msgid "Warn about format strings that are not literals"
msgstr ""
-#: c.opt:206
+#: c.opt:221
msgid "Warn about possible security problems with format functions"
msgstr ""
-#: c.opt:210
+#: c.opt:225
msgid "Warn about strftime formats yielding 2-digit years"
msgstr ""
-#: c.opt:214
+#: c.opt:229
msgid "Warn about zero-length formats"
msgstr ""
-#: c.opt:221
+#: c.opt:236
msgid "Warn about variables which are initialized to themselves"
msgstr ""
-#: c.opt:228
+#: c.opt:243
msgid "Warn about implicit function declarations"
msgstr ""
-#: c.opt:232
+#: c.opt:247
msgid "Warn when a declaration does not specify a type"
msgstr ""
-#: c.opt:236
+#: c.opt:251
msgid "Deprecated. This switch has no effect"
msgstr ""
-#: c.opt:240
+#: c.opt:255
msgid ""
"Warn when there is a cast to a pointer from an integer of a different size"
msgstr ""
-#: c.opt:244
+#: c.opt:259
msgid "Warn about invalid uses of the \"offsetof\" macro"
msgstr ""
-#: c.opt:248
+#: c.opt:263
msgid "Warn about PCH files that are found but not used"
msgstr ""
-#: c.opt:252
+#: c.opt:267
msgid "Do not warn about using \"long long\" when -pedantic"
msgstr ""
-#: c.opt:256
+#: c.opt:271
msgid "Warn about suspicious declarations of \"main\""
msgstr ""
-#: c.opt:260
+#: c.opt:275
msgid "Warn about possibly missing braces around initializers"
msgstr ""
-#: c.opt:264
+#: c.opt:279
msgid "Warn about global functions without previous declarations"
msgstr ""
-#: c.opt:268
+#: c.opt:283
msgid "Warn about missing fields in struct initializers"
msgstr ""
-#: c.opt:272
+#: c.opt:287
msgid "Warn about functions which might be candidates for format attributes"
msgstr ""
-#: c.opt:276
+#: c.opt:291
msgid "Warn about user-specified include directories that do not exist"
msgstr ""
-#: c.opt:280
+#: c.opt:295
+msgid ""
+"Warn about function parameters declared without a type specifier in K&R-"
+"style functions"
+msgstr ""
+
+#: c.opt:299
msgid "Warn about global functions without prototypes"
msgstr ""
-#: c.opt:284
+#: c.opt:303
msgid "Warn about use of multi-character character constants"
msgstr ""
-#: c.opt:288
+#: c.opt:307
msgid "Warn about \"extern\" declarations not at file scope"
msgstr ""
-#: c.opt:292
+#: c.opt:311
msgid ""
"Warn when non-templatized friend functions are declared within a template"
msgstr ""
-#: c.opt:296
+#: c.opt:315
msgid "Warn about non-virtual destructors"
msgstr ""
-#: c.opt:300
+#: c.opt:319
msgid ""
"Warn about NULL being passed to argument slots marked as requiring non-NULL"
msgstr ""
-#: c.opt:304
+#: c.opt:323
msgid "Warn about non-normalised Unicode strings"
msgstr ""
-#: c.opt:308
+#: c.opt:327
msgid "Warn if a C-style cast is used in a program"
msgstr ""
-#: c.opt:312
+#: c.opt:331
+msgid "Warn for obsolescent usage in a declaration"
+msgstr ""
+
+#: c.opt:335
msgid "Warn if an old-style parameter definition is used"
msgstr ""
-#: c.opt:316
+#: c.opt:339
msgid ""
"Warn if a string is longer than the maximum portable length specified by the "
"standard"
msgstr ""
-#: c.opt:320
+#: c.opt:343
msgid "Warn about overloaded virtual function names"
msgstr ""
-#: c.opt:324
+#: c.opt:347
msgid "Warn about overriding initializers without side effects"
msgstr ""
-#: c.opt:328
+#: c.opt:351
msgid "Warn about possibly missing parentheses"
msgstr ""
-#: c.opt:332
+#: c.opt:355
msgid "Warn when converting the type of pointers to member functions"
msgstr ""
-#: c.opt:336
+#: c.opt:359
msgid "Warn about function pointer arithmetic"
msgstr ""
-#: c.opt:340
+#: c.opt:363
msgid "Warn when a pointer is cast to an integer of a different size"
msgstr ""
-#: c.opt:344
+#: c.opt:367
msgid "Warn about misuses of pragmas"
msgstr ""
-#: c.opt:348
+#: c.opt:371
msgid "Warn if inherited methods are unimplemented"
msgstr ""
-#: c.opt:352
+#: c.opt:375
msgid "Warn about multiple declarations of the same object"
msgstr ""
-#: c.opt:356
+#: c.opt:379
msgid "Warn when the compiler reorders code"
msgstr ""
-#: c.opt:360
+#: c.opt:383
msgid ""
"Warn whenever a function's return type defaults to \"int\" (C), or about "
"inconsistent return types (C++)"
msgstr ""
-#: c.opt:364
+#: c.opt:387
msgid "Warn if a selector has multiple methods"
msgstr ""
-#: c.opt:368
+#: c.opt:391
msgid "Warn about possible violations of sequence point rules"
msgstr ""
-#: c.opt:372
+#: c.opt:395
msgid "Warn about signed-unsigned comparisons"
msgstr ""
-#: c.opt:376
+#: c.opt:399
msgid "Warn when overload promotes from unsigned to signed"
msgstr ""
-#: c.opt:380
+#: c.opt:403
msgid "Warn about uncasted NULL used as sentinel"
msgstr ""
-#: c.opt:384
+#: c.opt:407
msgid "Warn about unprototyped function declarations"
msgstr ""
-#: c.opt:388
+#: c.opt:411
msgid "Warn if type signatures of candidate methods do not match exactly"
msgstr ""
-#: c.opt:392
+#: c.opt:415
msgid "Warn when synthesis behavior differs from Cfront"
msgstr ""
-#: c.opt:396 common.opt:158
+#: c.opt:419 common.opt:179
msgid "Do not suppress warnings from system headers"
msgstr ""
-#: c.opt:400
+#: c.opt:423
msgid "Warn about features not present in traditional C"
msgstr ""
-#: c.opt:404
+#: c.opt:427
+msgid ""
+"Warn of prototypes causing type conversions different from what would happen "
+"in the absence of prototype"
+msgstr ""
+
+#: c.opt:431
msgid ""
"Warn if trigraphs are encountered that might affect the meaning of the "
"program"
msgstr ""
-#: c.opt:408
+#: c.opt:435
msgid "Warn about @selector()s without previously declared methods"
msgstr ""
-#: c.opt:412
+#: c.opt:439
msgid "Warn if an undefined macro is used in an #if directive"
msgstr ""
-#: c.opt:416
+#: c.opt:443
msgid "Warn about unrecognized pragmas"
msgstr ""
-#: c.opt:420
+#: c.opt:447
msgid "Warn about macros defined in the main file that are not used"
msgstr ""
-#: c.opt:424
+#: c.opt:451
msgid "Do not warn about using variadic macros when -pedantic"
msgstr ""
-#: c.opt:428
+#: c.opt:455
msgid ""
"In C++, nonzero means warn about deprecated conversion from string literals "
"to `char *'. In C, similar warning, except that the conversion is of course "
"not deprecated by the ISO C standard."
msgstr ""
-#: c.opt:432
+#: c.opt:459
msgid "Warn when a pointer differs in signedness in an assignment"
msgstr ""
-#: c.opt:436
+#: c.opt:463
msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)"
msgstr ""
-#: c.opt:444
+#: c.opt:471
msgid "Enforce class member access control semantics"
msgstr ""
-#: c.opt:451
+#: c.opt:478
msgid "Change when template instances are emitted"
msgstr ""
-#: c.opt:455
+#: c.opt:482
msgid "Recognize the \"asm\" keyword"
msgstr ""
-#: c.opt:459
+#: c.opt:486
msgid "Recognize built-in functions"
msgstr ""
-#: c.opt:466
+#: c.opt:493
msgid "Check the return value of new"
msgstr ""
-#: c.opt:470
+#: c.opt:497
msgid "Allow the arguments of the '?' operator to have different types"
msgstr ""
-#: c.opt:474
+#: c.opt:501
msgid "Reduce the size of object files"
msgstr ""
-#: c.opt:478
+#: c.opt:505
msgid "Use class <name> for constant strings"
msgstr ""
-#: c.opt:482
+#: c.opt:509
msgid "Inline member functions by default"
msgstr ""
-#: c.opt:486
+#: c.opt:513
msgid "Permit '$' as an identifier character"
msgstr ""
-#: c.opt:493
+#: c.opt:520
msgid "Generate code to check exception specifications"
msgstr ""
-#: c.opt:500
+#: c.opt:527
msgid "Convert all strings and character constants to character set <cset>"
msgstr ""
-#: c.opt:504
+#: c.opt:531
msgid "Permit universal character names (\\u and \\U) in identifiers"
msgstr ""
-#: c.opt:508
+#: c.opt:535
msgid "Specify the default character set for source files"
msgstr ""
-#: c.opt:525
+#: c.opt:543
msgid "Scope of for-init-statement variables is local to the loop"
msgstr ""
-#: c.opt:529
+#: c.opt:547
msgid "Do not assume that standard C libraries and \"main\" exist"
msgstr ""
-#: c.opt:533
+#: c.opt:551
msgid "Recognize GNU-defined keywords"
msgstr ""
-#: c.opt:537
+#: c.opt:555
msgid "Generate code for GNU runtime environment"
msgstr ""
-#: c.opt:550
+#: c.opt:559
+msgid "Use traditional GNU semantics for inline functions"
+msgstr ""
+
+#: c.opt:572
msgid "Assume normal C execution environment"
msgstr ""
-#: c.opt:554
+#: c.opt:576
msgid "Enable support for huge objects"
msgstr ""
-#: c.opt:558
+#: c.opt:580
msgid "Export functions even if they can be inlined"
msgstr ""
-#: c.opt:562
+#: c.opt:584
msgid "Emit implicit instantiations of inline templates"
msgstr ""
-#: c.opt:566
+#: c.opt:588
msgid "Emit implicit instantiations of templates"
msgstr ""
-#: c.opt:570
+#: c.opt:592
msgid "Inject friend functions into enclosing namespace"
msgstr ""
-#: c.opt:577
+#: c.opt:599
+msgid ""
+"Allow implicit conversions between vectors with differing numbers of "
+"subparts and/or differing element types."
+msgstr ""
+
+#: c.opt:603
msgid "Don't warn about uses of Microsoft extensions"
msgstr ""
-#: c.opt:587
+#: c.opt:613
msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
msgstr ""
-#: c.opt:591
+#: c.opt:617
msgid "Assume that receivers of Objective-C messages may be nil"
msgstr ""
-#: c.opt:603
+#: c.opt:629
msgid ""
"Generate special Objective-C methods to initialize/destroy non-POD C++ "
"ivars, if needed"
msgstr ""
-#: c.opt:607
+#: c.opt:633
msgid "Allow fast jumps to the message dispatcher"
msgstr ""
-#: c.opt:613
+#: c.opt:639
msgid "Enable Objective-C exception and synchronization syntax"
msgstr ""
-#: c.opt:617
+#: c.opt:643
msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs"
msgstr ""
-#: c.opt:622
+#: c.opt:648
msgid "Enable Objective-C setjmp exception handling runtime"
msgstr ""
-#: c.opt:630
+#: c.opt:656
msgid "Recognize C++ kewords like \"compl\" and \"xor\""
msgstr ""
-#: c.opt:634
+#: c.opt:660
msgid "Enable optional diagnostics"
msgstr ""
-#: c.opt:641
+#: c.opt:667
msgid "Look for and use PCH files even when preprocessing"
msgstr ""
-#: c.opt:645
+#: c.opt:671
msgid "Downgrade conformance errors to warnings"
msgstr ""
-#: c.opt:649
+#: c.opt:675
msgid "Treat the input file as already preprocessed"
msgstr ""
-#: c.opt:653
+#: c.opt:679
msgid ""
"Used in Fix-and-Continue mode to indicate that object files may be swapped "
"in at runtime"
msgstr ""
-#: c.opt:657
+#: c.opt:683
msgid "Enable automatic template instantiation"
msgstr ""
-#: c.opt:661
+#: c.opt:687
msgid "Generate run time type descriptor information"
msgstr ""
-#: c.opt:665
+#: c.opt:691
msgid "Use the same size for double as for float"
msgstr ""
-#: c.opt:673
+#: c.opt:699
msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\""
msgstr ""
-#: c.opt:677
+#: c.opt:703
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed"
msgstr ""
-#: c.opt:681
+#: c.opt:707
msgid "Make \"char\" signed by default"
msgstr ""
-#: c.opt:688
+#: c.opt:714
msgid "Display statistics accumulated during compilation"
msgstr ""
-#: c.opt:695
+#: c.opt:721
msgid "Distance between tab stops for column reporting"
msgstr ""
-#: c.opt:699
+#: c.opt:725
msgid "Specify maximum template instantiation depth"
msgstr ""
-#: c.opt:706
+#: c.opt:732
msgid "Do not generate thread-safe code for initializing local statics"
msgstr ""
-#: c.opt:710
+#: c.opt:736
msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned"
msgstr ""
-#: c.opt:714
+#: c.opt:740
msgid "Make \"char\" unsigned by default"
msgstr ""
-#: c.opt:718
+#: c.opt:744
msgid "Use __cxa_atexit to register destructors"
msgstr ""
-#: c.opt:722
+#: c.opt:748
msgid "Use __cxa_get_exception_ptr in exception handling"
msgstr ""
-#: c.opt:726
+#: c.opt:752
msgid "Marks all inlined methods as having hidden visibility"
msgstr ""
-#: c.opt:730
+#: c.opt:756
msgid "Discard unused virtual functions"
msgstr ""
-#: c.opt:734
+#: c.opt:760
msgid "Implement vtables using thunks"
msgstr ""
-#: c.opt:738
+#: c.opt:764
msgid "Emit common-like symbols as weak symbols"
msgstr ""
-#: c.opt:742
+#: c.opt:768
msgid ""
"Convert all wide strings and character constants to character set <cset>"
msgstr ""
-#: c.opt:746
+#: c.opt:772
msgid "Generate a #line directive pointing at the current working directory"
msgstr ""
-#: c.opt:750
+#: c.opt:776
msgid "Emit cross referencing information"
msgstr ""
-#: c.opt:754
+#: c.opt:780
msgid ""
"Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode"
msgstr ""
-#: c.opt:758
+#: c.opt:784
msgid "Dump declarations to a .decl file"
msgstr ""
-#: c.opt:762 c.opt:794
+#: c.opt:788 c.opt:820
msgid "Add <dir> to the end of the system include path"
msgstr ""
-#: c.opt:766
+#: c.opt:792
msgid "Accept definition of macros in <file>"
msgstr ""
-#: c.opt:770
+#: c.opt:796
msgid "-imultilib <dir> Set <dir> to be the multilib include subdirectory"
msgstr ""
-#: c.opt:774
+#: c.opt:800
msgid "Include the contents of <file> before other files"
msgstr ""
-#: c.opt:778
+#: c.opt:804
msgid "Specify <path> as a prefix for next two options"
msgstr ""
-#: c.opt:782
+#: c.opt:808
msgid "Set <dir> to be the system root directory"
msgstr ""
-#: c.opt:786
+#: c.opt:812
msgid "Add <dir> to the start of the system include path"
msgstr ""
-#: c.opt:790
+#: c.opt:816
msgid "Add <dir> to the end of the quote include path"
msgstr ""
-#: c.opt:811
+#: c.opt:837
msgid ""
"Do not search standard system include directories (those specified with -"
"isystem will still be used)"
msgstr ""
-#: c.opt:815
+#: c.opt:841
msgid "Do not search standard system include directories for C++"
msgstr ""
-#: c.opt:831
+#: c.opt:857
msgid "Generate C header of platform-specific features"
msgstr ""
-#: c.opt:835
+#: c.opt:861
msgid "Print a checksum of the executable for PCH validity checking, and stop"
msgstr ""
-#: c.opt:839
+#: c.opt:865
msgid "Remap file names when including files"
msgstr ""
-#: c.opt:843
+#: c.opt:869
msgid "Conform to the ISO 1998 C++ standard"
msgstr ""
-#: c.opt:847 c.opt:875
+#: c.opt:873
+msgid ""
+"Conform to the ISO 1998 C++ standard, with extensions that are likely to"
+msgstr ""
+
+#: c.opt:880 c.opt:915
msgid "Conform to the ISO 1990 C standard"
msgstr ""
-#: c.opt:851 c.opt:883
+#: c.opt:884 c.opt:923
msgid "Conform to the ISO 1999 C standard"
msgstr ""
-#: c.opt:855
+#: c.opt:888
msgid "Deprecated in favor of -std=c99"
msgstr ""
-#: c.opt:859
+#: c.opt:892
msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
msgstr ""
-#: c.opt:863
+#: c.opt:896
+msgid "Conform to the ISO 1998 C++ standard, with GNU extensions and"
+msgstr ""
+
+#: c.opt:903
msgid "Conform to the ISO 1990 C standard with GNU extensions"
msgstr ""
-#: c.opt:867
+#: c.opt:907
msgid "Conform to the ISO 1999 C standard with GNU extensions"
msgstr ""
-#: c.opt:871
+#: c.opt:911
msgid "Deprecated in favor of -std=gnu99"
msgstr ""
-#: c.opt:879
+#: c.opt:919
msgid "Conform to the ISO 1990 C standard as amended in 1994"
msgstr ""
-#: c.opt:887
+#: c.opt:927
msgid "Deprecated in favor of -std=iso9899:1999"
msgstr ""
-#: c.opt:891
+#: c.opt:931
msgid "Enable traditional preprocessing"
msgstr ""
-#: c.opt:895
+#: c.opt:935
msgid "Support ISO C trigraphs"
msgstr ""
-#: c.opt:899
+#: c.opt:939
msgid "Do not predefine system-specific and GCC-specific macros"
msgstr ""
-#: c.opt:903
+#: c.opt:943
msgid "Enable verbose output"
msgstr ""
@@ -14390,1007 +14607,1042 @@ msgstr ""
#: common.opt:32
msgid ""
+"Display descriptions of a specific class of options. <class> is one or more "
+"of optimizers, target, warnings, undocumented, params"
+msgstr ""
+
+#: common.opt:36
+msgid "Alias for --help=target"
+msgstr ""
+
+#: common.opt:52
+msgid ""
"Set parameter <param> to value. See below for a complete list of parameters"
msgstr ""
-#: common.opt:42
+#: common.opt:59
msgid ""
"Put global and static data smaller than <number> bytes into a special "
"section (on some targets)"
msgstr ""
-#: common.opt:46
+#: common.opt:63
msgid "Set optimization level to <number>"
msgstr ""
-#: common.opt:50
+#: common.opt:67
msgid "Optimize for space rather than speed"
msgstr ""
-#: common.opt:54
+#: common.opt:71
msgid "This switch is deprecated; use -Wextra instead"
msgstr ""
-#: common.opt:58
+#: common.opt:75
msgid "Warn about returning structures, unions or arrays"
msgstr ""
-#: common.opt:62
-msgid "Warn about comparisons that always evaluate to true"
+#: common.opt:79
+msgid "Warn if an array is accessed out of bounds"
msgstr ""
-#: common.opt:66
+#: common.opt:83
msgid "Warn about inappropriate attribute usage"
msgstr ""
-#: common.opt:70
+#: common.opt:87
msgid "Warn about pointer casts which increase alignment"
msgstr ""
-#: common.opt:74
+#: common.opt:91
msgid "Warn about uses of __attribute__((deprecated)) declarations"
msgstr ""
-#: common.opt:78
+#: common.opt:95
msgid "Warn when an optimization pass is disabled"
msgstr ""
-#: common.opt:82
+#: common.opt:99
msgid "Treat all warnings as errors"
msgstr ""
-#: common.opt:86
+#: common.opt:103
msgid "Treat specified warning as error"
msgstr ""
-#: common.opt:90
+#: common.opt:107
msgid "Print extra (possibly unwanted) warnings"
msgstr ""
-#: common.opt:94
+#: common.opt:111
msgid "Exit on the first error occurred"
msgstr ""
-#: common.opt:98
+#: common.opt:115
msgid "Warn when an inlined function cannot be inlined"
msgstr ""
-#: common.opt:102
+#: common.opt:119
msgid "Warn if an object is larger than <number> bytes"
msgstr ""
-#: common.opt:106
+#: common.opt:123
msgid "Warn if the loop cannot be optimized due to nontrivial assumptions."
msgstr ""
-#: common.opt:110
+#: common.opt:127
msgid ""
"Warn about functions which might be candidates for __attribute__((noreturn))"
msgstr ""
-#: common.opt:114
+#: common.opt:131
msgid "Warn about overflow in arithmetic expressions"
msgstr ""
-#: common.opt:118
+#: common.opt:135
msgid "Warn when the packed attribute has no effect on struct layout"
msgstr ""
-#: common.opt:122
+#: common.opt:139
msgid "Warn when padding is required to align structure members"
msgstr ""
-#: common.opt:126
+#: common.opt:143
msgid "Warn when one local variable shadows another"
msgstr ""
-#: common.opt:130
+#: common.opt:147
msgid "Warn when not issuing stack smashing protection for some reason"
msgstr ""
-#: common.opt:134 common.opt:138
+#: common.opt:151 common.opt:155
msgid "Warn about code which might break strict aliasing rules"
msgstr ""
-#: common.opt:142
-msgid "Warn about comparisons to constant string literals"
+#: common.opt:159 common.opt:163
+msgid "Warn about optimizations that assume that signed overflow is undefined"
msgstr ""
-#: common.opt:146
+#: common.opt:167
msgid "Warn about enumerated switches, with no default, missing a case"
msgstr ""
-#: common.opt:150
+#: common.opt:171
msgid "Warn about enumerated switches missing a \"default:\" statement"
msgstr ""
-#: common.opt:154
+#: common.opt:175
msgid "Warn about all enumerated switches missing a specific case"
msgstr ""
-#: common.opt:162
+#: common.opt:183
msgid "Warn about uninitialized automatic variables"
msgstr ""
-#: common.opt:166
+#: common.opt:187
msgid "Warn about code that will never be executed"
msgstr ""
-#: common.opt:170
+#: common.opt:191
msgid "Enable all -Wunused- warnings"
msgstr ""
-#: common.opt:174
+#: common.opt:195
msgid "Warn when a function is unused"
msgstr ""
-#: common.opt:178
+#: common.opt:199
msgid "Warn when a label is unused"
msgstr ""
-#: common.opt:182
+#: common.opt:203
msgid "Warn when a function parameter is unused"
msgstr ""
-#: common.opt:186
+#: common.opt:207
msgid "Warn when an expression value is unused"
msgstr ""
-#: common.opt:190
+#: common.opt:211
msgid "Warn when a variable is unused"
msgstr ""
-#: common.opt:194
+#: common.opt:215
msgid "Warn when a register variable is declared volatile"
msgstr ""
-#: common.opt:198
+#: common.opt:219
+msgid "Warn instead of error in case profiles in -fprofile-use do not match"
+msgstr ""
+
+#: common.opt:223
msgid "Emit declaration information into <file>"
msgstr ""
-#: common.opt:211
+#: common.opt:236
msgid "Enable dumps from specific passes of the compiler"
msgstr ""
-#: common.opt:215
+#: common.opt:240
msgid "Set the file basename to be used for dumps"
msgstr ""
-#: common.opt:233
+#: common.opt:258
msgid "Align the start of functions"
msgstr ""
-#: common.opt:240
+#: common.opt:265
msgid "Align labels which are only reached by jumping"
msgstr ""
-#: common.opt:247
+#: common.opt:272
msgid "Align all labels"
msgstr ""
-#: common.opt:254
+#: common.opt:279
msgid "Align the start of loops"
msgstr ""
-#: common.opt:269
+#: common.opt:294
msgid "Specify that arguments may alias each other and globals"
msgstr ""
-#: common.opt:273
+#: common.opt:298
msgid "Assume arguments may alias globals but not each other"
msgstr ""
-#: common.opt:277
+#: common.opt:302
msgid "Assume arguments alias neither each other nor globals"
msgstr ""
-#: common.opt:281
+#: common.opt:306
msgid "Assume arguments alias no other storage"
msgstr ""
-#: common.opt:285
+#: common.opt:310
msgid "Generate unwind tables that are exact at each instruction boundary"
msgstr ""
-#: common.opt:293
+#: common.opt:318
msgid "Generate code to check bounds before indexing arrays"
msgstr ""
-#: common.opt:297
+#: common.opt:322
msgid "Replace add, compare, branch with branch on count register"
msgstr ""
-#: common.opt:301
+#: common.opt:326
msgid "Use profiling information for branch probabilities"
msgstr ""
-#: common.opt:305
+#: common.opt:330
msgid ""
"Perform branch target load optimization before prologue / epilogue threading"
msgstr ""
-#: common.opt:309
+#: common.opt:334
msgid ""
"Perform branch target load optimization after prologue / epilogue threading"
msgstr ""
-#: common.opt:313
+#: common.opt:338
msgid ""
"Restrict target load migration not to re-use registers in any basic block"
msgstr ""
-#: common.opt:317
+#: common.opt:342
msgid "Mark <register> as being preserved across functions"
msgstr ""
-#: common.opt:321
+#: common.opt:346
msgid "Mark <register> as being corrupted by function calls"
msgstr ""
-#: common.opt:328
+#: common.opt:353
msgid "Save registers around function calls"
msgstr ""
-#: common.opt:332
+#: common.opt:357
msgid "Do not put uninitialized globals in the common section"
msgstr ""
-#: common.opt:336
+#: common.opt:361
msgid "Perform a register copy-propagation optimization pass"
msgstr ""
-#: common.opt:340
+#: common.opt:365
msgid "Perform cross-jumping optimization"
msgstr ""
-#: common.opt:344
+#: common.opt:369
msgid "When running CSE, follow jumps to their targets"
msgstr ""
-#: common.opt:348
+#: common.opt:373
msgid "When running CSE, follow conditional jumps"
msgstr ""
-#: common.opt:352
+#: common.opt:377
msgid "Omit range reduction step when performing complex division"
msgstr ""
-#: common.opt:356
+#: common.opt:381
msgid "Place data items into their own section"
msgstr ""
-#: common.opt:362
+#: common.opt:387
msgid "Defer popping functions args from stack until later"
msgstr ""
-#: common.opt:366
+#: common.opt:391
msgid "Attempt to fill delay slots of branch instructions"
msgstr ""
-#: common.opt:370
+#: common.opt:395
msgid "Delete useless null pointer checks"
msgstr ""
-#: common.opt:374
+#: common.opt:399
msgid ""
"How often to emit source location at the beginning of line-wrapped "
"diagnostics"
msgstr ""
-#: common.opt:378
+#: common.opt:403
msgid ""
"Amend appropriate diagnostic messages with the command line option that "
"controls them"
msgstr ""
-#: common.opt:382
+#: common.opt:407
msgid "Dump various compiler internals to a file"
msgstr ""
-#: common.opt:386
+#: common.opt:411
msgid "Suppress output of addresses in debugging dumps"
msgstr ""
-#: common.opt:390
+#: common.opt:415
msgid ""
"Suppress output of instruction numbers, line number notes and addresses in "
"debugging dumps"
msgstr ""
-#: common.opt:394
+#: common.opt:419
msgid "Perform early inlining"
msgstr ""
-#: common.opt:398
+#: common.opt:423
msgid "Perform DWARF2 duplicate elimination"
msgstr ""
-#: common.opt:402 common.opt:406
+#: common.opt:427 common.opt:431
msgid "Perform unused type elimination in debug info"
msgstr ""
-#: common.opt:410
+#: common.opt:435
msgid "Do not suppress C++ class debug information."
msgstr ""
-#: common.opt:414
+#: common.opt:439
msgid "Enable exception handling"
msgstr ""
-#: common.opt:418
+#: common.opt:443
msgid "Perform a number of minor, expensive optimizations"
msgstr ""
-#: common.opt:425
+#: common.opt:450
msgid "Assume no NaNs or infinities are generated"
msgstr ""
-#: common.opt:429
+#: common.opt:454
msgid "Mark <register> as being unavailable to the compiler"
msgstr ""
-#: common.opt:433
+#: common.opt:458
msgid "Don't allocate floats and doubles in extended-precision registers"
msgstr ""
-#: common.opt:439
+#: common.opt:464
msgid "Copy memory address constants into registers before use"
msgstr ""
-#: common.opt:445
-msgid "Copy memory operands into registers before use"
+#: common.opt:468
+msgid "Perform a forward propagation pass on RTL"
msgstr ""
-#: common.opt:452
+#: common.opt:475
msgid "Allow function addresses to be held in registers"
msgstr ""
-#: common.opt:456
+#: common.opt:479
msgid "Place each function into its own section"
msgstr ""
-#: common.opt:460
+#: common.opt:483
msgid "Perform global common subexpression elimination"
msgstr ""
-#: common.opt:464
+#: common.opt:487
msgid ""
"Perform enhanced load motion during global common subexpression elimination"
msgstr ""
-#: common.opt:468
+#: common.opt:491
msgid "Perform store motion after global common subexpression elimination"
msgstr ""
-#: common.opt:472
+#: common.opt:495
msgid ""
"Perform redundant load after store elimination in global common subexpression"
msgstr ""
-#: common.opt:477
+#: common.opt:500
msgid ""
"Perform global common subexpression elimination after register allocation"
msgstr ""
-#: common.opt:482
+#: common.opt:505
msgid "Enable guessing of branch probabilities"
msgstr ""
-#: common.opt:490
+#: common.opt:513
msgid "Process #ident directives"
msgstr ""
-#: common.opt:494
+#: common.opt:517
msgid "Perform conversion of conditional jumps to branchless equivalents"
msgstr ""
-#: common.opt:498
+#: common.opt:521
msgid "Perform conversion of conditional jumps to conditional execution"
msgstr ""
-#: common.opt:506
+#: common.opt:529
msgid "Do not generate .size directives"
msgstr ""
-#: common.opt:515
+#: common.opt:538
msgid "Pay attention to the \"inline\" keyword"
msgstr ""
-#: common.opt:519
+#: common.opt:542
msgid "Integrate simple functions into their callers"
msgstr ""
-#: common.opt:523
+#: common.opt:546
msgid "Integrate functions called once into their callers"
msgstr ""
-#: common.opt:530
+#: common.opt:553
msgid "Limit the size of inlined functions to <number>"
msgstr ""
-#: common.opt:534
+#: common.opt:557
msgid "Instrument function entry and exit with profiling calls"
msgstr ""
-#: common.opt:538
+#: common.opt:561
msgid "Perform Interprocedural constant propagation"
msgstr ""
-#: common.opt:542
+#: common.opt:565
msgid "Discover pure and const functions"
msgstr ""
-#: common.opt:546
+#: common.opt:569
msgid "Perform interprocedural points-to analysis"
msgstr ""
-#: common.opt:550
+#: common.opt:573
msgid "Discover readonly and non addressable static variables"
msgstr ""
-#: common.opt:554
+#: common.opt:577
msgid "Type based escape and alias analysis"
msgstr ""
-#: common.opt:558
+#: common.opt:581
msgid "Optimize induction variables on trees"
msgstr ""
-#: common.opt:562
+#: common.opt:585
msgid "Use jump tables for sufficiently large switch statements"
msgstr ""
-#: common.opt:566
+#: common.opt:589
msgid "Generate code for functions even if they are fully inlined"
msgstr ""
-#: common.opt:570
+#: common.opt:593
msgid "Emit static const variables even if they are not used"
msgstr ""
-#: common.opt:574
+#: common.opt:597
msgid "Give external symbols a leading underscore"
msgstr ""
-#: common.opt:578 common.opt:744 common.opt:867
+#: common.opt:601 common.opt:785 common.opt:916
msgid "Does nothing. Preserved for backward compatibility."
msgstr ""
-#: common.opt:582
+#: common.opt:605
msgid "Set errno after built-in math functions"
msgstr ""
-#: common.opt:586
+#: common.opt:609
msgid "Report on permanent memory allocation"
msgstr ""
-#: common.opt:593
+#: common.opt:616
msgid "Attempt to merge identical constants and constant variables"
msgstr ""
-#: common.opt:597
+#: common.opt:620
msgid "Attempt to merge identical constants across compilation units"
msgstr ""
-#: common.opt:601
+#: common.opt:624
msgid ""
"Limit diagnostics to <number> characters per line. 0 suppresses line-"
"wrapping"
msgstr ""
-#: common.opt:605
+#: common.opt:628
msgid "Perform SMS based modulo scheduling before the first scheduling pass"
msgstr ""
-#: common.opt:609
+#: common.opt:632
msgid "Move loop invariant computations out of loops"
msgstr ""
-#: common.opt:613
+#: common.opt:636
msgid "Add mudflap bounds-checking instrumentation for single-threaded program"
msgstr ""
-#: common.opt:617
+#: common.opt:640
msgid "Add mudflap bounds-checking instrumentation for multi-threaded program"
msgstr ""
-#: common.opt:621
+#: common.opt:644
msgid "Ignore read operations when inserting mudflap instrumentation"
msgstr ""
-#: common.opt:625
+#: common.opt:648
msgid ""
"Enable/Disable the traditional scheduling in loops that already passed "
"modulo scheduling"
msgstr ""
-#: common.opt:629
+#: common.opt:652
msgid "Support synchronous non-call exceptions"
msgstr ""
-#: common.opt:633
+#: common.opt:656
msgid "When possible do not generate stack frames"
msgstr ""
-#: common.opt:637
+#: common.opt:660
msgid "Do the full register move optimization pass"
msgstr ""
-#: common.opt:641
+#: common.opt:664
msgid "Optimize sibling and tail recursive calls"
msgstr ""
-#: common.opt:645
+#: common.opt:668 common.opt:672
+msgid "Report on memory allocation before interprocedural optimization"
+msgstr ""
+
+#: common.opt:676
msgid "Pack structure members together without holes"
msgstr ""
-#: common.opt:649
+#: common.opt:680
msgid "Set initial maximum structure member alignment"
msgstr ""
-#: common.opt:653
+#: common.opt:684
msgid "Return small aggregates in memory, not registers"
msgstr ""
-#: common.opt:657
+#: common.opt:688
msgid "Perform loop peeling"
msgstr ""
-#: common.opt:661
+#: common.opt:692
msgid "Enable machine specific peephole optimizations"
msgstr ""
-#: common.opt:665
+#: common.opt:696
msgid "Enable an RTL peephole pass before sched2"
msgstr ""
-#: common.opt:669
+#: common.opt:700
msgid "Generate position-independent code if possible (large mode)"
msgstr ""
-#: common.opt:673
+#: common.opt:704
msgid ""
"Generate position-independent code for executables if possible (large mode)"
msgstr ""
-#: common.opt:677
+#: common.opt:708
msgid "Generate position-independent code if possible (small mode)"
msgstr ""
-#: common.opt:681
+#: common.opt:712
msgid ""
"Generate position-independent code for executables if possible (small mode)"
msgstr ""
-#: common.opt:685
+#: common.opt:716
msgid "Generate prefetch instructions, if available, for arrays in loops"
msgstr ""
-#: common.opt:689
+#: common.opt:720
msgid "Enable basic program profiling code"
msgstr ""
-#: common.opt:693
+#: common.opt:724
msgid "Insert arc-based program profiling code"
msgstr ""
-#: common.opt:697
+#: common.opt:728
msgid ""
"Enable common options for generating profile info for profile feedback "
"directed optimizations"
msgstr ""
-#: common.opt:701
+#: common.opt:732
msgid ""
"Enable common options for performing profile feedback directed optimizations"
msgstr ""
-#: common.opt:705
+#: common.opt:736
msgid "Insert code to profile values of expressions"
msgstr ""
-#: common.opt:712
+#: common.opt:743
msgid "Make compile reproducible using <string>"
msgstr ""
-#: common.opt:716
+#: common.opt:753
+msgid "Record gcc command line switches in the object file."
+msgstr ""
+
+#: common.opt:757
msgid "Return small aggregates in registers"
msgstr ""
-#: common.opt:720
+#: common.opt:761
msgid "Enables a register move optimization"
msgstr ""
-#: common.opt:724
+#: common.opt:765
msgid "Perform a register renaming optimization pass"
msgstr ""
-#: common.opt:728
+#: common.opt:769
msgid "Reorder basic blocks to improve code placement"
msgstr ""
-#: common.opt:732
+#: common.opt:773
msgid "Reorder basic blocks and partition into hot and cold sections"
msgstr ""
-#: common.opt:736
+#: common.opt:777
msgid "Reorder functions to improve code placement"
msgstr ""
-#: common.opt:740
+#: common.opt:781
msgid "Add a common subexpression elimination pass after loop optimizations"
msgstr ""
-#: common.opt:748
+#: common.opt:789
msgid "Disable optimizations that assume default FP rounding behavior"
msgstr ""
-#: common.opt:752
+#: common.opt:793
msgid "Enable scheduling across basic blocks"
msgstr ""
-#: common.opt:756
+#: common.opt:797
msgid "Allow speculative motion of non-loads"
msgstr ""
-#: common.opt:760
+#: common.opt:801
msgid "Allow speculative motion of some loads"
msgstr ""
-#: common.opt:764
+#: common.opt:805
msgid "Allow speculative motion of more loads"
msgstr ""
-#: common.opt:768
+#: common.opt:809
msgid "Set the verbosity level of the scheduler"
msgstr ""
-#: common.opt:772
+#: common.opt:813
msgid "If scheduling post reload, do superblock scheduling"
msgstr ""
-#: common.opt:776
+#: common.opt:817
msgid "If scheduling post reload, do trace scheduling"
msgstr ""
-#: common.opt:780
+#: common.opt:821
msgid "Reschedule instructions before register allocation"
msgstr ""
-#: common.opt:784
+#: common.opt:825
msgid "Reschedule instructions after register allocation"
msgstr ""
-#: common.opt:790
+#: common.opt:831
msgid "Allow premature scheduling of queued insns"
msgstr ""
-#: common.opt:794
+#: common.opt:835
msgid "Set number of queued insns that can be prematurely scheduled"
msgstr ""
-#: common.opt:802 common.opt:806
+#: common.opt:843 common.opt:847
msgid ""
"Set dependence distance checking in premature scheduling of queued insns"
msgstr ""
-#: common.opt:810
+#: common.opt:851
msgid "Access data in the same section from shared anchor points"
msgstr ""
-#: common.opt:814
+#: common.opt:855
msgid "Perform sequence abstraction optimization on RTL"
msgstr ""
-#: common.opt:818
+#: common.opt:859
msgid "Eliminate redundant sign extensions using LCM."
msgstr ""
-#: common.opt:822
+#: common.opt:863
msgid "Show column numbers in diagnostics, when available. Default on"
msgstr ""
-#: common.opt:826
+#: common.opt:867
msgid "Disable optimizations observable by IEEE signaling NaNs"
msgstr ""
-#: common.opt:830
+#: common.opt:871
+msgid ""
+"Disable floating point optimizations that ignore the IEEE signedness of zero"
+msgstr ""
+
+#: common.opt:875
msgid "Convert floating point constants to single precision constants"
msgstr ""
-#: common.opt:834
+#: common.opt:879
msgid "Split lifetimes of induction variables when loops are unrolled"
msgstr ""
-#: common.opt:838
+#: common.opt:883
+msgid "Split wide types into independent registers"
+msgstr ""
+
+#: common.opt:887
msgid "Apply variable expansion when loops are unrolled"
msgstr ""
-#: common.opt:844
+#: common.opt:893
msgid "Insert stack checking code into the program"
msgstr ""
-#: common.opt:851
+#: common.opt:900
msgid "Trap if the stack goes past <register>"
msgstr ""
-#: common.opt:855
+#: common.opt:904
msgid "Trap if the stack goes past symbol <name>"
msgstr ""
-#: common.opt:859
+#: common.opt:908
msgid "Use propolice as a stack protection method"
msgstr ""
-#: common.opt:863
+#: common.opt:912
msgid "Use a stack protection method for every function"
msgstr ""
-#: common.opt:875
+#: common.opt:924
msgid "Assume strict aliasing rules apply"
msgstr ""
-#: common.opt:879
+#: common.opt:928
+msgid "Treat signed overflow as undefined"
+msgstr ""
+
+#: common.opt:932
msgid "Check for syntax errors, then stop"
msgstr ""
-#: common.opt:883
+#: common.opt:936
msgid "Create data files needed by \"gcov\""
msgstr ""
-#: common.opt:887
+#: common.opt:940
msgid "Perform jump threading optimizations"
msgstr ""
-#: common.opt:891
+#: common.opt:944
msgid "Report the time taken by each compiler pass"
msgstr ""
-#: common.opt:895
+#: common.opt:948
msgid "Set the default thread-local storage code generation model"
msgstr ""
-#: common.opt:899
+#: common.opt:952
msgid "Reorder top level functions, variables, and asms"
msgstr ""
-#: common.opt:903
+#: common.opt:956
msgid "Perform superblock formation via tail duplication"
msgstr ""
-#: common.opt:910
+#: common.opt:963
msgid "Assume floating-point operations can trap"
msgstr ""
-#: common.opt:914
+#: common.opt:967
msgid "Trap for signed overflow in addition, subtraction and multiplication"
msgstr ""
-#: common.opt:918
+#: common.opt:971
msgid "Enable SSA-CCP optimization on trees"
msgstr ""
-#: common.opt:922
+#: common.opt:975
msgid "Enable SSA-CCP optimization for stores and loads"
msgstr ""
-#: common.opt:926
+#: common.opt:979
msgid "Enable loop header copying on trees"
msgstr ""
-#: common.opt:930
-msgid "Coalesce memory temporaries in the SSA->normal pass"
-msgstr ""
-
-#: common.opt:934
+#: common.opt:983
msgid "Replace SSA temporaries with better names in copies"
msgstr ""
-#: common.opt:938
+#: common.opt:987
msgid "Enable copy propagation on trees"
msgstr ""
-#: common.opt:942
+#: common.opt:991
msgid "Enable copy propagation for stores and loads"
msgstr ""
-#: common.opt:946
+#: common.opt:995
msgid "Enable SSA dead code elimination optimization on trees"
msgstr ""
-#: common.opt:950
+#: common.opt:999
msgid "Enable dominator optimizations"
msgstr ""
-#: common.opt:954
+#: common.opt:1003
msgid "Enable dead store elimination"
msgstr ""
-#: common.opt:958
+#: common.opt:1007
msgid "Enable Full Redundancy Elimination (FRE) on trees"
msgstr ""
-#: common.opt:962
+#: common.opt:1011
msgid "Enable loop invariant motion on trees"
msgstr ""
-#: common.opt:966
+#: common.opt:1015
msgid "Enable linear loop transforms on trees"
msgstr ""
-#: common.opt:970
+#: common.opt:1019
msgid "Create canonical induction variables in loops"
msgstr ""
-#: common.opt:974
+#: common.opt:1023
msgid "Enable loop optimizations on tree level"
msgstr ""
-#: common.opt:978
+#: common.opt:1027
msgid "Enable SSA-PRE optimization on trees"
msgstr ""
-#: common.opt:982
+#: common.opt:1031
msgid "Perform structural alias analysis"
msgstr ""
-#: common.opt:986
+#: common.opt:1035
msgid "Enable SSA code sinking on trees"
msgstr ""
-#: common.opt:990
+#: common.opt:1039
msgid "Perform scalar replacement of aggregates"
msgstr ""
-#: common.opt:994
+#: common.opt:1043
msgid "Replace temporary expressions in the SSA->normal pass"
msgstr ""
-#: common.opt:998
+#: common.opt:1047
msgid "Perform live range splitting during the SSA->normal pass"
msgstr ""
-#: common.opt:1002
+#: common.opt:1051
msgid "Perform Value Range Propagation on trees"
msgstr ""
-#: common.opt:1006
+#: common.opt:1055
msgid "Compile whole compilation unit at a time"
msgstr ""
-#: common.opt:1010
+#: common.opt:1059
msgid "Perform loop unrolling when iteration count is known"
msgstr ""
-#: common.opt:1014
+#: common.opt:1063
msgid "Perform loop unrolling for all loops"
msgstr ""
-#: common.opt:1021
+#: common.opt:1070
msgid "Allow loop optimizations to assume that the loops behave in normal way"
msgstr ""
-#: common.opt:1029
+#: common.opt:1078
msgid "Allow math optimizations that may violate IEEE or ISO standards"
msgstr ""
-#: common.opt:1033
+#: common.opt:1082
msgid "Perform loop unswitching"
msgstr ""
-#: common.opt:1037
+#: common.opt:1086
msgid "Just generate unwind tables for exception handling"
msgstr ""
-#: common.opt:1041
+#: common.opt:1090
msgid "Perform variable tracking"
msgstr ""
-#: common.opt:1045
+#: common.opt:1094
msgid "Enable loop vectorization on trees"
msgstr ""
-#: common.opt:1049
+#: common.opt:1098
msgid "Enable loop versioning when doing loop vectorization on trees"
msgstr ""
-#: common.opt:1053
+#: common.opt:1102
msgid "Set the verbosity level of the vectorizer"
msgstr ""
-#: common.opt:1063
+#: common.opt:1106
+msgid "Enable copy propagation of scalar-evolution information."
+msgstr ""
+
+#: common.opt:1116
msgid "Add extra commentary to assembler output"
msgstr ""
-#: common.opt:1067
+#: common.opt:1120
msgid "Set the default symbol visibility"
msgstr ""
-#: common.opt:1072
+#: common.opt:1125
msgid "Use expression value profiles in optimizations"
msgstr ""
-#: common.opt:1076
+#: common.opt:1129
msgid "Construct webs and split unrelated uses of single variable"
msgstr ""
-#: common.opt:1080
+#: common.opt:1133
msgid "Perform whole program optimizations"
msgstr ""
-#: common.opt:1084
+#: common.opt:1137
msgid "Assume signed arithmetic overflow wraps around"
msgstr ""
-#: common.opt:1088
+#: common.opt:1141
msgid "Put zero initialized data in the bss section"
msgstr ""
-#: common.opt:1092
+#: common.opt:1145
msgid "Generate debug information in default format"
msgstr ""
-#: common.opt:1096
+#: common.opt:1149
msgid "Generate debug information in COFF format"
msgstr ""
-#: common.opt:1100
+#: common.opt:1153
msgid "Generate debug information in DWARF v2 format"
msgstr ""
-#: common.opt:1104
+#: common.opt:1157
msgid "Generate debug information in default extended format"
msgstr ""
-#: common.opt:1108
+#: common.opt:1161
msgid "Generate debug information in STABS format"
msgstr ""
-#: common.opt:1112
+#: common.opt:1165
msgid "Generate debug information in extended STABS format"
msgstr ""
-#: common.opt:1116
+#: common.opt:1169
msgid "Generate debug information in VMS format"
msgstr ""
-#: common.opt:1120
+#: common.opt:1173
msgid "Generate debug information in XCOFF format"
msgstr ""
-#: common.opt:1124
+#: common.opt:1177
msgid "Generate debug information in extended XCOFF format"
msgstr ""
-#: common.opt:1128
+#: common.opt:1181
msgid "Place output into <file>"
msgstr ""
-#: common.opt:1132
+#: common.opt:1185
msgid "Enable function profiling"
msgstr ""
-#: common.opt:1136
+#: common.opt:1189
msgid "Issue warnings needed for strict compliance to the standard"
msgstr ""
-#: common.opt:1140
+#: common.opt:1193
msgid "Like -pedantic but issue them as errors"
msgstr ""
-#: common.opt:1144
+#: common.opt:1197
msgid "Do not display functions compiled or elapsed time"
msgstr ""
-#: common.opt:1148
+#: common.opt:1201
msgid "Display the compiler's version"
msgstr ""
-#: common.opt:1152
+#: common.opt:1205
msgid "Suppress warnings"
msgstr ""
-#: attribs.c:175 cp/name-lookup.c:3081
+#: attribs.c:175 cp/name-lookup.c:3095
#, gcc-internal-format
msgid "%qs attribute directive ignored"
msgstr ""
@@ -15415,7 +15667,7 @@ msgstr ""
msgid "type attributes ignored after type is already defined"
msgstr ""
-#: bb-reorder.c:1872
+#: bb-reorder.c:1873
#, gcc-internal-format
msgid "multiple hot/cold transitions found (bb %i)"
msgstr ""
@@ -15426,52 +15678,52 @@ msgid ""
"branch target register load optimization is not intended to be run twice"
msgstr ""
-#: builtins.c:421
+#: builtins.c:445
#, gcc-internal-format
msgid "offset outside bounds of constant string"
msgstr ""
-#: builtins.c:977
+#: builtins.c:998
#, gcc-internal-format
msgid "second argument to %<__builtin_prefetch%> must be a constant"
msgstr ""
-#: builtins.c:984
+#: builtins.c:1005
#, gcc-internal-format
msgid "invalid second argument to %<__builtin_prefetch%>; using zero"
msgstr ""
-#: builtins.c:992
+#: builtins.c:1013
#, gcc-internal-format
msgid "third argument to %<__builtin_prefetch%> must be a constant"
msgstr ""
-#: builtins.c:999
+#: builtins.c:1020
#, gcc-internal-format
msgid "invalid third argument to %<__builtin_prefetch%>; using zero"
msgstr ""
-#: builtins.c:4197
+#: builtins.c:4472
#, gcc-internal-format
msgid "argument of %<__builtin_args_info%> must be constant"
msgstr ""
-#: builtins.c:4203
+#: builtins.c:4478
#, gcc-internal-format
msgid "argument of %<__builtin_args_info%> out of range"
msgstr ""
-#: builtins.c:4209
+#: builtins.c:4484
#, gcc-internal-format
msgid "missing argument in %<__builtin_args_info%>"
msgstr ""
-#: builtins.c:4305 gimplify.c:2067
+#: builtins.c:4578 gimplify.c:2072
#, gcc-internal-format
msgid "too few arguments to function %<va_start%>"
msgstr ""
-#: builtins.c:4469
+#: builtins.c:4742
#, gcc-internal-format
msgid "first argument to %<va_arg%> not of type %<va_list%>"
msgstr ""
@@ -15479,88 +15731,78 @@ 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:4483
+#: builtins.c:4756
#, gcc-internal-format
msgid "%qT is promoted to %qT when passed through %<...%>"
msgstr ""
-#: builtins.c:4488
+#: builtins.c:4761
#, gcc-internal-format
msgid "(so you should pass %qT not %qT to %<va_arg%>)"
msgstr ""
#. We can, however, treat "undefined" any way we please.
#. Call abort to encourage the user to fix the program.
-#: builtins.c:4494 c-typeck.c:2288
+#: builtins.c:4767 c-typeck.c:2301
#, gcc-internal-format
msgid "if this code is reached, the program will abort"
msgstr ""
-#: builtins.c:4613
+#: builtins.c:4885
#, gcc-internal-format
msgid "invalid argument to %<__builtin_frame_address%>"
msgstr ""
-#: builtins.c:4615
+#: builtins.c:4887
#, gcc-internal-format
msgid "invalid argument to %<__builtin_return_address%>"
msgstr ""
-#: builtins.c:4628
+#: builtins.c:4900
#, gcc-internal-format
msgid "unsupported argument to %<__builtin_frame_address%>"
msgstr ""
-#: builtins.c:4630
+#: builtins.c:4902
#, gcc-internal-format
msgid "unsupported argument to %<__builtin_return_address%>"
msgstr ""
-#: builtins.c:4733
-#, gcc-internal-format
-msgid "second argument to %<__builtin_expect%> must be a constant"
-msgstr ""
-
-#: builtins.c:6183
+#: builtins.c:6341
#, gcc-internal-format
msgid "%<__builtin_longjmp%> second argument must be 1"
msgstr ""
-#: builtins.c:6763
+#: builtins.c:6910
#, gcc-internal-format
msgid "target format does not support infinity"
msgstr ""
-#: builtins.c:8786 builtins.c:8880
-#, gcc-internal-format
-msgid "too few arguments to function %qs"
-msgstr ""
-
-#: builtins.c:8792 builtins.c:8886
+#: builtins.c:9284 builtins.c:9374
#, gcc-internal-format
-msgid "too many arguments to function %qs"
+msgid "non-floating-point argument to function %qs"
msgstr ""
-#: builtins.c:8798 builtins.c:8911
+#: builtins.c:10869
#, gcc-internal-format
-msgid "non-floating-point argument to function %qs"
+msgid "%<va_start%> used in function with fixed args"
msgstr ""
-#: builtins.c:9939
+#: builtins.c:10877
#, gcc-internal-format
-msgid "%<va_start%> used in function with fixed args"
+msgid "wrong number of arguments to function %<va_start%>"
msgstr ""
#. Evidently an out of date version of <stdarg.h>; can't validate
#. va_start's second argument, but can still work as intended.
-#: builtins.c:9946
+#: builtins.c:10890
#, gcc-internal-format
msgid "%<__builtin_next_arg%> called without an argument"
msgstr ""
-#: builtins.c:9961
+#: builtins.c:10895
#, gcc-internal-format
-msgid "%<va_start%> used with too many arguments"
+msgid "wrong number of arguments to function %<__builtin_next_arg%>"
msgstr ""
#. FIXME: Sometimes with the tree optimizers we can get the
@@ -15568,27 +15810,32 @@ msgstr ""
#. argument. We just warn and set the arg to be the last
#. argument so that we will get wrong-code because of
#. it.
-#: builtins.c:9981
+#: builtins.c:10924
#, gcc-internal-format
msgid "second parameter of %<va_start%> not last named argument"
msgstr ""
-#: builtins.c:10093
+#: builtins.c:11039
#, gcc-internal-format
msgid "%Hfirst argument of %D must be a pointer, second integer constant"
msgstr ""
-#: builtins.c:10106
+#: builtins.c:11052
#, gcc-internal-format
msgid "%Hlast argument of %D is not integer constant between 0 and 3"
msgstr ""
-#: builtins.c:10152 builtins.c:10305 builtins.c:10373
+#: builtins.c:11097 builtins.c:11251 builtins.c:11311
#, gcc-internal-format
msgid "%Hcall to %D will always overflow destination buffer"
msgstr ""
-#: c-common.c:831
+#: builtins.c:11240
+#, gcc-internal-format
+msgid "%Hcall to %D might overflow destination buffer"
+msgstr ""
+
+#: c-common.c:855
#, gcc-internal-format
msgid "%qD is not defined outside of function scope"
msgstr ""
@@ -15597,714 +15844,850 @@ msgstr ""
#. separate the %d from the 'C'. 'ISO' should not be
#. translated, but it may be moved after 'C%d' in languages
#. where modifiers follow nouns.
-#: c-common.c:863
+#: c-common.c:887
#, gcc-internal-format
msgid ""
"string length %qd is greater than the length %qd ISO C%d compilers are "
"required to support"
msgstr ""
-#: c-common.c:912
+#: c-common.c:936
#, gcc-internal-format
msgid "overflow in constant expression"
msgstr ""
-#: c-common.c:932
+#: c-common.c:958
#, gcc-internal-format
msgid "integer overflow in expression"
msgstr ""
-#: c-common.c:941
+#: c-common.c:962
#, gcc-internal-format
msgid "floating point overflow in expression"
msgstr ""
-#: c-common.c:947
+#: c-common.c:966
#, gcc-internal-format
msgid "vector overflow in expression"
msgstr ""
-#: c-common.c:970
+#: c-common.c:971
#, gcc-internal-format
-msgid "large integer implicitly truncated to unsigned type"
+msgid "complex integer overflow in expression"
msgstr ""
#: c-common.c:973
#, gcc-internal-format
-msgid "negative integer implicitly converted to unsigned type"
+msgid "complex floating point overflow in expression"
msgstr ""
-#: c-common.c:995
+#: c-common.c:999
#, gcc-internal-format
msgid "type-punning to incomplete type might break strict-aliasing rules"
msgstr ""
-#: c-common.c:1003
+#: c-common.c:1007
#, gcc-internal-format
msgid "dereferencing type-punned pointer will break strict-aliasing rules"
msgstr ""
-#: c-common.c:1007
+#: c-common.c:1011
#, gcc-internal-format
msgid "dereferencing type-punned pointer might break strict-aliasing rules"
msgstr ""
-#: c-common.c:1033
+#: c-common.c:1036
#, gcc-internal-format
msgid "%Hempty body in an if-statement"
msgstr ""
-#: c-common.c:1037
+#: c-common.c:1040
#, gcc-internal-format
msgid "%Hempty body in an else-statement"
msgstr ""
-#: c-common.c:1101
+#: c-common.c:1067
+#, gcc-internal-format
+msgid "first argument of %q+D should be %<int%>"
+msgstr ""
+
+#: c-common.c:1075
+#, gcc-internal-format
+msgid "second argument of %q+D should be %<char **%>"
+msgstr ""
+
+#: c-common.c:1084
+#, gcc-internal-format
+msgid "third argument of %q+D should probably be %<char **%>"
+msgstr ""
+
+#: c-common.c:1094
+#, gcc-internal-format
+msgid "%q+D takes only zero or two arguments"
+msgstr ""
+
+#: c-common.c:1129
+#, gcc-internal-format
+msgid ""
+"use -flax-vector-conversions to permit conversions between vectors with "
+"differing element types or numbers of subparts"
+msgstr ""
+
+#: c-common.c:1164
+#, gcc-internal-format
+msgid "negative integer implicitly converted to unsigned type"
+msgstr ""
+
+#: c-common.c:1190
+#, gcc-internal-format
+msgid "conversion to %qT alters %qT constant value"
+msgstr ""
+
+#: c-common.c:1241
+#, gcc-internal-format
+msgid "conversion to %qT from %qT may alter its value"
+msgstr ""
+
+#: c-common.c:1279
+#, gcc-internal-format
+msgid "large integer implicitly truncated to unsigned type"
+msgstr ""
+
+#: c-common.c:1285 c-common.c:1292 c-common.c:1299
#, gcc-internal-format
msgid "overflow in implicit constant conversion"
msgstr ""
-#: c-common.c:1237
+#: c-common.c:1434
#, gcc-internal-format
msgid "operation on %qE may be undefined"
msgstr ""
-#: c-common.c:1523
+#: c-common.c:1727
#, gcc-internal-format
msgid "case label does not reduce to an integer constant"
msgstr ""
-#: c-common.c:1563
+#: c-common.c:1767
#, gcc-internal-format
msgid "case label value is less than minimum value for type"
msgstr ""
-#: c-common.c:1571
+#: c-common.c:1775
#, gcc-internal-format
msgid "case label value exceeds maximum value for type"
msgstr ""
-#: c-common.c:1579
+#: c-common.c:1783
#, gcc-internal-format
msgid "lower value in case label range less than minimum value for type"
msgstr ""
-#: c-common.c:1588
+#: c-common.c:1792
#, gcc-internal-format
msgid "upper value in case label range exceeds maximum value for type"
msgstr ""
-#: c-common.c:2003
+#: c-common.c:2207
#, gcc-internal-format
msgid "invalid operands to binary %s"
msgstr ""
-#: c-common.c:2238
+#: c-common.c:2440
#, gcc-internal-format
msgid "comparison is always false due to limited range of data type"
msgstr ""
-#: c-common.c:2240
+#: c-common.c:2442
#, gcc-internal-format
msgid "comparison is always true due to limited range of data type"
msgstr ""
-#: c-common.c:2318
+#: c-common.c:2520
#, gcc-internal-format
msgid "comparison of unsigned expression >= 0 is always true"
msgstr ""
-#: c-common.c:2327
+#: c-common.c:2529
#, gcc-internal-format
msgid "comparison of unsigned expression < 0 is always false"
msgstr ""
-#: c-common.c:2369
+#: c-common.c:2571
#, gcc-internal-format
msgid "pointer of type %<void *%> used in arithmetic"
msgstr ""
-#: c-common.c:2375
+#: c-common.c:2577
#, gcc-internal-format
msgid "pointer to a function used in arithmetic"
msgstr ""
-#: c-common.c:2381
+#: c-common.c:2583
#, gcc-internal-format
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:2510
+#: c-common.c:2729
#, gcc-internal-format
msgid "the address of %qD will always evaluate as %<true%>"
msgstr ""
-#: c-common.c:2575
+#: c-common.c:2798 cp/semantics.c:596 cp/typeck.c:6342
#, gcc-internal-format
msgid "suggest parentheses around assignment used as truth value"
msgstr ""
-#: c-common.c:2643 c-common.c:2683
+#: c-common.c:2868 c-common.c:2908
#, gcc-internal-format
msgid "invalid use of %<restrict%>"
msgstr ""
-#: c-common.c:2899
+#: c-common.c:3124
#, gcc-internal-format
msgid "invalid application of %<sizeof%> to a function type"
msgstr ""
-#: c-common.c:2909
+#: c-common.c:3134
#, gcc-internal-format
msgid "invalid application of %qs to a void type"
msgstr ""
-#: c-common.c:2915
+#: c-common.c:3140
#, gcc-internal-format
msgid "invalid application of %qs to incomplete type %qT "
msgstr ""
-#: c-common.c:2956
+#: c-common.c:3181
#, gcc-internal-format
msgid "%<__alignof%> applied to a bit-field"
msgstr ""
-#: c-common.c:3447
+#: c-common.c:3692
#, gcc-internal-format
msgid "cannot disable built-in function %qs"
msgstr ""
-#: c-common.c:3641
+#: c-common.c:3886
#, gcc-internal-format
msgid "pointers are not permitted as case values"
msgstr ""
-#: c-common.c:3647
+#: c-common.c:3892
#, gcc-internal-format
msgid "range expressions in switch statements are non-standard"
msgstr ""
-#: c-common.c:3673
+#: c-common.c:3918
#, gcc-internal-format
msgid "empty range specified"
msgstr ""
-#: c-common.c:3733
+#: c-common.c:3978
#, gcc-internal-format
msgid "duplicate (or overlapping) case value"
msgstr ""
-#: c-common.c:3734
+#: c-common.c:3979
#, gcc-internal-format
msgid "%Jthis is the first entry overlapping that value"
msgstr ""
-#: c-common.c:3738
+#: c-common.c:3983
#, gcc-internal-format
msgid "duplicate case value"
msgstr ""
-#: c-common.c:3739
+#: c-common.c:3984
#, gcc-internal-format
msgid "%Jpreviously used here"
msgstr ""
-#: c-common.c:3743
+#: c-common.c:3988
#, gcc-internal-format
msgid "multiple default labels in one switch"
msgstr ""
-#: c-common.c:3744
+#: c-common.c:3989
#, gcc-internal-format
msgid "%Jthis is the first default label"
msgstr ""
-#: c-common.c:3793
+#: c-common.c:4038
#, gcc-internal-format
msgid "%Jcase value %qs not in enumerated type"
msgstr ""
-#: c-common.c:3796
+#: c-common.c:4041
#, gcc-internal-format
msgid "%Jcase value %qs not in enumerated type %qT"
msgstr ""
-#: c-common.c:3854
+#: c-common.c:4099
#, gcc-internal-format
msgid "%Hswitch missing default case"
msgstr ""
-#: c-common.c:3917
+#: c-common.c:4162
#, gcc-internal-format
msgid "%Henumeration value %qE not handled in switch"
msgstr ""
-#: c-common.c:3941
+#: c-common.c:4186
#, gcc-internal-format
msgid "taking the address of a label is non-standard"
msgstr ""
-#: c-common.c:4091
+#: c-common.c:4359
#, gcc-internal-format
msgid "%qE attribute ignored for field of type %qT"
msgstr ""
-#: c-common.c:4102 c-common.c:4121 c-common.c:4139 c-common.c:4166
-#: c-common.c:4185 c-common.c:4208 c-common.c:4229 c-common.c:4254
-#: c-common.c:4280 c-common.c:4317 c-common.c:4344 c-common.c:4395
-#: c-common.c:4420 c-common.c:4448 c-common.c:4467 c-common.c:4750
-#: c-common.c:4810 c-common.c:4831 c-common.c:4895 c-common.c:5008
-#: c-common.c:5074 c-common.c:5092 c-common.c:5138 c-common.c:5208
-#: c-common.c:5232 c-common.c:5531 c-common.c:5554 c-common.c:5593
+#: c-common.c:4370 c-common.c:4389 c-common.c:4407 c-common.c:4434
+#: c-common.c:4461 c-common.c:4487 c-common.c:4506 c-common.c:4529
+#: c-common.c:4552 c-common.c:4573 c-common.c:4598 c-common.c:4624
+#: c-common.c:4661 c-common.c:4688 c-common.c:4739 c-common.c:4823
+#: c-common.c:4853 c-common.c:4872 c-common.c:5155 c-common.c:5215
+#: c-common.c:5236 c-common.c:5300 c-common.c:5413 c-common.c:5479
+#: c-common.c:5497 c-common.c:5543 c-common.c:5613 c-common.c:5637
+#: c-common.c:5920 c-common.c:5943 c-common.c:5982
#, gcc-internal-format
msgid "%qE attribute ignored"
msgstr ""
-#: c-common.c:4311
+#: c-common.c:4452 c-common.c:4478
+#, gcc-internal-format
+msgid "%qE attribute conflicts with attribute %s"
+msgstr ""
+
+#: c-common.c:4655
#, gcc-internal-format
msgid "%qE attribute have effect only on public objects"
msgstr ""
-#: c-common.c:4505
+#: c-common.c:4760
+#, gcc-internal-format
+msgid "destructor priorities are not supported"
+msgstr ""
+
+#: c-common.c:4762
+#, gcc-internal-format
+msgid "constructor priorities are not supported"
+msgstr ""
+
+#: c-common.c:4779
+#, gcc-internal-format
+msgid "destructor priorities from 0 to %d are reserved for the implementation"
+msgstr ""
+
+#: c-common.c:4784
+#, gcc-internal-format
+msgid "constructor priorities from 0 to %d are reserved for the implementation"
+msgstr ""
+
+#: c-common.c:4792
+#, gcc-internal-format
+msgid "destructor priorities must be integers from 0 to %d inclusive"
+msgstr ""
+
+#: c-common.c:4795
+#, gcc-internal-format
+msgid "constructor priorities must be integers from 0 to %d inclusive"
+msgstr ""
+
+#: c-common.c:4910
#, gcc-internal-format
msgid "unknown machine mode %qs"
msgstr ""
-#: c-common.c:4526
+#: c-common.c:4931
#, gcc-internal-format
msgid "specifying vector types with __attribute__ ((mode)) is deprecated"
msgstr ""
-#: c-common.c:4529
+#: c-common.c:4934
#, gcc-internal-format
msgid "use __attribute__ ((vector_size)) instead"
msgstr ""
-#: c-common.c:4538
+#: c-common.c:4943
#, gcc-internal-format
msgid "unable to emulate %qs"
msgstr ""
-#: c-common.c:4548
+#: c-common.c:4953
#, gcc-internal-format
msgid "invalid pointer mode %qs"
msgstr ""
-#: c-common.c:4563
+#: c-common.c:4968
#, gcc-internal-format
msgid "no data type for mode %qs"
msgstr ""
-#: c-common.c:4573
+#: c-common.c:4978
#, gcc-internal-format
msgid "cannot use mode %qs for enumeral types"
msgstr ""
-#: c-common.c:4600
+#: c-common.c:5005
#, gcc-internal-format
msgid "mode %qs applied to inappropriate type"
msgstr ""
-#: c-common.c:4631
+#: c-common.c:5036
#, gcc-internal-format
msgid "%Jsection attribute cannot be specified for local variables"
msgstr ""
-#: c-common.c:4642
+#: c-common.c:5047
#, gcc-internal-format
msgid "section of %q+D conflicts with previous declaration"
msgstr ""
-#: c-common.c:4651
+#: c-common.c:5056
#, gcc-internal-format
msgid "section attribute not allowed for %q+D"
msgstr ""
-#: c-common.c:4657
+#: c-common.c:5062
#, gcc-internal-format
msgid "%Jsection attributes are not supported for this target"
msgstr ""
-#: c-common.c:4689
+#: c-common.c:5094
#, gcc-internal-format
msgid "requested alignment is not a constant"
msgstr ""
-#: c-common.c:4694
+#: c-common.c:5099
#, gcc-internal-format
msgid "requested alignment is not a power of 2"
msgstr ""
-#: c-common.c:4699
+#: c-common.c:5104
#, gcc-internal-format
msgid "requested alignment is too large"
msgstr ""
-#: c-common.c:4725
+#: c-common.c:5130
#, gcc-internal-format
msgid "alignment may not be specified for %q+D"
msgstr ""
-#: c-common.c:4773
+#: c-common.c:5178
#, gcc-internal-format
msgid "%q+D defined both normally and as an alias"
msgstr ""
-#: c-common.c:4789
+#: c-common.c:5194
#, gcc-internal-format
msgid "alias argument not a string"
msgstr ""
-#: c-common.c:4852
+#: c-common.c:5257
#, gcc-internal-format
msgid "%Jweakref attribute must appear before alias attribute"
msgstr ""
-#: c-common.c:4882
+#: c-common.c:5287
#, gcc-internal-format
msgid "%qE attribute ignored on non-class types"
msgstr ""
-#: c-common.c:4888
+#: c-common.c:5293
#, gcc-internal-format
msgid "%qE attribute ignored because %qT is already defined"
msgstr ""
-#: c-common.c:4901
+#: c-common.c:5306
#, gcc-internal-format
msgid "visibility argument not a string"
msgstr ""
-#: c-common.c:4913
+#: c-common.c:5318
#, gcc-internal-format
msgid "%qE attribute ignored on types"
msgstr ""
-#: c-common.c:4929
+#: c-common.c:5334
#, gcc-internal-format
msgid ""
"visibility argument must be one of \"default\", \"hidden\", \"protected\" or "
"\"internal\""
msgstr ""
-#: c-common.c:4938
+#: c-common.c:5343
#, gcc-internal-format
msgid "%qD redeclared with different visibility"
msgstr ""
-#: c-common.c:5016
+#: c-common.c:5421
#, gcc-internal-format
msgid "tls_model argument not a string"
msgstr ""
-#: c-common.c:5029
+#: c-common.c:5434
#, gcc-internal-format
msgid ""
"tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-"
"dynamic\" or \"global-dynamic\""
msgstr ""
-#: c-common.c:5048 c-common.c:5112
+#: c-common.c:5453 c-common.c:5517
#, gcc-internal-format
msgid "%J%qE attribute applies only to functions"
msgstr ""
-#: c-common.c:5053 c-common.c:5117
+#: c-common.c:5458 c-common.c:5522
#, gcc-internal-format
msgid "%Jcan%'t set %qE attribute after definition"
msgstr ""
-#: c-common.c:5206
+#: c-common.c:5611
#, gcc-internal-format
msgid "%qE attribute ignored for %qE"
msgstr ""
-#: c-common.c:5261
+#: c-common.c:5668
#, gcc-internal-format
msgid "invalid vector type for attribute %qE"
msgstr ""
-#: c-common.c:5267
+#: c-common.c:5674
#, gcc-internal-format
msgid "vector size not an integral multiple of component size"
msgstr ""
-#: c-common.c:5273
+#: c-common.c:5680
#, gcc-internal-format
msgid "zero vector size"
msgstr ""
-#: c-common.c:5281
+#: c-common.c:5688
#, gcc-internal-format
msgid "number of components of the vector not a power of two"
msgstr ""
-#: c-common.c:5309
+#: c-common.c:5716
#, gcc-internal-format
msgid "nonnull attribute without arguments on a non-prototype"
msgstr ""
-#: c-common.c:5324
+#: c-common.c:5731
#, gcc-internal-format
msgid "nonnull argument has invalid operand number (argument %lu)"
msgstr ""
-#: c-common.c:5343
+#: c-common.c:5750
#, gcc-internal-format
msgid ""
"nonnull argument with out-of-range operand number (argument %lu, operand %lu)"
msgstr ""
-#: c-common.c:5351
+#: c-common.c:5758
#, gcc-internal-format
msgid ""
"nonnull argument references non-pointer operand (argument %lu, operand %lu)"
msgstr ""
-#: c-common.c:5414 c-common.c:5437
+#: c-common.c:5834
#, gcc-internal-format
msgid "not enough variable arguments to fit a sentinel"
msgstr ""
-#: c-common.c:5458
+#: c-common.c:5848
#, gcc-internal-format
msgid "missing sentinel in function call"
msgstr ""
-#: c-common.c:5500
+#: c-common.c:5889
#, gcc-internal-format
msgid "null argument where non-null required (argument %lu)"
msgstr ""
-#: c-common.c:5565
+#: c-common.c:5954
#, gcc-internal-format
msgid "cleanup argument not an identifier"
msgstr ""
-#: c-common.c:5572
+#: c-common.c:5961
#, gcc-internal-format
msgid "cleanup argument not a function"
msgstr ""
-#: c-common.c:5611
+#: c-common.c:6000
#, gcc-internal-format
msgid "%qE attribute requires prototypes with named arguments"
msgstr ""
-#: c-common.c:5622
+#: c-common.c:6011
#, gcc-internal-format
msgid "%qE attribute only applies to variadic functions"
msgstr ""
-#: c-common.c:5633
+#: c-common.c:6022
#, gcc-internal-format
msgid "requested position is not an integer constant"
msgstr ""
-#: c-common.c:5640
+#: c-common.c:6029
#, gcc-internal-format
msgid "requested position is less than zero"
msgstr ""
-#: c-common.c:5948
+#: c-common.c:6340
#, gcc-internal-format
msgid ""
"%Hignoring return value of %qD, declared with attribute warn_unused_result"
msgstr ""
-#: c-common.c:5952
+#: c-common.c:6344
#, gcc-internal-format
msgid ""
"%Hignoring return value of function declared with attribute "
"warn_unused_result"
msgstr ""
-#: c-common.c:6005
+#: c-common.c:6397
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to static data member %qD"
msgstr ""
-#: c-common.c:6009
+#: c-common.c:6401
#, gcc-internal-format
msgid "cannot apply %<offsetof%> when %<operator[]%> is overloaded"
msgstr ""
-#: c-common.c:6030 cp/typeck.c:4399
+#: c-common.c:6422 cp/typeck.c:4492
#, gcc-internal-format
msgid "attempt to take address of bit-field structure member %qD"
msgstr ""
-#: c-common.c:6077
+#: c-common.c:6469
#, gcc-internal-format
msgid "lvalue required as left operand of assignment"
msgstr ""
-#: c-common.c:6080
+#: c-common.c:6472
#, gcc-internal-format
msgid "lvalue required as increment operand"
msgstr ""
-#: c-common.c:6083
+#: c-common.c:6475
#, gcc-internal-format
msgid "lvalue required as decrement operand"
msgstr ""
-#: c-common.c:6086
+#: c-common.c:6478
#, gcc-internal-format
msgid "lvalue required as unary %<&%> operand"
msgstr ""
-#: c-common.c:6089
+#: c-common.c:6481
#, gcc-internal-format
msgid "lvalue required in asm statement"
msgstr ""
-#: c-common.c:6217 c-common.c:6266 c-typeck.c:2574
+#: c-common.c:6616 c-common.c:6665 c-typeck.c:2591
#, gcc-internal-format
msgid "too few arguments to function %qE"
msgstr ""
#. ??? This should not be an error when inlining calls to
#. unprototyped functions.
-#: c-common.c:6234 c-typeck.c:4247
+#: c-common.c:6633 c-typeck.c:4204
#, gcc-internal-format
msgid "incompatible type for argument %d of %qE"
msgstr ""
-#: c-common.c:6425
+#: c-common.c:6824
#, gcc-internal-format
msgid "array subscript has type %<char%>"
msgstr ""
+#: c-common.c:6847
+#, gcc-internal-format
+msgid "suggest parentheses around + or - inside shift"
+msgstr ""
+
+#: c-common.c:6855
+#, gcc-internal-format
+msgid "suggest parentheses around && within ||"
+msgstr ""
+
+#: c-common.c:6865
+#, gcc-internal-format
+msgid "suggest parentheses around arithmetic in operand of |"
+msgstr ""
+
+#: c-common.c:6870
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of |"
+msgstr ""
+
+#: c-common.c:6880
+#, gcc-internal-format
+msgid "suggest parentheses around arithmetic in operand of ^"
+msgstr ""
+
+#: c-common.c:6885
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of ^"
+msgstr ""
+
+#: c-common.c:6893
+#, gcc-internal-format
+msgid "suggest parentheses around + or - in operand of &"
+msgstr ""
+
+#: c-common.c:6898
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of &"
+msgstr ""
+
+#: c-common.c:6906
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of %s"
+msgstr ""
+
+#: c-common.c:6915
+#, gcc-internal-format
+msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+msgstr ""
+
+#: c-common.c:6928
+#, gcc-internal-format
+msgid "label %q+D defined but not used"
+msgstr ""
+
+#: c-common.c:6930
+#, gcc-internal-format
+msgid "label %q+D declared but not defined"
+msgstr ""
+
#. Except for passing an argument to an unprototyped function,
#. this is a constraint violation. When passing an argument to
#. an unprototyped function, it is compile-time undefined;
#. making it a constraint in that case was rejected in
#. DR#252.
-#: c-convert.c:96 c-typeck.c:1691 c-typeck.c:3897 cp/typeck.c:1477
-#: cp/typeck.c:6167 fortran/convert.c:89 treelang/tree-convert.c:79
+#: c-convert.c:96 c-typeck.c:1691 c-typeck.c:3854 cp/typeck.c:1468
+#: cp/typeck.c:6256 fortran/convert.c:89 treelang/tree-convert.c:79
#, gcc-internal-format
msgid "void value not ignored as it ought to be"
msgstr ""
-#: c-convert.c:117 fortran/convert.c:122 java/typeck.c:155
+#: c-convert.c:117 fortran/convert.c:122 java/typeck.c:153
#: treelang/tree-convert.c:105
#, gcc-internal-format
msgid "conversion to non-scalar type requested"
msgstr ""
-#: c-decl.c:568
+#: c-decl.c:559
#, gcc-internal-format
msgid "array %q+D assumed to have one element"
msgstr ""
-#: c-decl.c:673
+#: c-decl.c:664
#, gcc-internal-format
msgid "GCC supports only %u nested scopes"
msgstr ""
-#: c-decl.c:759 cp/decl.c:360 java/decl.c:1620
+#: c-decl.c:750 cp/decl.c:358
#, gcc-internal-format
msgid "label %q+D used but not defined"
msgstr ""
-#: c-decl.c:765 cp/decl.c:371 java/decl.c:1625
+#: c-decl.c:791
#, gcc-internal-format
-msgid "label %q+D defined but not used"
+msgid "nested function %q+D declared but never defined"
msgstr ""
-#: c-decl.c:767
+#: c-decl.c:801
#, gcc-internal-format
-msgid "label %q+D declared but not defined"
+msgid "inline function %q+D declared but never defined"
msgstr ""
-#: c-decl.c:802
-#, gcc-internal-format
-msgid "nested function %q+D declared but never defined"
-msgstr ""
-
-#: c-decl.c:816 cp/decl.c:610
+#: c-decl.c:814 cp/decl.c:608
#, gcc-internal-format
msgid "unused variable %q+D"
msgstr ""
-#: c-decl.c:820
+#: c-decl.c:818
#, gcc-internal-format
msgid "type of array %q+D completed incompatibly with implicit initialization"
msgstr ""
-#: c-decl.c:1054
+#: c-decl.c:1052
#, gcc-internal-format
msgid ""
"a parameter list with an ellipsis can%'t match an empty parameter name list "
"declaration"
msgstr ""
-#: c-decl.c:1061
+#: c-decl.c:1059
#, gcc-internal-format
msgid ""
"an argument type that has a default promotion can%'t match an empty "
"parameter name list declaration"
msgstr ""
-#: c-decl.c:1102
+#: c-decl.c:1100
#, gcc-internal-format
msgid ""
"prototype for %q+D declares more arguments than previous old-style definition"
msgstr ""
-#: c-decl.c:1108
+#: c-decl.c:1106
#, gcc-internal-format
msgid ""
"prototype for %q+D declares fewer arguments than previous old-style "
"definition"
msgstr ""
-#: c-decl.c:1117
+#: c-decl.c:1115
#, gcc-internal-format
msgid "prototype for %q+D declares argument %d with incompatible type"
msgstr ""
#. If we get here, no errors were found, but do issue a warning
#. for this poor-style construct.
-#: c-decl.c:1130
+#: c-decl.c:1128
#, gcc-internal-format
msgid "prototype for %q+D follows non-prototype definition"
msgstr ""
-#: c-decl.c:1145
+#: c-decl.c:1143
#, gcc-internal-format
msgid "previous definition of %q+D was here"
msgstr ""
-#: c-decl.c:1147
+#: c-decl.c:1145
#, gcc-internal-format
msgid "previous implicit declaration of %q+D was here"
msgstr ""
-#: c-decl.c:1149
+#: c-decl.c:1147
#, gcc-internal-format
msgid "previous declaration of %q+D was here"
msgstr ""
-#: c-decl.c:1189
+#: c-decl.c:1187
#, gcc-internal-format
msgid "%q+D redeclared as different kind of symbol"
msgstr ""
-#: c-decl.c:1193
+#: c-decl.c:1191
#, gcc-internal-format
msgid "built-in function %q+D declared as non-function"
msgstr ""
-#: c-decl.c:1196 c-decl.c:1312 c-decl.c:1950
+#: c-decl.c:1194 c-decl.c:1311 c-decl.c:1996
#, gcc-internal-format
msgid "declaration of %q+D shadows a built-in function"
msgstr ""
-#: c-decl.c:1205
+#: c-decl.c:1203
#, gcc-internal-format
msgid "redeclaration of enumerator %q+D"
msgstr ""
@@ -16312,269 +16695,279 @@ msgstr ""
#. If types don't match for a built-in, throw away the
#. built-in. No point in calling locate_old_decl here, it
#. won't print anything.
-#: c-decl.c:1226
+#: c-decl.c:1224
#, gcc-internal-format
msgid "conflicting types for built-in function %q+D"
msgstr ""
-#: c-decl.c:1250 c-decl.c:1263 c-decl.c:1273
+#: c-decl.c:1248 c-decl.c:1261 c-decl.c:1271
#, gcc-internal-format
msgid "conflicting types for %q+D"
msgstr ""
-#: c-decl.c:1271
+#: c-decl.c:1269
#, gcc-internal-format
msgid "conflicting type qualifiers for %q+D"
msgstr ""
#. Allow OLDDECL to continue in use.
-#: c-decl.c:1288
+#: c-decl.c:1286
#, gcc-internal-format
msgid "redefinition of typedef %q+D"
msgstr ""
-#: c-decl.c:1336 c-decl.c:1421
+#: c-decl.c:1337 c-decl.c:1439
#, gcc-internal-format
msgid "redefinition of %q+D"
msgstr ""
-#: c-decl.c:1371 c-decl.c:1459
+#: c-decl.c:1372 c-decl.c:1477
#, gcc-internal-format
msgid "static declaration of %q+D follows non-static declaration"
msgstr ""
-#: c-decl.c:1381 c-decl.c:1388 c-decl.c:1448 c-decl.c:1456
+#: c-decl.c:1382 c-decl.c:1389 c-decl.c:1466 c-decl.c:1474
#, gcc-internal-format
msgid "non-static declaration of %q+D follows static declaration"
msgstr ""
+#: c-decl.c:1406
+#, gcc-internal-format
+msgid "%<gnu_inline%> attribute present on %q+D"
+msgstr ""
+
#: c-decl.c:1408
#, gcc-internal-format
+msgid "%Jbut not here"
+msgstr ""
+
+#: c-decl.c:1426
+#, gcc-internal-format
msgid "thread-local declaration of %q+D follows non-thread-local declaration"
msgstr ""
-#: c-decl.c:1411
+#: c-decl.c:1429
#, gcc-internal-format
msgid "non-thread-local declaration of %q+D follows thread-local declaration"
msgstr ""
-#: c-decl.c:1441
+#: c-decl.c:1459
#, gcc-internal-format
msgid "extern declaration of %q+D follows declaration with no linkage"
msgstr ""
-#: c-decl.c:1477
+#: c-decl.c:1495
#, gcc-internal-format
msgid "declaration of %q+D with no linkage follows extern declaration"
msgstr ""
-#: c-decl.c:1483
+#: c-decl.c:1501
#, gcc-internal-format
msgid "redeclaration of %q+D with no linkage"
msgstr ""
-#: c-decl.c:1497
+#: c-decl.c:1515
#, gcc-internal-format
msgid ""
"redeclaration of %q+D with different visibility (old visibility preserved)"
msgstr ""
-#: c-decl.c:1508
+#: c-decl.c:1526
#, gcc-internal-format
msgid "inline declaration of %qD follows declaration with attribute noinline"
msgstr ""
-#: c-decl.c:1515
+#: c-decl.c:1533
#, gcc-internal-format
msgid "declaration of %q+D with attribute noinline follows inline declaration "
msgstr ""
-#: c-decl.c:1530
+#: c-decl.c:1552
#, gcc-internal-format
msgid "%q+D declared inline after being called"
msgstr ""
-#: c-decl.c:1535
+#: c-decl.c:1557
#, gcc-internal-format
msgid "%q+D declared inline after its definition"
msgstr ""
-#: c-decl.c:1554
+#: c-decl.c:1576
#, gcc-internal-format
msgid "redefinition of parameter %q+D"
msgstr ""
-#: c-decl.c:1581
+#: c-decl.c:1603
#, gcc-internal-format
msgid "redundant redeclaration of %q+D"
msgstr ""
-#: c-decl.c:1937
+#: c-decl.c:1983
#, gcc-internal-format
msgid "declaration of %q+D shadows previous non-variable"
msgstr ""
-#: c-decl.c:1942
+#: c-decl.c:1988
#, gcc-internal-format
msgid "declaration of %q+D shadows a parameter"
msgstr ""
-#: c-decl.c:1945
+#: c-decl.c:1991
#, gcc-internal-format
msgid "declaration of %q+D shadows a global declaration"
msgstr ""
-#: c-decl.c:1955
+#: c-decl.c:2001
#, gcc-internal-format
msgid "declaration of %q+D shadows a previous local"
msgstr ""
-#: c-decl.c:1958 cp/name-lookup.c:972 cp/name-lookup.c:1003
-#: cp/name-lookup.c:1011
+#: c-decl.c:2004 cp/name-lookup.c:990 cp/name-lookup.c:1021
+#: cp/name-lookup.c:1029
#, gcc-internal-format
msgid "%Jshadowed declaration is here"
msgstr ""
-#: c-decl.c:2158
+#: c-decl.c:2204
#, gcc-internal-format
msgid "nested extern declaration of %qD"
msgstr ""
-#: c-decl.c:2327
+#: c-decl.c:2367 c-decl.c:2370
#, gcc-internal-format
msgid "implicit declaration of function %qE"
msgstr ""
-#: c-decl.c:2388
+#: c-decl.c:2432
#, gcc-internal-format
msgid "incompatible implicit declaration of built-in function %qD"
msgstr ""
-#: c-decl.c:2397
+#: c-decl.c:2441
#, gcc-internal-format
msgid "incompatible implicit declaration of function %qD"
msgstr ""
-#: c-decl.c:2450
+#: c-decl.c:2494
#, gcc-internal-format
msgid "%H%qE undeclared here (not in a function)"
msgstr ""
-#: c-decl.c:2455
+#: c-decl.c:2499
#, gcc-internal-format
msgid "%H%qE undeclared (first use in this function)"
msgstr ""
-#: c-decl.c:2459
+#: c-decl.c:2503
#, gcc-internal-format
msgid "%H(Each undeclared identifier is reported only once"
msgstr ""
-#: c-decl.c:2460
+#: c-decl.c:2504
#, gcc-internal-format
msgid "%Hfor each function it appears in.)"
msgstr ""
-#: c-decl.c:2498 cp/decl.c:2252
+#: c-decl.c:2542 cp/decl.c:2258
#, gcc-internal-format
msgid "label %qE referenced outside of any function"
msgstr ""
-#: c-decl.c:2540
+#: c-decl.c:2584
#, gcc-internal-format
msgid "duplicate label declaration %qE"
msgstr ""
-#: c-decl.c:2576
+#: c-decl.c:2620
#, gcc-internal-format
msgid "%Hduplicate label %qD"
msgstr ""
-#: c-decl.c:2586
+#: c-decl.c:2630
#, gcc-internal-format
msgid "%Jjump into statement expression"
msgstr ""
-#: c-decl.c:2588
+#: c-decl.c:2632
#, gcc-internal-format
msgid "%Jjump into scope of identifier with variably modified type"
msgstr ""
-#: c-decl.c:2603
+#: c-decl.c:2647
#, gcc-internal-format
msgid ""
"%Htraditional C lacks a separate namespace for labels, identifier %qE "
"conflicts"
msgstr ""
-#: c-decl.c:2678
+#: c-decl.c:2722
#, gcc-internal-format
msgid "%H%qE defined as wrong kind of tag"
msgstr ""
-#: c-decl.c:2902
+#: c-decl.c:2925
#, gcc-internal-format
msgid "unnamed struct/union that defines no instances"
msgstr ""
-#: c-decl.c:2910
+#: c-decl.c:2933
#, gcc-internal-format
msgid "empty declaration with storage class specifier does not redeclare tag"
msgstr ""
-#: c-decl.c:2921
+#: c-decl.c:2944
#, gcc-internal-format
msgid "empty declaration with type qualifier does not redeclare tag"
msgstr ""
-#: c-decl.c:2942 c-decl.c:2949
+#: c-decl.c:2965 c-decl.c:2972
#, gcc-internal-format
msgid "useless type name in empty declaration"
msgstr ""
-#: c-decl.c:2957
+#: c-decl.c:2980
#, gcc-internal-format
msgid "%<inline%> in empty declaration"
msgstr ""
-#: c-decl.c:2963
+#: c-decl.c:2986
#, gcc-internal-format
msgid "%<auto%> in file-scope empty declaration"
msgstr ""
-#: c-decl.c:2969
+#: c-decl.c:2992
#, gcc-internal-format
msgid "%<register%> in file-scope empty declaration"
msgstr ""
-#: c-decl.c:2975
+#: c-decl.c:2998
#, gcc-internal-format
msgid "useless storage class specifier in empty declaration"
msgstr ""
-#: c-decl.c:2981
+#: c-decl.c:3004
#, gcc-internal-format
msgid "useless %<__thread%> in empty declaration"
msgstr ""
-#: c-decl.c:2989
+#: c-decl.c:3012
#, gcc-internal-format
msgid "useless type qualifier in empty declaration"
msgstr ""
-#: c-decl.c:2996 c-parser.c:1285
+#: c-decl.c:3019 c-parser.c:1261
#, gcc-internal-format
msgid "empty declaration"
msgstr ""
-#: c-decl.c:3062
+#: c-decl.c:3085
#, gcc-internal-format
msgid ""
"ISO C90 does not support %<static%> or type qualifiers in parameter array "
"declarators"
msgstr ""
-#: c-decl.c:3065
+#: c-decl.c:3088
#, gcc-internal-format
msgid "ISO C90 does not support %<[*]%> array declarators"
msgstr ""
@@ -16582,208 +16975,213 @@ msgstr ""
#. C99 6.7.5.2p4
#. A function definition isn't function prototype scope C99 6.2.1p4.
#. C99 6.7.5.2p4
-#: c-decl.c:3072 c-decl.c:4930
+#: c-decl.c:3095 c-decl.c:4981
#, gcc-internal-format
msgid "%<[*]%> not allowed in other than function prototype scope"
msgstr ""
-#: c-decl.c:3096
+#: c-decl.c:3119
#, gcc-internal-format
msgid "static or type qualifiers in abstract declarator"
msgstr ""
-#: c-decl.c:3182
+#: c-decl.c:3205
#, gcc-internal-format
msgid "%q+D is usually a function"
msgstr ""
-#: c-decl.c:3191 cp/decl.c:3852 cp/decl2.c:785
+#: c-decl.c:3214 cp/decl.c:3837 cp/decl2.c:775
#, gcc-internal-format
msgid "typedef %qD is initialized (use __typeof__ instead)"
msgstr ""
-#: c-decl.c:3196
+#: c-decl.c:3219
#, gcc-internal-format
msgid "function %qD is initialized like a variable"
msgstr ""
#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
-#: c-decl.c:3202
+#: c-decl.c:3225
#, gcc-internal-format
msgid "parameter %qD is initialized"
msgstr ""
-#: c-decl.c:3227
+#: c-decl.c:3250
#, gcc-internal-format
msgid "variable %qD has initializer but incomplete type"
msgstr ""
-#: c-decl.c:3303 c-decl.c:6017 cp/decl.c:3894 cp/decl.c:10424
+#: c-decl.c:3338 c-decl.c:6070 cp/decl.c:3879 cp/decl.c:10488
#, gcc-internal-format
msgid "inline function %q+D given attribute noinline"
msgstr ""
-#: c-decl.c:3375
+#: c-decl.c:3349
+#, gcc-internal-format
+msgid "%q+D is static but declared in inline function %qD which is not static"
+msgstr ""
+
+#: c-decl.c:3438
#, gcc-internal-format
msgid "initializer fails to determine size of %q+D"
msgstr ""
-#: c-decl.c:3380
+#: c-decl.c:3443
#, gcc-internal-format
msgid "array size missing in %q+D"
msgstr ""
-#: c-decl.c:3392
+#: c-decl.c:3455
#, gcc-internal-format
msgid "zero or negative size array %q+D"
msgstr ""
-#: c-decl.c:3447 varasm.c:1772
+#: c-decl.c:3510 varasm.c:2072
#, gcc-internal-format
msgid "storage size of %q+D isn%'t known"
msgstr ""
-#: c-decl.c:3457
+#: c-decl.c:3520
#, gcc-internal-format
msgid "storage size of %q+D isn%'t constant"
msgstr ""
-#: c-decl.c:3502
+#: c-decl.c:3565
#, gcc-internal-format
msgid "ignoring asm-specifier for non-static local variable %q+D"
msgstr ""
-#: c-decl.c:3530 fortran/f95-lang.c:684
+#: c-decl.c:3593 fortran/f95-lang.c:694
#, gcc-internal-format
msgid "cannot put object with volatile field into register"
msgstr ""
-#: c-decl.c:3665
+#: c-decl.c:3719
#, gcc-internal-format
msgid "ISO C forbids forward parameter declarations"
msgstr ""
-#: c-decl.c:3784
+#: c-decl.c:3838
#, gcc-internal-format
msgid "bit-field %qs width not an integer constant"
msgstr ""
-#: c-decl.c:3792
+#: c-decl.c:3846
#, gcc-internal-format
msgid "negative width in bit-field %qs"
msgstr ""
-#: c-decl.c:3797
+#: c-decl.c:3851
#, gcc-internal-format
msgid "zero width for bit-field %qs"
msgstr ""
-#: c-decl.c:3807
+#: c-decl.c:3861
#, gcc-internal-format
msgid "bit-field %qs has invalid type"
msgstr ""
-#: c-decl.c:3817
+#: c-decl.c:3871
#, gcc-internal-format
msgid "type of bit-field %qs is a GCC extension"
msgstr ""
-#: c-decl.c:3826
+#: c-decl.c:3880
#, gcc-internal-format
msgid "width of %qs exceeds its type"
msgstr ""
-#: c-decl.c:3839
+#: c-decl.c:3893
#, gcc-internal-format
msgid "%qs is narrower than values of its type"
msgstr ""
-#: c-decl.c:3956 c-decl.c:4233
+#: c-decl.c:4010 c-decl.c:4287
#, gcc-internal-format
msgid "variably modified %qs at file scope"
msgstr ""
-#: c-decl.c:3974
+#: c-decl.c:4028
#, gcc-internal-format
msgid "type defaults to %<int%> in declaration of %qs"
msgstr ""
-#: c-decl.c:4002
+#: c-decl.c:4056
#, gcc-internal-format
msgid "duplicate %<const%>"
msgstr ""
-#: c-decl.c:4004
+#: c-decl.c:4058
#, gcc-internal-format
msgid "duplicate %<restrict%>"
msgstr ""
-#: c-decl.c:4006
+#: c-decl.c:4060
#, gcc-internal-format
msgid "duplicate %<volatile%>"
msgstr ""
-#: c-decl.c:4025
+#: c-decl.c:4079
#, gcc-internal-format
msgid "function definition declared %<auto%>"
msgstr ""
-#: c-decl.c:4027
+#: c-decl.c:4081
#, gcc-internal-format
msgid "function definition declared %<register%>"
msgstr ""
-#: c-decl.c:4029
+#: c-decl.c:4083
#, gcc-internal-format
msgid "function definition declared %<typedef%>"
msgstr ""
-#: c-decl.c:4031
+#: c-decl.c:4085
#, gcc-internal-format
msgid "function definition declared %<__thread%>"
msgstr ""
-#: c-decl.c:4047
+#: c-decl.c:4101
#, gcc-internal-format
msgid "storage class specified for structure field %qs"
msgstr ""
-#: c-decl.c:4051 cp/decl.c:7453
+#: c-decl.c:4105 cp/decl.c:7506
#, gcc-internal-format
msgid "storage class specified for parameter %qs"
msgstr ""
-#: c-decl.c:4054 cp/decl.c:7455
+#: c-decl.c:4108 cp/decl.c:7508
#, gcc-internal-format
msgid "storage class specified for typename"
msgstr ""
-#: c-decl.c:4071 cp/decl.c:7472
+#: c-decl.c:4125 cp/decl.c:7525
#, gcc-internal-format
msgid "%qs initialized and declared %<extern%>"
msgstr ""
-#: c-decl.c:4074 cp/decl.c:7475
+#: c-decl.c:4128 cp/decl.c:7528
#, gcc-internal-format
msgid "%qs has both %<extern%> and initializer"
msgstr ""
-#: c-decl.c:4079
+#: c-decl.c:4133
#, gcc-internal-format
msgid "file-scope declaration of %qs specifies %<auto%>"
msgstr ""
-#: c-decl.c:4081
+#: c-decl.c:4135
#, gcc-internal-format
msgid "file-scope declaration of %qs specifies %<register%>"
msgstr ""
-#: c-decl.c:4086 cp/decl.c:7479
+#: c-decl.c:4140 cp/decl.c:7532
#, gcc-internal-format
msgid "nested function %qs declared %<extern%>"
msgstr ""
-#: c-decl.c:4089 cp/decl.c:7489
+#: c-decl.c:4143 cp/decl.c:7542
#, gcc-internal-format
msgid "function-scope %qs implicitly auto and declared %<__thread%>"
msgstr ""
@@ -16791,515 +17189,485 @@ 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:4136 c-decl.c:4387
+#: c-decl.c:4190 c-decl.c:4441
#, gcc-internal-format
msgid "static or type qualifiers in non-parameter array declarator"
msgstr ""
-#: c-decl.c:4183
+#: c-decl.c:4237
#, gcc-internal-format
msgid "declaration of %qs as array of voids"
msgstr ""
-#: c-decl.c:4189
+#: c-decl.c:4243
#, gcc-internal-format
msgid "declaration of %qs as array of functions"
msgstr ""
-#: c-decl.c:4194
+#: c-decl.c:4248
#, gcc-internal-format
msgid "invalid use of structure with flexible array member"
msgstr ""
-#: c-decl.c:4214
+#: c-decl.c:4268
#, gcc-internal-format
msgid "size of array %qs has non-integer type"
msgstr ""
-#: c-decl.c:4219
+#: c-decl.c:4273
#, gcc-internal-format
msgid "ISO C forbids zero-size array %qs"
msgstr ""
-#: c-decl.c:4226
+#: c-decl.c:4280
#, gcc-internal-format
msgid "size of array %qs is negative"
msgstr ""
-#: c-decl.c:4246
+#: c-decl.c:4300
#, gcc-internal-format
msgid "ISO C90 forbids array %qs whose size can%'t be evaluated"
msgstr ""
-#: c-decl.c:4250
+#: c-decl.c:4304
#, gcc-internal-format
msgid "ISO C90 forbids variable-size array %qs"
msgstr ""
-#: c-decl.c:4290 c-decl.c:4545 cp/decl.c:7888
+#: c-decl.c:4344 c-decl.c:4599 cp/decl.c:7948
#, gcc-internal-format
msgid "size of array %qs is too large"
msgstr ""
-#: c-decl.c:4301
+#: c-decl.c:4355
#, gcc-internal-format
msgid "ISO C90 does not support flexible array members"
msgstr ""
#. C99 6.7.5.2p4
-#: c-decl.c:4314 c-parser.c:4911
+#: c-decl.c:4368 c-parser.c:4887
#, gcc-internal-format
msgid "%<[*]%> not allowed in other than a declaration"
msgstr ""
-#: c-decl.c:4337
+#: c-decl.c:4391
#, gcc-internal-format
msgid "array type has incomplete element type"
msgstr ""
-#: c-decl.c:4419 cp/decl.c:7573
+#: c-decl.c:4473 cp/decl.c:7633
#, gcc-internal-format
msgid "%qs declared as function returning a function"
msgstr ""
-#: c-decl.c:4424 cp/decl.c:7578
+#: c-decl.c:4478 cp/decl.c:7638
#, gcc-internal-format
msgid "%qs declared as function returning an array"
msgstr ""
-#: c-decl.c:4446
+#: c-decl.c:4500
#, gcc-internal-format
msgid "function definition has qualified void return type"
msgstr ""
-#: c-decl.c:4449
+#: c-decl.c:4503 cp/decl.c:7622 cp/pt.c:7101
#, gcc-internal-format
msgid "type qualifiers ignored on function return type"
msgstr ""
-#: c-decl.c:4478 c-decl.c:4558 c-decl.c:4645 c-decl.c:4735
+#: c-decl.c:4532 c-decl.c:4612 c-decl.c:4699 c-decl.c:4789
#, gcc-internal-format
msgid "ISO C forbids qualified function types"
msgstr ""
-#: c-decl.c:4566
+#: c-decl.c:4620
#, gcc-internal-format
msgid "typedef %q+D declared %<inline%>"
msgstr ""
-#: c-decl.c:4581
+#: c-decl.c:4635
#, gcc-internal-format
msgid "ISO C forbids const or volatile function types"
msgstr ""
#. C99 6.7.2.1p8
-#: c-decl.c:4592
+#: c-decl.c:4646
#, gcc-internal-format
msgid "a member of a structure or union cannot have a variably modified type"
msgstr ""
-#: c-decl.c:4608
+#: c-decl.c:4662
#, gcc-internal-format
msgid "variable or field %qs declared void"
msgstr ""
-#: c-decl.c:4638
+#: c-decl.c:4692
#, gcc-internal-format
msgid "attributes in parameter array declarator ignored"
msgstr ""
-#: c-decl.c:4672
+#: c-decl.c:4726
#, gcc-internal-format
msgid "parameter %q+D declared %<inline%>"
msgstr ""
-#: c-decl.c:4685
+#: c-decl.c:4739
#, gcc-internal-format
msgid "field %qs declared as a function"
msgstr ""
-#: c-decl.c:4691
+#: c-decl.c:4745
#, gcc-internal-format
msgid "field %qs has incomplete type"
msgstr ""
-#: c-decl.c:4705 c-decl.c:4717 c-decl.c:4721
+#: c-decl.c:4759 c-decl.c:4771 c-decl.c:4775
#, gcc-internal-format
msgid "invalid storage class for function %qs"
msgstr ""
-#: c-decl.c:4741
+#: c-decl.c:4795
#, gcc-internal-format
msgid "%<noreturn%> function returns non-void value"
msgstr ""
-#: c-decl.c:4769
+#: c-decl.c:4831
#, gcc-internal-format
msgid "cannot inline function %<main%>"
msgstr ""
-#: c-decl.c:4816
+#: c-decl.c:4874
#, gcc-internal-format
msgid "variable previously declared %<static%> redeclared %<extern%>"
msgstr ""
-#: c-decl.c:4826
+#: c-decl.c:4884
#, gcc-internal-format
msgid "variable %q+D declared %<inline%>"
msgstr ""
-#. A mere warning is sure to result in improper semantics
-#. at runtime. Don't bother to allow this to compile.
-#. A mere warning is sure to result in improper
-#. semantics at runtime. Don't bother to allow this to
-#. compile.
-#: c-decl.c:4856 cp/decl.c:6340 cp/decl.c:8480
-#, gcc-internal-format
-msgid "thread-local storage not supported for this target"
-msgstr ""
-
#. C99 6.7.5.2p2
-#: c-decl.c:4864
+#: c-decl.c:4915
#, gcc-internal-format
msgid "object with variably modified type must have no linkage"
msgstr ""
-#: c-decl.c:4935 c-decl.c:6098
+#: c-decl.c:4986 c-decl.c:6161
#, gcc-internal-format
msgid "function declaration isn%'t a prototype"
msgstr ""
-#: c-decl.c:4943
+#: c-decl.c:4994
#, gcc-internal-format
msgid "parameter names (without types) in function declaration"
msgstr ""
-#: c-decl.c:4976
+#: c-decl.c:5027
#, gcc-internal-format
msgid "parameter %u (%q+D) has incomplete type"
msgstr ""
-#: c-decl.c:4979
+#: c-decl.c:5030
#, gcc-internal-format
msgid "%Jparameter %u has incomplete type"
msgstr ""
-#: c-decl.c:4988
+#: c-decl.c:5039
#, gcc-internal-format
msgid "parameter %u (%q+D) has void type"
msgstr ""
-#: c-decl.c:4991
+#: c-decl.c:5042
#, gcc-internal-format
msgid "%Jparameter %u has void type"
msgstr ""
-#: c-decl.c:5053
+#: c-decl.c:5104
#, gcc-internal-format
msgid "%<void%> as only parameter may not be qualified"
msgstr ""
-#: c-decl.c:5057 c-decl.c:5091
+#: c-decl.c:5108 c-decl.c:5142
#, gcc-internal-format
msgid "%<void%> must be the only parameter"
msgstr ""
-#: c-decl.c:5085
+#: c-decl.c:5136
#, gcc-internal-format
msgid "parameter %q+D has just a forward declaration"
msgstr ""
#. The %s will be one of 'struct', 'union', or 'enum'.
-#: c-decl.c:5130
+#: c-decl.c:5181
#, gcc-internal-format
msgid "%<%s %E%> declared inside parameter list"
msgstr ""
#. The %s will be one of 'struct', 'union', or 'enum'.
-#: c-decl.c:5134
+#: c-decl.c:5185
#, gcc-internal-format
msgid "anonymous %s declared inside parameter list"
msgstr ""
-#: c-decl.c:5139
+#: c-decl.c:5190
#, gcc-internal-format
msgid ""
"its scope is only this definition or declaration, which is probably not what "
"you want"
msgstr ""
-#: c-decl.c:5273
+#: c-decl.c:5324
#, gcc-internal-format
msgid "redefinition of %<union %E%>"
msgstr ""
-#: c-decl.c:5275
+#: c-decl.c:5326
#, gcc-internal-format
msgid "redefinition of %<struct %E%>"
msgstr ""
-#: c-decl.c:5280
+#: c-decl.c:5331
#, gcc-internal-format
msgid "nested redefinition of %<union %E%>"
msgstr ""
-#: c-decl.c:5282
+#: c-decl.c:5333
#, gcc-internal-format
msgid "nested redefinition of %<struct %E%>"
msgstr ""
-#: c-decl.c:5353 cp/decl.c:3658
+#: c-decl.c:5407 cp/decl.c:3641
#, gcc-internal-format
msgid "declaration does not declare anything"
msgstr ""
-#: c-decl.c:5357
+#: c-decl.c:5411
#, gcc-internal-format
msgid "ISO C doesn%'t support unnamed structs/unions"
msgstr ""
-#: c-decl.c:5400 c-decl.c:5416
+#: c-decl.c:5454 c-decl.c:5470
#, gcc-internal-format
msgid "duplicate member %q+D"
msgstr ""
-#: c-decl.c:5455
+#: c-decl.c:5509
#, gcc-internal-format
msgid "union has no named members"
msgstr ""
-#: c-decl.c:5457
+#: c-decl.c:5511
#, gcc-internal-format
msgid "union has no members"
msgstr ""
-#: c-decl.c:5462
+#: c-decl.c:5516
#, gcc-internal-format
msgid "struct has no named members"
msgstr ""
-#: c-decl.c:5464
+#: c-decl.c:5518
#, gcc-internal-format
msgid "struct has no members"
msgstr ""
-#: c-decl.c:5526
+#: c-decl.c:5580
#, gcc-internal-format
msgid "%Jflexible array member in union"
msgstr ""
-#: c-decl.c:5531
+#: c-decl.c:5585
#, gcc-internal-format
msgid "%Jflexible array member not at end of struct"
msgstr ""
-#: c-decl.c:5536
+#: c-decl.c:5590
#, gcc-internal-format
msgid "%Jflexible array member in otherwise empty struct"
msgstr ""
-#: c-decl.c:5543
+#: c-decl.c:5597
#, gcc-internal-format
msgid "%Jinvalid use of structure with flexible array member"
msgstr ""
-#: c-decl.c:5652
+#: c-decl.c:5706
#, gcc-internal-format
msgid "union cannot be made transparent"
msgstr ""
-#: c-decl.c:5723
+#: c-decl.c:5777
#, gcc-internal-format
msgid "nested redefinition of %<enum %E%>"
msgstr ""
#. This enum is a named one that has been declared already.
-#: c-decl.c:5730
+#: c-decl.c:5784
#, gcc-internal-format
msgid "redeclaration of %<enum %E%>"
msgstr ""
-#: c-decl.c:5793
+#: c-decl.c:5847
#, gcc-internal-format
msgid "enumeration values exceed range of largest integer"
msgstr ""
-#: c-decl.c:5810
+#: c-decl.c:5864
#, gcc-internal-format
msgid "specified mode too small for enumeral values"
msgstr ""
-#: c-decl.c:5906
+#: c-decl.c:5960
#, gcc-internal-format
msgid "enumerator value for %qE is not an integer constant"
msgstr ""
-#: c-decl.c:5923
+#: c-decl.c:5977
#, gcc-internal-format
msgid "overflow in enumeration values"
msgstr ""
-#: c-decl.c:5928
+#: c-decl.c:5982
#, gcc-internal-format
msgid "ISO C restricts enumerator values to range of %<int%>"
msgstr ""
-#: c-decl.c:6024
+#: c-decl.c:6087
#, gcc-internal-format
msgid "return type is an incomplete type"
msgstr ""
-#: c-decl.c:6032
+#: c-decl.c:6095
#, gcc-internal-format
msgid "return type defaults to %<int%>"
msgstr ""
-#: c-decl.c:6105
+#: c-decl.c:6168
#, gcc-internal-format
msgid "no previous prototype for %q+D"
msgstr ""
-#: c-decl.c:6114
+#: c-decl.c:6177
#, gcc-internal-format
msgid "%q+D was used with no prototype before its definition"
msgstr ""
-#: c-decl.c:6120
+#: c-decl.c:6183 cp/decl.c:10623
#, gcc-internal-format
msgid "no previous declaration for %q+D"
msgstr ""
-#: c-decl.c:6130
+#: c-decl.c:6193
#, gcc-internal-format
msgid "%q+D was used with no declaration before its definition"
msgstr ""
-#: c-decl.c:6162 c-decl.c:6683
+#: c-decl.c:6216 c-decl.c:6697
#, gcc-internal-format
msgid "return type of %q+D is not %<int%>"
msgstr ""
-#: c-decl.c:6177
-#, gcc-internal-format
-msgid "first argument of %q+D should be %<int%>"
-msgstr ""
-
-#: c-decl.c:6185
-#, gcc-internal-format
-msgid "second argument of %q+D should be %<char **%>"
-msgstr ""
-
-#: c-decl.c:6194
-#, gcc-internal-format
-msgid "third argument of %q+D should probably be %<char **%>"
-msgstr ""
-
-#: c-decl.c:6204
-#, gcc-internal-format
-msgid "%q+D takes only zero or two arguments"
-msgstr ""
-
-#: c-decl.c:6207
+#: c-decl.c:6221
#, gcc-internal-format
msgid "%q+D is normally a non-static function"
msgstr ""
-#: c-decl.c:6253
+#: c-decl.c:6267
#, gcc-internal-format
msgid "%Jold-style parameter declarations in prototyped function definition"
msgstr ""
-#: c-decl.c:6267
+#: c-decl.c:6281
#, gcc-internal-format
msgid "%Jtraditional C rejects ISO C style function definitions"
msgstr ""
-#: c-decl.c:6283
+#: c-decl.c:6297
#, gcc-internal-format
msgid "%Jparameter name omitted"
msgstr ""
-#: c-decl.c:6317
+#: c-decl.c:6331
#, gcc-internal-format
msgid "%Jold-style function definition"
msgstr ""
-#: c-decl.c:6326
+#: c-decl.c:6340
#, gcc-internal-format
msgid "%Jparameter name missing from parameter list"
msgstr ""
-#: c-decl.c:6337
+#: c-decl.c:6351
#, gcc-internal-format
msgid "%q+D declared as a non-parameter"
msgstr ""
-#: c-decl.c:6342
+#: c-decl.c:6356
#, gcc-internal-format
msgid "multiple parameters named %q+D"
msgstr ""
-#: c-decl.c:6350
+#: c-decl.c:6364
#, gcc-internal-format
msgid "parameter %q+D declared with void type"
msgstr ""
-#: c-decl.c:6367 c-decl.c:6369
+#: c-decl.c:6381 c-decl.c:6383
#, gcc-internal-format
msgid "type of %q+D defaults to %<int%>"
msgstr ""
-#: c-decl.c:6388
+#: c-decl.c:6402
#, gcc-internal-format
msgid "parameter %q+D has incomplete type"
msgstr ""
-#: c-decl.c:6394
+#: c-decl.c:6408
#, gcc-internal-format
msgid "declaration for parameter %q+D but no such parameter"
msgstr ""
-#: c-decl.c:6444
+#: c-decl.c:6458
#, gcc-internal-format
msgid "number of arguments doesn%'t match built-in prototype"
msgstr ""
-#: c-decl.c:6448
+#: c-decl.c:6462
#, gcc-internal-format
msgid "number of arguments doesn%'t match prototype"
msgstr ""
-#: c-decl.c:6449 c-decl.c:6489 c-decl.c:6502
+#: c-decl.c:6463 c-decl.c:6503 c-decl.c:6516
#, gcc-internal-format
msgid "%Hprototype declaration"
msgstr ""
-#: c-decl.c:6483
+#: c-decl.c:6497
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c-decl.c:6487
+#: c-decl.c:6501
#, gcc-internal-format
msgid "promoted argument %qD doesn%'t match prototype"
msgstr ""
-#: c-decl.c:6497
+#: c-decl.c:6511
#, gcc-internal-format
msgid "argument %qD doesn%'t match built-in prototype"
msgstr ""
-#: c-decl.c:6501
+#: c-decl.c:6515
#, gcc-internal-format
msgid "argument %qD doesn%'t match prototype"
msgstr ""
-#: c-decl.c:6728 cp/decl.c:11212
+#: c-decl.c:6742 cp/decl.c:11313
#, gcc-internal-format
msgid "no return statement in function returning non-void"
msgstr ""
-#: c-decl.c:6737
+#: c-decl.c:6751
#, gcc-internal-format
msgid "this function may return with or without a value"
msgstr ""
@@ -17307,348 +17675,348 @@ 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:6834
+#: c-decl.c:6821
#, gcc-internal-format
msgid "%<for%> loop initial declaration used outside C99 mode"
msgstr ""
-#: c-decl.c:6863
+#: c-decl.c:6850
#, gcc-internal-format
msgid "declaration of static variable %q+D in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:6866
+#: c-decl.c:6853
#, gcc-internal-format
msgid ""
"declaration of %<extern%> variable %q+D in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:6871
+#: c-decl.c:6858
#, gcc-internal-format
msgid "%<struct %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:6875
+#: c-decl.c:6862
#, gcc-internal-format
msgid "%<union %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:6879
+#: c-decl.c:6866
#, gcc-internal-format
msgid "%<enum %E%> declared in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:6883
+#: c-decl.c:6870
#, gcc-internal-format
msgid "declaration of non-variable %q+D in %<for%> loop initial declaration"
msgstr ""
-#: c-decl.c:7172 c-decl.c:7368 c-decl.c:7619
+#: c-decl.c:7157 c-decl.c:7353 c-decl.c:7605
#, gcc-internal-format
msgid "duplicate %qE"
msgstr ""
-#: c-decl.c:7195 c-decl.c:7377 c-decl.c:7521
+#: c-decl.c:7180 c-decl.c:7362 c-decl.c:7506
#, gcc-internal-format
msgid "two or more data types in declaration specifiers"
msgstr ""
-#: c-decl.c:7207 cp/parser.c:2025
+#: c-decl.c:7192 cp/parser.c:2073
#, gcc-internal-format
msgid "%<long long long%> is too long for GCC"
msgstr ""
-#: c-decl.c:7214 c-decl.c:7451
+#: c-decl.c:7199 c-decl.c:7436
#, gcc-internal-format
msgid "both %<long long%> and %<double%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7220
+#: c-decl.c:7205
#, gcc-internal-format
msgid "ISO C90 does not support %<long long%>"
msgstr ""
-#: c-decl.c:7225 c-decl.c:7254
+#: c-decl.c:7210 c-decl.c:7239
#, gcc-internal-format
msgid "both %<long%> and %<short%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7228 c-decl.c:7384
+#: c-decl.c:7213 c-decl.c:7369
#, gcc-internal-format
msgid "both %<long%> and %<void%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7231 c-decl.c:7403
+#: c-decl.c:7216 c-decl.c:7388
#, gcc-internal-format
msgid "both %<long%> and %<_Bool%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7234 c-decl.c:7422
+#: c-decl.c:7219 c-decl.c:7407
#, gcc-internal-format
msgid "both %<long%> and %<char%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7237 c-decl.c:7435
+#: c-decl.c:7222 c-decl.c:7420
#, gcc-internal-format
msgid "both %<long%> and %<float%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7240
+#: c-decl.c:7225
#, gcc-internal-format
msgid "both %<long%> and %<_Decimal32%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7243
+#: c-decl.c:7228
#, gcc-internal-format
msgid "both %<long%> and %<_Decimal64%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7246
+#: c-decl.c:7231
#, gcc-internal-format
msgid "both %<long%> and %<_Decimal128%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7257 c-decl.c:7387
+#: c-decl.c:7242 c-decl.c:7372
#, gcc-internal-format
msgid "both %<short%> and %<void%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7260 c-decl.c:7406
+#: c-decl.c:7245 c-decl.c:7391
#, gcc-internal-format
msgid "both %<short%> and %<_Bool%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7263 c-decl.c:7425
+#: c-decl.c:7248 c-decl.c:7410
#, gcc-internal-format
msgid "both %<short%> and %<char%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7266 c-decl.c:7438
+#: c-decl.c:7251 c-decl.c:7423
#, gcc-internal-format
msgid "both %<short%> and %<float%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7269 c-decl.c:7454
+#: c-decl.c:7254 c-decl.c:7439
#, gcc-internal-format
msgid "both %<short%> and %<double%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7272
+#: c-decl.c:7257
#, gcc-internal-format
msgid "both %<short%> and %<_Decimal32%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7275
+#: c-decl.c:7260
#, gcc-internal-format
msgid "both %<short%> and %<_Decimal64%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7278
+#: c-decl.c:7263
#, gcc-internal-format
msgid "both %<short%> and %<_Decimal128%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7286 c-decl.c:7315
+#: c-decl.c:7271 c-decl.c:7300
#, gcc-internal-format
msgid "both %<signed%> and %<unsigned%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7289 c-decl.c:7390
+#: c-decl.c:7274 c-decl.c:7375
#, gcc-internal-format
msgid "both %<signed%> and %<void%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7292 c-decl.c:7409
+#: c-decl.c:7277 c-decl.c:7394
#, gcc-internal-format
msgid "both %<signed%> and %<_Bool%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7295 c-decl.c:7441
+#: c-decl.c:7280 c-decl.c:7426
#, gcc-internal-format
msgid "both %<signed%> and %<float%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7298 c-decl.c:7457
+#: c-decl.c:7283 c-decl.c:7442
#, gcc-internal-format
msgid "both %<signed%> and %<double%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7301
+#: c-decl.c:7286
#, gcc-internal-format
msgid "both %<signed%> and %<_Decimal32%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7304
+#: c-decl.c:7289
#, gcc-internal-format
msgid "both %<signed%> and %<_Decimal64%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7307
+#: c-decl.c:7292
#, gcc-internal-format
msgid "both %<signed%> and %<_Decimal128%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7318 c-decl.c:7393
+#: c-decl.c:7303 c-decl.c:7378
#, gcc-internal-format
msgid "both %<unsigned%> and %<void%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7321 c-decl.c:7412
+#: c-decl.c:7306 c-decl.c:7397
#, gcc-internal-format
msgid "both %<unsigned%> and %<_Bool%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7324 c-decl.c:7444
+#: c-decl.c:7309 c-decl.c:7429
#, gcc-internal-format
msgid "both %<unsigned%> and %<float%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7327 c-decl.c:7460
+#: c-decl.c:7312 c-decl.c:7445
#, gcc-internal-format
msgid "both %<unsigned%> and %<double%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7330
+#: c-decl.c:7315
#, gcc-internal-format
msgid "both %<unsigned%> and %<_Decimal32%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7333
+#: c-decl.c:7318
#, gcc-internal-format
msgid "both %<unsigned%> and %<_Decimal64%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7336
+#: c-decl.c:7321
#, gcc-internal-format
msgid "both %<unsigned%> and %<_Decimal128%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7344
+#: c-decl.c:7329
#, gcc-internal-format
msgid "ISO C90 does not support complex types"
msgstr ""
-#: c-decl.c:7346 c-decl.c:7396
+#: c-decl.c:7331 c-decl.c:7381
#, gcc-internal-format
msgid "both %<complex%> and %<void%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7349 c-decl.c:7415
+#: c-decl.c:7334 c-decl.c:7400
#, gcc-internal-format
msgid "both %<complex%> and %<_Bool%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7352
+#: c-decl.c:7337
#, gcc-internal-format
msgid "both %<complex%> and %<_Decimal32%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7355
+#: c-decl.c:7340
#, gcc-internal-format
msgid "both %<complex%> and %<_Decimal64%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7358
+#: c-decl.c:7343
#, gcc-internal-format
msgid "both %<complex%> and %<_Decimal128%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7477
+#: c-decl.c:7462
#, gcc-internal-format
msgid "both %<long long%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7480
+#: c-decl.c:7465
#, gcc-internal-format
msgid "both %<long%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7483
+#: c-decl.c:7468
#, gcc-internal-format
msgid "both %<short%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7486
+#: c-decl.c:7471
#, gcc-internal-format
msgid "both %<signed%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7489
+#: c-decl.c:7474
#, gcc-internal-format
msgid "both %<unsigned%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7492
+#: c-decl.c:7477
#, gcc-internal-format
msgid "both %<complex%> and %<%s%> in declaration specifiers"
msgstr ""
-#: c-decl.c:7502
+#: c-decl.c:7487
#, gcc-internal-format
msgid "decimal floating point not supported for this target"
msgstr ""
-#: c-decl.c:7504
+#: c-decl.c:7489
#, gcc-internal-format
msgid "ISO C does not support decimal floating point"
msgstr ""
-#: c-decl.c:7538
+#: c-decl.c:7523
#, gcc-internal-format
msgid "%qE fails to be a typedef or built in type"
msgstr ""
-#: c-decl.c:7570
+#: c-decl.c:7556
#, gcc-internal-format
msgid "%qE is not at beginning of declaration"
msgstr ""
-#: c-decl.c:7584
+#: c-decl.c:7570
#, gcc-internal-format
msgid "%<__thread%> used with %<auto%>"
msgstr ""
-#: c-decl.c:7586
+#: c-decl.c:7572
#, gcc-internal-format
msgid "%<__thread%> used with %<register%>"
msgstr ""
-#: c-decl.c:7588
+#: c-decl.c:7574
#, gcc-internal-format
msgid "%<__thread%> used with %<typedef%>"
msgstr ""
-#: c-decl.c:7599
+#: c-decl.c:7585
#, gcc-internal-format
msgid "%<__thread%> before %<extern%>"
msgstr ""
-#: c-decl.c:7608
+#: c-decl.c:7594
#, gcc-internal-format
msgid "%<__thread%> before %<static%>"
msgstr ""
-#: c-decl.c:7624
+#: c-decl.c:7610
#, gcc-internal-format
msgid "multiple storage classes in declaration specifiers"
msgstr ""
-#: c-decl.c:7631
+#: c-decl.c:7617
#, gcc-internal-format
msgid "%<__thread%> used with %qE"
msgstr ""
-#: c-decl.c:7685
+#: c-decl.c:7671
#, gcc-internal-format
msgid "ISO C does not support plain %<complex%> meaning %<double complex%>"
msgstr ""
-#: c-decl.c:7730 c-decl.c:7756
+#: c-decl.c:7716 c-decl.c:7742
#, gcc-internal-format
msgid "ISO C does not support complex integer types"
msgstr ""
-#: c-decl.c:7842 toplev.c:840
+#: c-decl.c:7810 toplev.c:829
#, gcc-internal-format
msgid "%q+F used but never defined"
msgstr ""
@@ -17688,293 +18056,293 @@ msgstr ""
msgid "format string argument follows the args to be formatted"
msgstr ""
-#: c-format.c:904
+#: c-format.c:914
#, gcc-internal-format
msgid "function might be possible candidate for %qs format attribute"
msgstr ""
-#: c-format.c:996 c-format.c:1017 c-format.c:2031
+#: c-format.c:1006 c-format.c:1027 c-format.c:2041
#, gcc-internal-format
msgid "missing $ operand number in format"
msgstr ""
-#: c-format.c:1026
+#: c-format.c:1036
#, gcc-internal-format
msgid "%s does not support %%n$ operand number formats"
msgstr ""
-#: c-format.c:1033
+#: c-format.c:1043
#, gcc-internal-format
msgid "operand number out of range in format"
msgstr ""
-#: c-format.c:1056
+#: c-format.c:1066
#, gcc-internal-format
msgid "format argument %d used more than once in %s format"
msgstr ""
-#: c-format.c:1088
+#: c-format.c:1098
#, gcc-internal-format
msgid "$ operand number used after format without operand number"
msgstr ""
-#: c-format.c:1119
+#: c-format.c:1129
#, gcc-internal-format
msgid "format argument %d unused before used argument %d in $-style format"
msgstr ""
-#: c-format.c:1214
+#: c-format.c:1224
#, gcc-internal-format
msgid "format not a string literal, format string not checked"
msgstr ""
-#: c-format.c:1229 c-format.c:1232
+#: c-format.c:1239 c-format.c:1242
#, gcc-internal-format
msgid "format not a string literal and no format arguments"
msgstr ""
-#: c-format.c:1235
+#: c-format.c:1245
#, gcc-internal-format
msgid "format not a string literal, argument types not checked"
msgstr ""
-#: c-format.c:1248
+#: c-format.c:1258
#, gcc-internal-format
msgid "too many arguments for format"
msgstr ""
-#: c-format.c:1251
+#: c-format.c:1261
#, gcc-internal-format
msgid "unused arguments in $-style format"
msgstr ""
-#: c-format.c:1254
+#: c-format.c:1264
#, gcc-internal-format
msgid "zero-length %s format string"
msgstr ""
-#: c-format.c:1258
+#: c-format.c:1268
#, gcc-internal-format
msgid "format is a wide character string"
msgstr ""
-#: c-format.c:1261
+#: c-format.c:1271
#, gcc-internal-format
msgid "unterminated format string"
msgstr ""
-#: c-format.c:1475
+#: c-format.c:1485
#, gcc-internal-format
msgid "embedded %<\\0%> in format"
msgstr ""
-#: c-format.c:1490
+#: c-format.c:1500
#, gcc-internal-format
msgid "spurious trailing %<%%%> in format"
msgstr ""
-#: c-format.c:1534 c-format.c:1779
+#: c-format.c:1544 c-format.c:1789
#, gcc-internal-format
msgid "repeated %s in format"
msgstr ""
-#: c-format.c:1547
+#: c-format.c:1557
#, gcc-internal-format
msgid "missing fill character at end of strfmon format"
msgstr ""
-#: c-format.c:1591 c-format.c:1693 c-format.c:1978 c-format.c:2043
+#: c-format.c:1601 c-format.c:1703 c-format.c:1988 c-format.c:2053
#, gcc-internal-format
msgid "too few arguments for format"
msgstr ""
-#: c-format.c:1632
+#: c-format.c:1642
#, gcc-internal-format
msgid "zero width in %s format"
msgstr ""
-#: c-format.c:1650
+#: c-format.c:1660
#, gcc-internal-format
msgid "empty left precision in %s format"
msgstr ""
-#: c-format.c:1723
+#: c-format.c:1733
#, gcc-internal-format
msgid "empty precision in %s format"
msgstr ""
-#: c-format.c:1763
+#: c-format.c:1773
#, gcc-internal-format
msgid "%s does not support the %qs %s length modifier"
msgstr ""
-#: c-format.c:1813
+#: c-format.c:1823
#, gcc-internal-format
msgid "conversion lacks type at end of format"
msgstr ""
-#: c-format.c:1824
+#: c-format.c:1834
#, gcc-internal-format
msgid "unknown conversion type character %qc in format"
msgstr ""
-#: c-format.c:1827
+#: c-format.c:1837
#, gcc-internal-format
msgid "unknown conversion type character 0x%x in format"
msgstr ""
-#: c-format.c:1834
+#: c-format.c:1844
#, gcc-internal-format
msgid "%s does not support the %<%%%c%> %s format"
msgstr ""
-#: c-format.c:1850
+#: c-format.c:1860
#, gcc-internal-format
msgid "%s used with %<%%%c%> %s format"
msgstr ""
-#: c-format.c:1859
+#: c-format.c:1869
#, gcc-internal-format
msgid "%s does not support %s"
msgstr ""
-#: c-format.c:1869
+#: c-format.c:1879
#, gcc-internal-format
msgid "%s does not support %s with the %<%%%c%> %s format"
msgstr ""
-#: c-format.c:1903
+#: c-format.c:1913
#, gcc-internal-format
msgid "%s ignored with %s and %<%%%c%> %s format"
msgstr ""
-#: c-format.c:1907
+#: c-format.c:1917
#, gcc-internal-format
msgid "%s ignored with %s in %s format"
msgstr ""
-#: c-format.c:1914
+#: c-format.c:1924
#, gcc-internal-format
msgid "use of %s and %s together with %<%%%c%> %s format"
msgstr ""
-#: c-format.c:1918
+#: c-format.c:1928
#, gcc-internal-format
msgid "use of %s and %s together in %s format"
msgstr ""
-#: c-format.c:1937
+#: c-format.c:1947
#, gcc-internal-format
msgid "%<%%%c%> yields only last 2 digits of year in some locales"
msgstr ""
-#: c-format.c:1940
+#: c-format.c:1950
#, gcc-internal-format
msgid "%<%%%c%> yields only last 2 digits of year"
msgstr ""
#. The end of the format string was reached.
-#: c-format.c:1957
+#: c-format.c:1967
#, gcc-internal-format
msgid "no closing %<]%> for %<%%[%> format"
msgstr ""
-#: c-format.c:1971
+#: c-format.c:1981
#, gcc-internal-format
msgid "use of %qs length modifier with %qc type character"
msgstr ""
-#: c-format.c:1993
+#: c-format.c:2003
#, gcc-internal-format
msgid "%s does not support the %<%%%s%c%> %s format"
msgstr ""
-#: c-format.c:2010
+#: c-format.c:2020
#, gcc-internal-format
msgid "operand number specified with suppressed assignment"
msgstr ""
-#: c-format.c:2013
+#: c-format.c:2023
#, gcc-internal-format
msgid "operand number specified for format taking no argument"
msgstr ""
-#: c-format.c:2156
+#: c-format.c:2166
#, gcc-internal-format
msgid "writing through null pointer (argument %d)"
msgstr ""
-#: c-format.c:2164
+#: c-format.c:2174
#, gcc-internal-format
msgid "reading through null pointer (argument %d)"
msgstr ""
-#: c-format.c:2184
+#: c-format.c:2194
#, gcc-internal-format
msgid "writing into constant object (argument %d)"
msgstr ""
-#: c-format.c:2195
+#: c-format.c:2205
#, gcc-internal-format
msgid "extra type qualifiers in format argument (argument %d)"
msgstr ""
-#: c-format.c:2306
+#: c-format.c:2316
#, gcc-internal-format
msgid "%s should have type %<%s%s%>, but argument %d has type %qT"
msgstr ""
-#: c-format.c:2310
+#: c-format.c:2320
#, gcc-internal-format
msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT"
msgstr ""
-#: c-format.c:2318
+#: c-format.c:2328
#, gcc-internal-format
msgid "%s should have type %<%T%s%>, but argument %d has type %qT"
msgstr ""
-#: c-format.c:2322
+#: c-format.c:2332
#, gcc-internal-format
msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT"
msgstr ""
-#: c-format.c:2381 c-format.c:2387 c-format.c:2537
+#: c-format.c:2391 c-format.c:2397 c-format.c:2547
#, gcc-internal-format
msgid "%<__gcc_host_wide_int__%> is not defined as a type"
msgstr ""
-#: c-format.c:2394 c-format.c:2547
+#: c-format.c:2404 c-format.c:2557
#, gcc-internal-format
msgid "%<__gcc_host_wide_int__%> is not defined as %<long%> or %<long long%>"
msgstr ""
-#: c-format.c:2443
+#: c-format.c:2453
#, gcc-internal-format
msgid "%<locus%> is not defined as a type"
msgstr ""
-#: c-format.c:2496
+#: c-format.c:2506
#, gcc-internal-format
msgid "%<location_t%> is not defined as a type"
msgstr ""
-#: c-format.c:2513
+#: c-format.c:2523
#, gcc-internal-format
msgid "%<tree%> is not defined as a type"
msgstr ""
-#: c-format.c:2518
+#: c-format.c:2528
#, gcc-internal-format
msgid "%<tree%> is not defined as a pointer type"
msgstr ""
-#: c-format.c:2729
+#: c-format.c:2739
#, gcc-internal-format
msgid "args to be formatted is not %<...%>"
msgstr ""
-#: c-format.c:2738
+#: c-format.c:2748
#, gcc-internal-format
msgid "strftime formats cannot format arguments"
msgstr ""
@@ -18080,7 +18448,7 @@ msgstr ""
msgid "%H%qE is not initialized"
msgstr ""
-#: c-omp.c:247 cp/semantics.c:3788
+#: c-omp.c:247 cp/semantics.c:3814
#, gcc-internal-format
msgid "%Hmissing controlling predicate"
msgstr ""
@@ -18090,7 +18458,7 @@ msgstr ""
msgid "%Hinvalid controlling predicate"
msgstr ""
-#: c-omp.c:312 cp/semantics.c:3794
+#: c-omp.c:312 cp/semantics.c:3820
#, gcc-internal-format
msgid "%Hmissing increment expression"
msgstr ""
@@ -18100,153 +18468,173 @@ msgstr ""
msgid "%Hinvalid increment expression"
msgstr ""
-#: c-opts.c:150
+#: c-opts.c:153
#, gcc-internal-format
msgid "no class name specified with %qs"
msgstr ""
-#: c-opts.c:154
+#: c-opts.c:157
#, gcc-internal-format
msgid "assertion missing after %qs"
msgstr ""
-#: c-opts.c:159
+#: c-opts.c:162
#, gcc-internal-format
msgid "macro name missing after %qs"
msgstr ""
-#: c-opts.c:168
+#: c-opts.c:171
#, gcc-internal-format
msgid "missing path after %qs"
msgstr ""
-#: c-opts.c:177
+#: c-opts.c:180
#, gcc-internal-format
msgid "missing filename after %qs"
msgstr ""
-#: c-opts.c:182
+#: c-opts.c:185
#, gcc-internal-format
msgid "missing makefile target after %qs"
msgstr ""
-#: c-opts.c:326
+#: c-opts.c:334
#, gcc-internal-format
msgid "-I- specified twice"
msgstr ""
-#: c-opts.c:329
+#: c-opts.c:337
#, gcc-internal-format
msgid "obsolete option -I- used, please use -iquote instead"
msgstr ""
-#: c-opts.c:496
+#: c-opts.c:510
#, gcc-internal-format
msgid "argument %qs to %<-Wnormalized%> not recognized"
msgstr ""
-#: c-opts.c:583
+#: c-opts.c:597
#, gcc-internal-format
msgid "switch %qs is no longer supported"
msgstr ""
-#: c-opts.c:689
+#: c-opts.c:703
#, gcc-internal-format
msgid ""
"-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
msgstr ""
-#: c-opts.c:879
+#: c-opts.c:897
#, gcc-internal-format
msgid "output filename specified twice"
msgstr ""
-#: c-opts.c:1044
+#: c-opts.c:1037
+#, gcc-internal-format
+msgid "-fno-gnu89-inline is only supported in GNU99 or C99 mode"
+msgstr ""
+
+#: c-opts.c:1085
#, gcc-internal-format
msgid "-Wformat-y2k ignored without -Wformat"
msgstr ""
-#: c-opts.c:1046
+#: c-opts.c:1087
#, gcc-internal-format
msgid "-Wformat-extra-args ignored without -Wformat"
msgstr ""
-#: c-opts.c:1048
+#: c-opts.c:1089
#, gcc-internal-format
msgid "-Wformat-zero-length ignored without -Wformat"
msgstr ""
-#: c-opts.c:1050
+#: c-opts.c:1091
#, gcc-internal-format
msgid "-Wformat-nonliteral ignored without -Wformat"
msgstr ""
-#: c-opts.c:1052
+#: c-opts.c:1093
#, gcc-internal-format
msgid "-Wformat-security ignored without -Wformat"
msgstr ""
-#: c-opts.c:1072
+#: c-opts.c:1122
#, gcc-internal-format
msgid "opening output file %s: %m"
msgstr ""
-#: c-opts.c:1077
+#: c-opts.c:1127
#, gcc-internal-format
msgid "too many filenames given. Type %s --help for usage"
msgstr ""
-#: c-opts.c:1163
+#: c-opts.c:1211
#, gcc-internal-format
-msgid "YYDEBUG was not defined at build time, -dy ignored"
+msgid "The C parser does not support -dy, option ignored"
msgstr ""
-#: c-opts.c:1209
+#: c-opts.c:1215
+#, gcc-internal-format
+msgid "The Objective-C parser does not support -dy, option ignored"
+msgstr ""
+
+#: c-opts.c:1218
+#, gcc-internal-format
+msgid "The C++ parser does not support -dy, option ignored"
+msgstr ""
+
+#: c-opts.c:1222
+#, gcc-internal-format
+msgid "The Objective-C++ parser does not support -dy, option ignored"
+msgstr ""
+
+#: c-opts.c:1271
#, gcc-internal-format
msgid "opening dependency file %s: %m"
msgstr ""
-#: c-opts.c:1219
+#: c-opts.c:1281
#, gcc-internal-format
msgid "closing dependency file %s: %m"
msgstr ""
-#: c-opts.c:1222
+#: c-opts.c:1284
#, gcc-internal-format
msgid "when writing output to %s: %m"
msgstr ""
-#: c-opts.c:1302
+#: c-opts.c:1364
#, gcc-internal-format
msgid "to generate dependencies you must specify either -M or -MM"
msgstr ""
-#: c-opts.c:1473
+#: c-opts.c:1535
#, gcc-internal-format
msgid "too late for # directive to set debug directory"
msgstr ""
-#: c-parser.c:1087
+#: c-parser.c:1063
#, gcc-internal-format
msgid "ISO C forbids an empty source file"
msgstr ""
-#: c-parser.c:1172 c-parser.c:6018
+#: c-parser.c:1148 c-parser.c:5994
#, gcc-internal-format
msgid "ISO C does not allow extra %<;%> outside of a function"
msgstr ""
-#: c-parser.c:1273 c-parser.c:6564
+#: c-parser.c:1249 c-parser.c:6540
#, gcc-internal-format
msgid "expected declaration specifiers"
msgstr ""
-#: c-parser.c:1321
+#: c-parser.c:1297
#, gcc-internal-format
msgid "data definition has no type or storage class"
msgstr ""
-#: c-parser.c:1375
+#: c-parser.c:1351
#, gcc-internal-format
msgid "expected %<,%> or %<;%>"
msgstr ""
@@ -18254,172 +18642,172 @@ msgstr ""
#. This can appear in many cases looking nothing like a
#. function definition, so we don't give a more specific
#. error suggesting there was one.
-#: c-parser.c:1382 c-parser.c:1399
+#: c-parser.c:1358 c-parser.c:1375
#, gcc-internal-format
msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>"
msgstr ""
-#: c-parser.c:1391
+#: c-parser.c:1367
#, gcc-internal-format
msgid "ISO C forbids nested functions"
msgstr ""
-#: c-parser.c:1739 c-parser.c:2529 c-parser.c:3151 c-parser.c:3401
-#: c-parser.c:4249 c-parser.c:4834 c-parser.c:5230 c-parser.c:5250
-#: c-parser.c:5365 c-parser.c:5511 c-parser.c:5528 c-parser.c:5660
-#: c-parser.c:5672 c-parser.c:5697 c-parser.c:5831 c-parser.c:5860
-#: c-parser.c:5868 c-parser.c:5896 c-parser.c:5910 c-parser.c:6126
-#: c-parser.c:6225 c-parser.c:6727 c-parser.c:7346
+#: c-parser.c:1715 c-parser.c:2505 c-parser.c:3127 c-parser.c:3377
+#: c-parser.c:4225 c-parser.c:4810 c-parser.c:5206 c-parser.c:5226
+#: c-parser.c:5341 c-parser.c:5487 c-parser.c:5504 c-parser.c:5636
+#: c-parser.c:5648 c-parser.c:5673 c-parser.c:5807 c-parser.c:5836
+#: c-parser.c:5844 c-parser.c:5872 c-parser.c:5886 c-parser.c:6102
+#: c-parser.c:6201 c-parser.c:6703 c-parser.c:7322
#, gcc-internal-format
msgid "expected identifier"
msgstr ""
-#: c-parser.c:1765 cp/parser.c:10452
+#: c-parser.c:1741 cp/parser.c:10668
#, gcc-internal-format
msgid "comma at end of enumerator list"
msgstr ""
-#: c-parser.c:1771
+#: c-parser.c:1747
#, gcc-internal-format
msgid "expected %<,%> or %<}%>"
msgstr ""
-#: c-parser.c:1785 c-parser.c:1961 c-parser.c:5985
+#: c-parser.c:1761 c-parser.c:1937 c-parser.c:5961
#, gcc-internal-format
msgid "expected %<{%>"
msgstr ""
-#: c-parser.c:1794
+#: c-parser.c:1770
#, gcc-internal-format
msgid "ISO C forbids forward references to %<enum%> types"
msgstr ""
-#: c-parser.c:1897
+#: c-parser.c:1873
#, gcc-internal-format
msgid "expected class name"
msgstr ""
-#: c-parser.c:1916 c-parser.c:5764
+#: c-parser.c:1892 c-parser.c:5740
#, gcc-internal-format
msgid "extra semicolon in struct or union specified"
msgstr ""
-#: c-parser.c:1944
+#: c-parser.c:1920
#, gcc-internal-format
msgid "no semicolon at end of struct or union"
msgstr ""
-#: c-parser.c:1947
+#: c-parser.c:1923
#, gcc-internal-format
msgid "expected %<;%>"
msgstr ""
-#: c-parser.c:2024 c-parser.c:2985
+#: c-parser.c:2000 c-parser.c:2961
#, gcc-internal-format
msgid "expected specifier-qualifier-list"
msgstr ""
-#: c-parser.c:2034
+#: c-parser.c:2010
#, gcc-internal-format
msgid "ISO C forbids member declarations with no members"
msgstr ""
-#: c-parser.c:2103
+#: c-parser.c:2079
#, gcc-internal-format
msgid "expected %<,%>, %<;%> or %<}%>"
msgstr ""
-#: c-parser.c:2110
+#: c-parser.c:2086
#, gcc-internal-format
msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>"
msgstr ""
-#: c-parser.c:2160
+#: c-parser.c:2136
#, gcc-internal-format
msgid "%<typeof%> applied to a bit-field"
msgstr ""
-#: c-parser.c:2397
+#: c-parser.c:2373
#, gcc-internal-format
msgid "expected identifier or %<(%>"
msgstr ""
-#: c-parser.c:2598
+#: c-parser.c:2574
#, gcc-internal-format
msgid "ISO C requires a named argument before %<...%>"
msgstr ""
-#: c-parser.c:2704
+#: c-parser.c:2680
#, gcc-internal-format
msgid "expected declaration specifiers or %<...%>"
msgstr ""
-#: c-parser.c:2754
+#: c-parser.c:2730
#, gcc-internal-format
msgid "wide string literal in %<asm%>"
msgstr ""
-#: c-parser.c:2760 c-parser.c:6619 cp/parser.c:19132
+#: c-parser.c:2736 c-parser.c:6595 cp/parser.c:19414
#, gcc-internal-format
msgid "expected string literal"
msgstr ""
-#: c-parser.c:3077
+#: c-parser.c:3053
#, gcc-internal-format
msgid "ISO C forbids empty initializer braces"
msgstr ""
-#: c-parser.c:3122
+#: c-parser.c:3098
#, gcc-internal-format
msgid "obsolete use of designated initializer with %<:%>"
msgstr ""
-#: c-parser.c:3245
+#: c-parser.c:3221
#, gcc-internal-format
msgid "ISO C forbids specifying range of elements to initialize"
msgstr ""
-#: c-parser.c:3258
+#: c-parser.c:3234
#, gcc-internal-format
msgid "ISO C90 forbids specifying subobject to initialize"
msgstr ""
-#: c-parser.c:3266
+#: c-parser.c:3242
#, gcc-internal-format
msgid "obsolete use of designated initializer without %<=%>"
msgstr ""
-#: c-parser.c:3274
+#: c-parser.c:3250
#, gcc-internal-format
msgid "expected %<=%>"
msgstr ""
-#: c-parser.c:3420
+#: c-parser.c:3396
#, gcc-internal-format
msgid "ISO C forbids label declarations"
msgstr ""
-#: c-parser.c:3425 c-parser.c:3496
+#: c-parser.c:3401 c-parser.c:3472
#, gcc-internal-format
msgid "expected declaration or statement"
msgstr ""
-#: c-parser.c:3449 c-parser.c:3477
+#: c-parser.c:3425 c-parser.c:3453
#, gcc-internal-format
msgid "%HISO C90 forbids mixed declarations and code"
msgstr ""
-#: c-parser.c:3510
+#: c-parser.c:3486
#, gcc-internal-format
msgid "label at end of compound statement"
msgstr ""
-#: c-parser.c:3553
+#: c-parser.c:3529
#, gcc-internal-format
msgid "expected %<:%> or %<...%>"
msgstr ""
-#: c-parser.c:3735
+#: c-parser.c:3711
#, gcc-internal-format
msgid "expected identifier or %<*%>"
msgstr ""
@@ -18428,179 +18816,174 @@ msgstr ""
#. c_parser_skip_until_found stops at a closing nesting
#. delimiter without consuming it, but here we need to consume
#. it to proceed further.
-#: c-parser.c:3797
+#: c-parser.c:3773
#, gcc-internal-format
msgid "expected statement"
msgstr ""
-#: c-parser.c:4134
+#: c-parser.c:4110
#, gcc-internal-format
msgid "%E qualifier ignored on asm"
msgstr ""
-#: c-parser.c:4414
+#: c-parser.c:4390
#, gcc-internal-format
msgid "ISO C forbids omitting the middle term of a ?: expression"
msgstr ""
-#: c-parser.c:4804
+#: c-parser.c:4780
#, gcc-internal-format
msgid "traditional C rejects the unary plus operator"
msgstr ""
-#: c-parser.c:4923
+#: c-parser.c:4899
#, gcc-internal-format
msgid "%<sizeof%> applied to a bit-field"
msgstr ""
-#: c-parser.c:5066 c-parser.c:5407 c-parser.c:5429
+#: c-parser.c:5042 c-parser.c:5383 c-parser.c:5405
#, gcc-internal-format
msgid "expected expression"
msgstr ""
-#: c-parser.c:5092
+#: c-parser.c:5068
#, gcc-internal-format
msgid "braced-group within expression allowed only inside a function"
msgstr ""
-#: c-parser.c:5106
+#: c-parser.c:5082
#, gcc-internal-format
msgid "ISO C forbids braced-groups within expressions"
msgstr ""
-#: c-parser.c:5289
+#: c-parser.c:5265
#, gcc-internal-format
msgid "first argument to %<__builtin_choose_expr%> not a constant"
msgstr ""
-#: c-parser.c:5456
+#: c-parser.c:5432
#, gcc-internal-format
msgid "compound literal has variable size"
msgstr ""
-#: c-parser.c:5464
+#: c-parser.c:5440
#, gcc-internal-format
msgid "ISO C90 forbids compound literals"
msgstr ""
-#: c-parser.c:5981
+#: c-parser.c:5957
#, gcc-internal-format
msgid "extra semicolon in method definition specified"
msgstr ""
-#: c-parser.c:6525 cp/parser.c:19175
+#: c-parser.c:6501 cp/parser.c:19457
#, gcc-internal-format
msgid "%<#pragma omp barrier%> may only be used in compound statements"
msgstr ""
-#: c-parser.c:6536 cp/parser.c:19190
+#: c-parser.c:6512 cp/parser.c:19472
#, gcc-internal-format
msgid "%<#pragma omp flush%> may only be used in compound statements"
msgstr ""
-#: c-parser.c:6548 cp/parser.c:19216
+#: c-parser.c:6524 cp/parser.c:19498
#, gcc-internal-format
msgid ""
"%<#pragma omp section%> may only be used in %<#pragma omp sections%> "
"construct"
msgstr ""
-#: c-parser.c:6554 cp/parser.c:19165
+#: c-parser.c:6530 cp/parser.c:19447
#, gcc-internal-format
msgid "%<#pragma GCC pch_preprocess%> must be first"
msgstr ""
-#: c-parser.c:6705 cp/parser.c:18013
+#: c-parser.c:6681 cp/parser.c:18298
#, gcc-internal-format
msgid "too many %qs clauses"
msgstr ""
-#: c-parser.c:6830
+#: c-parser.c:6806
#, gcc-internal-format
msgid "expected %<none%> or %<shared%>"
msgstr ""
-#: c-parser.c:6873
+#: c-parser.c:6849
#, gcc-internal-format
msgid "expected %<(%>"
msgstr ""
-#: c-parser.c:6916 c-parser.c:7091
+#: c-parser.c:6892 c-parser.c:7067
#, gcc-internal-format
msgid "expected integer expression"
msgstr ""
-#: c-parser.c:6925
+#: c-parser.c:6901
#, gcc-internal-format
msgid "%<num_threads%> value must be positive"
msgstr ""
-#: c-parser.c:7005
+#: c-parser.c:6981
#, gcc-internal-format
msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
msgstr ""
-#: c-parser.c:7086 cp/parser.c:18362
+#: c-parser.c:7062 cp/parser.c:18647
#, gcc-internal-format
msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
msgstr ""
-#: c-parser.c:7104
+#: c-parser.c:7080
#, gcc-internal-format
msgid "invalid schedule kind"
msgstr ""
-#: c-parser.c:7189
+#: c-parser.c:7165
#, gcc-internal-format
msgid "expected %<#pragma omp%> clause"
msgstr ""
-#: c-parser.c:7198 cp/parser.c:18471
+#: c-parser.c:7174 cp/parser.c:18756
#, gcc-internal-format
msgid "%qs is not valid for %qs"
msgstr ""
-#: c-parser.c:7298
+#: c-parser.c:7274
#, gcc-internal-format
msgid "invalid operator for %<#pragma omp atomic%>"
msgstr ""
-#: c-parser.c:7349 c-parser.c:7369
+#: c-parser.c:7325 c-parser.c:7345
#, gcc-internal-format
msgid "expected %<(%> or end of line"
msgstr ""
-#: c-parser.c:7387
+#: c-parser.c:7363
#, gcc-internal-format
msgid "for statement expected"
msgstr ""
-#: c-parser.c:7460 cp/semantics.c:3774 cp/semantics.c:3818
+#: c-parser.c:7436 cp/semantics.c:3800 cp/semantics.c:3844
#, gcc-internal-format
msgid "expected iteration declaration or initialization"
msgstr ""
-#: c-parser.c:7586
+#: c-parser.c:7562
#, gcc-internal-format
msgid "expected %<#pragma omp section%> or %<}%>"
msgstr ""
-#: c-parser.c:7805 cp/parser.c:19053 fortran/openmp.c:470
-#, gcc-internal-format
-msgid "threadprivate variables not supported in this target"
-msgstr ""
-
-#: c-parser.c:7815 cp/semantics.c:3668
+#: c-parser.c:7794 cp/semantics.c:3694
#, gcc-internal-format
msgid "%qE declared %<threadprivate%> after first use"
msgstr ""
-#: c-parser.c:7817 cp/semantics.c:3670
+#: c-parser.c:7796 cp/semantics.c:3696
#, gcc-internal-format
msgid "automatic variable %qE cannot be %<threadprivate%>"
msgstr ""
-#: c-parser.c:7819 cp/semantics.c:3672
+#: c-parser.c:7798 cp/semantics.c:3698
#, gcc-internal-format
msgid "%<threadprivate%> %qE has incomplete type"
msgstr ""
@@ -18857,7 +19240,7 @@ msgstr ""
msgid "%qD has an incomplete type"
msgstr ""
-#: c-typeck.c:196 cp/call.c:2716
+#: c-typeck.c:196 cp/call.c:2744
#, gcc-internal-format
msgid "invalid use of void expression"
msgstr ""
@@ -18913,7 +19296,7 @@ msgstr ""
msgid "function return types not compatible due to %<volatile%>"
msgstr ""
-#: c-typeck.c:1428 c-typeck.c:2781
+#: c-typeck.c:1428 c-typeck.c:2736
#, gcc-internal-format
msgid "arithmetic on pointer to an incomplete type"
msgstr ""
@@ -18938,17 +19321,17 @@ msgstr ""
msgid "dereferencing %<void *%> pointer"
msgstr ""
-#: c-typeck.c:1913 cp/typeck.c:2340
+#: c-typeck.c:1913 cp/typeck.c:2334
#, gcc-internal-format
msgid "invalid type argument of %qs"
msgstr ""
-#: c-typeck.c:1941 cp/typeck.c:2483
+#: c-typeck.c:1941 cp/typeck.c:2477
#, gcc-internal-format
msgid "subscripted value is neither array nor pointer"
msgstr ""
-#: c-typeck.c:1952 cp/typeck.c:2402 cp/typeck.c:2488
+#: c-typeck.c:1952 cp/typeck.c:2396 cp/typeck.c:2482
#, gcc-internal-format
msgid "array subscript is not an integer"
msgstr ""
@@ -18968,7 +19351,12 @@ msgstr ""
msgid "ISO C90 forbids subscripting non-lvalue array"
msgstr ""
-#: c-typeck.c:2256
+#: c-typeck.c:2121
+#, gcc-internal-format
+msgid "%H%qD is static but used in inline function %qD which is not static"
+msgstr ""
+
+#: c-typeck.c:2269
#, gcc-internal-format
msgid "called object %qE is not a function"
msgstr ""
@@ -18976,1309 +19364,1314 @@ msgstr ""
#. This situation leads to run-time undefined behavior. We can't,
#. therefore, simply error unless we can prove that all possible
#. executions of the program must execute the code.
-#: c-typeck.c:2284
+#: c-typeck.c:2297
#, gcc-internal-format
msgid "function called through a non-compatible type"
msgstr ""
-#: c-typeck.c:2391
+#: c-typeck.c:2406
#, gcc-internal-format
msgid "too many arguments to function %qE"
msgstr ""
-#: c-typeck.c:2412
+#: c-typeck.c:2427
#, gcc-internal-format
msgid "type of formal parameter %d is incomplete"
msgstr ""
-#: c-typeck.c:2425
+#: c-typeck.c:2440
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:2430
+#: c-typeck.c:2445
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as integer rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:2435
+#: c-typeck.c:2450
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:2440
+#: c-typeck.c:2455
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:2445
+#: c-typeck.c:2460
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as complex rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:2450
+#: c-typeck.c:2465
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as floating rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:2463
+#: c-typeck.c:2478
#, gcc-internal-format
msgid ""
"passing argument %d of %qE as %<float%> rather than %<double%> due to "
"prototype"
msgstr ""
-#: c-typeck.c:2488
+#: c-typeck.c:2503
#, gcc-internal-format
msgid "passing argument %d of %qE as %qT rather than %qT due to prototype"
msgstr ""
-#: c-typeck.c:2509
+#: c-typeck.c:2524
#, gcc-internal-format
msgid "passing argument %d of %qE with different width due to prototype"
msgstr ""
-#: c-typeck.c:2532
+#: c-typeck.c:2547
#, gcc-internal-format
msgid "passing argument %d of %qE as unsigned due to prototype"
msgstr ""
-#: c-typeck.c:2536
+#: c-typeck.c:2551
#, gcc-internal-format
msgid "passing argument %d of %qE as signed due to prototype"
msgstr ""
-#: c-typeck.c:2627
-#, gcc-internal-format
-msgid "suggest parentheses around + or - inside shift"
-msgstr ""
-
-#: c-typeck.c:2635
-#, gcc-internal-format
-msgid "suggest parentheses around && within ||"
-msgstr ""
-
-#: c-typeck.c:2645
+#: c-typeck.c:2649 c-typeck.c:2653 cp/typeck.c:3277 cp/typeck.c:3452
#, gcc-internal-format
-msgid "suggest parentheses around arithmetic in operand of |"
-msgstr ""
-
-#: c-typeck.c:2650
-#, gcc-internal-format
-msgid "suggest parentheses around comparison in operand of |"
-msgstr ""
-
-#: c-typeck.c:2660
-#, gcc-internal-format
-msgid "suggest parentheses around arithmetic in operand of ^"
-msgstr ""
-
-#: c-typeck.c:2665
-#, gcc-internal-format
-msgid "suggest parentheses around comparison in operand of ^"
-msgstr ""
-
-#: c-typeck.c:2673
-#, gcc-internal-format
-msgid "suggest parentheses around + or - in operand of &"
+msgid "comparison with string literal results in unspecified behaviour"
msgstr ""
#: c-typeck.c:2678
#, gcc-internal-format
-msgid "suggest parentheses around comparison in operand of &"
-msgstr ""
-
-#: c-typeck.c:2684
-#, gcc-internal-format
-msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
-msgstr ""
-
-#: c-typeck.c:2696 c-typeck.c:2701 cp/typeck.c:3250 cp/typeck.c:3359
-#, gcc-internal-format
-msgid "comparison with string literal"
-msgstr ""
-
-#: c-typeck.c:2723
-#, gcc-internal-format
msgid "pointer of type %<void *%> used in subtraction"
msgstr ""
-#: c-typeck.c:2725
+#: c-typeck.c:2680
#, gcc-internal-format
msgid "pointer to a function used in subtraction"
msgstr ""
-#: c-typeck.c:2832
+#: c-typeck.c:2787
#, gcc-internal-format
msgid "wrong type argument to unary plus"
msgstr ""
-#: c-typeck.c:2845
+#: c-typeck.c:2800
#, gcc-internal-format
msgid "wrong type argument to unary minus"
msgstr ""
-#: c-typeck.c:2862
+#: c-typeck.c:2817
#, gcc-internal-format
msgid "ISO C does not support %<~%> for complex conjugation"
msgstr ""
-#: c-typeck.c:2868
+#: c-typeck.c:2823
#, gcc-internal-format
msgid "wrong type argument to bit-complement"
msgstr ""
-#: c-typeck.c:2876
+#: c-typeck.c:2831
#, gcc-internal-format
msgid "wrong type argument to abs"
msgstr ""
-#: c-typeck.c:2888
+#: c-typeck.c:2843
#, gcc-internal-format
msgid "wrong type argument to conjugation"
msgstr ""
-#: c-typeck.c:2900
+#: c-typeck.c:2855
#, gcc-internal-format
msgid "wrong type argument to unary exclamation mark"
msgstr ""
-#: c-typeck.c:2934
+#: c-typeck.c:2889
#, gcc-internal-format
msgid "ISO C does not support %<++%> and %<--%> on complex types"
msgstr ""
-#: c-typeck.c:2950 c-typeck.c:2982
+#: c-typeck.c:2905 c-typeck.c:2937
#, gcc-internal-format
msgid "wrong type argument to increment"
msgstr ""
-#: c-typeck.c:2952 c-typeck.c:2984
+#: c-typeck.c:2907 c-typeck.c:2939
#, gcc-internal-format
msgid "wrong type argument to decrement"
msgstr ""
-#: c-typeck.c:2973
+#: c-typeck.c:2928
#, gcc-internal-format
msgid "increment of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:2975
+#: c-typeck.c:2930
#, gcc-internal-format
msgid "decrement of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:3155
+#: c-typeck.c:3110
#, gcc-internal-format
msgid "assignment of read-only member %qD"
msgstr ""
-#: c-typeck.c:3156
+#: c-typeck.c:3111
#, gcc-internal-format
msgid "increment of read-only member %qD"
msgstr ""
-#: c-typeck.c:3157
+#: c-typeck.c:3112
#, gcc-internal-format
msgid "decrement of read-only member %qD"
msgstr ""
-#: c-typeck.c:3158
+#: c-typeck.c:3113
#, gcc-internal-format
msgid "read-only member %qD used as %<asm%> output"
msgstr ""
-#: c-typeck.c:3162
+#: c-typeck.c:3117
#, gcc-internal-format
msgid "assignment of read-only variable %qD"
msgstr ""
-#: c-typeck.c:3163
+#: c-typeck.c:3118
#, gcc-internal-format
msgid "increment of read-only variable %qD"
msgstr ""
-#: c-typeck.c:3164
+#: c-typeck.c:3119
#, gcc-internal-format
msgid "decrement of read-only variable %qD"
msgstr ""
-#: c-typeck.c:3165
+#: c-typeck.c:3120
#, gcc-internal-format
msgid "read-only variable %qD used as %<asm%> output"
msgstr ""
-#: c-typeck.c:3168
+#: c-typeck.c:3123
#, gcc-internal-format
msgid "assignment of read-only location"
msgstr ""
-#: c-typeck.c:3169
+#: c-typeck.c:3124
#, gcc-internal-format
msgid "increment of read-only location"
msgstr ""
-#: c-typeck.c:3170
+#: c-typeck.c:3125
#, gcc-internal-format
msgid "decrement of read-only location"
msgstr ""
-#: c-typeck.c:3171
+#: c-typeck.c:3126
#, gcc-internal-format
msgid "read-only location used as %<asm%> output"
msgstr ""
-#: c-typeck.c:3206
+#: c-typeck.c:3161
#, gcc-internal-format
msgid "cannot take address of bit-field %qD"
msgstr ""
-#: c-typeck.c:3234
+#: c-typeck.c:3189
#, gcc-internal-format
msgid "global register variable %qD used in nested function"
msgstr ""
-#: c-typeck.c:3237
+#: c-typeck.c:3192
#, gcc-internal-format
msgid "register variable %qD used in nested function"
msgstr ""
-#: c-typeck.c:3242
+#: c-typeck.c:3197
#, gcc-internal-format
msgid "address of global register variable %qD requested"
msgstr ""
-#: c-typeck.c:3244
+#: c-typeck.c:3199
#, gcc-internal-format
msgid "address of register variable %qD requested"
msgstr ""
-#: c-typeck.c:3290
+#: c-typeck.c:3245
#, gcc-internal-format
msgid "non-lvalue array in conditional expression"
msgstr ""
-#: c-typeck.c:3334
+#: c-typeck.c:3293
#, gcc-internal-format
msgid "signed and unsigned type in conditional expression"
msgstr ""
-#: c-typeck.c:3341
+#: c-typeck.c:3300
#, gcc-internal-format
msgid "ISO C forbids conditional expr with only one void side"
msgstr ""
-#: c-typeck.c:3355 c-typeck.c:3363
+#: c-typeck.c:3314 c-typeck.c:3322
#, gcc-internal-format
msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
msgstr ""
-#: c-typeck.c:3370
+#: c-typeck.c:3329
#, gcc-internal-format
msgid "pointer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3377 c-typeck.c:3387
+#: c-typeck.c:3336 c-typeck.c:3346
#, gcc-internal-format
msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3401
+#: c-typeck.c:3360
#, gcc-internal-format
msgid "type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3443
+#: c-typeck.c:3402
#, gcc-internal-format
msgid "left-hand operand of comma expression has no effect"
msgstr ""
-#: c-typeck.c:3480
+#: c-typeck.c:3439
#, gcc-internal-format
msgid "cast specifies array type"
msgstr ""
-#: c-typeck.c:3486
+#: c-typeck.c:3445
#, gcc-internal-format
msgid "cast specifies function type"
msgstr ""
-#: c-typeck.c:3496
+#: c-typeck.c:3455
#, gcc-internal-format
msgid "ISO C forbids casting nonscalar to the same type"
msgstr ""
-#: c-typeck.c:3513
+#: c-typeck.c:3472
#, gcc-internal-format
msgid "ISO C forbids casts to union type"
msgstr ""
-#: c-typeck.c:3521
+#: c-typeck.c:3480
#, gcc-internal-format
msgid "cast to union type from type not present in union"
msgstr ""
-#: c-typeck.c:3567
+#: c-typeck.c:3526
#, gcc-internal-format
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:3572
+#: c-typeck.c:3531
#, gcc-internal-format
msgid "cast discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:3588
+#: c-typeck.c:3547
#, gcc-internal-format
msgid "cast increases required alignment of target type"
msgstr ""
-#: c-typeck.c:3599
+#: c-typeck.c:3558
#, gcc-internal-format
msgid "cast from pointer to integer of different size"
msgstr ""
-#: c-typeck.c:3603
+#: c-typeck.c:3562
#, gcc-internal-format
msgid "cast from function call of type %qT to non-matching type %qT"
msgstr ""
-#: c-typeck.c:3611
+#: c-typeck.c:3570
#, gcc-internal-format
msgid "cast to pointer from integer of different size"
msgstr ""
-#: c-typeck.c:3624
+#: c-typeck.c:3583
#, gcc-internal-format
msgid "ISO C forbids conversion of function pointer to object pointer type"
msgstr ""
-#: c-typeck.c:3632
+#: c-typeck.c:3591
#, gcc-internal-format
msgid "ISO C forbids conversion of object pointer to function pointer type"
msgstr ""
-#: c-typeck.c:3908
+#: c-typeck.c:3865
#, gcc-internal-format
msgid "cannot pass rvalue to reference parameter"
msgstr ""
-#: c-typeck.c:4013 c-typeck.c:4179
+#: c-typeck.c:3970 c-typeck.c:4136
#, gcc-internal-format
msgid ""
"passing argument %d of %qE makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:4016 c-typeck.c:4182
+#: c-typeck.c:3973 c-typeck.c:4139
#, gcc-internal-format
msgid "assignment makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:4019 c-typeck.c:4184
+#: c-typeck.c:3976 c-typeck.c:4141
#, gcc-internal-format
msgid "initialization makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:4022 c-typeck.c:4186
+#: c-typeck.c:3979 c-typeck.c:4143
#, gcc-internal-format
msgid "return makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:4026 c-typeck.c:4146
+#: c-typeck.c:3983 c-typeck.c:4103
#, gcc-internal-format
msgid "passing argument %d of %qE discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:4028 c-typeck.c:4148
+#: c-typeck.c:3985 c-typeck.c:4105
#, gcc-internal-format
msgid "assignment discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:4030 c-typeck.c:4150
+#: c-typeck.c:3987 c-typeck.c:4107
#, gcc-internal-format
msgid "initialization discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:4032 c-typeck.c:4152
+#: c-typeck.c:3989 c-typeck.c:4109
#, gcc-internal-format
msgid "return discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:4039
+#: c-typeck.c:3996
#, gcc-internal-format
msgid "ISO C prohibits argument conversion to union type"
msgstr ""
-#: c-typeck.c:4074
+#: c-typeck.c:4031
#, gcc-internal-format
msgid "request for implicit conversion from %qT to %qT not permitted in C++"
msgstr ""
-#: c-typeck.c:4087
+#: c-typeck.c:4044
#, gcc-internal-format
msgid "argument %d of %qE might be a candidate for a format attribute"
msgstr ""
-#: c-typeck.c:4093
+#: c-typeck.c:4050
#, gcc-internal-format
msgid "assignment left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c-typeck.c:4098
+#: c-typeck.c:4055
#, gcc-internal-format
msgid ""
"initialization left-hand side might be a candidate for a format attribute"
msgstr ""
-#: c-typeck.c:4103
+#: c-typeck.c:4060
#, gcc-internal-format
msgid "return type might be a candidate for a format attribute"
msgstr ""
-#: c-typeck.c:4126
+#: c-typeck.c:4083
#, gcc-internal-format
msgid ""
"ISO C forbids passing argument %d of %qE between function pointer and %<void "
"*%>"
msgstr ""
-#: c-typeck.c:4129
+#: c-typeck.c:4086
#, gcc-internal-format
msgid "ISO C forbids assignment between function pointer and %<void *%>"
msgstr ""
-#: c-typeck.c:4131
+#: c-typeck.c:4088
#, gcc-internal-format
msgid "ISO C forbids initialization between function pointer and %<void *%>"
msgstr ""
-#: c-typeck.c:4133
+#: c-typeck.c:4090
#, gcc-internal-format
msgid "ISO C forbids return between function pointer and %<void *%>"
msgstr ""
-#: c-typeck.c:4162
+#: c-typeck.c:4119
#, gcc-internal-format
msgid "pointer targets in passing argument %d of %qE differ in signedness"
msgstr ""
-#: c-typeck.c:4164
+#: c-typeck.c:4121
#, gcc-internal-format
msgid "pointer targets in assignment differ in signedness"
msgstr ""
-#: c-typeck.c:4166
+#: c-typeck.c:4123
#, gcc-internal-format
msgid "pointer targets in initialization differ in signedness"
msgstr ""
-#: c-typeck.c:4168
+#: c-typeck.c:4125
#, gcc-internal-format
msgid "pointer targets in return differ in signedness"
msgstr ""
-#: c-typeck.c:4193
+#: c-typeck.c:4150
#, gcc-internal-format
msgid "passing argument %d of %qE from incompatible pointer type"
msgstr ""
-#: c-typeck.c:4195
+#: c-typeck.c:4152
#, gcc-internal-format
msgid "assignment from incompatible pointer type"
msgstr ""
-#: c-typeck.c:4196
+#: c-typeck.c:4153
#, gcc-internal-format
msgid "initialization from incompatible pointer type"
msgstr ""
-#: c-typeck.c:4198
+#: c-typeck.c:4155
#, gcc-internal-format
msgid "return from incompatible pointer type"
msgstr ""
-#: c-typeck.c:4215
+#: c-typeck.c:4172
#, gcc-internal-format
msgid "passing argument %d of %qE makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:4217
+#: c-typeck.c:4174
#, gcc-internal-format
msgid "assignment makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:4219
+#: c-typeck.c:4176
#, gcc-internal-format
msgid "initialization makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:4221
+#: c-typeck.c:4178
#, gcc-internal-format
msgid "return makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:4228
+#: c-typeck.c:4185
#, gcc-internal-format
msgid "passing argument %d of %qE makes integer from pointer without a cast"
msgstr ""
-#: c-typeck.c:4230
+#: c-typeck.c:4187
#, gcc-internal-format
msgid "assignment makes integer from pointer without a cast"
msgstr ""
-#: c-typeck.c:4232
+#: c-typeck.c:4189
#, gcc-internal-format
msgid "initialization makes integer from pointer without a cast"
msgstr ""
-#: c-typeck.c:4234
+#: c-typeck.c:4191
#, gcc-internal-format
msgid "return makes integer from pointer without a cast"
msgstr ""
-#: c-typeck.c:4250
+#: c-typeck.c:4207
#, gcc-internal-format
msgid "incompatible types in assignment"
msgstr ""
-#: c-typeck.c:4253
+#: c-typeck.c:4210
#, gcc-internal-format
msgid "incompatible types in initialization"
msgstr ""
-#: c-typeck.c:4256
+#: c-typeck.c:4213
#, gcc-internal-format
msgid "incompatible types in return"
msgstr ""
-#: c-typeck.c:4343
+#: c-typeck.c:4300
#, gcc-internal-format
msgid "traditional C rejects automatic aggregate initialization"
msgstr ""
-#: c-typeck.c:4513 c-typeck.c:4528 c-typeck.c:4543
+#: c-typeck.c:4471 c-typeck.c:4486 c-typeck.c:4501
#, gcc-internal-format
msgid "(near initialization for %qs)"
msgstr ""
-#: c-typeck.c:5083 cp/decl.c:4767
+#: c-typeck.c:5041 cp/decl.c:4785
#, gcc-internal-format
msgid "opaque vector types cannot be initialized"
msgstr ""
-#: c-typeck.c:5706
+#: c-typeck.c:5664
#, gcc-internal-format
msgid "unknown field %qE specified in initializer"
msgstr ""
-#: c-typeck.c:6606
+#: c-typeck.c:6564
#, gcc-internal-format
msgid "traditional C rejects initialization of unions"
msgstr ""
-#: c-typeck.c:6914
+#: c-typeck.c:6872
#, gcc-internal-format
msgid "jump into statement expression"
msgstr ""
-#: c-typeck.c:6920
+#: c-typeck.c:6878
#, gcc-internal-format
msgid "jump into scope of identifier with variably modified type"
msgstr ""
-#: c-typeck.c:6957
+#: c-typeck.c:6915
#, gcc-internal-format
msgid "ISO C forbids %<goto *expr;%>"
msgstr ""
-#: c-typeck.c:6972 cp/typeck.c:6420
+#: c-typeck.c:6930 cp/typeck.c:6522
#, gcc-internal-format
msgid "function declared %<noreturn%> has a %<return%> statement"
msgstr ""
-#: c-typeck.c:6980
+#: c-typeck.c:6938
#, gcc-internal-format
msgid "%<return%> with no value, in function returning non-void"
msgstr ""
-#: c-typeck.c:6989
+#: c-typeck.c:6947
#, gcc-internal-format
msgid "%<return%> with a value, in function returning void"
msgstr ""
-#: c-typeck.c:7046
+#: c-typeck.c:6949
+#, gcc-internal-format
+msgid "ISO C forbids %<return%> with expression, in function returning void"
+msgstr ""
+
+#: c-typeck.c:7006
#, gcc-internal-format
msgid "function returns address of local variable"
msgstr ""
-#: c-typeck.c:7118 cp/semantics.c:916
+#: c-typeck.c:7078 cp/semantics.c:939
#, gcc-internal-format
msgid "switch quantity not an integer"
msgstr ""
-#: c-typeck.c:7130
+#: c-typeck.c:7090
#, gcc-internal-format
msgid "%<long%> switch expression not converted to %<int%> in ISO C"
msgstr ""
-#: c-typeck.c:7170
+#: c-typeck.c:7130
#, gcc-internal-format
msgid ""
"case label in statement expression not containing enclosing switch statement"
msgstr ""
-#: c-typeck.c:7173
+#: c-typeck.c:7133
#, gcc-internal-format
msgid ""
"%<default%> label in statement expression not containing enclosing switch "
"statement"
msgstr ""
-#: c-typeck.c:7179
+#: c-typeck.c:7139
#, gcc-internal-format
msgid ""
"case label in scope of identifier with variably modified type not containing "
"enclosing switch statement"
msgstr ""
-#: c-typeck.c:7182
+#: c-typeck.c:7142
#, gcc-internal-format
msgid ""
"%<default%> label in scope of identifier with variably modified type not "
"containing enclosing switch statement"
msgstr ""
-#: c-typeck.c:7186 cp/parser.c:6373
+#: c-typeck.c:7146 cp/parser.c:6446
#, gcc-internal-format
msgid "case label not within a switch statement"
msgstr ""
-#: c-typeck.c:7188
+#: c-typeck.c:7148
#, gcc-internal-format
msgid "%<default%> label not within a switch statement"
msgstr ""
-#: c-typeck.c:7265
+#: c-typeck.c:7225
#, gcc-internal-format
msgid "%Hsuggest explicit braces to avoid ambiguous %<else%>"
msgstr ""
-#: c-typeck.c:7376 cp/cp-gimplify.c:97 cp/parser.c:6869
+#: c-typeck.c:7336 cp/cp-gimplify.c:97 cp/parser.c:6992
#, gcc-internal-format
msgid "break statement not within loop or switch"
msgstr ""
-#: c-typeck.c:7378 cp/parser.c:6890
+#: c-typeck.c:7338 cp/parser.c:7013
#, gcc-internal-format
msgid "continue statement not within a loop"
msgstr ""
-#: c-typeck.c:7383 cp/parser.c:6880
+#: c-typeck.c:7343 cp/parser.c:7003
#, gcc-internal-format
msgid "break statement used with OpenMP for loop"
msgstr ""
-#: c-typeck.c:7406
+#: c-typeck.c:7366
#, gcc-internal-format
msgid "%Hstatement with no effect"
msgstr ""
-#: c-typeck.c:7428
+#: c-typeck.c:7388
#, gcc-internal-format
msgid "expression statement has incomplete type"
msgstr ""
-#: c-typeck.c:7891 c-typeck.c:7932
+#: c-typeck.c:7851 c-typeck.c:7892
#, gcc-internal-format
msgid "division by zero"
msgstr ""
-#: c-typeck.c:7977 cp/typeck.c:3183
+#: c-typeck.c:7937 cp/typeck.c:3209
#, gcc-internal-format
msgid "right shift count is negative"
msgstr ""
-#: c-typeck.c:7984 cp/typeck.c:3189
+#: c-typeck.c:7944 cp/typeck.c:3215
#, gcc-internal-format
msgid "right shift count >= width of type"
msgstr ""
-#: c-typeck.c:8005 cp/typeck.c:3208
+#: c-typeck.c:7965 cp/typeck.c:3234
#, gcc-internal-format
msgid "left shift count is negative"
msgstr ""
-#: c-typeck.c:8008 cp/typeck.c:3210
+#: c-typeck.c:7968 cp/typeck.c:3236
#, gcc-internal-format
msgid "left shift count >= width of type"
msgstr ""
-#: c-typeck.c:8026 cp/typeck.c:3246
+#: c-typeck.c:7986 cp/typeck.c:3274
#, gcc-internal-format
msgid "comparing floating point with == or != is unsafe"
msgstr ""
-#: c-typeck.c:8050 c-typeck.c:8057
+#: c-typeck.c:8010 c-typeck.c:8017
#, gcc-internal-format
msgid "ISO C forbids comparison of %<void *%> with function pointer"
msgstr ""
-#: c-typeck.c:8063 c-typeck.c:8125
+#: c-typeck.c:8023 c-typeck.c:8079
#, gcc-internal-format
msgid "comparison of distinct pointer types lacks a cast"
msgstr ""
-#: c-typeck.c:8075 c-typeck.c:8086
+#: c-typeck.c:8032 c-typeck.c:8040 cp/typeck.c:3294 cp/typeck.c:3303
#, gcc-internal-format
msgid "the address of %qD will never be NULL"
msgstr ""
-#: c-typeck.c:8093 c-typeck.c:8098 c-typeck.c:8143 c-typeck.c:8148
+#: c-typeck.c:8047 c-typeck.c:8052 c-typeck.c:8097 c-typeck.c:8102
#, gcc-internal-format
msgid "comparison between pointer and integer"
msgstr ""
-#: c-typeck.c:8117
+#: c-typeck.c:8071
#, gcc-internal-format
msgid "comparison of complete and incomplete pointers"
msgstr ""
-#: c-typeck.c:8120
+#: c-typeck.c:8074
#, gcc-internal-format
msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr ""
-#: c-typeck.c:8132 c-typeck.c:8138
+#: c-typeck.c:8086 c-typeck.c:8092
#, gcc-internal-format
msgid "ordered comparison of pointer with integer zero"
msgstr ""
-#: c-typeck.c:8391
+#: c-typeck.c:8346
#, gcc-internal-format
msgid "comparison between signed and unsigned"
msgstr ""
-#: c-typeck.c:8437 cp/typeck.c:3678
+#: c-typeck.c:8392 cp/typeck.c:3771
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with constant"
msgstr ""
-#: c-typeck.c:8445 cp/typeck.c:3686
+#: c-typeck.c:8400 cp/typeck.c:3779
#, gcc-internal-format
msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
-#: c-typeck.c:8503
+#: c-typeck.c:8458
#, gcc-internal-format
msgid "used array that cannot be converted to pointer where scalar is required"
msgstr ""
-#: c-typeck.c:8507
+#: c-typeck.c:8462
#, gcc-internal-format
msgid "used struct type value where scalar is required"
msgstr ""
-#: c-typeck.c:8511
+#: c-typeck.c:8466
#, gcc-internal-format
msgid "used union type value where scalar is required"
msgstr ""
-#: c-typeck.c:8616 cp/semantics.c:3496
+#: c-typeck.c:8571 cp/semantics.c:3522
#, gcc-internal-format
msgid "%qE has invalid type for %<reduction%>"
msgstr ""
-#: c-typeck.c:8650 cp/semantics.c:3509
+#: c-typeck.c:8605 cp/semantics.c:3535
#, gcc-internal-format
msgid "%qE has invalid type for %<reduction(%s)%>"
msgstr ""
-#: c-typeck.c:8666 cp/semantics.c:3519
+#: c-typeck.c:8621 cp/semantics.c:3545
#, gcc-internal-format
msgid "%qE must be %<threadprivate%> for %<copyin%>"
msgstr ""
-#: c-typeck.c:8675 cp/semantics.c:3324
+#: c-typeck.c:8630 cp/semantics.c:3350
#, gcc-internal-format
msgid "%qE is not a variable in clause %qs"
msgstr ""
-#: c-typeck.c:8682 c-typeck.c:8702 c-typeck.c:8722 cp/semantics.c:3331
-#: cp/semantics.c:3350 cp/semantics.c:3369
+#: c-typeck.c:8637 c-typeck.c:8657 c-typeck.c:8677 cp/semantics.c:3357
+#: cp/semantics.c:3376 cp/semantics.c:3395
#, gcc-internal-format
msgid "%qE appears more than once in data clauses"
msgstr ""
-#: c-typeck.c:8696 cp/semantics.c:3344
+#: c-typeck.c:8651 cp/semantics.c:3370
#, gcc-internal-format
msgid "%qE is not a variable in clause %<firstprivate%>"
msgstr ""
-#: c-typeck.c:8716 cp/semantics.c:3363
+#: c-typeck.c:8671 cp/semantics.c:3389
#, gcc-internal-format
msgid "%qE is not a variable in clause %<lastprivate%>"
msgstr ""
-#: c-typeck.c:8774 cp/semantics.c:3560
+#: c-typeck.c:8729 cp/semantics.c:3586
#, gcc-internal-format
msgid "%qE is predetermined %qs for %qs"
msgstr ""
-#: calls.c:1928
+#: calls.c:1997
#, gcc-internal-format
msgid "function call has aggregate value"
msgstr ""
-#: cfgexpand.c:1617
+#: cfgexpand.c:1778
#, gcc-internal-format
msgid "not protecting local variables: variable length buffer"
msgstr ""
-#: cfgexpand.c:1619
+#: cfgexpand.c:1780
#, gcc-internal-format
msgid "not protecting function: no buffer at least %d bytes long"
msgstr ""
-#: cfghooks.c:90
+#: cfghooks.c:98
#, gcc-internal-format
msgid "bb %d on wrong place"
msgstr ""
-#: cfghooks.c:96
+#: cfghooks.c:104
#, gcc-internal-format
msgid "prev_bb of %d should be %d, not %d"
msgstr ""
-#: cfghooks.c:113
+#: cfghooks.c:121
+#, gcc-internal-format
+msgid "verify_flow_info: Block %i has loop_father, but there are no loops"
+msgstr ""
+
+#: cfghooks.c:127
+#, gcc-internal-format
+msgid "verify_flow_info: Block %i lacks loop_father"
+msgstr ""
+
+#: cfghooks.c:133
#, gcc-internal-format
msgid "verify_flow_info: Wrong count of block %i %i"
msgstr ""
-#: cfghooks.c:119
+#: cfghooks.c:139
#, gcc-internal-format
msgid "verify_flow_info: Wrong frequency of block %i %i"
msgstr ""
-#: cfghooks.c:127
+#: cfghooks.c:147
#, gcc-internal-format
msgid "verify_flow_info: Duplicate edge %i->%i"
msgstr ""
-#: cfghooks.c:133
+#: cfghooks.c:153
#, gcc-internal-format
msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
msgstr ""
-#: cfghooks.c:139
+#: cfghooks.c:159
#, gcc-internal-format
msgid "verify_flow_info: Wrong count of edge %i->%i %i"
msgstr ""
-#: cfghooks.c:151
+#: cfghooks.c:171
#, gcc-internal-format
msgid "verify_flow_info: Basic block %d succ edge is corrupted"
msgstr ""
-#: cfghooks.c:165 cfgrtl.c:1873
+#: cfghooks.c:185 cfgrtl.c:1801
#, gcc-internal-format
msgid "wrong amount of branch edges after unconditional jump %i"
msgstr ""
-#: cfghooks.c:173 cfghooks.c:184
+#: cfghooks.c:193 cfghooks.c:204
#, gcc-internal-format
msgid "basic block %d pred edge is corrupted"
msgstr ""
-#: cfghooks.c:185
+#: cfghooks.c:205
#, gcc-internal-format
msgid "its dest_idx should be %d, not %d"
msgstr ""
-#: cfghooks.c:214
+#: cfghooks.c:234
#, gcc-internal-format
msgid "basic block %i edge lists are corrupted"
msgstr ""
-#: cfghooks.c:227
+#: cfghooks.c:247
#, gcc-internal-format
msgid "verify_flow_info failed"
msgstr ""
-#: cfghooks.c:288
+#: cfghooks.c:308
#, gcc-internal-format
msgid "%s does not support redirect_edge_and_branch"
msgstr ""
-#: cfghooks.c:306
+#: cfghooks.c:328
+#, gcc-internal-format
+msgid "%s does not support can_remove_branch_p"
+msgstr ""
+
+#: cfghooks.c:374
#, gcc-internal-format
msgid "%s does not support redirect_edge_and_branch_force"
msgstr ""
-#: cfghooks.c:324
+#: cfghooks.c:410
#, gcc-internal-format
msgid "%s does not support split_block"
msgstr ""
-#: cfghooks.c:360
+#: cfghooks.c:449
#, gcc-internal-format
msgid "%s does not support move_block_after"
msgstr ""
-#: cfghooks.c:373
+#: cfghooks.c:462
#, gcc-internal-format
msgid "%s does not support delete_basic_block"
msgstr ""
-#: cfghooks.c:405
+#: cfghooks.c:512
#, gcc-internal-format
msgid "%s does not support split_edge"
msgstr ""
-#: cfghooks.c:466
+#: cfghooks.c:585
#, gcc-internal-format
msgid "%s does not support create_basic_block"
msgstr ""
-#: cfghooks.c:494
+#: cfghooks.c:613
#, gcc-internal-format
msgid "%s does not support can_merge_blocks_p"
msgstr ""
-#: cfghooks.c:505
+#: cfghooks.c:624
#, gcc-internal-format
msgid "%s does not support predict_edge"
msgstr ""
-#: cfghooks.c:514
+#: cfghooks.c:633
#, gcc-internal-format
msgid "%s does not support predicted_by_p"
msgstr ""
-#: cfghooks.c:528
+#: cfghooks.c:647
#, gcc-internal-format
msgid "%s does not support merge_blocks"
msgstr ""
-#: cfghooks.c:573
+#: cfghooks.c:704
#, gcc-internal-format
msgid "%s does not support make_forwarder_block"
msgstr ""
-#: cfghooks.c:678
+#: cfghooks.c:840
#, gcc-internal-format
msgid "%s does not support can_duplicate_block_p"
msgstr ""
-#: cfghooks.c:706
+#: cfghooks.c:868
#, gcc-internal-format
msgid "%s does not support duplicate_block"
msgstr ""
-#: cfghooks.c:774
+#: cfghooks.c:940
#, gcc-internal-format
msgid "%s does not support block_ends_with_call_p"
msgstr ""
-#: cfghooks.c:785
+#: cfghooks.c:951
#, gcc-internal-format
msgid "%s does not support block_ends_with_condjump_p"
msgstr ""
-#: cfghooks.c:803
+#: cfghooks.c:969
#, gcc-internal-format
msgid "%s does not support flow_call_edges_add"
msgstr ""
-#: cfgloop.c:1079
+#: cfgloop.c:1307
#, gcc-internal-format
msgid "size of loop %d should be %d, not %d"
msgstr ""
-#: cfgloop.c:1096
+#: cfgloop.c:1321
#, gcc-internal-format
msgid "bb %d do not belong to loop %d"
msgstr ""
-#: cfgloop.c:1113
+#: cfgloop.c:1336
#, gcc-internal-format
msgid "loop %d's header does not have exactly 2 entries"
msgstr ""
-#: cfgloop.c:1120
+#: cfgloop.c:1343
#, gcc-internal-format
msgid "loop %d's latch does not have exactly 1 successor"
msgstr ""
-#: cfgloop.c:1125
+#: cfgloop.c:1348
#, gcc-internal-format
msgid "loop %d's latch does not have header as successor"
msgstr ""
-#: cfgloop.c:1130
+#: cfgloop.c:1353
#, gcc-internal-format
msgid "loop %d's latch does not belong directly to it"
msgstr ""
-#: cfgloop.c:1136
+#: cfgloop.c:1359
#, gcc-internal-format
msgid "loop %d's header does not belong directly to it"
msgstr ""
-#: cfgloop.c:1142
+#: cfgloop.c:1365
#, gcc-internal-format
msgid "loop %d's latch is marked as part of irreducible region"
msgstr ""
-#: cfgloop.c:1175
+#: cfgloop.c:1398
#, gcc-internal-format
msgid "basic block %d should be marked irreducible"
msgstr ""
-#: cfgloop.c:1181
+#: cfgloop.c:1404
#, gcc-internal-format
msgid "basic block %d should not be marked irreducible"
msgstr ""
-#: cfgloop.c:1189
+#: cfgloop.c:1412
#, gcc-internal-format
msgid "edge from %d to %d should be marked irreducible"
msgstr ""
-#: cfgloop.c:1196
+#: cfgloop.c:1419
#, gcc-internal-format
msgid "edge from %d to %d should not be marked irreducible"
msgstr ""
-#: cfgloop.c:1231
+#: cfgloop.c:1434
#, gcc-internal-format
-msgid "wrong single exit %d->%d recorded for loop %d"
+msgid "corrupted head of the exits list of loop %d"
msgstr ""
-#: cfgloop.c:1235
+#: cfgloop.c:1452
#, gcc-internal-format
-msgid "right exit is %d->%d"
+msgid "corrupted exits list of loop %d"
msgstr ""
-#: cfgloop.c:1252
+#: cfgloop.c:1461
#, gcc-internal-format
-msgid "single exit not recorded for loop %d"
+msgid "nonempty exits list of loop %d, but exits are not recorded"
msgstr ""
-#: cfgloop.c:1259
+#: cfgloop.c:1487
#, gcc-internal-format
-msgid "loop %d should not have single exit (%d -> %d)"
+msgid "Exit %d->%d not recorded"
msgstr ""
-#: cfgrtl.c:1759
+#: cfgloop.c:1505
#, gcc-internal-format
-msgid "BB_RTL flag not set for block %d"
+msgid "Wrong list of exited loops for edge %d->%d"
msgstr ""
-#: cfgrtl.c:1765
+#: cfgloop.c:1514
#, gcc-internal-format
-msgid "end insn %d for block %d not found in the insn stream"
+msgid "Too many loop exits recorded"
msgstr ""
-#: cfgrtl.c:1779
+#: cfgloop.c:1525
#, gcc-internal-format
-msgid "insn %d is in multiple basic blocks (%d and %d)"
+msgid "%d exits recorded for loop %d (having %d exits)"
msgstr ""
-#: cfgrtl.c:1791
+#: cfgrtl.c:1706
#, gcc-internal-format
-msgid "head insn %d for block %d not found in the insn stream"
+msgid "BB_RTL flag not set for block %d"
msgstr ""
-#: cfgrtl.c:1815
+#: cfgrtl.c:1713
+#, gcc-internal-format
+msgid "insn %d basic block pointer is %d, should be %d"
+msgstr ""
+
+#: cfgrtl.c:1722
+#, gcc-internal-format
+msgid "bb prediction set for block %d, but it is not used in RTL land"
+msgstr ""
+
+#: cfgrtl.c:1743
#, gcc-internal-format
msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
msgstr ""
-#: cfgrtl.c:1830
+#: cfgrtl.c:1758
#, gcc-internal-format
msgid "fallthru edge crosses section boundary (bb %i)"
msgstr ""
-#: cfgrtl.c:1855
+#: cfgrtl.c:1783
#, gcc-internal-format
msgid "missing REG_EH_REGION note in the end of bb %i"
msgstr ""
-#: cfgrtl.c:1863
+#: cfgrtl.c:1791
#, gcc-internal-format
msgid "too many outgoing branch edges from bb %i"
msgstr ""
-#: cfgrtl.c:1868
+#: cfgrtl.c:1796
#, gcc-internal-format
msgid "fallthru edge after unconditional jump %i"
msgstr ""
-#: cfgrtl.c:1879
+#: cfgrtl.c:1807
#, gcc-internal-format
msgid "wrong amount of branch edges after conditional jump %i"
msgstr ""
-#: cfgrtl.c:1885
+#: cfgrtl.c:1813
#, gcc-internal-format
msgid "call edges for non-call insn in bb %i"
msgstr ""
-#: cfgrtl.c:1894
+#: cfgrtl.c:1822
#, gcc-internal-format
msgid "abnormal edges for no purpose in bb %i"
msgstr ""
-#: cfgrtl.c:1906
+#: cfgrtl.c:1834
#, gcc-internal-format
msgid "insn %d inside basic block %d but block_for_insn is NULL"
msgstr ""
-#: cfgrtl.c:1910
+#: cfgrtl.c:1838
#, gcc-internal-format
msgid "insn %d inside basic block %d but block_for_insn is %i"
msgstr ""
-#: cfgrtl.c:1924 cfgrtl.c:1934
+#: cfgrtl.c:1852 cfgrtl.c:1862
#, gcc-internal-format
msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
msgstr ""
-#: cfgrtl.c:1947
+#: cfgrtl.c:1875
#, gcc-internal-format
msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
msgstr ""
-#: cfgrtl.c:1957
+#: cfgrtl.c:1885
#, gcc-internal-format
msgid "in basic block %d:"
msgstr ""
-#: cfgrtl.c:1994
+#: cfgrtl.c:1935
#, gcc-internal-format
-msgid "bb prediction set for block %i, but it is not used in RTL land"
+msgid "end insn %d for block %d not found in the insn stream"
+msgstr ""
+
+#: cfgrtl.c:1948
+#, gcc-internal-format
+msgid "insn %d is in multiple basic blocks (%d and %d)"
msgstr ""
-#: cfgrtl.c:2012
+#: cfgrtl.c:1960
+#, gcc-internal-format
+msgid "head insn %d for block %d not found in the insn stream"
+msgstr ""
+
+#: cfgrtl.c:1981
#, gcc-internal-format
msgid "missing barrier after block %i"
msgstr ""
-#: cfgrtl.c:2025
+#: cfgrtl.c:1994
#, gcc-internal-format
msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:2034
+#: cfgrtl.c:2003
#, gcc-internal-format
msgid "verify_flow_info: Incorrect fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:2053
+#: cfgrtl.c:2024
#, gcc-internal-format
msgid "basic blocks not laid down consecutively"
msgstr ""
-#: cfgrtl.c:2092
+#: cfgrtl.c:2063
#, gcc-internal-format
msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
msgstr ""
-#: cgraph.c:892
+#: cgraph.c:772
#, gcc-internal-format
msgid "%D renamed after being referenced in assembly"
msgstr ""
-#: cgraphunit.c:707
+#: cgraphunit.c:513
#, gcc-internal-format
msgid "aux field set for edge %s->%s"
msgstr ""
-#: cgraphunit.c:713
+#: cgraphunit.c:519
#, gcc-internal-format
msgid "Execution count is negative"
msgstr ""
-#: cgraphunit.c:720
+#: cgraphunit.c:526
#, gcc-internal-format
msgid "caller edge count is negative"
msgstr ""
-#: cgraphunit.c:729
+#: cgraphunit.c:531
+#, gcc-internal-format
+msgid "caller edge frequency is negative"
+msgstr ""
+
+#: cgraphunit.c:536
+#, gcc-internal-format
+msgid "caller edge frequency is too large"
+msgstr ""
+
+#: cgraphunit.c:545
#, gcc-internal-format
msgid "inlined_to pointer is wrong"
msgstr ""
-#: cgraphunit.c:734
+#: cgraphunit.c:550
#, gcc-internal-format
msgid "multiple inline callers"
msgstr ""
-#: cgraphunit.c:741
+#: cgraphunit.c:557
#, gcc-internal-format
msgid "inlined_to pointer set for noninline callers"
msgstr ""
-#: cgraphunit.c:747
+#: cgraphunit.c:563
#, gcc-internal-format
msgid "inlined_to pointer is set but no predecessors found"
msgstr ""
-#: cgraphunit.c:752
+#: cgraphunit.c:568
#, gcc-internal-format
msgid "inlined_to pointer refers to itself"
msgstr ""
-#: cgraphunit.c:762
+#: cgraphunit.c:578
#, gcc-internal-format
msgid "node not found in cgraph_hash"
msgstr ""
-#: cgraphunit.c:790
+#: cgraphunit.c:606
#, gcc-internal-format
msgid "shared call_stmt:"
msgstr ""
-#: cgraphunit.c:797
+#: cgraphunit.c:613
#, gcc-internal-format
msgid "edge points to wrong declaration:"
msgstr ""
-#: cgraphunit.c:806
+#: cgraphunit.c:622
#, gcc-internal-format
msgid "missing callgraph edge for call stmt:"
msgstr ""
-#: cgraphunit.c:823
+#: cgraphunit.c:638
#, gcc-internal-format
msgid "edge %s->%s has no corresponding call_stmt"
msgstr ""
-#: cgraphunit.c:835
+#: cgraphunit.c:650
#, gcc-internal-format
msgid "verify_cgraph_node failed"
msgstr ""
-#: cgraphunit.c:1014 cgraphunit.c:1037
+#: cgraphunit.c:765 cgraphunit.c:788
#, gcc-internal-format
msgid "%J%<externally_visible%> attribute have effect only on public objects"
msgstr ""
-#: cgraphunit.c:1214
+#: cgraphunit.c:978
#, gcc-internal-format
msgid "failed to reclaim unneeded function"
msgstr ""
-#: cgraphunit.c:1616
+#: cgraphunit.c:1320
#, gcc-internal-format
msgid "nodes with no released memory found"
msgstr ""
@@ -20303,47 +20696,47 @@ msgstr ""
msgid "cannot find 'ldd'"
msgstr ""
-#: convert.c:73
+#: convert.c:69
#, gcc-internal-format
msgid "cannot convert to a pointer type"
msgstr ""
-#: convert.c:337
+#: convert.c:330
#, gcc-internal-format
msgid "pointer value used where a floating point value was expected"
msgstr ""
-#: convert.c:341
+#: convert.c:334
#, gcc-internal-format
msgid "aggregate value used where a float was expected"
msgstr ""
-#: convert.c:366
+#: convert.c:359
#, gcc-internal-format
msgid "conversion to incomplete type"
msgstr ""
-#: convert.c:737 convert.c:812
+#: convert.c:725 convert.c:800
#, gcc-internal-format
msgid "can't convert between vector values of different size"
msgstr ""
-#: convert.c:743
+#: convert.c:731
#, gcc-internal-format
msgid "aggregate value used where an integer was expected"
msgstr ""
-#: convert.c:792
+#: convert.c:780
#, gcc-internal-format
msgid "pointer value used where a complex was expected"
msgstr ""
-#: convert.c:796
+#: convert.c:784
#, gcc-internal-format
msgid "aggregate value used where a complex was expected"
msgstr ""
-#: convert.c:818
+#: convert.c:806
#, gcc-internal-format
msgid "can't convert value to a vector"
msgstr ""
@@ -20363,12 +20756,12 @@ msgstr ""
msgid "coverage mismatch for function %u while reading execution counters"
msgstr ""
-#: coverage.c:276 coverage.c:359
+#: coverage.c:276 coverage.c:371
#, gcc-internal-format
msgid "checksum is %x instead of %x"
msgstr ""
-#: coverage.c:284 coverage.c:367
+#: coverage.c:284 coverage.c:373
#, gcc-internal-format
msgid "number of counters is %d instead of %d"
msgstr ""
@@ -20388,22 +20781,37 @@ msgstr ""
msgid "no coverage for function %qs found"
msgstr ""
-#: coverage.c:356 coverage.c:364
+#: coverage.c:362 coverage.c:365
#, gcc-internal-format
msgid "coverage mismatch for function %qs while reading counter %qs"
msgstr ""
-#: coverage.c:523
+#: coverage.c:381
+#, gcc-internal-format
+msgid "coverage mismatch ignored due to -Wcoverage-mismatch"
+msgstr ""
+
+#: coverage.c:383
+#, gcc-internal-format
+msgid "execution counts estimated"
+msgstr ""
+
+#: coverage.c:386
+#, gcc-internal-format
+msgid "this can result in poorly optimized code"
+msgstr ""
+
+#: coverage.c:544
#, gcc-internal-format
msgid "cannot open %s"
msgstr ""
-#: coverage.c:558
+#: coverage.c:579
#, gcc-internal-format
msgid "error writing %qs"
msgstr ""
-#: diagnostic.c:642
+#: diagnostic.c:656
#, gcc-internal-format
msgid "in %s, at %s:%d"
msgstr ""
@@ -20423,32 +20831,32 @@ msgstr ""
msgid "ENTRY does not dominate bb %d"
msgstr ""
-#: dwarf2out.c:3598
+#: dwarf2out.c:3621
#, gcc-internal-format
msgid "DW_LOC_OP %s not implemented"
msgstr ""
-#: emit-rtl.c:2235
+#: emit-rtl.c:2260
#, gcc-internal-format
msgid "invalid rtl sharing found in the insn"
msgstr ""
-#: emit-rtl.c:2237
+#: emit-rtl.c:2262
#, gcc-internal-format
msgid "shared rtx"
msgstr ""
-#: emit-rtl.c:2239 flow.c:493 flow.c:518 flow.c:540
+#: emit-rtl.c:2264 flow.c:493 flow.c:518 flow.c:540
#, gcc-internal-format
msgid "internal consistency failure"
msgstr ""
-#: emit-rtl.c:3299
+#: emit-rtl.c:3349
#, gcc-internal-format
msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
msgstr ""
-#: errors.c:133 java/jv-scan.c:289
+#: errors.c:133
#, gcc-internal-format
msgid "abort in %s, at %s:%d"
msgstr ""
@@ -20458,77 +20866,105 @@ msgstr ""
msgid "exception handling disabled, use -fexceptions to enable"
msgstr ""
-#: except.c:2876
+#: except.c:2877
#, gcc-internal-format
msgid "argument of %<__builtin_eh_return_regno%> must be constant"
msgstr ""
-#: except.c:3007
+#: except.c:3008
#, gcc-internal-format
msgid "__builtin_eh_return not supported on this target"
msgstr ""
-#: except.c:3868 except.c:3877
+#: except.c:3889 except.c:3898
#, gcc-internal-format
msgid "region_array is corrupted for region %i"
msgstr ""
-#: except.c:3882
+#: except.c:3903
#, gcc-internal-format
msgid "outer block of region %i is wrong"
msgstr ""
-#: except.c:3887
+#: except.c:3908
#, gcc-internal-format
msgid "region %i may contain throw and is contained in region that may not"
msgstr ""
-#: except.c:3893
+#: except.c:3914
#, gcc-internal-format
msgid "negative nesting depth of region %i"
msgstr ""
-#: except.c:3913
+#: except.c:3934
#, gcc-internal-format
msgid "tree list ends on depth %i"
msgstr ""
-#: except.c:3918
+#: except.c:3939
#, gcc-internal-format
msgid "array does not match the region tree"
msgstr ""
-#: except.c:3924
+#: except.c:3945
#, gcc-internal-format
msgid "verify_eh_tree failed"
msgstr ""
-#: explow.c:1272
+#: explow.c:1279
#, gcc-internal-format
msgid "stack limits not supported on this target"
msgstr ""
-#: fold-const.c:3443 fold-const.c:3454
+#: fold-const.c:981 tree-ssa-loop-niter.c:1130
+#, gcc-internal-format
+msgid "%H%s"
+msgstr ""
+
+#: fold-const.c:1347
+#, gcc-internal-format
+msgid "assuming signed overflow does not occur when negating a division"
+msgstr ""
+
+#: fold-const.c:3673 fold-const.c:3684
#, gcc-internal-format
msgid "comparison is always %d due to width of bit-field"
msgstr ""
-#: fold-const.c:5087 fold-const.c:5102
+#: fold-const.c:4955
+#, gcc-internal-format
+msgid "assuming signed overflow does not occur when simplifying range test"
+msgstr ""
+
+#: fold-const.c:5329 fold-const.c:5344
#, gcc-internal-format
msgid "comparison is always %d"
msgstr ""
-#: fold-const.c:5231
+#: fold-const.c:5473
#, gcc-internal-format
msgid "%<or%> of unmatched not-equal tests is always 1"
msgstr ""
-#: fold-const.c:5236
+#: fold-const.c:5478
#, gcc-internal-format
msgid "%<and%> of mutually exclusive equal-tests is always 0"
msgstr ""
-#: fold-const.c:11471
+#: fold-const.c:8190
+#, gcc-internal-format
+msgid ""
+"assuming signed overflow does not occur when reducing constant in comparison"
+msgstr ""
+
+#: fold-const.c:8473
+#, gcc-internal-format
+msgid ""
+"assuming signed overflow does not occur when combining constants around a "
+"comparison"
+msgstr ""
+
+#: fold-const.c:12587
#, gcc-internal-format
msgid "fold check: original tree changed by fold"
msgstr ""
@@ -20538,7 +20974,7 @@ msgstr ""
msgid "%Jtotal size of local objects too large"
msgstr ""
-#: function.c:843 varasm.c:1800
+#: function.c:836 varasm.c:2100
#, gcc-internal-format
msgid "size of variable %q+D is too large"
msgstr ""
@@ -20548,52 +20984,52 @@ msgstr ""
msgid "impossible constraint in %<asm%>"
msgstr ""
-#: function.c:3532
+#: function.c:3491
#, gcc-internal-format
msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:3553
+#: function.c:3512
#, gcc-internal-format
msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>"
msgstr ""
-#: function.c:3894
+#: function.c:3861
#, gcc-internal-format
msgid "function returns an aggregate"
msgstr ""
-#: function.c:4287
+#: function.c:4254
#, gcc-internal-format
msgid "unused parameter %q+D"
msgstr ""
-#: gcc.c:1257
+#: gcc.c:1266
#, gcc-internal-format
msgid "ambiguous abbreviation %s"
msgstr ""
-#: gcc.c:1284
+#: gcc.c:1293
#, gcc-internal-format
msgid "incomplete '%s' option"
msgstr ""
-#: gcc.c:1295
+#: gcc.c:1304
#, gcc-internal-format
msgid "missing argument to '%s' option"
msgstr ""
-#: gcc.c:1308
+#: gcc.c:1317
#, gcc-internal-format
msgid "extraneous argument to '%s' option"
msgstr ""
-#: gcc.c:3932
+#: gcc.c:3955
#, gcc-internal-format
msgid "warning: -pipe ignored because -save-temps specified"
msgstr ""
-#: gcc.c:4233
+#: gcc.c:4242
#, gcc-internal-format
msgid "warning: '-x %s' after last input file has no effect"
msgstr ""
@@ -20601,32 +21037,32 @@ msgstr ""
#. Catch the case where a spec string contains something like
#. '%{foo:%*}'. i.e. there is no * in the pattern on the left
#. hand side of the :.
-#: gcc.c:5263
+#: gcc.c:5260
#, gcc-internal-format
msgid "spec failure: '%%*' has not been initialized by pattern match"
msgstr ""
-#: gcc.c:5272
+#: gcc.c:5269
#, gcc-internal-format
msgid "warning: use of obsolete %%[ operator in specs"
msgstr ""
-#: gcc.c:5353
+#: gcc.c:5350
#, gcc-internal-format
msgid "spec failure: unrecognized spec option '%c'"
msgstr ""
-#: gcc.c:6251
+#: gcc.c:6248
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:6274
+#: gcc.c:6271
#, gcc-internal-format
msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
msgstr ""
-#: gcc.c:6363
+#: gcc.c:6358
#, gcc-internal-format
msgid "unrecognized option '-%s'"
msgstr ""
@@ -20651,18 +21087,18 @@ msgstr ""
msgid "%s: %s"
msgstr ""
-#: gcse.c:6592
+#: gcse.c:6599
#, gcc-internal-format
msgid "%s: %d basic blocks and %d edges/basic block"
msgstr ""
-#: gcse.c:6605
+#: gcse.c:6612
#, gcc-internal-format
msgid "%s: %d basic blocks and %d registers"
msgstr ""
#: ggc-common.c:404 ggc-common.c:412 ggc-common.c:480 ggc-common.c:499
-#: ggc-page.c:2136 ggc-page.c:2167 ggc-page.c:2174 ggc-zone.c:2291
+#: ggc-page.c:2138 ggc-page.c:2169 ggc-page.c:2176 ggc-zone.c:2291
#: ggc-zone.c:2306
#, gcc-internal-format
msgid "can't write PCH file: %m"
@@ -20679,7 +21115,7 @@ msgid "can't write padding to PCH file: %m"
msgstr ""
#: ggc-common.c:557 ggc-common.c:565 ggc-common.c:572 ggc-common.c:575
-#: ggc-common.c:585 ggc-common.c:588 ggc-page.c:2261 ggc-zone.c:2325
+#: ggc-common.c:585 ggc-common.c:588 ggc-page.c:2263 ggc-zone.c:2325
#, gcc-internal-format
msgid "can't read PCH file: %m"
msgstr ""
@@ -20694,7 +21130,7 @@ msgstr ""
msgid "open /dev/zero: %m"
msgstr ""
-#: ggc-page.c:2152 ggc-page.c:2158
+#: ggc-page.c:2154 ggc-page.c:2160
#, gcc-internal-format
msgid "can't write PCH file"
msgstr ""
@@ -20709,53 +21145,57 @@ msgstr ""
msgid "can't write PCH fle: %m"
msgstr ""
-#: gimplify.c:3932
+#: gimplify.c:4001
#, gcc-internal-format
msgid "invalid lvalue in asm output %d"
msgstr ""
-#: gimplify.c:4044
+#: gimplify.c:4113
#, gcc-internal-format
msgid "memory input %d is not directly addressable"
msgstr ""
-#: gimplify.c:4510
+#: gimplify.c:4584
#, gcc-internal-format
msgid "%qs not specified in enclosing parallel"
msgstr ""
-#: gimplify.c:4512
+#: gimplify.c:4586
#, gcc-internal-format
msgid "%Henclosing parallel"
msgstr ""
-#: gimplify.c:4566
+#: gimplify.c:4640
#, gcc-internal-format
msgid "iteration variable %qs should be private"
msgstr ""
-#: gimplify.c:4580
+#: gimplify.c:4654
#, gcc-internal-format
msgid "iteration variable %qs should not be firstprivate"
msgstr ""
-#: gimplify.c:4583
+#: gimplify.c:4657
#, gcc-internal-format
msgid "iteration variable %qs should not be reduction"
msgstr ""
-#: gimplify.c:5966
+#: gimplify.c:4781
+#, gcc-internal-format
+msgid "%s variable %qs is private in outer context"
+msgstr ""
+
+#: gimplify.c:6082
#, gcc-internal-format
msgid "gimplification failed"
msgstr ""
-#: global.c:375 global.c:388 global.c:402
+#: global.c:379 global.c:392 global.c:406
#, gcc-internal-format
msgid "%s cannot be used in asm here"
msgstr ""
-#: graph.c:403 java/jcf-parse.c:1083 java/jcf-parse.c:1218 java/lex.c:1855
-#: objc/objc-act.c:500
+#: graph.c:403 java/jcf-parse.c:1753 java/jcf-parse.c:1893 objc/objc-act.c:500
#, gcc-internal-format
msgid "can't open %s: %m"
msgstr ""
@@ -20765,152 +21205,152 @@ msgstr ""
msgid "fix_sched_param: unknown param: %s"
msgstr ""
-#: omp-low.c:1265
+#: omp-low.c:1266
#, gcc-internal-format
msgid ""
"work-sharing region may not be closely nested inside of work-sharing, "
"critical, ordered or master region"
msgstr ""
-#: omp-low.c:1281
+#: omp-low.c:1282
#, gcc-internal-format
msgid "master region may not be closely nested inside of work-sharing region"
msgstr ""
-#: omp-low.c:1295
+#: omp-low.c:1296
#, gcc-internal-format
msgid "ordered region may not be closely nested inside of critical region"
msgstr ""
-#: omp-low.c:1301
+#: omp-low.c:1302
#, gcc-internal-format
msgid ""
"ordered region must be closely nested inside a loop region with an ordered "
"clause"
msgstr ""
-#: omp-low.c:1315
+#: omp-low.c:1316
#, gcc-internal-format
msgid ""
"critical region may not be nested inside a critical region with the same name"
msgstr ""
-#: omp-low.c:4332 cp/decl.c:2515 cp/parser.c:6877 cp/parser.c:6897
+#: omp-low.c:4418 cp/decl.c:2521 cp/parser.c:7000 cp/parser.c:7020
#, gcc-internal-format
msgid "invalid exit from OpenMP structured block"
msgstr ""
-#: omp-low.c:4334
+#: omp-low.c:4420
#, gcc-internal-format
msgid "invalid entry to OpenMP structured block"
msgstr ""
#. Eventually this should become a hard error IMO.
-#: opts.c:181
+#: opts.c:177
#, gcc-internal-format
msgid "command line option \"%s\" is valid for %s but not for %s"
msgstr ""
-#: opts.c:235
+#: opts.c:231
#, gcc-internal-format
msgid "command line option %qs is not supported by this configuration"
msgstr ""
-#: opts.c:279
+#: opts.c:284
#, gcc-internal-format
msgid "missing argument to \"%s\""
msgstr ""
-#: opts.c:289
+#: opts.c:294
#, gcc-internal-format
msgid "argument to \"%s\" should be a non-negative integer"
msgstr ""
-#: opts.c:377
+#: opts.c:382
#, gcc-internal-format
msgid "unrecognized command line option \"%s\""
msgstr ""
-#: opts.c:588
+#: opts.c:594
#, gcc-internal-format
msgid "-Wuninitialized is not supported without -O"
msgstr ""
-#: opts.c:603
+#: opts.c:609
#, gcc-internal-format
msgid "-freorder-blocks-and-partition does not work with exceptions"
msgstr ""
-#: opts.c:614
+#: opts.c:620
#, gcc-internal-format
msgid "-freorder-blocks-and-partition does not support unwind info"
msgstr ""
-#: opts.c:628
+#: opts.c:634
#, gcc-internal-format
msgid "-freorder-blocks-and-partition does not work on this architecture"
msgstr ""
-#: opts.c:691
+#: opts.c:909
#, gcc-internal-format
-msgid "-Werror-%s: No option -%s"
+msgid "unrecognized include_flags 0x%x passed to print_specific_help"
msgstr ""
-#: opts.c:820
+#: opts.c:1199
#, gcc-internal-format
msgid "structure alignment must be a small power of two, not %d"
msgstr ""
-#: opts.c:875
+#: opts.c:1254
#, gcc-internal-format
msgid "unrecognized visibility value \"%s\""
msgstr ""
-#: opts.c:923
+#: opts.c:1302
#, gcc-internal-format
msgid "unrecognized register name \"%s\""
msgstr ""
-#: opts.c:947
+#: opts.c:1326
#, gcc-internal-format
msgid "unknown tls-model \"%s\""
msgstr ""
-#: opts.c:997
-#, gcc-internal-format
-msgid "-f[no-]force-mem is nop and option will be removed in 4.2"
-msgstr ""
-
-#: opts.c:1026
+#: opts.c:1401
#, gcc-internal-format
msgid "%s: --param arguments should be of the form NAME=VALUE"
msgstr ""
-#: opts.c:1031
+#: opts.c:1406
#, gcc-internal-format
msgid "invalid --param value %qs"
msgstr ""
-#: opts.c:1128
+#: opts.c:1504
#, gcc-internal-format
msgid "target system does not support debug output"
msgstr ""
-#: opts.c:1135
+#: opts.c:1511
#, gcc-internal-format
msgid "debug format \"%s\" conflicts with prior selection"
msgstr ""
-#: opts.c:1151
+#: opts.c:1527
#, gcc-internal-format
msgid "unrecognised debug output level \"%s\""
msgstr ""
-#: opts.c:1153
+#: opts.c:1529
#, gcc-internal-format
msgid "debug output level %s is too high"
msgstr ""
+#: opts.c:1611
+#, gcc-internal-format
+msgid "-Werror=%s: No option -%s"
+msgstr ""
+
#: params.c:71
#, gcc-internal-format
msgid "minimum value of parameter %qs is %u"
@@ -20922,60 +21362,60 @@ msgid "maximum value of parameter %qs is %u"
msgstr ""
#. If we didn't find this parameter, issue an error message.
-#: params.c:85
+#: params.c:88
#, gcc-internal-format
msgid "invalid parameter %qs"
msgstr ""
-#: profile.c:280
+#: profile.c:304
#, gcc-internal-format
msgid "corrupted profile info: run_max * runs < sum_max"
msgstr ""
-#: profile.c:286
+#: profile.c:310
#, gcc-internal-format
msgid "corrupted profile info: sum_all is smaller than sum_max"
msgstr ""
-#: profile.c:331
+#: profile.c:355
#, gcc-internal-format
msgid "corrupted profile info: edge from %i to %i exceeds maximal count"
msgstr ""
-#: profile.c:495
+#: profile.c:519
#, gcc-internal-format
msgid ""
"corrupted profile info: number of iterations for basic block %d thought to "
"be %i"
msgstr ""
-#: profile.c:516
+#: profile.c:540
#, gcc-internal-format
msgid ""
"corrupted profile info: number of executions for edge %d-%d thought to be %i"
msgstr ""
-#: reg-stack.c:535
+#: reg-stack.c:534
#, gcc-internal-format
msgid "output constraint %d must specify a single register"
msgstr ""
-#: reg-stack.c:545
+#: reg-stack.c:544
#, gcc-internal-format
msgid "output constraint %d cannot be specified together with \"%s\" clobber"
msgstr ""
-#: reg-stack.c:568
+#: reg-stack.c:567
#, gcc-internal-format
msgid "output regs must be grouped at top of stack"
msgstr ""
-#: reg-stack.c:605
+#: reg-stack.c:604
#, gcc-internal-format
msgid "implicitly popped regs must be grouped at top of stack"
msgstr ""
-#: reg-stack.c:624
+#: reg-stack.c:623
#, gcc-internal-format
msgid "output operand %d must use %<&%> constraint"
msgstr ""
@@ -20985,8 +21425,9 @@ msgstr ""
msgid "can't use '%s' as a %s register"
msgstr ""
-#: regclass.c:755 config/ia64/ia64.c:5102 config/ia64/ia64.c:5109
-#: config/pa/pa.c:351 config/pa/pa.c:358
+#: regclass.c:755 config/ia64/ia64.c:5091 config/ia64/ia64.c:5098
+#: config/pa/pa.c:351 config/pa/pa.c:358 config/spu/spu.c:3765
+#: config/spu/spu.c:3772
#, gcc-internal-format
msgid "unknown register name: %s"
msgstr ""
@@ -21046,42 +21487,42 @@ msgstr ""
msgid "inconsistent operand constraints in an %<asm%>"
msgstr ""
-#: reload1.c:1178
+#: reload1.c:1184
#, gcc-internal-format
msgid "%<asm%> operand has impossible constraints"
msgstr ""
-#: reload1.c:1259
+#: reload1.c:1265
#, gcc-internal-format
msgid "frame size too large for reliable stack checking"
msgstr ""
-#: reload1.c:1262
+#: reload1.c:1268
#, gcc-internal-format
msgid "try reducing the number of local variables"
msgstr ""
-#: reload1.c:1925
+#: reload1.c:1931
#, gcc-internal-format
msgid "can't find a register in class %qs while reloading %<asm%>"
msgstr ""
-#: reload1.c:1930
+#: reload1.c:1936
#, gcc-internal-format
msgid "unable to find a register to spill in class %qs"
msgstr ""
-#: reload1.c:4028
+#: reload1.c:4065
#, gcc-internal-format
msgid "%<asm%> operand requires impossible reload"
msgstr ""
-#: reload1.c:5191
+#: reload1.c:5274
#, gcc-internal-format
msgid "%<asm%> operand constraint incompatible with operand size"
msgstr ""
-#: reload1.c:6843
+#: reload1.c:6929
#, gcc-internal-format
msgid "output operand is constant in %<asm%>"
msgstr ""
@@ -21201,52 +21642,52 @@ msgstr ""
msgid "output number %d not directly addressable"
msgstr ""
-#: stmt.c:903
+#: stmt.c:907
#, gcc-internal-format
msgid "asm operand %d probably doesn%'t match constraints"
msgstr ""
-#: stmt.c:913
+#: stmt.c:917
#, gcc-internal-format
msgid "use of memory input without lvalue in asm operand %d is deprecated"
msgstr ""
-#: stmt.c:1060
+#: stmt.c:1064
#, gcc-internal-format
msgid "asm clobber conflict with output operand"
msgstr ""
-#: stmt.c:1065
+#: stmt.c:1069
#, gcc-internal-format
msgid "asm clobber conflict with input operand"
msgstr ""
-#: stmt.c:1142
+#: stmt.c:1146
#, gcc-internal-format
msgid "too many alternatives in %<asm%>"
msgstr ""
-#: stmt.c:1154
+#: stmt.c:1158
#, gcc-internal-format
msgid "operand constraints for %<asm%> differ in number of alternatives"
msgstr ""
-#: stmt.c:1207
+#: stmt.c:1211
#, gcc-internal-format
msgid "duplicate asm operand name %qs"
msgstr ""
-#: stmt.c:1305
+#: stmt.c:1309
#, gcc-internal-format
msgid "missing close brace for named operand"
msgstr ""
-#: stmt.c:1333
+#: stmt.c:1337
#, gcc-internal-format
msgid "undefined named operand %qs"
msgstr ""
-#: stmt.c:1476
+#: stmt.c:1485
#, gcc-internal-format
msgid "%Hvalue computed is not used"
msgstr ""
@@ -21271,49 +21712,49 @@ msgstr ""
msgid "size of %q+D is larger than %wd bytes"
msgstr ""
-#: stor-layout.c:891
+#: stor-layout.c:899
#, gcc-internal-format
msgid "packed attribute causes inefficient alignment for %q+D"
msgstr ""
-#: stor-layout.c:894
+#: stor-layout.c:902
#, gcc-internal-format
msgid "packed attribute is unnecessary for %q+D"
msgstr ""
#. No, we need to skip space before this field.
#. Bump the cumulative size to multiple of field alignment.
-#: stor-layout.c:911
+#: stor-layout.c:919
#, gcc-internal-format
msgid "padding struct to align %q+D"
msgstr ""
-#: stor-layout.c:1262
+#: stor-layout.c:1270
#, gcc-internal-format
msgid "padding struct size to alignment boundary"
msgstr ""
-#: stor-layout.c:1292
+#: stor-layout.c:1300
#, gcc-internal-format
msgid "packed attribute causes inefficient alignment for %qs"
msgstr ""
-#: stor-layout.c:1296
+#: stor-layout.c:1304
#, gcc-internal-format
msgid "packed attribute is unnecessary for %qs"
msgstr ""
-#: stor-layout.c:1302
+#: stor-layout.c:1310
#, gcc-internal-format
msgid "packed attribute causes inefficient alignment"
msgstr ""
-#: stor-layout.c:1304
+#: stor-layout.c:1312
#, gcc-internal-format
msgid "packed attribute is unnecessary"
msgstr ""
-#: stor-layout.c:1816
+#: stor-layout.c:1828
#, gcc-internal-format
msgid "alignment of array elements is greater than element size"
msgstr ""
@@ -21328,494 +21769,514 @@ msgstr ""
msgid "repository file '%s' does not contain command-line arguments"
msgstr ""
-#: tlink.c:705
+#: tlink.c:729
#, gcc-internal-format
msgid ""
"'%s' was assigned to '%s', but was not defined during recompilation, or vice "
"versa"
msgstr ""
-#: tlink.c:775
+#: tlink.c:799
#, gcc-internal-format
msgid "ld returned %d exit status"
msgstr ""
-#: toplev.c:523
+#: toplev.c:512
#, gcc-internal-format
msgid "invalid option argument %qs"
msgstr ""
-#: toplev.c:621
+#: toplev.c:610
#, gcc-internal-format
msgid "getting core file size maximum limit: %m"
msgstr ""
-#: toplev.c:624
+#: toplev.c:613
#, gcc-internal-format
msgid "setting core file size limit to maximum: %m"
msgstr ""
-#: toplev.c:842
+#: toplev.c:831
#, gcc-internal-format
msgid "%q+F declared %<static%> but never defined"
msgstr ""
-#: toplev.c:867
+#: toplev.c:856
#, gcc-internal-format
msgid "%q+D defined but not used"
msgstr ""
-#: toplev.c:910 toplev.c:934
+#: toplev.c:899
+#, gcc-internal-format
+msgid "%qD is deprecated (declared at %s:%d)"
+msgstr ""
+
+#: toplev.c:922
#, gcc-internal-format
msgid "%qs is deprecated (declared at %s:%d)"
msgstr ""
-#: toplev.c:938
+#: toplev.c:926
#, gcc-internal-format
msgid "type is deprecated (declared at %s:%d)"
msgstr ""
-#: toplev.c:944
+#: toplev.c:932
#, gcc-internal-format
msgid "%qs is deprecated"
msgstr ""
-#: toplev.c:946
+#: toplev.c:934
#, gcc-internal-format
msgid "type is deprecated"
msgstr ""
-#: toplev.c:966 toplev.c:993
+#: toplev.c:954 toplev.c:981
#, gcc-internal-format
msgid "GCC supports only %d input file changes"
msgstr ""
-#: toplev.c:1140
+#: toplev.c:1133
#, gcc-internal-format
msgid "unrecognized gcc debugging option: %c"
msgstr ""
-#: toplev.c:1293
+#: toplev.c:1355
#, gcc-internal-format
msgid "can%'t open %s for writing: %m"
msgstr ""
-#: toplev.c:1577
+#: toplev.c:1376
+#, gcc-internal-format
+msgid "-frecord-gcc-switches is not supported by the current target"
+msgstr ""
+
+#: toplev.c:1654
#, gcc-internal-format
msgid "this target does not support %qs"
msgstr ""
-#: toplev.c:1648
+#: toplev.c:1725
#, gcc-internal-format
msgid "instruction scheduling not supported on this target machine"
msgstr ""
-#: toplev.c:1652
+#: toplev.c:1729
#, gcc-internal-format
msgid "this target machine does not have delayed branches"
msgstr ""
-#: toplev.c:1666
+#: toplev.c:1743
#, gcc-internal-format
msgid "-f%sleading-underscore not supported on this target machine"
msgstr ""
-#: toplev.c:1739
+#: toplev.c:1816
#, gcc-internal-format
msgid "target system does not support the \"%s\" debug format"
msgstr ""
-#: toplev.c:1751
+#: toplev.c:1828
#, gcc-internal-format
msgid "variable tracking requested, but useless unless producing debug info"
msgstr ""
-#: toplev.c:1754
+#: toplev.c:1831
#, gcc-internal-format
msgid "variable tracking requested, but not supported by this debug format"
msgstr ""
-#: toplev.c:1774
+#: toplev.c:1851
#, gcc-internal-format
msgid "can%'t open %s: %m"
msgstr ""
-#: toplev.c:1781
+#: toplev.c:1858
#, gcc-internal-format
msgid "-ffunction-sections not supported for this target"
msgstr ""
-#: toplev.c:1786
+#: toplev.c:1863
#, gcc-internal-format
msgid "-fdata-sections not supported for this target"
msgstr ""
-#: toplev.c:1793
+#: toplev.c:1870
#, gcc-internal-format
msgid "-ffunction-sections disabled; it makes profiling impossible"
msgstr ""
-#: toplev.c:1800
+#: toplev.c:1877
#, gcc-internal-format
msgid "-fprefetch-loop-arrays not supported for this target"
msgstr ""
-#: toplev.c:1806
+#: toplev.c:1883
#, gcc-internal-format
msgid ""
"-fprefetch-loop-arrays not supported for this target (try -march switches)"
msgstr ""
-#: toplev.c:1815
+#: toplev.c:1892
#, gcc-internal-format
msgid "-fprefetch-loop-arrays is not supported with -Os"
msgstr ""
-#: toplev.c:1822
+#: toplev.c:1899
#, gcc-internal-format
msgid "-ffunction-sections may affect debugging on some targets"
msgstr ""
-#: toplev.c:1838
+#: toplev.c:1915
#, gcc-internal-format
msgid "-fstack-protector not supported for this target"
msgstr ""
-#: toplev.c:1851
+#: toplev.c:1928
#, gcc-internal-format
msgid "unwind tables currently requires a frame pointer for correctness"
msgstr ""
-#: toplev.c:1955
+#: toplev.c:2051
#, gcc-internal-format
msgid "error writing to %s: %m"
msgstr ""
-#: toplev.c:1957 java/jcf-parse.c:1102 java/jcf-write.c:3541
+#: toplev.c:2053 java/jcf-parse.c:1772
#, gcc-internal-format
msgid "error closing %s: %m"
msgstr ""
-#: tree-cfg.c:1442 tree-cfg.c:2081 tree-cfg.c:2084
+#: tree-cfg.c:1374 tree-cfg.c:2007 tree-cfg.c:2010
#, gcc-internal-format
msgid "%Hwill never be executed"
msgstr ""
-#: tree-cfg.c:3228
+#: tree-cfg.c:3160
#, gcc-internal-format
msgid "SSA name in freelist but still referenced"
msgstr ""
-#: tree-cfg.c:3237
+#: tree-cfg.c:3169
#, gcc-internal-format
msgid "ASSERT_EXPR with an always-false condition"
msgstr ""
-#: tree-cfg.c:3247
+#: tree-cfg.c:3182
#, gcc-internal-format
msgid "GIMPLE register modified with BIT_FIELD_REF"
msgstr ""
-#: tree-cfg.c:3282
+#: tree-cfg.c:3217
#, gcc-internal-format
msgid "invariant not recomputed when ADDR_EXPR changed"
msgstr ""
-#: tree-cfg.c:3288
+#: tree-cfg.c:3223
#, gcc-internal-format
msgid "constant not recomputed when ADDR_EXPR changed"
msgstr ""
-#: tree-cfg.c:3293
+#: tree-cfg.c:3228
#, gcc-internal-format
msgid "side effects not recomputed when ADDR_EXPR changed"
msgstr ""
-#: tree-cfg.c:3309
+#: tree-cfg.c:3244
#, gcc-internal-format
msgid "address taken, but ADDRESSABLE bit not set"
msgstr ""
-#: tree-cfg.c:3319
+#: tree-cfg.c:3254
#, gcc-internal-format
msgid "non-boolean used in condition"
msgstr ""
-#: tree-cfg.c:3324
+#: tree-cfg.c:3259
#, gcc-internal-format
msgid "invalid conditional operand"
msgstr ""
-#: tree-cfg.c:3379
+#: tree-cfg.c:3311
#, gcc-internal-format
msgid "invalid reference prefix"
msgstr ""
-#: tree-cfg.c:3455
+#: tree-cfg.c:3392
#, gcc-internal-format
msgid "is not a valid GIMPLE statement"
msgstr ""
-#: tree-cfg.c:3475
+#: tree-cfg.c:3412
#, gcc-internal-format
msgid "statement marked for throw, but doesn%'t"
msgstr ""
-#: tree-cfg.c:3480
+#: tree-cfg.c:3417
#, gcc-internal-format
msgid "statement marked for throw in middle of block"
msgstr ""
-#: tree-cfg.c:3570
+#: tree-cfg.c:3488
+#, gcc-internal-format
+msgid "unexpected non-tuple"
+msgstr ""
+
+#: tree-cfg.c:3517
+#, gcc-internal-format
+msgid "Dead STMT in EH table"
+msgstr ""
+
+#: tree-cfg.c:3551
#, gcc-internal-format
msgid "bb_for_stmt (phi) is set to a wrong basic block"
msgstr ""
-#: tree-cfg.c:3585
+#: tree-cfg.c:3566
#, gcc-internal-format
msgid "PHI def is not a GIMPLE value"
msgstr ""
-#: tree-cfg.c:3601 tree-cfg.c:3624
+#: tree-cfg.c:3582 tree-cfg.c:3608
#, gcc-internal-format
msgid "incorrect sharing of tree nodes"
msgstr ""
-#: tree-cfg.c:3615
+#: tree-cfg.c:3599
#, gcc-internal-format
msgid "bb_for_stmt (stmt) is set to a wrong basic block"
msgstr ""
-#: tree-cfg.c:3633
+#: tree-cfg.c:3622
#, gcc-internal-format
msgid "verify_stmts failed"
msgstr ""
-#: tree-cfg.c:3654
+#: tree-cfg.c:3645
#, gcc-internal-format
msgid "ENTRY_BLOCK has a statement list associated with it"
msgstr ""
-#: tree-cfg.c:3660
+#: tree-cfg.c:3651
#, gcc-internal-format
msgid "EXIT_BLOCK has a statement list associated with it"
msgstr ""
-#: tree-cfg.c:3667
+#: tree-cfg.c:3658
#, gcc-internal-format
msgid "fallthru to exit from bb %d"
msgstr ""
-#: tree-cfg.c:3689
+#: tree-cfg.c:3680
#, gcc-internal-format
msgid "nonlocal label "
msgstr ""
-#: tree-cfg.c:3698 tree-cfg.c:3708 tree-cfg.c:3733
+#: tree-cfg.c:3689 tree-cfg.c:3699 tree-cfg.c:3724
#, gcc-internal-format
msgid "label "
msgstr ""
-#: tree-cfg.c:3723
+#: tree-cfg.c:3714
#, gcc-internal-format
msgid "control flow in the middle of basic block %d"
msgstr ""
-#: tree-cfg.c:3753
+#: tree-cfg.c:3744
#, gcc-internal-format
msgid "fallthru edge after a control statement in bb %d"
msgstr ""
-#: tree-cfg.c:3766
+#: tree-cfg.c:3757
#, gcc-internal-format
msgid "true/false edge after a non-COND_EXPR in bb %d"
msgstr ""
-#: tree-cfg.c:3781
+#: tree-cfg.c:3772
#, gcc-internal-format
msgid "structured COND_EXPR at the end of bb %d"
msgstr ""
-#: tree-cfg.c:3794 tree-cfg.c:3832 tree-cfg.c:3845 tree-cfg.c:3916
+#: tree-cfg.c:3785 tree-cfg.c:3823 tree-cfg.c:3836 tree-cfg.c:3907
#, gcc-internal-format
msgid "wrong outgoing edge flags at end of bb %d"
msgstr ""
-#: tree-cfg.c:3802
+#: tree-cfg.c:3793
#, gcc-internal-format
msgid "%<then%> label does not match edge at end of bb %d"
msgstr ""
-#: tree-cfg.c:3810
+#: tree-cfg.c:3801
#, gcc-internal-format
msgid "%<else%> label does not match edge at end of bb %d"
msgstr ""
-#: tree-cfg.c:3820
+#: tree-cfg.c:3811
#, gcc-internal-format
msgid "explicit goto at end of bb %d"
msgstr ""
-#: tree-cfg.c:3850
+#: tree-cfg.c:3841
#, gcc-internal-format
msgid "return edge does not point to exit in bb %d"
msgstr ""
-#: tree-cfg.c:3883
+#: tree-cfg.c:3874
#, gcc-internal-format
msgid "found default case not at end of case vector"
msgstr ""
-#: tree-cfg.c:3889
+#: tree-cfg.c:3880
#, gcc-internal-format
msgid "case labels not sorted: "
msgstr ""
-#: tree-cfg.c:3900
+#: tree-cfg.c:3891
#, gcc-internal-format
msgid "no default case found at end of case vector"
msgstr ""
-#: tree-cfg.c:3908
+#: tree-cfg.c:3899
#, gcc-internal-format
msgid "extra outgoing edge %d->%d"
msgstr ""
-#: tree-cfg.c:3930
+#: tree-cfg.c:3921
#, gcc-internal-format
msgid "missing edge %i->%i"
msgstr ""
-#: tree-cfg.c:5744 tree-cfg.c:5748
+#: tree-cfg.c:5749 tree-cfg.c:5753
#, gcc-internal-format
msgid "%H%<noreturn%> function does return"
msgstr ""
-#: tree-cfg.c:5770 tree-cfg.c:5775
+#: tree-cfg.c:5775 tree-cfg.c:5780
#, gcc-internal-format
msgid "%Hcontrol reaches end of non-void function"
msgstr ""
-#: tree-cfg.c:5836
+#: tree-cfg.c:5841
#, gcc-internal-format
msgid "%Jfunction might be possible candidate for attribute %<noreturn%>"
msgstr ""
-#: tree-dump.c:892
+#: tree-dump.c:910
#, gcc-internal-format
msgid "could not open dump file %qs: %s"
msgstr ""
-#: tree-dump.c:1024
+#: tree-dump.c:1045
#, gcc-internal-format
msgid "ignoring unknown option %q.*s in %<-fdump-%s%>"
msgstr ""
-#: tree-eh.c:1770
+#: tree-eh.c:1758
#, gcc-internal-format
msgid "EH edge %i->%i is missing"
msgstr ""
-#: tree-eh.c:1775
+#: tree-eh.c:1763
#, gcc-internal-format
msgid "EH edge %i->%i miss EH flag"
msgstr ""
#. ??? might not be mistake.
-#: tree-eh.c:1781
+#: tree-eh.c:1769
#, gcc-internal-format
msgid "EH edge %i->%i has duplicated regions"
msgstr ""
-#: tree-eh.c:1815
+#: tree-eh.c:1803
#, gcc-internal-format
msgid "BB %i can not throw but has EH edges"
msgstr ""
-#: tree-eh.c:1822
+#: tree-eh.c:1810
#, gcc-internal-format
msgid "BB %i last statement has incorrectly set region"
msgstr ""
-#: tree-eh.c:1833
+#: tree-eh.c:1821
#, gcc-internal-format
msgid "unnecessary EH edge %i->%i"
msgstr ""
-#: tree-inline.c:1332
+#: tree-inline.c:1704
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses alloca (override using "
"the always_inline attribute)"
msgstr ""
-#: tree-inline.c:1344
+#: tree-inline.c:1716
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses setjmp"
msgstr ""
-#: tree-inline.c:1358
+#: tree-inline.c:1730
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses variable argument lists"
msgstr ""
-#: tree-inline.c:1369
+#: tree-inline.c:1741
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses setjmp-longjmp exception "
"handling"
msgstr ""
-#: tree-inline.c:1376
+#: tree-inline.c:1748
#, gcc-internal-format
msgid "function %q+F can never be inlined because it uses non-local goto"
msgstr ""
-#: tree-inline.c:1387
+#: tree-inline.c:1759
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses __builtin_return or "
"__builtin_apply_args"
msgstr ""
-#: tree-inline.c:1406
+#: tree-inline.c:1778
#, gcc-internal-format
msgid "function %q+F can never be inlined because it contains a computed goto"
msgstr ""
-#: tree-inline.c:1420
+#: tree-inline.c:1792
#, gcc-internal-format
msgid "function %q+F can never be inlined because it receives a non-local goto"
msgstr ""
-#: tree-inline.c:1445
+#: tree-inline.c:1817
#, gcc-internal-format
msgid ""
"function %q+F can never be inlined because it uses variable sized variables"
msgstr ""
-#: tree-inline.c:2004 tree-inline.c:2014
+#: tree-inline.c:2443 tree-inline.c:2453
#, gcc-internal-format
msgid "inlining failed in call to %q+F: %s"
msgstr ""
-#: tree-inline.c:2005 tree-inline.c:2016
+#: tree-inline.c:2444 tree-inline.c:2455
#, gcc-internal-format
msgid "called from here"
msgstr ""
-#: tree-mudflap.c:856
+#: tree-mudflap.c:849
#, gcc-internal-format
msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF"
msgstr ""
-#: tree-mudflap.c:1048
+#: tree-mudflap.c:1032
#, gcc-internal-format
msgid "mudflap cannot track %qs in stub function"
msgstr ""
-#: tree-mudflap.c:1279
+#: tree-mudflap.c:1258
#, gcc-internal-format
msgid "mudflap cannot track unknown size extern %qs"
msgstr ""
@@ -21825,53 +22286,47 @@ msgstr ""
msgid "mudflap: this language is not supported"
msgstr ""
-#: tree-optimize.c:489
+#: tree-optimize.c:438
#, gcc-internal-format
msgid "size of return value of %q+D is %u bytes"
msgstr ""
-#: tree-optimize.c:492
+#: tree-optimize.c:441
#, gcc-internal-format
msgid "size of return value of %q+D is larger than %wd bytes"
msgstr ""
-#: tree-outof-ssa.c:612 tree-outof-ssa.c:627 tree-outof-ssa.c:641
-#: tree-outof-ssa.c:663 tree-outof-ssa.c:1118 tree-outof-ssa.c:1891
-#: tree-ssa-live.c:500 tree-ssa-live.c:1905
+#: tree-outof-ssa.c:638 tree-outof-ssa.c:689 tree-ssa-coalesce.c:903
+#: tree-ssa-coalesce.c:918 tree-ssa-coalesce.c:1130 tree-ssa-live.c:886
#, gcc-internal-format
msgid "SSA corruption"
msgstr ""
-#: tree-outof-ssa.c:2304
+#: tree-outof-ssa.c:1101
#, gcc-internal-format
msgid " Pending stmts not issued on PRED edge (%d, %d)\n"
msgstr ""
-#: tree-outof-ssa.c:2310
+#: tree-outof-ssa.c:1107
#, gcc-internal-format
msgid " Pending stmts not issued on SUCC edge (%d, %d)\n"
msgstr ""
-#: tree-outof-ssa.c:2317
+#: tree-outof-ssa.c:1114
#, gcc-internal-format
msgid " Pending stmts not issued on ENTRY edge (%d, %d)\n"
msgstr ""
-#: tree-outof-ssa.c:2323
+#: tree-outof-ssa.c:1120
#, gcc-internal-format
msgid " Pending stmts not issued on EXIT edge (%d, %d)\n"
msgstr ""
-#: tree-profile.c:216
+#: tree-profile.c:353
#, gcc-internal-format
msgid "unimplemented functionality"
msgstr ""
-#: tree-ssa-loop-niter.c:1148
-#, gcc-internal-format
-msgid "%H%s"
-msgstr ""
-
#: tree-ssa.c:111
#, gcc-internal-format
msgid "expected an SSA_NAME object"
@@ -21902,12 +22357,17 @@ msgstr ""
msgid "found real variable when subvariables should have appeared"
msgstr ""
-#: tree-ssa.c:171
+#: tree-ssa.c:149
+#, gcc-internal-format
+msgid "found a default name with a non-empty defining statement"
+msgstr ""
+
+#: tree-ssa.c:177
#, gcc-internal-format
msgid "SSA_NAME created in two different blocks %i and %i"
msgstr ""
-#: tree-ssa.c:180
+#: tree-ssa.c:186
#, gcc-internal-format
msgid "SSA_NAME_DEF_STMT is wrong"
msgstr ""
@@ -21942,7 +22402,7 @@ msgstr ""
msgid "wrong immediate use list"
msgstr ""
-#: tree-ssa.c:312
+#: tree-ssa.c:313
#, gcc-internal-format
msgid "incoming edge count does not match number of PHI arguments"
msgstr ""
@@ -21957,384 +22417,392 @@ msgstr ""
msgid "PHI argument is not SSA_NAME, or invariant"
msgstr ""
-#: tree-ssa.c:348
+#: tree-ssa.c:349
#, gcc-internal-format
msgid "wrong edge %d->%d for PHI argument"
msgstr ""
-#: tree-ssa.c:396
+#: tree-ssa.c:399
#, gcc-internal-format
msgid "non-addressable variable inside an alias set"
msgstr ""
-#: tree-ssa.c:412
-#, gcc-internal-format
-msgid "addressable variable that is aliased but is not in any alias set"
-msgstr ""
-
-#: tree-ssa.c:422
+#: tree-ssa.c:410
#, gcc-internal-format
msgid "verify_flow_insensitive_alias_info failed"
msgstr ""
-#: tree-ssa.c:464
+#: tree-ssa.c:452
#, gcc-internal-format
msgid "dereferenced pointers should have a name or a symbol tag"
msgstr ""
-#: tree-ssa.c:471
+#: tree-ssa.c:459
#, gcc-internal-format
msgid "pointers with a memory tag, should have points-to sets"
msgstr ""
-#: tree-ssa.c:479
+#: tree-ssa.c:471
#, gcc-internal-format
msgid "pointer escapes but its name tag is not call-clobbered"
msgstr ""
-#: tree-ssa.c:488
+#: tree-ssa.c:481
#, gcc-internal-format
msgid "verify_flow_sensitive_alias_info failed"
msgstr ""
-#: tree-ssa.c:564
-#, gcc-internal-format
-msgid ""
-"alias set of a pointer's symbol tag should be a superset of the "
-"corresponding name tag"
-msgstr ""
-
-#: tree-ssa.c:580
+#: tree-ssa.c:509
#, gcc-internal-format
-msgid ""
-"two different pointers with identical points-to sets but different name tags"
+msgid "variable in call_clobbered_vars but not marked call_clobbered"
msgstr ""
-#: tree-ssa.c:612
+#: tree-ssa.c:528
#, gcc-internal-format
-msgid "verify_name_tags failed"
+msgid "variable marked call_clobbered but not in call_clobbered_vars bitmap."
msgstr ""
-#: tree-ssa.c:635
+#: tree-ssa.c:538
#, gcc-internal-format
-msgid "variable in call_clobbered_vars but not marked DECL_CALL_CLOBBERED"
-msgstr ""
-
-#: tree-ssa.c:645
-#, gcc-internal-format
-msgid ""
-"variable marked DECL_CALL_CLOBBERED but not in call_clobbered_vars bitmap."
+msgid "verify_call_clobbering failed"
msgstr ""
-#: tree-ssa.c:653
+#: tree-ssa.c:608
#, gcc-internal-format
-msgid "verify_call_clobbering failed"
+msgid "AUX pointer initialized for edge %d->%d"
msgstr ""
-#: tree-ssa.c:724
+#: tree-ssa.c:632
#, gcc-internal-format
-msgid "AUX pointer initialized for edge %d->%d"
+msgid "stmt (%p) marked modified after optimization pass: "
msgstr ""
-#: tree-ssa.c:747
+#: tree-ssa.c:652
#, gcc-internal-format
-msgid "stmt (%p) marked modified after optimization pass : "
+msgid "statement makes a memory store, but has no VDEFS"
msgstr ""
-#: tree-ssa.c:765
+#: tree-ssa.c:662 tree-ssa.c:672
#, gcc-internal-format
-msgid "statement makes a memory store, but has no V_MAY_DEFS nor V_MUST_DEFS"
+msgid "in statement"
msgstr ""
-#: tree-ssa.c:806
+#: tree-ssa.c:711
#, gcc-internal-format
msgid "verify_ssa failed"
msgstr ""
-#: tree-ssa.c:1185
+#: tree-ssa.c:1112
#, gcc-internal-format
msgid "%J%qD was declared here"
msgstr ""
#. We only do data flow with SSA_NAMEs, so that's all we
#. can warn about.
-#: tree-ssa.c:1203
+#: tree-ssa.c:1130
#, gcc-internal-format
msgid "%H%qD is used uninitialized in this function"
msgstr ""
-#: tree-ssa.c:1241
+#: tree-ssa.c:1168
#, gcc-internal-format
msgid "%H%qD may be used uninitialized in this function"
msgstr ""
-#: tree-vect-transform.c:562
+#: tree-vrp.c:3990
+#, gcc-internal-format
+msgid "%Harray subscript is outside array bounds"
+msgstr ""
+
+#: tree-vrp.c:4004
+#, gcc-internal-format
+msgid "%Harray subscript is above array bounds"
+msgstr ""
+
+#: tree-vrp.c:4011
#, gcc-internal-format
-msgid "no support for induction"
+msgid "%Harray subscript is below array bounds"
msgstr ""
-#: tree.c:3642
+#: tree.c:3907
#, gcc-internal-format
msgid "%q+D already declared with dllexport attribute: dllimport ignored"
msgstr ""
-#: tree.c:3654
+#: tree.c:3919
#, gcc-internal-format
msgid ""
"%q+D redeclared without dllimport attribute after being referenced with dll "
"linkage"
msgstr ""
-#: tree.c:3670 config/i386/winnt-cxx.c:70
+#: tree.c:3935 config/i386/winnt-cxx.c:70
#, gcc-internal-format
msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored"
msgstr ""
-#: tree.c:3722 tree.c:3734 config/darwin.c:1353 config/arm/arm.c:2906
-#: config/arm/arm.c:2934 config/avr/avr.c:4669 config/h8300/h8300.c:5282
-#: config/h8300/h8300.c:5306 config/i386/i386.c:2382 config/i386/i386.c:17359
-#: config/ia64/ia64.c:570 config/m68hc11/m68hc11.c:1118
-#: config/rs6000/rs6000.c:17632 config/sh/symbian.c:409
+#: tree.c:3987 tree.c:3999 config/darwin.c:1440 config/arm/arm.c:3018
+#: config/arm/arm.c:3046 config/avr/avr.c:4578 config/h8300/h8300.c:5282
+#: config/h8300/h8300.c:5306 config/i386/i386.c:2875 config/i386/i386.c:19518
+#: config/ia64/ia64.c:573 config/m68hc11/m68hc11.c:1118
+#: config/rs6000/rs6000.c:18840 config/sh/symbian.c:409
#: config/sh/symbian.c:416
#, gcc-internal-format
msgid "%qs attribute ignored"
msgstr ""
-#: tree.c:3750
+#: tree.c:4015
#, gcc-internal-format
msgid "inline function %q+D declared as dllimport: attribute ignored"
msgstr ""
-#: tree.c:3758
+#: tree.c:4023
#, gcc-internal-format
msgid "function %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:3766 config/sh/symbian.c:431
+#: tree.c:4031 config/sh/symbian.c:431
#, gcc-internal-format
msgid "variable %q+D definition is marked dllimport"
msgstr ""
-#: tree.c:3789 config/sh/symbian.c:506
+#: tree.c:4054 config/sh/symbian.c:506
#, gcc-internal-format
msgid "external linkage required for symbol %q+D because of %qs attribute"
msgstr ""
-#: tree.c:5186
+#: tree.c:5541
#, gcc-internal-format
msgid "arrays of functions are not meaningful"
msgstr ""
-#: tree.c:5242
+#: tree.c:5620
#, gcc-internal-format
msgid "function return type cannot be function"
msgstr ""
-#: tree.c:6161 tree.c:6246 tree.c:6307
+#: tree.c:6556 tree.c:6641 tree.c:6702
#, gcc-internal-format
msgid "tree check: %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:6198
+#: tree.c:6593
#, gcc-internal-format
msgid "tree check: expected none of %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:6211
+#: tree.c:6606
#, gcc-internal-format
msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:6260
+#: tree.c:6655
#, gcc-internal-format
msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:6273
+#: tree.c:6668
#, gcc-internal-format
msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:6333
+#: tree.c:6728
#, gcc-internal-format
msgid ""
-"tree check: expected tree that contains %qs structure, have %qs in %s, at %"
-"s:%d"
+"tree check: expected tree that contains %qs structure, have %qs in %s, at %s:"
+"%d"
msgstr ""
-#: tree.c:6347
+#: tree.c:6742
#, gcc-internal-format
msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
msgstr ""
-#: tree.c:6359
+#: tree.c:6754
#, gcc-internal-format
msgid "tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d"
msgstr ""
-#: tree.c:6371
+#: tree.c:6767
#, gcc-internal-format
msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
msgstr ""
-#: tree.c:6384
+#: tree.c:6780
#, gcc-internal-format
msgid ""
"tree check: accessed operand %d of omp_clause %s with %d operands in %s, at %"
"s:%d"
msgstr ""
-#: value-prof.c:95
+#: value-prof.c:352
+#, gcc-internal-format
+msgid "Dead histogram"
+msgstr ""
+
+#: value-prof.c:381
+#, gcc-internal-format
+msgid ""
+"Histogram value statement does not correspond to statement it is associated "
+"with"
+msgstr ""
+
+#: value-prof.c:394
+#, gcc-internal-format
+msgid "verify_histograms failed"
+msgstr ""
+
+#: value-prof.c:435
#, gcc-internal-format
msgid ""
"%HCorrupted value profile: %s profiler overall count (%d) does not match BB "
"count (%d)"
msgstr ""
-#: varasm.c:311
+#: varasm.c:547
#, gcc-internal-format
msgid "%+D causes a section type conflict"
msgstr ""
-#: varasm.c:853
+#: varasm.c:1090
#, gcc-internal-format
msgid ""
"alignment of %q+D is greater than maximum object file alignment. Using %d"
msgstr ""
-#: varasm.c:1059 varasm.c:1067
+#: varasm.c:1300 varasm.c:1308
#, gcc-internal-format
msgid "register name not specified for %q+D"
msgstr ""
-#: varasm.c:1069
+#: varasm.c:1310
#, gcc-internal-format
msgid "invalid register name for %q+D"
msgstr ""
-#: varasm.c:1071
+#: varasm.c:1312
#, gcc-internal-format
msgid "data type of %q+D isn%'t suitable for a register"
msgstr ""
-#: varasm.c:1074
+#: varasm.c:1315
#, gcc-internal-format
msgid "register specified for %q+D isn%'t suitable for data type"
msgstr ""
-#: varasm.c:1084
+#: varasm.c:1325
#, gcc-internal-format
msgid "global register variable has initial value"
msgstr ""
-#: varasm.c:1088
+#: varasm.c:1329
#, gcc-internal-format
msgid "optimization may eliminate reads and/or writes to register variables"
msgstr ""
-#: varasm.c:1126
+#: varasm.c:1367
#, gcc-internal-format
msgid "register name given for non-register variable %q+D"
msgstr ""
-#: varasm.c:1206
+#: varasm.c:1447
#, gcc-internal-format
msgid "global destructors not supported on this target"
msgstr ""
-#: varasm.c:1256
+#: varasm.c:1513
#, gcc-internal-format
msgid "global constructors not supported on this target"
msgstr ""
-#: varasm.c:1653
+#: varasm.c:1900
#, gcc-internal-format
msgid "thread-local COMMON data not implemented"
msgstr ""
-#: varasm.c:1682
+#: varasm.c:1929
#, gcc-internal-format
msgid ""
"requested alignment for %q+D is greater than implemented alignment of %wu"
msgstr ""
-#: varasm.c:4088
+#: varasm.c:4387
#, gcc-internal-format
msgid "initializer for integer value is too complicated"
msgstr ""
-#: varasm.c:4093
+#: varasm.c:4392
#, gcc-internal-format
msgid "initializer for floating value is not a floating constant"
msgstr ""
-#: varasm.c:4366
+#: varasm.c:4665
#, gcc-internal-format
msgid "invalid initial value for member %qs"
msgstr ""
-#: varasm.c:4566 varasm.c:4610
+#: varasm.c:4865 varasm.c:4909
#, gcc-internal-format
msgid "weak declaration of %q+D must precede definition"
msgstr ""
-#: varasm.c:4574
+#: varasm.c:4873
#, gcc-internal-format
msgid ""
"weak declaration of %q+D after first use results in unspecified behavior"
msgstr ""
-#: varasm.c:4608
+#: varasm.c:4907
#, gcc-internal-format
msgid "weak declaration of %q+D must be public"
msgstr ""
-#: varasm.c:4617
+#: varasm.c:4916
#, gcc-internal-format
msgid "weak declaration of %q+D not supported"
msgstr ""
-#: varasm.c:4643
+#: varasm.c:4942
#, gcc-internal-format
msgid "only weak aliases are supported in this configuration"
msgstr ""
-#: varasm.c:4873
+#: varasm.c:5177
#, gcc-internal-format
msgid "%Jweakref is not supported in this configuration"
msgstr ""
-#: varasm.c:4946
+#: varasm.c:5258
#, gcc-internal-format
msgid "%q+D aliased to undefined symbol %qs"
msgstr ""
-#: varasm.c:4951
+#: varasm.c:5263
#, gcc-internal-format
msgid "%q+D aliased to external symbol %qs"
msgstr ""
-#: varasm.c:4990
+#: varasm.c:5302
#, gcc-internal-format
msgid "weakref %q+D ultimately targets itself"
msgstr ""
-#: varasm.c:4999
+#: varasm.c:5311
#, gcc-internal-format
msgid "weakref %q+D must have static linkage"
msgstr ""
-#: varasm.c:5005
+#: varasm.c:5317
#, gcc-internal-format
msgid "%Jalias definitions not supported in this configuration"
msgstr ""
-#: varasm.c:5010
+#: varasm.c:5322
#, gcc-internal-format
msgid "%Jonly weak aliases are supported in this configuration"
msgstr ""
-#: varasm.c:5067
+#: varasm.c:5379
#, gcc-internal-format
msgid "visibility attribute not supported in this configuration; ignored"
msgstr ""
@@ -22349,7 +22817,7 @@ msgstr ""
msgid "underflowed virtual array %s in %s, at %s:%d"
msgstr ""
-#: vec.c:160
+#: vec.c:234
#, gcc-internal-format
msgid "vector %s %s domain error, in %s at %s:%u"
msgstr ""
@@ -22360,86 +22828,86 @@ msgstr ""
msgid "no sclass for %s stab (0x%x)"
msgstr ""
-#: config/darwin-c.c:87
+#: config/darwin-c.c:85
#, gcc-internal-format
msgid "too many #pragma options align=reset"
msgstr ""
-#: config/darwin-c.c:107 config/darwin-c.c:110 config/darwin-c.c:112
-#: config/darwin-c.c:114
+#: config/darwin-c.c:105 config/darwin-c.c:108 config/darwin-c.c:110
+#: config/darwin-c.c:112
#, gcc-internal-format
msgid "malformed '#pragma options', ignoring"
msgstr ""
-#: config/darwin-c.c:117
+#: config/darwin-c.c:115
#, gcc-internal-format
msgid "junk at end of '#pragma options'"
msgstr ""
-#: config/darwin-c.c:127
+#: config/darwin-c.c:125
#, gcc-internal-format
msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring"
msgstr ""
-#: config/darwin-c.c:139
+#: config/darwin-c.c:137
#, gcc-internal-format
msgid "missing '(' after '#pragma unused', ignoring"
msgstr ""
-#: config/darwin-c.c:157
+#: config/darwin-c.c:155
#, gcc-internal-format
msgid "missing ')' after '#pragma unused', ignoring"
msgstr ""
-#: config/darwin-c.c:160
+#: config/darwin-c.c:158
#, gcc-internal-format
msgid "junk at end of '#pragma unused'"
msgstr ""
-#: config/darwin-c.c:171
+#: config/darwin-c.c:169
#, gcc-internal-format
msgid "malformed '#pragma ms_struct', ignoring"
msgstr ""
-#: config/darwin-c.c:179
+#: config/darwin-c.c:177
#, gcc-internal-format
msgid "malformed '#pragma ms_struct {on|off|reset}', ignoring"
msgstr ""
-#: config/darwin-c.c:182
+#: config/darwin-c.c:180
#, gcc-internal-format
msgid "junk at end of '#pragma ms_struct'"
msgstr ""
-#: config/darwin-c.c:408
+#: config/darwin-c.c:406
#, gcc-internal-format
msgid "subframework include %s conflicts with framework include"
msgstr ""
-#: config/darwin-c.c:600
+#: config/darwin-c.c:598
#, gcc-internal-format
msgid "Unknown value %qs of -mmacosx-version-min"
msgstr ""
-#: config/darwin.c:1326
+#: config/darwin.c:1413
#, gcc-internal-format
msgid ""
"%<%s%> 2.95 vtable-compatability attribute applies only when compiling a kext"
msgstr ""
-#: config/darwin.c:1333
+#: config/darwin.c:1420
#, gcc-internal-format
msgid "%<%s%> 2.95 vtable-compatability attribute applies only to C++ classes"
msgstr ""
-#: config/darwin.c:1466
+#: config/darwin.c:1553
#, gcc-internal-format
msgid ""
"internal and protected visibility attributes not supported in this "
"configuration; ignored"
msgstr ""
-#: config/darwin.c:1620
+#: config/darwin.c:1708
#, gcc-internal-format
msgid "command line option %<-fapple-kext%> is only valid for C++"
msgstr ""
@@ -22509,12 +22977,17 @@ msgstr ""
msgid "ignoring %<#pragma align%> for explicitly aligned %q+D"
msgstr ""
+#: config/vxworks.c:70
+#, gcc-internal-format
+msgid "PIC is only supported for RTPs"
+msgstr ""
+
#. Mach-O supports 'weak imports', and 'weak definitions' in coalesced
#. sections. machopic_select_section ensures that weak variables go in
#. 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:430
+#: config/darwin.h:449
#, gcc-internal-format
msgid "alias definitions not supported in Mach-O; ignored"
msgstr ""
@@ -22530,83 +23003,83 @@ msgstr ""
msgid "profiler support for WindISS"
msgstr ""
-#: config/alpha/alpha.c:231 config/rs6000/rs6000.c:1619
+#: config/alpha/alpha.c:233 config/rs6000/rs6000.c:1844
#, gcc-internal-format
msgid "bad value %qs for -mtls-size switch"
msgstr ""
-#: config/alpha/alpha.c:285
+#: config/alpha/alpha.c:287
#, gcc-internal-format
msgid "-f%s ignored for Unicos/Mk (not supported)"
msgstr ""
-#: config/alpha/alpha.c:309
+#: config/alpha/alpha.c:311
#, gcc-internal-format
msgid "-mieee not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:320
+#: config/alpha/alpha.c:322
#, gcc-internal-format
msgid "-mieee-with-inexact not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:337
+#: config/alpha/alpha.c:339
#, gcc-internal-format
msgid "bad value %qs for -mtrap-precision switch"
msgstr ""
-#: config/alpha/alpha.c:351
+#: config/alpha/alpha.c:353
#, gcc-internal-format
msgid "bad value %qs for -mfp-rounding-mode switch"
msgstr ""
-#: config/alpha/alpha.c:366
+#: config/alpha/alpha.c:368
#, gcc-internal-format
msgid "bad value %qs for -mfp-trap-mode switch"
msgstr ""
-#: config/alpha/alpha.c:380 config/alpha/alpha.c:392
+#: config/alpha/alpha.c:382 config/alpha/alpha.c:394
#, gcc-internal-format
msgid "bad value %qs for -mcpu switch"
msgstr ""
-#: config/alpha/alpha.c:399
+#: config/alpha/alpha.c:401
#, gcc-internal-format
msgid "trap mode not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:406
+#: config/alpha/alpha.c:408
#, gcc-internal-format
msgid "fp software completion requires -mtrap-precision=i"
msgstr ""
-#: config/alpha/alpha.c:422
+#: config/alpha/alpha.c:424
#, gcc-internal-format
msgid "rounding mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:427
+#: config/alpha/alpha.c:429
#, gcc-internal-format
msgid "trap mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:431
+#: config/alpha/alpha.c:433
#, gcc-internal-format
msgid "128-bit long double not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:459
+#: config/alpha/alpha.c:461
#, gcc-internal-format
msgid "L%d cache latency unknown for %s"
msgstr ""
-#: config/alpha/alpha.c:474
+#: config/alpha/alpha.c:476
#, gcc-internal-format
msgid "bad value %qs for -mmemory-latency"
msgstr ""
-#: config/alpha/alpha.c:6587 config/alpha/alpha.c:6590 config/s390/s390.c:8207
-#: config/s390/s390.c:8210
+#: config/alpha/alpha.c:6513 config/alpha/alpha.c:6516 config/s390/s390.c:8247
+#: config/s390/s390.c:8250
#, gcc-internal-format
msgid "bad builtin fcode"
msgstr ""
@@ -22621,174 +23094,184 @@ msgstr ""
msgid "argument of %qs attribute is not \"ilink1\" or \"ilink2\""
msgstr ""
-#: config/arm/arm.c:921
+#: config/arm/arm.c:969
#, gcc-internal-format
msgid "switch -mcpu=%s conflicts with -march= switch"
msgstr ""
-#: config/arm/arm.c:931 config/rs6000/rs6000.c:1269 config/sparc/sparc.c:734
+#: config/arm/arm.c:979 config/rs6000/rs6000.c:1403 config/sparc/sparc.c:735
#, gcc-internal-format
msgid "bad value (%s) for %s switch"
msgstr ""
-#: config/arm/arm.c:1041
+#: config/arm/arm.c:1089
+#, gcc-internal-format
+msgid "target CPU does not support ARM mode"
+msgstr ""
+
+#: config/arm/arm.c:1093
#, gcc-internal-format
msgid "target CPU does not support interworking"
msgstr ""
-#: config/arm/arm.c:1047
+#: config/arm/arm.c:1099
#, gcc-internal-format
msgid "target CPU does not support THUMB instructions"
msgstr ""
-#: config/arm/arm.c:1065
+#: config/arm/arm.c:1117
#, gcc-internal-format
msgid ""
"enabling backtrace support is only meaningful when compiling for the Thumb"
msgstr ""
-#: config/arm/arm.c:1068
+#: config/arm/arm.c:1120
#, gcc-internal-format
msgid ""
"enabling callee interworking support is only meaningful when compiling for "
"the Thumb"
msgstr ""
-#: config/arm/arm.c:1071
+#: config/arm/arm.c:1123
#, gcc-internal-format
msgid ""
"enabling caller interworking support is only meaningful when compiling for "
"the Thumb"
msgstr ""
-#: config/arm/arm.c:1075
+#: config/arm/arm.c:1127
#, gcc-internal-format
msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
msgstr ""
-#: config/arm/arm.c:1083
+#: config/arm/arm.c:1135
#, gcc-internal-format
msgid "-fpic and -mapcs-reent are incompatible"
msgstr ""
-#: config/arm/arm.c:1086
+#: config/arm/arm.c:1138
#, gcc-internal-format
msgid "APCS reentrant code not supported. Ignored"
msgstr ""
-#: config/arm/arm.c:1094
+#: config/arm/arm.c:1146
#, gcc-internal-format
msgid "-g with -mno-apcs-frame may not give sensible debugging"
msgstr ""
-#: config/arm/arm.c:1102
+#: config/arm/arm.c:1149
#, gcc-internal-format
msgid "passing floating point arguments in fp regs not yet supported"
msgstr ""
-#: config/arm/arm.c:1144
+#: config/arm/arm.c:1194
#, gcc-internal-format
msgid "invalid ABI option: -mabi=%s"
msgstr ""
-#: config/arm/arm.c:1150
+#: config/arm/arm.c:1200
#, gcc-internal-format
msgid "iwmmxt requires an AAPCS compatible ABI for proper operation"
msgstr ""
-#: config/arm/arm.c:1153
+#: config/arm/arm.c:1203
#, gcc-internal-format
msgid "iwmmxt abi requires an iwmmxt capable cpu"
msgstr ""
-#: config/arm/arm.c:1163
+#: config/arm/arm.c:1213
#, gcc-internal-format
msgid "invalid floating point emulation option: -mfpe=%s"
msgstr ""
-#: config/arm/arm.c:1180
+#: config/arm/arm.c:1230
#, gcc-internal-format
msgid "invalid floating point option: -mfpu=%s"
msgstr ""
-#: config/arm/arm.c:1220
+#: config/arm/arm.c:1270
#, gcc-internal-format
msgid "invalid floating point abi: -mfloat-abi=%s"
msgstr ""
-#: config/arm/arm.c:1227
+#: config/arm/arm.c:1277
#, gcc-internal-format
msgid "-mfloat-abi=hard and VFP"
msgstr ""
-#: config/arm/arm.c:1233
+#: config/arm/arm.c:1283
#, gcc-internal-format
msgid "iWMMXt and hardware floating point"
msgstr ""
-#: config/arm/arm.c:1256
+#: config/arm/arm.c:1287
+#, gcc-internal-format
+msgid "Thumb-2 iWMMXt"
+msgstr ""
+
+#: config/arm/arm.c:1310
#, gcc-internal-format
msgid "invalid thread pointer option: -mtp=%s"
msgstr ""
-#: config/arm/arm.c:1269
+#: config/arm/arm.c:1323
#, gcc-internal-format
-msgid "can not use -mtp=cp15 with -mthumb"
+msgid "can not use -mtp=cp15 with 16-bit Thumb"
msgstr ""
-#: config/arm/arm.c:1283
+#: config/arm/arm.c:1337
#, gcc-internal-format
msgid "structure size boundary can only be set to %s"
msgstr ""
-#: config/arm/arm.c:1292
+#: config/arm/arm.c:1351
#, gcc-internal-format
msgid "-mpic-register= is useless without -fpic"
msgstr ""
-#: config/arm/arm.c:1299
+#: config/arm/arm.c:1358
#, gcc-internal-format
msgid "unable to use '%s' for PIC register"
msgstr ""
-#: config/arm/arm.c:2874 config/arm/arm.c:2892 config/avr/avr.c:4689
-#: config/bfin/bfin.c:3666 config/c4x/c4x.c:4076 config/h8300/h8300.c:5258
-#: config/i386/i386.c:2337 config/m68hc11/m68hc11.c:1155
-#: config/m68k/m68k.c:381 config/mcore/mcore.c:3032 config/mt/mt.c:1276
-#: config/rs6000/rs6000.c:17558 config/sh/sh.c:7709 config/sh/sh.c:7730
-#: config/sh/sh.c:7753 config/stormy16/stormy16.c:2255 config/v850/v850.c:2123
+#: config/arm/arm.c:2986 config/arm/arm.c:3004 config/avr/avr.c:4598
+#: config/bfin/bfin.c:4392 config/c4x/c4x.c:4076 config/h8300/h8300.c:5258
+#: config/i386/i386.c:2830 config/m68hc11/m68hc11.c:1155
+#: config/m68k/m68k.c:660 config/mcore/mcore.c:3033 config/mt/mt.c:1276
+#: config/rs6000/rs6000.c:18766 config/sh/sh.c:8035 config/sh/sh.c:8056
+#: config/sh/sh.c:8079 config/stormy16/stormy16.c:2253 config/v850/v850.c:2123
#, gcc-internal-format
msgid "%qs attribute only applies to functions"
msgstr ""
-#: config/arm/arm.c:12052
+#: config/arm/arm.c:12875
#, gcc-internal-format
msgid "unable to compute real location of stacked parameter"
msgstr ""
#. @@@ better error message
-#: config/arm/arm.c:12697 config/arm/arm.c:12734
+#: config/arm/arm.c:13519 config/arm/arm.c:13556
#, gcc-internal-format
msgid "selector must be an immediate"
msgstr ""
#. @@@ better error message
-#: config/arm/arm.c:12777 config/i386/i386.c:16074 config/i386/i386.c:16108
+#: config/arm/arm.c:13599 config/i386/i386.c:18017 config/i386/i386.c:18051
#, gcc-internal-format
msgid "mask must be an immediate"
msgstr ""
-#: config/arm/arm.c:13436
+#: config/arm/arm.c:14258
#, gcc-internal-format
msgid "no low registers available for popping high registers"
msgstr ""
-#: config/arm/arm.c:13660
+#: config/arm/arm.c:14481
#, gcc-internal-format
msgid "interrupt Service Routines cannot be coded in Thumb mode"
msgstr ""
-#: config/arm/pe.c:165 config/mcore/mcore.c:2898
+#: config/arm/pe.c:165 config/mcore/mcore.c:2899
#, gcc-internal-format
msgid "initialized variable %q+D is marked dllimport"
msgstr ""
@@ -22798,67 +23281,77 @@ msgstr ""
msgid "static variable %q+D is marked dllimport"
msgstr ""
-#: config/avr/avr.c:544
+#: config/avr/avr.c:550
#, gcc-internal-format
msgid "large frame pointer change (%d) with -mtiny-stack"
msgstr ""
-#: config/avr/avr.c:4662
+#: config/avr/avr.c:4571
#, gcc-internal-format
msgid "only initialized variables can be placed into program memory area"
msgstr ""
-#: config/avr/avr.c:4706
+#: config/avr/avr.c:4615
#, gcc-internal-format
msgid "%qs appears to be a misspelled interrupt handler"
msgstr ""
-#: config/avr/avr.c:4714
+#: config/avr/avr.c:4623
#, gcc-internal-format
msgid "%qs appears to be a misspelled signal handler"
msgstr ""
-#: config/avr/avr.c:4806
+#: config/avr/avr.c:4715
#, gcc-internal-format
msgid "only uninitialized variables can be placed in the .noinit section"
msgstr ""
-#: config/avr/avr.c:4820
+#: config/avr/avr.c:4729
#, gcc-internal-format
msgid "MCU %qs supported for assembler only"
msgstr ""
-#: config/avr/avr.h:685
+#: config/avr/avr.h:686
#, gcc-internal-format
msgid "trampolines not supported"
msgstr ""
-#: config/bfin/bfin.c:1958 config/m68k/m68k.c:299
+#: config/bfin/bfin.c:2055 config/m68k/m68k.c:457
#, gcc-internal-format
msgid "-mshared-library-id=%s is not between 0 and %d"
msgstr ""
-#: config/bfin/bfin.c:1988
+#: config/bfin/bfin.c:2085
#, gcc-internal-format
msgid "-mshared-library-id= specified without -mid-shared-library"
msgstr ""
-#: config/bfin/bfin.c:1994
+#: config/bfin/bfin.c:2091
+#, gcc-internal-format
+msgid "Can't use multiple stack checking methods together."
+msgstr ""
+
+#: config/bfin/bfin.c:2094
#, gcc-internal-format
msgid "ID shared libraries and FD-PIC mode can't be used together."
msgstr ""
-#: config/bfin/bfin.c:3671
+#: config/bfin/bfin.c:2099 config/m68k/m68k.c:552
+#, gcc-internal-format
+msgid "cannot specify both -msep-data and -mid-shared-library"
+msgstr ""
+
+#: config/bfin/bfin.c:4397
#, gcc-internal-format
msgid "multiple function type attributes specified"
msgstr ""
-#: config/bfin/bfin.c:3727
+#: config/bfin/bfin.c:4453 config/spu/spu.c:2854
#, gcc-internal-format
msgid "`%s' attribute only applies to functions"
msgstr ""
-#: config/bfin/bfin.c:3738
+#: config/bfin/bfin.c:4464
#, gcc-internal-format
msgid "can't apply both longcall and shortcall attributes to the same function"
msgstr ""
@@ -22902,83 +23395,83 @@ msgstr ""
#. an operator, for immediate output. If that ever happens for
#. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure
#. we notice.
-#: config/cris/cris.c:435
+#: config/cris/cris.c:434
#, gcc-internal-format
msgid "MULT case in cris_op_str"
msgstr ""
-#: config/cris/cris.c:813
+#: config/cris/cris.c:811
#, gcc-internal-format
msgid "invalid use of ':' modifier"
msgstr ""
-#: config/cris/cris.c:986
+#: config/cris/cris.c:984
#, gcc-internal-format
msgid "internal error: bad register: %d"
msgstr ""
-#: config/cris/cris.c:1528
+#: config/cris/cris.c:1525
#, gcc-internal-format
msgid "internal error: sideeffect-insn affecting main effect"
msgstr ""
-#: config/cris/cris.c:1552
+#: config/cris/cris.c:1549
#, gcc-internal-format
msgid "unknown cc_attr value"
msgstr ""
#. If we get here, the caller got its initial tests wrong.
-#: config/cris/cris.c:1903
+#: config/cris/cris.c:1897
#, gcc-internal-format
msgid "internal error: cris_side_effect_mode_ok with bad operands"
msgstr ""
-#: config/cris/cris.c:2106
+#: config/cris/cris.c:2100
#, gcc-internal-format
msgid "-max-stackframe=%d is not usable, not between 0 and %d"
msgstr ""
-#: config/cris/cris.c:2134
+#: config/cris/cris.c:2128
#, gcc-internal-format
msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
msgstr ""
-#: config/cris/cris.c:2170
+#: config/cris/cris.c:2164
#, gcc-internal-format
msgid "unknown CRIS cpu version specification in -mtune= : %s"
msgstr ""
-#: config/cris/cris.c:2188
+#: config/cris/cris.c:2182
#, gcc-internal-format
msgid "-fPIC and -fpic are not supported in this configuration"
msgstr ""
-#: config/cris/cris.c:2203
+#: config/cris/cris.c:2197
#, gcc-internal-format
msgid "that particular -g option is invalid with -maout and -melinux"
msgstr ""
-#: config/cris/cris.c:2416
+#: config/cris/cris.c:2410
#, gcc-internal-format
msgid "Unknown src"
msgstr ""
-#: config/cris/cris.c:2477
+#: config/cris/cris.c:2471
#, gcc-internal-format
msgid "Unknown dest"
msgstr ""
-#: config/cris/cris.c:2762
+#: config/cris/cris.c:2756
#, gcc-internal-format
msgid "stackframe too big: %d bytes"
msgstr ""
-#: config/cris/cris.c:3214 config/cris/cris.c:3241
+#: config/cris/cris.c:3208 config/cris/cris.c:3235
#, gcc-internal-format
msgid "expand_binop failed in movsi got"
msgstr ""
-#: config/cris/cris.c:3322
+#: config/cris/cris.c:3316
#, gcc-internal-format
msgid "emitting PIC operand, but PIC register isn't set up"
msgstr ""
@@ -23063,47 +23556,47 @@ msgstr ""
msgid "inappropriate accumulator for %qs"
msgstr ""
-#: config/frv/frv.c:8717
+#: config/frv/frv.c:8716
#, gcc-internal-format
msgid "invalid IACC argument"
msgstr ""
-#: config/frv/frv.c:8740
+#: config/frv/frv.c:8739
#, gcc-internal-format
msgid "%qs expects a constant argument"
msgstr ""
-#: config/frv/frv.c:8745
+#: config/frv/frv.c:8744
#, gcc-internal-format
msgid "constant argument out of range for %qs"
msgstr ""
-#: config/frv/frv.c:9227
+#: config/frv/frv.c:9225
#, gcc-internal-format
msgid "media functions are not available unless -mmedia is used"
msgstr ""
-#: config/frv/frv.c:9239
+#: config/frv/frv.c:9237
#, gcc-internal-format
msgid "this media function is only available on the fr500"
msgstr ""
-#: config/frv/frv.c:9267
+#: config/frv/frv.c:9265
#, gcc-internal-format
msgid "this media function is only available on the fr400 and fr550"
msgstr ""
-#: config/frv/frv.c:9286
+#: config/frv/frv.c:9284
#, gcc-internal-format
msgid "this builtin function is only available on the fr405 and fr450"
msgstr ""
-#: config/frv/frv.c:9295
+#: config/frv/frv.c:9293
#, gcc-internal-format
msgid "this builtin function is only available on the fr500 and fr550"
msgstr ""
-#: config/frv/frv.c:9307
+#: config/frv/frv.c:9305
#, gcc-internal-format
msgid "this builtin function is only available on the fr450"
msgstr ""
@@ -23128,261 +23621,271 @@ msgstr ""
msgid "can't set position in PCH file: %m"
msgstr ""
-#: config/i386/i386.c:1586 config/i386/i386.c:1727
+#: config/i386/i386.c:2015 config/i386/i386.c:2191
#, gcc-internal-format
msgid "bad value (%s) for -mtune= switch"
msgstr ""
-#: config/i386/i386.c:1611
+#: config/i386/i386.c:2056
+#, gcc-internal-format
+msgid "bad value (%s) for -mstringop-strategy= switch"
+msgstr ""
+
+#: config/i386/i386.c:2059
#, gcc-internal-format
msgid ""
"-mtune=x86-64 is deprecated. Use -mtune=k8 or -mtune=generic instead as "
"appropriate."
msgstr ""
-#: config/i386/i386.c:1617
+#: config/i386/i386.c:2065
#, gcc-internal-format
msgid "generic CPU can be used only for -mtune= switch"
msgstr ""
-#: config/i386/i386.c:1619 config/i386/i386.c:1696 config/mt/mt.c:805
+#: config/i386/i386.c:2067 config/i386/i386.c:2156 config/mt/mt.c:805
#, gcc-internal-format
msgid "bad value (%s) for -march= switch"
msgstr ""
-#: config/i386/i386.c:1628
+#: config/i386/i386.c:2078
#, gcc-internal-format
-msgid "code model %s not supported in PIC mode"
+msgid "code model %s does not support PIC mode"
msgstr ""
-#: config/i386/i386.c:1636 config/sparc/sparc.c:698
+#: config/i386/i386.c:2084 config/sparc/sparc.c:699
#, gcc-internal-format
msgid "bad value (%s) for -mcmodel= switch"
msgstr ""
-#: config/i386/i386.c:1652
+#: config/i386/i386.c:2100
#, gcc-internal-format
msgid "bad value (%s) for -masm= switch"
msgstr ""
-#: config/i386/i386.c:1655
+#: config/i386/i386.c:2103
#, gcc-internal-format
msgid "code model %qs not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:1658
-#, gcc-internal-format
-msgid "code model %<large%> not supported yet"
-msgstr ""
-
-#: config/i386/i386.c:1660
+#: config/i386/i386.c:2106
#, gcc-internal-format
msgid "%i-bit mode not compiled in"
msgstr ""
-#: config/i386/i386.c:1690 config/i386/i386.c:1714
+#: config/i386/i386.c:2150 config/i386/i386.c:2178
#, gcc-internal-format
msgid "CPU you selected does not support x86-64 instruction set"
msgstr ""
-#: config/i386/i386.c:1744
+#: config/i386/i386.c:2212
#, gcc-internal-format
msgid "-mregparm=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:1757
+#: config/i386/i386.c:2225
#, gcc-internal-format
msgid "-malign-loops is obsolete, use -falign-loops"
msgstr ""
-#: config/i386/i386.c:1762 config/i386/i386.c:1775 config/i386/i386.c:1788
+#: config/i386/i386.c:2230 config/i386/i386.c:2243 config/i386/i386.c:2256
#, gcc-internal-format
msgid "-malign-loops=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:1770
+#: config/i386/i386.c:2238
#, gcc-internal-format
msgid "-malign-jumps is obsolete, use -falign-jumps"
msgstr ""
-#: config/i386/i386.c:1783
+#: config/i386/i386.c:2251
#, gcc-internal-format
msgid "-malign-functions is obsolete, use -falign-functions"
msgstr ""
-#: config/i386/i386.c:1816
+#: config/i386/i386.c:2284
#, gcc-internal-format
msgid "-mbranch-cost=%d is not between 0 and 5"
msgstr ""
-#: config/i386/i386.c:1824
+#: config/i386/i386.c:2292
#, gcc-internal-format
msgid "-mlarge-data-threshold=%d is negative"
msgstr ""
-#: config/i386/i386.c:1838
+#: config/i386/i386.c:2306
#, gcc-internal-format
msgid "bad value (%s) for -mtls-dialect= switch"
msgstr ""
-#: config/i386/i386.c:1885
+#: config/i386/i386.c:2365
#, gcc-internal-format
msgid "-malign-double makes no sense in the 64bit mode"
msgstr ""
-#: config/i386/i386.c:1887
+#: config/i386/i386.c:2367
#, gcc-internal-format
msgid "-mrtd calling convention not supported in the 64bit mode"
msgstr ""
-#: config/i386/i386.c:1913
+#: config/i386/i386.c:2393
#, gcc-internal-format
msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
msgstr ""
-#: config/i386/i386.c:1922
+#: config/i386/i386.c:2402
#, gcc-internal-format
msgid "-msseregparm used without SSE enabled"
msgstr ""
-#: config/i386/i386.c:1934 config/i386/i386.c:1945
+#: config/i386/i386.c:2413 config/i386/i386.c:2424
#, gcc-internal-format
msgid "SSE instruction set disabled, using 387 arithmetics"
msgstr ""
-#: config/i386/i386.c:1950
+#: config/i386/i386.c:2429
#, gcc-internal-format
msgid "387 instruction set disabled, using SSE arithmetics"
msgstr ""
-#: config/i386/i386.c:1957
+#: config/i386/i386.c:2436
#, gcc-internal-format
msgid "bad value (%s) for -mfpmath= switch"
msgstr ""
-#: config/i386/i386.c:1979
+#: config/i386/i386.c:2458
#, gcc-internal-format
msgid ""
"unwind tables currently require either a frame pointer or -maccumulate-"
"outgoing-args for correctness"
msgstr ""
-#: config/i386/i386.c:2350 config/i386/i386.c:2401
+#: config/i386/i386.c:2843 config/i386/i386.c:2894
#, gcc-internal-format
msgid "fastcall and regparm attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:2357
+#: config/i386/i386.c:2850
#, gcc-internal-format
msgid "%qs attribute requires an integer constant argument"
msgstr ""
-#: config/i386/i386.c:2363
+#: config/i386/i386.c:2856
#, gcc-internal-format
msgid "argument to %qs attribute larger than %d"
msgstr ""
-#: config/i386/i386.c:2373
+#: config/i386/i386.c:2866
#, gcc-internal-format
msgid "%s functions limited to %d register parameters"
msgstr ""
-#: config/i386/i386.c:2393 config/i386/i386.c:2428
+#: config/i386/i386.c:2886 config/i386/i386.c:2921
#, gcc-internal-format
msgid "fastcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:2397
+#: config/i386/i386.c:2890
#, gcc-internal-format
msgid "fastcall and stdcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:2411 config/i386/i386.c:2424
+#: config/i386/i386.c:2904 config/i386/i386.c:2917
#, gcc-internal-format
msgid "stdcall and cdecl attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:2415
+#: config/i386/i386.c:2908
#, gcc-internal-format
msgid "stdcall and fastcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:2562
+#: config/i386/i386.c:3055
#, gcc-internal-format
msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:2565
+#: config/i386/i386.c:3058
#, gcc-internal-format
msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled"
msgstr ""
-#: config/i386/i386.c:3279
+#: config/i386/i386.c:3786
#, gcc-internal-format
msgid "SSE register return with SSE disabled"
msgstr ""
-#: config/i386/i386.c:3285
+#: config/i386/i386.c:3792
#, gcc-internal-format
msgid "SSE register argument with SSE disabled"
msgstr ""
-#: config/i386/i386.c:3301
+#: config/i386/i386.c:3808
#, gcc-internal-format
msgid "x87 register return with x87 disabled"
msgstr ""
-#: config/i386/i386.c:3617
+#: config/i386/i386.c:4124
#, gcc-internal-format
msgid "SSE vector argument without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:3634
+#: config/i386/i386.c:4141
#, gcc-internal-format
msgid "MMX vector argument without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:3892
+#: config/i386/i386.c:4414
#, gcc-internal-format
msgid "SSE vector return without SSE enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:3902
+#: config/i386/i386.c:4424
#, gcc-internal-format
msgid "MMX vector return without MMX enabled changes the ABI"
msgstr ""
-#: config/i386/i386.c:5257
+#: config/i386/i386.c:5812
#, gcc-internal-format
msgid "-mstackrealign ignored for nested functions"
msgstr ""
-#: config/i386/i386.c:5259
+#: config/i386/i386.c:5814
#, gcc-internal-format
msgid "%s not supported for nested functions"
msgstr ""
-#: config/i386/i386.c:7466
+#: config/i386/i386.c:8074
#, gcc-internal-format
msgid "extended registers have no high halves"
msgstr ""
-#: config/i386/i386.c:7481
+#: config/i386/i386.c:8089
#, gcc-internal-format
msgid "unsupported operand size for extended register"
msgstr ""
-#: config/i386/i386.c:15802 config/rs6000/rs6000.c:7283
+#: config/i386/i386.c:17747 config/rs6000/rs6000.c:7640
#, gcc-internal-format
msgid "selector must be an integer constant in the range 0..%wi"
msgstr ""
-#: config/i386/i386.c:16140
+#: config/i386/i386.c:18083 config/i386/i386.c:18278
#, gcc-internal-format
msgid "shift must be an immediate"
msgstr ""
-#: config/i386/i386.c:17369 config/rs6000/rs6000.c:17641
+#: config/i386/i386.c:18337 config/i386/i386.c:18379
+#, gcc-internal-format
+msgid "index mask must be an immediate"
+msgstr ""
+
+#: config/i386/i386.c:18342 config/i386/i386.c:18384
+#, gcc-internal-format
+msgid "length mask must be an immediate"
+msgstr ""
+
+#: config/i386/i386.c:19528 config/rs6000/rs6000.c:18849
#, gcc-internal-format
msgid "%qs incompatible attribute ignored"
msgstr ""
@@ -23433,7 +23936,7 @@ msgstr ""
msgid "%q+D causes a section type conflict"
msgstr ""
-#: config/i386/cygming.h:127
+#: config/i386/cygming.h:128
#, gcc-internal-format
msgid "-f%s ignored for target (all code is position independent)"
msgstr ""
@@ -23453,73 +23956,78 @@ msgstr ""
msgid "malformed #pragma builtin"
msgstr ""
-#: config/ia64/ia64.c:538 config/m32r/m32r.c:373
+#: config/ia64/ia64.c:541 config/m32r/m32r.c:373
#, gcc-internal-format
msgid "invalid argument of %qs attribute"
msgstr ""
-#: config/ia64/ia64.c:550
+#: config/ia64/ia64.c:553
#, gcc-internal-format
msgid "%Jan address area attribute cannot be specified for local variables"
msgstr ""
-#: config/ia64/ia64.c:557
+#: config/ia64/ia64.c:560
#, gcc-internal-format
msgid "address area of %q+D conflicts with previous declaration"
msgstr ""
-#: config/ia64/ia64.c:564
+#: config/ia64/ia64.c:567
#, gcc-internal-format
msgid "%Jaddress area attribute cannot be specified for functions"
msgstr ""
-#: config/ia64/ia64.c:5090 config/pa/pa.c:339
+#: config/ia64/ia64.c:5079 config/pa/pa.c:339 config/spu/spu.c:3754
#, gcc-internal-format
msgid "value of -mfixed-range must have form REG1-REG2"
msgstr ""
-#: config/ia64/ia64.c:5117 config/pa/pa.c:366
+#: config/ia64/ia64.c:5106 config/pa/pa.c:366 config/spu/spu.c:3780
#, gcc-internal-format
msgid "%s-%s is an empty range"
msgstr ""
-#: config/ia64/ia64.c:5145
+#: config/ia64/ia64.c:5134
#, gcc-internal-format
msgid "bad value %<%s%> for -mtls-size= switch"
msgstr ""
-#: config/ia64/ia64.c:5173
+#: config/ia64/ia64.c:5162
#, gcc-internal-format
msgid "bad value %<%s%> for -mtune= switch"
msgstr ""
-#: config/ia64/ia64.c:5192
+#: config/ia64/ia64.c:5181
#, gcc-internal-format
msgid "not yet implemented: latency-optimized inline square root"
msgstr ""
+#: config/ia64/ia64.c:9857
+#, gcc-internal-format
+msgid "version attribute is not a string"
+msgstr ""
+
#: config/iq2000/iq2000.c:1814
#, gcc-internal-format
msgid "gp_offset (%ld) or end_offset (%ld) is less than zero"
msgstr ""
-#: config/iq2000/iq2000.c:2593
+#: config/iq2000/iq2000.c:2592
#, gcc-internal-format
msgid "argument %qd is not a constant"
msgstr ""
-#: config/iq2000/iq2000.c:2896 config/mt/mt.c:350 config/xtensa/xtensa.c:1787
+#: config/iq2000/iq2000.c:2894 config/mt/mt.c:350 config/xtensa/xtensa.c:1861
#, gcc-internal-format
msgid "PRINT_OPERAND_ADDRESS, null pointer"
msgstr ""
-#: config/iq2000/iq2000.c:3051
+#: config/iq2000/iq2000.c:3049
#, gcc-internal-format
msgid "PRINT_OPERAND: Unknown punctuation '%c'"
msgstr ""
-#: config/iq2000/iq2000.c:3060 config/mips/mips.c:5501
-#: config/xtensa/xtensa.c:1641
+#: config/iq2000/iq2000.c:3058 config/mips/mips.c:5491
+#: config/xtensa/xtensa.c:1715
#, gcc-internal-format
msgid "PRINT_OPERAND null pointer"
msgstr ""
@@ -23559,129 +24067,135 @@ msgstr ""
msgid "%<trap%> attribute is already used"
msgstr ""
-#: config/m68k/m68k.c:326
+#: config/m68k/m68k.c:502
#, gcc-internal-format
-msgid "cannot specify both -msep-data and -mid-shared-library"
+msgid "-mcpu=%s conflicts with -march=%s"
msgstr ""
-#: config/m68k/m68k.c:338
+#: config/m68k/m68k.c:564
#, gcc-internal-format
-msgid "-fPIC is not currently supported on the 68000 or 68010"
+msgid "-mpcrel -fPIC is not currently supported on selected cpu"
msgstr ""
-#: config/m68k/m68k.c:680 config/rs6000/rs6000.c:13849
+#: config/m68k/m68k.c:972 config/rs6000/rs6000.c:14293
#, gcc-internal-format
msgid "stack limit expression is not supported"
msgstr ""
-#: config/mips/mips.c:4708
+#: config/mips/mips.c:4693
#, gcc-internal-format
msgid ""
"-%s conflicts with the other architecture options, which specify a %s "
"processor"
msgstr ""
-#: config/mips/mips.c:4724
+#: config/mips/mips.c:4709
#, gcc-internal-format
msgid "-march=%s is not compatible with the selected ABI"
msgstr ""
-#: config/mips/mips.c:4742
+#: config/mips/mips.c:4730
#, gcc-internal-format
msgid "-mgp64 used with a 32-bit processor"
msgstr ""
-#: config/mips/mips.c:4744
+#: config/mips/mips.c:4732
#, gcc-internal-format
msgid "-mgp32 used with a 64-bit ABI"
msgstr ""
-#: config/mips/mips.c:4746
+#: config/mips/mips.c:4734
#, gcc-internal-format
msgid "-mgp64 used with a 32-bit ABI"
msgstr ""
-#: config/mips/mips.c:4764 config/mips/mips.c:4766 config/mips/mips.c:4768
-#: config/mips/mips.c:4844
+#: config/mips/mips.c:4752 config/mips/mips.c:4758 config/mips/mips.c:4834
#, gcc-internal-format
msgid "unsupported combination: %s"
msgstr ""
-#: config/mips/mips.c:4839
+#: config/mips/mips.c:4755
+#, gcc-internal-format
+msgid ""
+"-mgp32 and -mfp64 can only be combined if the target supports the mfhc1 and "
+"mthc1 instructions"
+msgstr ""
+
+#: config/mips/mips.c:4829
#, gcc-internal-format
msgid ""
"generation of Branch Likely instructions enabled, but not supported by "
"architecture"
msgstr ""
-#: config/mips/mips.c:4859
+#: config/mips/mips.c:4849
#, gcc-internal-format
msgid "%<-G%> is incompatible with %<-mabicalls%>"
msgstr ""
-#: config/mips/mips.c:4926
+#: config/mips/mips.c:4916
#, gcc-internal-format
msgid "-mips3d requires -mpaired-single"
msgstr ""
-#: config/mips/mips.c:4935
+#: config/mips/mips.c:4925
#, gcc-internal-format
msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float"
msgstr ""
-#: config/mips/mips.c:4940
+#: config/mips/mips.c:4930
#, gcc-internal-format
msgid "-mips3d/-mpaired-single must be used with -mips64"
msgstr ""
-#: config/mips/mips.c:4943
+#: config/mips/mips.c:4933
#, gcc-internal-format
msgid "-mips16 and -mdsp cannot be used together"
msgstr ""
-#: config/mips/mips.c:5438
+#: config/mips/mips.c:5428
#, gcc-internal-format
msgid "internal error: %%) found without a %%( in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5452
+#: config/mips/mips.c:5442
#, gcc-internal-format
msgid "internal error: %%] found without a %%[ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5465
+#: config/mips/mips.c:5455
#, gcc-internal-format
msgid "internal error: %%> found without a %%< in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5478
+#: config/mips/mips.c:5468
#, gcc-internal-format
msgid "internal error: %%} found without a %%{ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5492
+#: config/mips/mips.c:5482
#, gcc-internal-format
msgid "PRINT_OPERAND: unknown punctuation '%c'"
msgstr ""
-#: config/mips/mips.c:8307
+#: config/mips/mips.c:8259
#, gcc-internal-format
msgid "cannot handle inconsistent calls to %qs"
msgstr ""
-#: config/mips/mips.c:9615
+#: config/mips/mips.c:9567
#, gcc-internal-format
msgid "the cpu name must be lower case"
msgstr ""
-#: config/mips/mips.c:10293
+#: config/mips/mips.c:10244
#, gcc-internal-format
msgid "invalid argument to builtin function"
msgstr ""
#. Output assembler code to FILE to increment profiler label # LABELNO
#. for profiling a function entry.
-#: config/mips/mips.h:1989
+#: config/mips/mips.h:1977
#, gcc-internal-format
msgid "mips16 function profiling"
msgstr ""
@@ -23764,7 +24278,7 @@ msgstr ""
msgid "-g option disabled"
msgstr ""
-#: config/pa/pa.c:8222
+#: config/pa/pa.c:8224
#, gcc-internal-format
msgid ""
"alignment (%u) for %s exceeds maximum alignment for global common data. "
@@ -23835,223 +24349,228 @@ msgstr ""
msgid "junk at end of #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000-c.c:2530
+#: config/rs6000/rs6000-c.c:2549
#, gcc-internal-format
msgid "passing arg %d of %qE discards qualifiers frompointer target type"
msgstr ""
-#: config/rs6000/rs6000-c.c:2573
+#: config/rs6000/rs6000-c.c:2592
#, gcc-internal-format
msgid "invalid parameter combination for AltiVec intrinsic"
msgstr ""
-#: config/rs6000/rs6000.c:1293
+#: config/rs6000/rs6000.c:1191
+#, gcc-internal-format
+msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
+msgstr ""
+
+#: config/rs6000/rs6000.c:1202
+#, gcc-internal-format
+msgid "-m64 requires PowerPC64 architecture, enabling"
+msgstr ""
+
+#: config/rs6000/rs6000.c:1427
#, gcc-internal-format
msgid "-mmultiple is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:1300
+#: config/rs6000/rs6000.c:1434
#, gcc-internal-format
msgid "-mstring is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:1314
+#: config/rs6000/rs6000.c:1448
#, gcc-internal-format
msgid "unknown -mdebug-%s switch"
msgstr ""
-#: config/rs6000/rs6000.c:1326
+#: config/rs6000/rs6000.c:1460
#, gcc-internal-format
msgid ""
"unknown -mtraceback arg %qs; expecting %<full%>, %<partial%> or %<none%>"
msgstr ""
-#: config/rs6000/rs6000.c:1377
-#, gcc-internal-format
-msgid "AltiVec and E500 instructions cannot coexist"
-msgstr ""
-
-#: config/rs6000/rs6000.c:1602
+#: config/rs6000/rs6000.c:1827
#, gcc-internal-format
msgid "unknown -m%s= option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1818
+#: config/rs6000/rs6000.c:2040
#, gcc-internal-format
msgid "not configured for ABI: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1831
+#: config/rs6000/rs6000.c:2053
#, gcc-internal-format
msgid "Using darwin64 ABI"
msgstr ""
-#: config/rs6000/rs6000.c:1836
+#: config/rs6000/rs6000.c:2058
#, gcc-internal-format
msgid "Using old darwin ABI"
msgstr ""
-#: config/rs6000/rs6000.c:1843
+#: config/rs6000/rs6000.c:2065
#, gcc-internal-format
msgid "Using IBM extended precision long double"
msgstr ""
-#: config/rs6000/rs6000.c:1849
+#: config/rs6000/rs6000.c:2071
#, gcc-internal-format
msgid "Using IEEE extended precision long double"
msgstr ""
-#: config/rs6000/rs6000.c:1854
+#: config/rs6000/rs6000.c:2076
#, gcc-internal-format
msgid "unknown ABI specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1881
+#: config/rs6000/rs6000.c:2103
#, gcc-internal-format
msgid "invalid option for -mfloat-gprs: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:1891
+#: config/rs6000/rs6000.c:2113
#, gcc-internal-format
msgid "Unknown switch -mlong-double-%s"
msgstr ""
-#: config/rs6000/rs6000.c:1912
+#: config/rs6000/rs6000.c:2134
#, gcc-internal-format
msgid ""
"-malign-power is not supported for 64-bit Darwin; it is incompatible with "
"the installed C and C++ libraries"
msgstr ""
-#: config/rs6000/rs6000.c:1920
+#: config/rs6000/rs6000.c:2142
#, gcc-internal-format
msgid "unknown -malign-XXXXX option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:4338
+#: config/rs6000/rs6000.c:4640
#, gcc-internal-format
msgid ""
"GCC vector returned by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:4411
+#: config/rs6000/rs6000.c:4713
#, gcc-internal-format
msgid ""
"cannot return value in vector register because altivec instructions are "
"disabled, use -maltivec to enable them"
msgstr ""
-#: config/rs6000/rs6000.c:4669
+#: config/rs6000/rs6000.c:4971
#, gcc-internal-format
msgid ""
"cannot pass argument in vector register because altivec instructions are "
"disabled, use -maltivec to enable them"
msgstr ""
-#: config/rs6000/rs6000.c:5526
+#: config/rs6000/rs6000.c:5858
#, gcc-internal-format
msgid ""
"GCC vector passed by reference: non-standard ABI extension with no "
"compatibility guarantee"
msgstr ""
-#: config/rs6000/rs6000.c:6697
+#: config/rs6000/rs6000.c:7058
#, gcc-internal-format
msgid "argument 1 must be a 5-bit signed literal"
msgstr ""
-#: config/rs6000/rs6000.c:6800 config/rs6000/rs6000.c:7594
+#: config/rs6000/rs6000.c:7161 config/rs6000/rs6000.c:7949
#, gcc-internal-format
msgid "argument 2 must be a 5-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:6840
+#: config/rs6000/rs6000.c:7201
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:6893
+#: config/rs6000/rs6000.c:7254
#, gcc-internal-format
msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:7055
+#: config/rs6000/rs6000.c:7416
#, gcc-internal-format
msgid "argument 3 must be a 4-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:7227
+#: config/rs6000/rs6000.c:7585
#, gcc-internal-format
msgid "argument to %qs must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:7371
+#: config/rs6000/rs6000.c:7727
#, gcc-internal-format
msgid "unresolved overload for Altivec builtin %qF"
msgstr ""
-#: config/rs6000/rs6000.c:7453
+#: config/rs6000/rs6000.c:7809
#, gcc-internal-format
msgid "argument to dss must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:7714
+#: config/rs6000/rs6000.c:8069
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:7786
+#: config/rs6000/rs6000.c:8141
#, gcc-internal-format
msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:13812
+#: config/rs6000/rs6000.c:14256
#, gcc-internal-format
msgid "stack frame too large"
msgstr ""
-#: config/rs6000/rs6000.c:16341
+#: config/rs6000/rs6000.c:16787
#, gcc-internal-format
msgid "no profiling of 64-bit code for this ABI"
msgstr ""
-#: config/rs6000/rs6000.c:17451
+#: config/rs6000/rs6000.c:18659
#, gcc-internal-format
msgid "use of %<long%> in AltiVec types is invalid for 64-bit code"
msgstr ""
-#: config/rs6000/rs6000.c:17453
+#: config/rs6000/rs6000.c:18661
#, gcc-internal-format
msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>"
msgstr ""
-#: config/rs6000/rs6000.c:17457
+#: config/rs6000/rs6000.c:18665
#, gcc-internal-format
msgid "use of %<long long%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:17459
+#: config/rs6000/rs6000.c:18667
#, gcc-internal-format
msgid "use of %<double%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:17461
+#: config/rs6000/rs6000.c:18669
#, gcc-internal-format
msgid "use of %<long double%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:17463
+#: config/rs6000/rs6000.c:18671
#, gcc-internal-format
msgid "use of boolean types in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:17465
+#: config/rs6000/rs6000.c:18673
#, gcc-internal-format
msgid "use of %<complex%> in AltiVec types is invalid"
msgstr ""
-#: config/rs6000/rs6000.c:17467
+#: config/rs6000/rs6000.c:18675
#, gcc-internal-format
msgid "use of decimal floating point types in AltiVec types is invalid"
msgstr ""
@@ -24077,21 +24596,22 @@ msgid ""
"-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
msgstr ""
-#. The Darwin ABI always includes AltiVec, can't be (validly) turned off.
-#: config/rs6000/darwin.h:81
+#: config/rs6000/e500.h:42
#, gcc-internal-format
-msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
+msgid "AltiVec and E500 instructions cannot coexist"
msgstr ""
-#: config/rs6000/darwin.h:92
+#: config/rs6000/e500.h:44
#, gcc-internal-format
-msgid "-m64 requires PowerPC64 architecture, enabling"
+msgid "64-bit E500 not supported"
+msgstr ""
+
+#: config/rs6000/e500.h:46
+#, gcc-internal-format
+msgid "E500 and FPRs not supported"
msgstr ""
-#. See note below.
-#. if (!rs6000_explicit_options.long_double)
-#. rs6000_long_double_type_size = 128;
-#: config/rs6000/eabispe.h:45 config/rs6000/linuxspe.h:62
+#: config/rs6000/eabispe.h:44 config/rs6000/linuxspe.h:43
#, gcc-internal-format
msgid "-m64 not supported in this configuration"
msgstr ""
@@ -24113,7 +24633,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:1506
+#: config/rs6000/rs6000.h:1544
#, gcc-internal-format
msgid "RETURN_ADDRESS_OFFSET not supported"
msgstr ""
@@ -24176,120 +24696,115 @@ msgstr ""
msgid "-msecure-plt not supported by your assembler"
msgstr ""
-#: config/rs6000/sysv4.h:220
-#, gcc-internal-format
-msgid "-msoft-float and -mlong-double-128 not supported"
-msgstr ""
-
-#: config/rs6000/sysv4.h:237
+#: config/rs6000/sysv4.h:233
#, gcc-internal-format
msgid "-m%s not supported in this configuration"
msgstr ""
-#: config/s390/s390.c:1352
+#: config/s390/s390.c:1370
#, gcc-internal-format
msgid "stack guard value must be an exact power of 2"
msgstr ""
-#: config/s390/s390.c:1359
+#: config/s390/s390.c:1377
#, gcc-internal-format
msgid "stack size must be an exact power of 2"
msgstr ""
-#: config/s390/s390.c:1404
+#: config/s390/s390.c:1422
#, gcc-internal-format
msgid "z/Architecture mode not supported on %s"
msgstr ""
-#: config/s390/s390.c:1406
+#: config/s390/s390.c:1424
#, gcc-internal-format
msgid "64-bit ABI not supported in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:1417
+#: config/s390/s390.c:1435
#, gcc-internal-format
msgid ""
"-mbackchain -mpacked-stack -mhard-float are not supported in combination"
msgstr ""
-#: config/s390/s390.c:1423
-#, gcc-internal-format
-msgid "-mstack-size implies use of -mstack-guard"
-msgstr ""
-
-#: config/s390/s390.c:1425
+#: config/s390/s390.c:1441
#, gcc-internal-format
msgid "stack size must be greater than the stack guard value"
msgstr ""
-#: config/s390/s390.c:1427
+#: config/s390/s390.c:1443
#, gcc-internal-format
msgid "stack size must not be greater than 64k"
msgstr ""
-#: config/s390/s390.c:1430
+#: config/s390/s390.c:1446
#, gcc-internal-format
msgid "-mstack-guard implies use of -mstack-size"
msgstr ""
-#: config/s390/s390.c:6596
+#: config/s390/s390.c:6609
#, gcc-internal-format
msgid "total size of local variables exceeds architecture limit"
msgstr ""
-#: config/s390/s390.c:7252
+#: config/s390/s390.c:7261
+#, gcc-internal-format
+msgid "frame size of function %qs is "
+msgstr ""
+
+#: config/s390/s390.c:7291
#, gcc-internal-format
msgid "frame size of %qs is "
msgstr ""
-#: config/s390/s390.c:7256
+#: config/s390/s390.c:7295
#, gcc-internal-format
msgid "%qs uses dynamic stack allocation"
msgstr ""
-#: config/score/score.c:508
+#: config/score/score.c:514
#, gcc-internal-format
msgid "-fPIC and -G are incompatible"
msgstr ""
-#: config/sh/sh.c:6624
+#: config/sh/sh.c:6948
#, gcc-internal-format
msgid "__builtin_saveregs not supported by this subtarget"
msgstr ""
-#: config/sh/sh.c:7629
+#: config/sh/sh.c:7955
#, gcc-internal-format
msgid "%qs attribute only applies to interrupt functions"
msgstr ""
-#: config/sh/sh.c:7715
+#: config/sh/sh.c:8041
#, gcc-internal-format
msgid "attribute interrupt_handler is not compatible with -m5-compact"
msgstr ""
#. The argument must be a constant string.
-#: config/sh/sh.c:7737
+#: config/sh/sh.c:8063
#, gcc-internal-format
msgid "%qs attribute argument not a string constant"
msgstr ""
#. The argument must be a constant integer.
-#: config/sh/sh.c:7762
+#: config/sh/sh.c:8088
#, gcc-internal-format
msgid "%qs attribute argument not an integer constant"
msgstr ""
-#: config/sh/sh.c:9814
+#: config/sh/sh.c:10189
#, gcc-internal-format
msgid "r0 needs to be available as a call-clobbered register"
msgstr ""
-#: config/sh/sh.c:9835
+#: config/sh/sh.c:10210
#, gcc-internal-format
msgid "Need a second call-clobbered general purpose register"
msgstr ""
-#: config/sh/sh.c:9843
+#: config/sh/sh.c:10218
#, gcc-internal-format
msgid "Need a call-clobbered target register"
msgstr ""
@@ -24317,7 +24832,7 @@ msgstr ""
msgid "%s %q+D %s after being referenced with dllimport linkage"
msgstr ""
-#: config/sh/symbian.c:892 cp/tree.c:2411
+#: config/sh/symbian.c:892 cp/tree.c:2683
#, gcc-internal-format
msgid "lang_* check: failed in %s, at %s:%d"
msgstr ""
@@ -24332,7 +24847,7 @@ msgstr ""
#. Relaxation isn't yet supported for SHmedia
#. After reload, if conversion does little good but can cause ICEs: - find_if_block doesn't do anything for SH because we don't have conditional execution patterns. (We use conditional move patterns, which are handled differently, and only before reload). - find_cond_trap doesn't do anything for the SH because we #. don't have conditional traps. - find_if_case_1 uses redirect_edge_and_branch_force in the only path that does an optimization, and this causes an ICE when branch targets are in registers. - find_if_case_2 doesn't do anything for the SHmedia after reload except when it can redirect a tablejump - and that's rather rare.
#. -fprofile-arcs needs a working libgcov . In unified tree configurations with newlib, this requires to configure with --with-newlib --with-headers. But there is no way to check here we have a working libgcov, so just assume that we have.
-#: config/sh/sh.h:617
+#: config/sh/sh.h:627
#, gcc-internal-format
msgid "profiling is still experimental for this target"
msgstr ""
@@ -24349,26 +24864,61 @@ msgstr ""
#. Never run scheduling before reload, since that can break global alloc, and generates slower code anyway due to the pressure on R0.
#. Enable sched1 for SH4; ready queue will be reordered by the target hooks when pressure is high. We can not do this for SH3 and lower as they give spill failures for R0.
#. ??? Current exception handling places basic block boundaries after call_insns. It causes the high pressure on R0 and gives spill failures for R0 in reload. See PR 22553 and the thread on gcc-patches <http://gcc.gnu.org/ml/gcc-patches/2005-10/msg00816.html>.
-#: config/sh/sh.h:715
+#: config/sh/sh.h:728
#, gcc-internal-format
msgid "ignoring -fschedule-insns because of exception handling bug"
msgstr ""
-#: config/sparc/sparc.c:671
+#: config/sparc/sparc.c:672
#, gcc-internal-format
msgid "%s is not supported by this configuration"
msgstr ""
-#: config/sparc/sparc.c:678
+#: config/sparc/sparc.c:679
#, gcc-internal-format
msgid "-mlong-double-64 not allowed with -m64"
msgstr ""
-#: config/sparc/sparc.c:703
+#: config/sparc/sparc.c:704
#, gcc-internal-format
msgid "-mcmodel= is not supported on 32 bit systems"
msgstr ""
+#: config/spu/spu-c.c:78
+#, gcc-internal-format
+msgid "insufficient arguments to overloaded function %s"
+msgstr ""
+
+#: config/spu/spu-c.c:113
+#, gcc-internal-format
+msgid "too many arguments to overloaded function %s"
+msgstr ""
+
+#: config/spu/spu-c.c:125
+#, gcc-internal-format
+msgid "parameter list does not match a valid signature for %s()"
+msgstr ""
+
+#: config/spu/spu.c:2912
+#, gcc-internal-format
+msgid "`%s' attribute ignored"
+msgstr ""
+
+#: config/spu/spu.c:4902
+#, gcc-internal-format
+msgid "%s expects an integer literal in the range [%d, %d]."
+msgstr ""
+
+#: config/spu/spu.c:4922
+#, gcc-internal-format
+msgid "%s expects an integer literal in the range [%d, %d]. ("
+msgstr ""
+
+#: config/spu/spu.c:4952
+#, gcc-internal-format
+msgid "%d least significant bits of %s are ignored."
+msgstr ""
+
#: config/stormy16/stormy16.c:500
#, gcc-internal-format
msgid "constant halfword load operand out of range"
@@ -24379,32 +24929,32 @@ msgstr ""
msgid "constant arithmetic operand out of range"
msgstr ""
-#: config/stormy16/stormy16.c:1111
+#: config/stormy16/stormy16.c:1109
#, gcc-internal-format
msgid "local variable memory requirements exceed capacity"
msgstr ""
-#: config/stormy16/stormy16.c:1277
+#: config/stormy16/stormy16.c:1275
#, gcc-internal-format
msgid "function_profiler support"
msgstr ""
-#: config/stormy16/stormy16.c:1366
+#: config/stormy16/stormy16.c:1364
#, gcc-internal-format
msgid "cannot use va_start in interrupt function"
msgstr ""
-#: config/stormy16/stormy16.c:1909
+#: config/stormy16/stormy16.c:1907
#, gcc-internal-format
msgid "switch statement of size %lu entries too large"
msgstr ""
-#: config/stormy16/stormy16.c:2277
+#: config/stormy16/stormy16.c:2275
#, gcc-internal-format
msgid "%<__BELOW100__%> attribute only applies to variables"
msgstr ""
-#: config/stormy16/stormy16.c:2284
+#: config/stormy16/stormy16.c:2282
#, gcc-internal-format
msgid "__BELOW100__ attribute not allowed with auto storage class"
msgstr ""
@@ -24529,236 +25079,250 @@ msgstr ""
msgid "too much stack space to prepare: %d"
msgstr ""
-#: config/xtensa/xtensa.c:1519
+#: config/xtensa/xtensa.c:1604
#, gcc-internal-format
msgid "boolean registers required for the floating-point option"
msgstr ""
-#: config/xtensa/xtensa.c:1565
+#: config/xtensa/xtensa.c:1639
#, gcc-internal-format
msgid "-f%s is not supported with CONST16 instructions"
msgstr ""
-#: config/xtensa/xtensa.c:1570
+#: config/xtensa/xtensa.c:1644
#, gcc-internal-format
msgid "PIC is required but not supported with CONST16 instructions"
msgstr ""
-#: config/xtensa/xtensa.c:2428
+#: config/xtensa/xtensa.c:2465 config/xtensa/xtensa.c:2485
+#, gcc-internal-format
+msgid "bad builtin code"
+msgstr ""
+
+#: config/xtensa/xtensa.c:2593
#, gcc-internal-format
msgid "only uninitialized variables can be placed in a .bss section"
msgstr ""
-#: ada/misc.c:267
+#: ada/misc.c:270
#, gcc-internal-format
msgid "missing argument to \"-%s\""
msgstr ""
-#: ada/misc.c:312
+#: ada/misc.c:315
#, gcc-internal-format
msgid "%<-gnat%> misspelled as %<-gant%>"
msgstr ""
-#: cp/call.c:2412
+#: cp/call.c:2440
#, gcc-internal-format
msgid "%s %D(%T, %T, %T) <built-in>"
msgstr ""
-#: cp/call.c:2417
+#: cp/call.c:2445
#, gcc-internal-format
msgid "%s %D(%T, %T) <built-in>"
msgstr ""
-#: cp/call.c:2421
+#: cp/call.c:2449
#, gcc-internal-format
msgid "%s %D(%T) <built-in>"
msgstr ""
-#: cp/call.c:2425
+#: cp/call.c:2453
#, gcc-internal-format
msgid "%s %T <conversion>"
msgstr ""
-#: cp/call.c:2427
+#: cp/call.c:2455
#, gcc-internal-format
msgid "%s %+#D <near match>"
msgstr ""
-#: cp/call.c:2429 cp/pt.c:1333
+#: cp/call.c:2457 cp/pt.c:1349
#, gcc-internal-format
msgid "%s %+#D"
msgstr ""
-#: cp/call.c:2651
+#: cp/call.c:2679
#, gcc-internal-format
msgid "conversion from %qT to %qT is ambiguous"
msgstr ""
-#: cp/call.c:2804 cp/call.c:2822 cp/call.c:2885
+#: cp/call.c:2832 cp/call.c:2850 cp/call.c:2913
#, gcc-internal-format
msgid "no matching function for call to %<%D(%A)%>"
msgstr ""
-#: cp/call.c:2825 cp/call.c:2888
+#: cp/call.c:2853 cp/call.c:2916
#, gcc-internal-format
msgid "call of overloaded %<%D(%A)%> is ambiguous"
msgstr ""
#. It's no good looking for an overloaded operator() on a
#. pointer-to-member-function.
-#: cp/call.c:2960
+#: cp/call.c:2988
#, gcc-internal-format
msgid ""
"pointer-to-member function %E cannot be called without an object; consider "
"using .* or ->*"
msgstr ""
-#: cp/call.c:3034
+#: cp/call.c:3062
#, gcc-internal-format
msgid "no match for call to %<(%T) (%A)%>"
msgstr ""
-#: cp/call.c:3043
+#: cp/call.c:3071
#, gcc-internal-format
msgid "call of %<(%T) (%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:3081
+#: cp/call.c:3109
#, gcc-internal-format
msgid "%s for ternary %<operator?:%> in %<%E ? %E : %E%>"
msgstr ""
-#: cp/call.c:3087
+#: cp/call.c:3115
#, gcc-internal-format
msgid "%s for %<operator%s%> in %<%E%s%>"
msgstr ""
-#: cp/call.c:3091
+#: cp/call.c:3119
#, gcc-internal-format
msgid "%s for %<operator[]%> in %<%E[%E]%>"
msgstr ""
-#: cp/call.c:3096
+#: cp/call.c:3124
#, gcc-internal-format
msgid "%s for %qs in %<%s %E%>"
msgstr ""
-#: cp/call.c:3101
+#: cp/call.c:3129
#, gcc-internal-format
msgid "%s for %<operator%s%> in %<%E %s %E%>"
msgstr ""
-#: cp/call.c:3104
+#: cp/call.c:3132
#, gcc-internal-format
msgid "%s for %<operator%s%> in %<%s%E%>"
msgstr ""
-#: cp/call.c:3196
+#: cp/call.c:3224
#, gcc-internal-format
msgid "ISO C++ forbids omitting the middle term of a ?: expression"
msgstr ""
-#: cp/call.c:3277
+#: cp/call.c:3306
#, gcc-internal-format
-msgid "%qE has type %<void%> and is not a throw-expression"
+msgid ""
+"second operand to the conditional operator is of type %<void%>, but the "
+"third operand is neither a throw-expression nor of type %<void%>"
msgstr ""
-#: cp/call.c:3316 cp/call.c:3536
+#: cp/call.c:3311
+#, gcc-internal-format
+msgid ""
+"third operand to the conditional operator is of type %<void%>, but the "
+"second operand is neither a throw-expression nor of type %<void%>"
+msgstr ""
+
+#: cp/call.c:3352 cp/call.c:3572
#, gcc-internal-format
msgid "operands to ?: have different types %qT and %qT"
msgstr ""
-#: cp/call.c:3490
+#: cp/call.c:3526
#, gcc-internal-format
msgid "enumeral mismatch in conditional expression: %qT vs %qT"
msgstr ""
-#: cp/call.c:3497
+#: cp/call.c:3533
#, gcc-internal-format
msgid "enumeral and non-enumeral type in conditional expression"
msgstr ""
-#: cp/call.c:3794
+#: cp/call.c:3830
#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
msgstr ""
-#: cp/call.c:3867
+#: cp/call.c:3903
#, gcc-internal-format
msgid "comparison between %q#T and %q#T"
msgstr ""
-#: cp/call.c:4123
+#: cp/call.c:4164
#, gcc-internal-format
msgid "no suitable %<operator %s%> for %qT"
msgstr ""
-#: cp/call.c:4140
+#: cp/call.c:4182
#, gcc-internal-format
msgid "%q+#D is private"
msgstr ""
-#: cp/call.c:4142
+#: cp/call.c:4184
#, gcc-internal-format
msgid "%q+#D is protected"
msgstr ""
-#: cp/call.c:4144
+#: cp/call.c:4186
#, gcc-internal-format
msgid "%q+#D is inaccessible"
msgstr ""
-#: cp/call.c:4145
+#: cp/call.c:4187
#, gcc-internal-format
msgid "within this context"
msgstr ""
-#: cp/call.c:4234 cp/cvt.c:265
+#: cp/call.c:4276 cp/cvt.c:263
#, gcc-internal-format
msgid "invalid conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:4236
+#: cp/call.c:4278
#, gcc-internal-format
msgid " initializing argument %P of %qD"
msgstr ""
-#: cp/call.c:4248
+#: cp/call.c:4290
#, gcc-internal-format
msgid "passing NULL to non-pointer argument %P of %qD"
msgstr ""
-#: cp/call.c:4251
+#: cp/call.c:4293
#, gcc-internal-format
msgid "converting to non-pointer type %qT from NULL"
msgstr ""
-#: cp/call.c:4259
+#: cp/call.c:4301
#, gcc-internal-format
msgid "passing %qT for argument %P to %qD"
msgstr ""
-#: cp/call.c:4262
+#: cp/call.c:4304
#, gcc-internal-format
msgid "converting to %qT from %qT"
msgstr ""
-#: cp/call.c:4402
+#: cp/call.c:4444
#, gcc-internal-format
msgid "cannot bind bitfield %qE to %qT"
msgstr ""
-#: cp/call.c:4405 cp/call.c:4421
+#: cp/call.c:4447 cp/call.c:4463
#, gcc-internal-format
msgid "cannot bind packed field %qE to %qT"
msgstr ""
-#: cp/call.c:4408
+#: cp/call.c:4450
#, gcc-internal-format
msgid "cannot bind rvalue %qE to %qT"
msgstr ""
-#: cp/call.c:4522
+#: cp/call.c:4564
#, gcc-internal-format
msgid ""
"cannot pass objects of non-POD type %q#T through %<...%>; call will abort at "
@@ -24766,189 +25330,189 @@ msgid ""
msgstr ""
#. Undefined behavior [expr.call] 5.2.2/7.
-#: cp/call.c:4550
+#: cp/call.c:4592
#, gcc-internal-format
msgid ""
"cannot receive objects of non-POD type %q#T through %<...%>; call will abort "
"at runtime"
msgstr ""
-#: cp/call.c:4593
+#: cp/call.c:4635
#, gcc-internal-format
msgid "the default argument for parameter %d of %qD has not yet been parsed"
msgstr ""
-#: cp/call.c:4672
+#: cp/call.c:4714
#, gcc-internal-format
msgid "argument of function call might be a candidate for a format attribute"
msgstr ""
-#: cp/call.c:4809
+#: cp/call.c:4860
#, gcc-internal-format
msgid "passing %qT as %<this%> argument of %q#D discards qualifiers"
msgstr ""
-#: cp/call.c:4828
+#: cp/call.c:4879
#, gcc-internal-format
msgid "%qT is not an accessible base of %qT"
msgstr ""
-#: cp/call.c:5084
+#: cp/call.c:5130
#, gcc-internal-format
msgid "could not find class$ field in java interface type %qT"
msgstr ""
-#: cp/call.c:5327
+#: cp/call.c:5371
#, gcc-internal-format
msgid "call to non-function %qD"
msgstr ""
-#: cp/call.c:5449
+#: cp/call.c:5493
#, gcc-internal-format
msgid "no matching function for call to %<%T::%s(%A)%#V%>"
msgstr ""
-#: cp/call.c:5467
+#: cp/call.c:5511
#, gcc-internal-format
msgid "call of overloaded %<%s(%A)%> is ambiguous"
msgstr ""
-#: cp/call.c:5493
+#: cp/call.c:5537
#, gcc-internal-format
msgid "cannot call member function %qD without object"
msgstr ""
-#: cp/call.c:6099
+#: cp/call.c:6157
#, gcc-internal-format
msgid "passing %qT chooses %qT over %qT"
msgstr ""
-#: cp/call.c:6101 cp/name-lookup.c:4259 cp/name-lookup.c:4680
+#: cp/call.c:6159 cp/name-lookup.c:4273 cp/name-lookup.c:4694
#, gcc-internal-format
msgid " in call to %qD"
msgstr ""
-#: cp/call.c:6158
+#: cp/call.c:6216
#, gcc-internal-format
msgid "choosing %qD over %qD"
msgstr ""
-#: cp/call.c:6159
+#: cp/call.c:6217
#, gcc-internal-format
msgid " for conversion from %qT to %qT"
msgstr ""
-#: cp/call.c:6161
+#: cp/call.c:6219
#, gcc-internal-format
msgid " because conversion sequence for the argument is better"
msgstr ""
-#: cp/call.c:6275
+#: cp/call.c:6333
#, gcc-internal-format
msgid ""
"ISO C++ says that these are ambiguous, even though the worst conversion for "
"the first is better than the worst conversion for the second:"
msgstr ""
-#: cp/call.c:6419
+#: cp/call.c:6477
#, gcc-internal-format
msgid "could not convert %qE to %qT"
msgstr ""
-#: cp/call.c:6552
+#: cp/call.c:6610
#, gcc-internal-format
msgid ""
"invalid initialization of non-const reference of type %qT from a temporary "
"of type %qT"
msgstr ""
-#: cp/call.c:6556
+#: cp/call.c:6614
#, gcc-internal-format
msgid ""
"invalid initialization of reference of type %qT from expression of type %qT"
msgstr ""
-#: cp/class.c:280
+#: cp/class.c:281
#, gcc-internal-format
msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
msgstr ""
-#: cp/class.c:938
+#: cp/class.c:940
#, gcc-internal-format
msgid "Java class %qT cannot have a destructor"
msgstr ""
-#: cp/class.c:940
+#: cp/class.c:942
#, gcc-internal-format
msgid "Java class %qT cannot have an implicit non-trivial destructor"
msgstr ""
-#: cp/class.c:1047
+#: cp/class.c:1041
#, gcc-internal-format
msgid "repeated using declaration %q+D"
msgstr ""
-#: cp/class.c:1049
+#: cp/class.c:1043
#, gcc-internal-format
msgid "using declaration %q+D conflicts with a previous using declaration"
msgstr ""
-#: cp/class.c:1054
+#: cp/class.c:1048
#, gcc-internal-format
msgid "%q+#D cannot be overloaded"
msgstr ""
-#: cp/class.c:1055
+#: cp/class.c:1049
#, gcc-internal-format
msgid "with %q+#D"
msgstr ""
-#: cp/class.c:1117
+#: cp/class.c:1116
#, gcc-internal-format
msgid "conflicting access specifications for method %q+D, ignored"
msgstr ""
-#: cp/class.c:1120
+#: cp/class.c:1119
#, gcc-internal-format
msgid "conflicting access specifications for field %qE, ignored"
msgstr ""
-#: cp/class.c:1181 cp/class.c:1189
+#: cp/class.c:1180 cp/class.c:1188
#, gcc-internal-format
msgid "%q+D invalid in %q#T"
msgstr ""
-#: cp/class.c:1182
+#: cp/class.c:1181
#, gcc-internal-format
msgid " because of local method %q+#D with same name"
msgstr ""
-#: cp/class.c:1190
+#: cp/class.c:1189
#, gcc-internal-format
msgid " because of local member %q+#D with same name"
msgstr ""
-#: cp/class.c:1233
+#: cp/class.c:1232
#, gcc-internal-format
msgid "base class %q#T has a non-virtual destructor"
msgstr ""
-#: cp/class.c:1546
+#: cp/class.c:1545
#, gcc-internal-format
msgid "all member functions in class %qT are private"
msgstr ""
-#: cp/class.c:1558
+#: cp/class.c:1557
#, gcc-internal-format
msgid "%q#T only defines a private destructor and has no friends"
msgstr ""
-#: cp/class.c:1602
+#: cp/class.c:1601
#, gcc-internal-format
msgid "%q#T only defines private constructors and has no friends"
msgstr ""
-#: cp/class.c:1995
+#: cp/class.c:1994
#, gcc-internal-format
msgid "no unique final overrider for %qD in %qT"
msgstr ""
@@ -24964,17 +25528,17 @@ msgstr ""
msgid " by %q+D"
msgstr ""
-#: cp/class.c:2466 cp/decl2.c:1042
+#: cp/class.c:2466 cp/decl2.c:1032
#, gcc-internal-format
msgid "%q+#D invalid; an anonymous union can only have non-static data members"
msgstr ""
-#: cp/class.c:2472 cp/decl2.c:1048
+#: cp/class.c:2472 cp/decl2.c:1038
#, gcc-internal-format
msgid "private member %q+#D in anonymous union"
msgstr ""
-#: cp/class.c:2474 cp/decl2.c:1050
+#: cp/class.c:2474 cp/decl2.c:1040
#, gcc-internal-format
msgid "protected member %q+#D in anonymous union"
msgstr ""
@@ -25157,7 +25721,7 @@ msgid ""
"version of GCC"
msgstr ""
-#: cp/class.c:4963 cp/parser.c:13482
+#: cp/class.c:4963 cp/parser.c:13738
#, gcc-internal-format
msgid "redefinition of %q#T"
msgstr ""
@@ -25217,7 +25781,7 @@ 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:6303 cp/decl.c:1192 cp/name-lookup.c:509
+#: cp/class.c:6303 cp/decl.c:1195 cp/name-lookup.c:527
#, gcc-internal-format
msgid "declaration of %q#D"
msgstr ""
@@ -25232,7 +25796,7 @@ msgstr ""
msgid "continue statement not within loop or switch"
msgstr ""
-#: cp/cp-gimplify.c:373
+#: cp/cp-gimplify.c:371
#, gcc-internal-format
msgid "statement with no effect"
msgstr ""
@@ -25247,7 +25811,7 @@ msgstr ""
msgid "conversion of %qE from %qT to %qT is ambiguous"
msgstr ""
-#: cp/cvt.c:170 cp/cvt.c:239 cp/cvt.c:286
+#: cp/cvt.c:170 cp/cvt.c:239 cp/cvt.c:284
#, gcc-internal-format
msgid "cannot convert %qE from type %qT to type %qT"
msgstr ""
@@ -25257,57 +25821,57 @@ msgstr ""
msgid "pointer to member cast from %qT to %qT is via virtual base"
msgstr ""
-#: cp/cvt.c:500
+#: cp/cvt.c:498
#, gcc-internal-format
msgid "conversion from %qT to %qT discards qualifiers"
msgstr ""
-#: cp/cvt.c:518 cp/typeck.c:5125
+#: cp/cvt.c:516 cp/typeck.c:5214
#, gcc-internal-format
msgid "casting %qT to %qT does not dereference pointer"
msgstr ""
-#: cp/cvt.c:545
+#: cp/cvt.c:543
#, gcc-internal-format
msgid "cannot convert type %qT to type %qT"
msgstr ""
-#: cp/cvt.c:681
+#: cp/cvt.c:679
#, gcc-internal-format
msgid "conversion from %q#T to %q#T"
msgstr ""
-#: cp/cvt.c:693 cp/cvt.c:713
+#: cp/cvt.c:691 cp/cvt.c:711
#, gcc-internal-format
msgid "%q#T used where a %qT was expected"
msgstr ""
-#: cp/cvt.c:728
+#: cp/cvt.c:726
#, gcc-internal-format
msgid "%q#T used where a floating point value was expected"
msgstr ""
-#: cp/cvt.c:775
+#: cp/cvt.c:773
#, gcc-internal-format
msgid "conversion from %qT to non-scalar type %qT requested"
msgstr ""
-#: cp/cvt.c:809
+#: cp/cvt.c:807
#, gcc-internal-format
msgid "pseudo-destructor is not called"
msgstr ""
-#: cp/cvt.c:869
+#: cp/cvt.c:867
#, gcc-internal-format
msgid "object of incomplete type %qT will not be accessed in %s"
msgstr ""
-#: cp/cvt.c:874
+#: cp/cvt.c:872
#, gcc-internal-format
msgid "object of type %qT will not be accessed in %s"
msgstr ""
-#: cp/cvt.c:890
+#: cp/cvt.c:888
#, gcc-internal-format
msgid "object %qE of incomplete type %qT will not be accessed in %s"
msgstr ""
@@ -25340,122 +25904,122 @@ msgstr ""
msgid "converting NULL to non-pointer type"
msgstr ""
-#: cp/cvt.c:1164
+#: cp/cvt.c:1197
#, gcc-internal-format
msgid "ambiguous default type conversion from %qT"
msgstr ""
-#: cp/cvt.c:1166
+#: cp/cvt.c:1199
#, gcc-internal-format
msgid " candidate conversions include %qD and %qD"
msgstr ""
-#: cp/decl.c:1059
+#: cp/decl.c:1062
#, gcc-internal-format
msgid "%qD was declared %<extern%> and later %<static%>"
msgstr ""
-#: cp/decl.c:1060 cp/decl.c:1593 objc/objc-act.c:2920 objc/objc-act.c:7489
+#: cp/decl.c:1063 cp/decl.c:1597 objc/objc-act.c:2931 objc/objc-act.c:7504
#, gcc-internal-format
msgid "previous declaration of %q+D"
msgstr ""
-#: cp/decl.c:1093
+#: cp/decl.c:1096
#, gcc-internal-format
msgid "declaration of %qF throws different exceptions"
msgstr ""
-#: cp/decl.c:1094
+#: cp/decl.c:1097
#, gcc-internal-format
msgid "from previous declaration %q+F"
msgstr ""
-#: cp/decl.c:1146
+#: cp/decl.c:1149
#, gcc-internal-format
msgid "function %q+D redeclared as inline"
msgstr ""
-#: cp/decl.c:1148
+#: cp/decl.c:1151
#, gcc-internal-format
msgid "previous declaration of %q+D with attribute noinline"
msgstr ""
-#: cp/decl.c:1155
+#: cp/decl.c:1158
#, gcc-internal-format
msgid "function %q+D redeclared with attribute noinline"
msgstr ""
-#: cp/decl.c:1157
+#: cp/decl.c:1160
#, gcc-internal-format
msgid "previous declaration of %q+D was inline"
msgstr ""
-#: cp/decl.c:1179 cp/decl.c:1252
+#: cp/decl.c:1182 cp/decl.c:1255
#, gcc-internal-format
msgid "shadowing %s function %q#D"
msgstr ""
-#: cp/decl.c:1188
+#: cp/decl.c:1191
#, gcc-internal-format
msgid "library function %q#D redeclared as non-function %q#D"
msgstr ""
-#: cp/decl.c:1193
+#: cp/decl.c:1196
#, gcc-internal-format
msgid "conflicts with built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1247 cp/decl.c:1356 cp/decl.c:1372
+#: cp/decl.c:1250 cp/decl.c:1359 cp/decl.c:1375
#, gcc-internal-format
msgid "new declaration %q#D"
msgstr ""
-#: cp/decl.c:1248
+#: cp/decl.c:1251
#, gcc-internal-format
msgid "ambiguates built-in declaration %q#D"
msgstr ""
-#: cp/decl.c:1320
+#: cp/decl.c:1323
#, gcc-internal-format
msgid "%q#D redeclared as different kind of symbol"
msgstr ""
-#: cp/decl.c:1323
+#: cp/decl.c:1326
#, gcc-internal-format
msgid "previous declaration of %q+#D"
msgstr ""
-#: cp/decl.c:1342
+#: cp/decl.c:1345
#, gcc-internal-format
msgid "declaration of template %q#D"
msgstr ""
-#: cp/decl.c:1343 cp/name-lookup.c:510
+#: cp/decl.c:1346 cp/name-lookup.c:528
#, gcc-internal-format
msgid "conflicts with previous declaration %q+#D"
msgstr ""
-#: cp/decl.c:1357 cp/decl.c:1373
+#: cp/decl.c:1360 cp/decl.c:1376
#, gcc-internal-format
msgid "ambiguates old declaration %q+#D"
msgstr ""
-#: cp/decl.c:1365
+#: cp/decl.c:1368
#, gcc-internal-format
msgid "declaration of C function %q#D conflicts with"
msgstr ""
-#: cp/decl.c:1367
+#: cp/decl.c:1370
#, gcc-internal-format
msgid "previous declaration %q+#D here"
msgstr ""
-#: cp/decl.c:1381
+#: cp/decl.c:1384
#, gcc-internal-format
msgid "conflicting declaration %q#D"
msgstr ""
-#: cp/decl.c:1382
+#: cp/decl.c:1385
#, gcc-internal-format
msgid "%q+D has a previous declaration as %q#D"
msgstr ""
@@ -25467,63 +26031,63 @@ msgstr ""
#. A namespace-name defined at global scope shall not be
#. declared as the name of any other entity in any global scope
#. of the program.
-#: cp/decl.c:1434
+#: cp/decl.c:1437
#, gcc-internal-format
msgid "declaration of namespace %qD conflicts with"
msgstr ""
-#: cp/decl.c:1435
+#: cp/decl.c:1438
#, gcc-internal-format
msgid "previous declaration of namespace %q+D here"
msgstr ""
-#: cp/decl.c:1446
+#: cp/decl.c:1449
#, gcc-internal-format
msgid "%q+#D previously defined here"
msgstr ""
#. Prototype decl follows defn w/o prototype.
-#: cp/decl.c:1456
+#: cp/decl.c:1459
#, gcc-internal-format
msgid "prototype for %q+#D"
msgstr ""
-#: cp/decl.c:1457
+#: cp/decl.c:1460
#, gcc-internal-format
msgid "%Jfollows non-prototype definition here"
msgstr ""
-#: cp/decl.c:1497
+#: cp/decl.c:1500
#, gcc-internal-format
msgid "previous declaration of %q+#D with %qL linkage"
msgstr ""
-#: cp/decl.c:1499
+#: cp/decl.c:1502
#, gcc-internal-format
msgid "conflicts with new declaration with %qL linkage"
msgstr ""
-#: cp/decl.c:1522 cp/decl.c:1528
+#: cp/decl.c:1525 cp/decl.c:1531
#, gcc-internal-format
msgid "default argument given for parameter %d of %q#D"
msgstr ""
-#: cp/decl.c:1524 cp/decl.c:1530
+#: cp/decl.c:1527 cp/decl.c:1533
#, gcc-internal-format
msgid "after previous specification in %q+#D"
msgstr ""
-#: cp/decl.c:1539
+#: cp/decl.c:1542
#, gcc-internal-format
msgid "%q#D was used before it was declared inline"
msgstr ""
-#: cp/decl.c:1540
+#: cp/decl.c:1543
#, gcc-internal-format
msgid "%Jprevious non-inline declaration here"
msgstr ""
-#: cp/decl.c:1592
+#: cp/decl.c:1596
#, gcc-internal-format
msgid "redundant redeclaration of %qD in same scope"
msgstr ""
@@ -25536,291 +26100,306 @@ msgstr ""
#. that specialization that would cause an implicit
#. instantiation to take place, in every translation unit in
#. which such a use occurs.
-#: cp/decl.c:1859
+#: cp/decl.c:1865
#, gcc-internal-format
msgid "explicit specialization of %qD after first use"
msgstr ""
-#: cp/decl.c:1943
+#: cp/decl.c:1949
#, gcc-internal-format
msgid "%q+D: visibility attribute ignored because it"
msgstr ""
-#: cp/decl.c:1945
+#: cp/decl.c:1951
#, gcc-internal-format
msgid "%Jconflicts with previous declaration here"
msgstr ""
-#: cp/decl.c:2312
+#: cp/decl.c:2318
#, gcc-internal-format
msgid "jump to label %qD"
msgstr ""
-#: cp/decl.c:2314
+#: cp/decl.c:2320
#, gcc-internal-format
msgid "jump to case label"
msgstr ""
-#: cp/decl.c:2316
+#: cp/decl.c:2322
#, gcc-internal-format
msgid "%H from here"
msgstr ""
-#: cp/decl.c:2335 cp/decl.c:2498
+#: cp/decl.c:2341 cp/decl.c:2504
#, gcc-internal-format
msgid " exits OpenMP structured block"
msgstr ""
-#: cp/decl.c:2356
+#: cp/decl.c:2362
#, gcc-internal-format
msgid " crosses initialization of %q+#D"
msgstr ""
-#: cp/decl.c:2358 cp/decl.c:2473
+#: cp/decl.c:2364 cp/decl.c:2479
#, gcc-internal-format
msgid " enters scope of non-POD %q+#D"
msgstr ""
-#: cp/decl.c:2371 cp/decl.c:2477
+#: cp/decl.c:2377 cp/decl.c:2483
#, gcc-internal-format
msgid " enters try block"
msgstr ""
-#: cp/decl.c:2373 cp/decl.c:2479
+#: cp/decl.c:2379 cp/decl.c:2485
#, gcc-internal-format
msgid " enters catch block"
msgstr ""
-#: cp/decl.c:2383 cp/decl.c:2482
+#: cp/decl.c:2389 cp/decl.c:2488
#, gcc-internal-format
msgid " enters OpenMP structured block"
msgstr ""
-#: cp/decl.c:2454 cp/decl.c:2494
+#: cp/decl.c:2460 cp/decl.c:2500
#, gcc-internal-format
msgid "jump to label %q+D"
msgstr ""
-#: cp/decl.c:2455 cp/decl.c:2495
+#: cp/decl.c:2461 cp/decl.c:2501
#, gcc-internal-format
msgid " from here"
msgstr ""
#. Can't skip init of __exception_info.
-#: cp/decl.c:2467
+#: cp/decl.c:2473
#, gcc-internal-format
msgid "%J enters catch block"
msgstr ""
-#: cp/decl.c:2471
+#: cp/decl.c:2477
#, gcc-internal-format
msgid " skips initialization of %q+#D"
msgstr ""
-#: cp/decl.c:2547
+#: cp/decl.c:2553
#, gcc-internal-format
msgid "label named wchar_t"
msgstr ""
-#: cp/decl.c:2551
+#: cp/decl.c:2557
#, gcc-internal-format
msgid "duplicate label %qD"
msgstr ""
-#: cp/decl.c:2815 cp/parser.c:3814
+#: cp/decl.c:2826
+#, gcc-internal-format
+msgid "%qD is not a type"
+msgstr ""
+
+#: cp/decl.c:2832 cp/parser.c:3874
#, gcc-internal-format
msgid "%qD used without template parameters"
msgstr ""
-#: cp/decl.c:2830
+#: cp/decl.c:2847
#, gcc-internal-format
msgid "%q#T is not a class"
msgstr ""
-#: cp/decl.c:2842 cp/decl.c:2910
+#: cp/decl.c:2859 cp/decl.c:2927
#, gcc-internal-format
msgid "no class template named %q#T in %q#T"
msgstr ""
-#: cp/decl.c:2850
+#: cp/decl.c:2867
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a class template"
msgstr ""
-#: cp/decl.c:2857
+#: cp/decl.c:2874
#, gcc-internal-format
msgid "%<typename %T::%D%> names %q#T, which is not a type"
msgstr ""
-#: cp/decl.c:2919
+#: cp/decl.c:2936
#, gcc-internal-format
msgid "template parameters do not match template"
msgstr ""
-#: cp/decl.c:2920 cp/friend.c:322 cp/friend.c:330
+#: cp/decl.c:2937 cp/friend.c:322 cp/friend.c:330
#, gcc-internal-format
msgid "%q+D declared here"
msgstr ""
-#: cp/decl.c:3591
+#: cp/decl.c:3574
#, gcc-internal-format
msgid "%Jan anonymous union cannot have function members"
msgstr ""
-#: cp/decl.c:3609
+#: cp/decl.c:3592
#, gcc-internal-format
msgid "member %q+#D with constructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:3612
+#: cp/decl.c:3595
#, gcc-internal-format
msgid "member %q+#D with destructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:3615
+#: cp/decl.c:3598
#, gcc-internal-format
msgid ""
"member %q+#D with copy assignment operator not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:3640
+#: cp/decl.c:3623
#, gcc-internal-format
msgid "multiple types in one declaration"
msgstr ""
-#: cp/decl.c:3644
+#: cp/decl.c:3627
#, gcc-internal-format
msgid "redeclaration of C++ built-in type %qT"
msgstr ""
-#: cp/decl.c:3681
+#: cp/decl.c:3664
#, gcc-internal-format
msgid "missing type-name in typedef-declaration"
msgstr ""
-#: cp/decl.c:3689
+#: cp/decl.c:3672
#, gcc-internal-format
msgid "ISO C++ prohibits anonymous structs"
msgstr ""
-#: cp/decl.c:3696
+#: cp/decl.c:3679
#, gcc-internal-format
msgid "%qs can only be specified for functions"
msgstr ""
-#: cp/decl.c:3702
+#: cp/decl.c:3685
#, gcc-internal-format
msgid "%<friend%> can only be specified inside a class"
msgstr ""
-#: cp/decl.c:3704
+#: cp/decl.c:3687
#, gcc-internal-format
msgid "%<explicit%> can only be specified for constructors"
msgstr ""
-#: cp/decl.c:3706
+#: cp/decl.c:3689
#, gcc-internal-format
msgid "a storage class can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:3712
+#: cp/decl.c:3695
#, gcc-internal-format
msgid "qualifiers can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:3742
+#: cp/decl.c:3698
+#, gcc-internal-format
+msgid "%<typedef%> was ignored in this declaration"
+msgstr ""
+
+#: cp/decl.c:3727
#, gcc-internal-format
msgid "attribute ignored in declaration of %q+#T"
msgstr ""
-#: cp/decl.c:3743
+#: cp/decl.c:3728
#, gcc-internal-format
msgid "attribute for %q+#T must follow the %qs keyword"
msgstr ""
-#: cp/decl.c:3856
+#: cp/decl.c:3841
#, gcc-internal-format
msgid "function %q#D is initialized like a variable"
msgstr ""
-#: cp/decl.c:3867
+#: cp/decl.c:3852
#, gcc-internal-format
msgid "declaration of %q#D has %<extern%> and is initialized"
msgstr ""
-#: cp/decl.c:3883
+#: cp/decl.c:3868
#, gcc-internal-format
msgid "definition of %q#D is marked %<dllimport%>"
msgstr ""
-#: cp/decl.c:3902
+#: cp/decl.c:3887
#, gcc-internal-format
msgid "%q#D is not a static member of %q#T"
msgstr ""
-#: cp/decl.c:3908
+#: cp/decl.c:3893
#, gcc-internal-format
msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>"
msgstr ""
-#: cp/decl.c:3917
+#: cp/decl.c:3902
#, gcc-internal-format
msgid ""
"template header not allowed in member definition of explicitly specialized "
"class"
msgstr ""
-#: cp/decl.c:3925
+#: cp/decl.c:3910
#, gcc-internal-format
msgid "duplicate initialization of %qD"
msgstr ""
-#: cp/decl.c:3963
+#: cp/decl.c:3948
#, gcc-internal-format
msgid "declaration of %q#D outside of class is not definition"
msgstr ""
-#: cp/decl.c:4017
+#: cp/decl.c:4002
#, gcc-internal-format
msgid "variable %q#D has initializer but incomplete type"
msgstr ""
-#: cp/decl.c:4024 cp/decl.c:4713
+#: cp/decl.c:4009 cp/decl.c:4731
#, gcc-internal-format
msgid "elements of array %q#D have incomplete type"
msgstr ""
-#: cp/decl.c:4034
+#: cp/decl.c:4019
#, gcc-internal-format
msgid "aggregate %q#D has incomplete type and cannot be defined"
msgstr ""
-#: cp/decl.c:4081
+#: cp/decl.c:4066
#, gcc-internal-format
msgid "%qD declared as reference but not initialized"
msgstr ""
-#: cp/decl.c:4087
+#: cp/decl.c:4072
#, gcc-internal-format
msgid "ISO C++ forbids use of initializer list to initialize reference %qD"
msgstr ""
-#: cp/decl.c:4113
+#: cp/decl.c:4098
#, gcc-internal-format
msgid "cannot initialize %qT from %qT"
msgstr ""
-#: cp/decl.c:4147
+#: cp/decl.c:4126
+#, gcc-internal-format
+msgid "name %qD used in a GNU-style designated initializer for an array"
+msgstr ""
+
+#: cp/decl.c:4175
#, gcc-internal-format
msgid "initializer fails to determine size of %qD"
msgstr ""
-#: cp/decl.c:4154
+#: cp/decl.c:4182
#, gcc-internal-format
msgid "array size missing in %qD"
msgstr ""
-#: cp/decl.c:4166
+#: cp/decl.c:4194
#, gcc-internal-format
msgid "zero-size array %qD"
msgstr ""
@@ -25828,243 +26407,243 @@ msgstr ""
#. An automatic variable with an incomplete type: that is an error.
#. Don't talk about array types here, since we took care of that
#. message in grokdeclarator.
-#: cp/decl.c:4208
+#: cp/decl.c:4237
#, gcc-internal-format
msgid "storage size of %qD isn't known"
msgstr ""
-#: cp/decl.c:4230
+#: cp/decl.c:4259
#, gcc-internal-format
msgid "storage size of %qD isn't constant"
msgstr ""
-#: cp/decl.c:4279
+#: cp/decl.c:4308
#, gcc-internal-format
msgid ""
"sorry: semantics of inline function static data %q+#D are wrong (you'll wind "
"up with multiple copies)"
msgstr ""
-#: cp/decl.c:4282
+#: cp/decl.c:4311
#, gcc-internal-format
msgid "%J you can work around this by removing the initializer"
msgstr ""
-#: cp/decl.c:4309
+#: cp/decl.c:4338
#, gcc-internal-format
msgid "uninitialized const %qD"
msgstr ""
-#: cp/decl.c:4384
-#, gcc-internal-format
-msgid "name %qD used in a GNU-style designated initializer for an array"
-msgstr ""
-
-#: cp/decl.c:4432
+#: cp/decl.c:4450
#, gcc-internal-format
msgid "invalid type %qT as initializer for a vector of type %qT"
msgstr ""
-#: cp/decl.c:4474
+#: cp/decl.c:4492
#, gcc-internal-format
msgid "initializer for %qT must be brace-enclosed"
msgstr ""
-#: cp/decl.c:4492
+#: cp/decl.c:4510
#, gcc-internal-format
msgid "%qT has no non-static data member named %qD"
msgstr ""
-#: cp/decl.c:4543
+#: cp/decl.c:4561
#, gcc-internal-format
msgid "braces around scalar initializer for type %qT"
msgstr ""
-#: cp/decl.c:4621
+#: cp/decl.c:4639
#, gcc-internal-format
msgid "missing braces around initializer for %qT"
msgstr ""
-#: cp/decl.c:4678
+#: cp/decl.c:4696
#, gcc-internal-format
msgid "too many initializers for %qT"
msgstr ""
-#: cp/decl.c:4721
+#: cp/decl.c:4739
#, gcc-internal-format
msgid "variable-sized object %qD may not be initialized"
msgstr ""
-#: cp/decl.c:4727
+#: cp/decl.c:4745
#, gcc-internal-format
msgid "%qD has incomplete type"
msgstr ""
-#: cp/decl.c:4739
+#: cp/decl.c:4757
#, gcc-internal-format
msgid "scalar object %qD requires one element in initializer"
msgstr ""
-#: cp/decl.c:4787
+#: cp/decl.c:4805
#, gcc-internal-format
msgid "%qD must be initialized by constructor, not by %<{...}%>"
msgstr ""
-#: cp/decl.c:4823
+#: cp/decl.c:4841
#, gcc-internal-format
msgid "array %qD initialized by parenthesized string literal %qE"
msgstr ""
-#: cp/decl.c:4838
+#: cp/decl.c:4856
#, gcc-internal-format
msgid "structure %qD with uninitialized const members"
msgstr ""
-#: cp/decl.c:4840
+#: cp/decl.c:4858
#, gcc-internal-format
msgid "structure %qD with uninitialized reference members"
msgstr ""
-#: cp/decl.c:5049
+#: cp/decl.c:5067
#, gcc-internal-format
msgid "assignment (not initialization) in declaration"
msgstr ""
-#: cp/decl.c:5120
+#: cp/decl.c:5145
#, gcc-internal-format
msgid "shadowing previous type declaration of %q#D"
msgstr ""
-#: cp/decl.c:5150
+#: cp/decl.c:5175
#, gcc-internal-format
msgid "%qD cannot be thread-local because it has non-POD type %qT"
msgstr ""
-#: cp/decl.c:5186
+#: cp/decl.c:5211
#, gcc-internal-format
msgid "%qD is thread-local and so cannot be dynamically initialized"
msgstr ""
-#: cp/decl.c:5204
+#: cp/decl.c:5229
#, gcc-internal-format
msgid ""
"%qD cannot be initialized by a non-constant expression when being declared"
msgstr ""
-#: cp/decl.c:5801
+#: cp/decl.c:5827
#, gcc-internal-format
msgid "destructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:5803
+#: cp/decl.c:5829
#, gcc-internal-format
msgid "constructor for alien class %qT cannot be a member"
msgstr ""
-#: cp/decl.c:5824
+#: cp/decl.c:5850
#, gcc-internal-format
msgid "%qD declared as a %<virtual%> %s"
msgstr ""
-#: cp/decl.c:5826
+#: cp/decl.c:5852
#, gcc-internal-format
msgid "%qD declared as an %<inline%> %s"
msgstr ""
-#: cp/decl.c:5828
+#: cp/decl.c:5854
#, gcc-internal-format
msgid ""
"%<const%> and %<volatile%> function specifiers on %qD invalid in %s "
"declaration"
msgstr ""
-#: cp/decl.c:5832
+#: cp/decl.c:5858
#, gcc-internal-format
msgid "%q+D declared as a friend"
msgstr ""
-#: cp/decl.c:5838
+#: cp/decl.c:5864
#, gcc-internal-format
msgid "%q+D declared with an exception specification"
msgstr ""
-#: cp/decl.c:5872
+#: cp/decl.c:5898
#, gcc-internal-format
msgid "definition of %qD is not in namespace enclosing %qT"
msgstr ""
-#: cp/decl.c:5961
+#: cp/decl.c:5987
#, gcc-internal-format
msgid "defining explicit specialization %qD in friend declaration"
msgstr ""
#. Something like `template <class T> friend void f<T>()'.
-#: cp/decl.c:5971
+#: cp/decl.c:5997
#, gcc-internal-format
msgid "invalid use of template-id %qD in declaration of primary template"
msgstr ""
-#: cp/decl.c:6001
+#: cp/decl.c:6027
#, gcc-internal-format
msgid ""
"default arguments are not allowed in declaration of friend template "
"specialization %qD"
msgstr ""
-#: cp/decl.c:6009
+#: cp/decl.c:6035
#, gcc-internal-format
msgid ""
"%<inline%> is not allowed in declaration of friend template specialization %"
"qD"
msgstr ""
-#: cp/decl.c:6052
+#: cp/decl.c:6078
#, gcc-internal-format
msgid "cannot declare %<::main%> to be a template"
msgstr ""
-#: cp/decl.c:6054
+#: cp/decl.c:6080
#, gcc-internal-format
msgid "cannot declare %<::main%> to be inline"
msgstr ""
-#: cp/decl.c:6056
+#: cp/decl.c:6082
#, gcc-internal-format
msgid "cannot declare %<::main%> to be static"
msgstr ""
-#: cp/decl.c:6062
-#, gcc-internal-format
-msgid "%<::main%> must return %<int%>"
-msgstr ""
-
-#: cp/decl.c:6094
+#: cp/decl.c:6110
#, gcc-internal-format
msgid "non-local function %q#D uses anonymous type"
msgstr ""
-#: cp/decl.c:6097 cp/decl.c:6367
+#: cp/decl.c:6113 cp/decl.c:6393
#, gcc-internal-format
msgid ""
"%q+#D does not refer to the unqualified type, so it is not used for linkage"
msgstr ""
-#: cp/decl.c:6103
+#: cp/decl.c:6119
#, gcc-internal-format
msgid "non-local function %q#D uses local type %qT"
msgstr ""
-#: cp/decl.c:6126
+#: cp/decl.c:6143
+#, gcc-internal-format
+msgid "static member function %qD cannot have cv-qualifier"
+msgstr ""
+
+#: cp/decl.c:6144
#, gcc-internal-format
-msgid "%smember function %qD cannot have cv-qualifier"
+msgid "non-member function %qD cannot have cv-qualifier"
msgstr ""
-#: cp/decl.c:6200
+#: cp/decl.c:6197
+#, gcc-internal-format
+msgid "%<::main%> must return %<int%>"
+msgstr ""
+
+#: cp/decl.c:6233
#, gcc-internal-format
msgid "definition of implicitly-declared %qD"
msgstr ""
-#: cp/decl.c:6215 cp/decl2.c:682
+#: cp/decl.c:6248 cp/decl2.c:672
#, gcc-internal-format
msgid "no %q#D member function declared in class %qT"
msgstr ""
@@ -26073,533 +26652,539 @@ msgstr ""
#. 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:6364
+#: cp/decl.c:6390
#, gcc-internal-format
msgid "non-local variable %q#D uses anonymous type"
msgstr ""
-#: cp/decl.c:6373
+#: cp/decl.c:6399
#, gcc-internal-format
msgid "non-local variable %q#D uses local type %qT"
msgstr ""
-#: cp/decl.c:6490
+#: cp/decl.c:6521
#, gcc-internal-format
msgid ""
"invalid in-class initialization of static data member of non-integral type %"
"qT"
msgstr ""
-#: cp/decl.c:6500
+#: cp/decl.c:6531
#, gcc-internal-format
msgid "ISO C++ forbids in-class initialization of non-const static member %qD"
msgstr ""
-#: cp/decl.c:6504
+#: cp/decl.c:6535
#, gcc-internal-format
msgid ""
"ISO C++ forbids initialization of member constant %qD of non-integral type %"
"qT"
msgstr ""
-#: cp/decl.c:6528
+#: cp/decl.c:6560
#, gcc-internal-format
msgid "size of array %qD has non-integral type %qT"
msgstr ""
-#: cp/decl.c:6530
+#: cp/decl.c:6562
#, gcc-internal-format
msgid "size of array has non-integral type %qT"
msgstr ""
-#: cp/decl.c:6566
+#: cp/decl.c:6610
#, gcc-internal-format
msgid "size of array %qD is negative"
msgstr ""
-#: cp/decl.c:6568
+#: cp/decl.c:6612
#, gcc-internal-format
msgid "size of array is negative"
msgstr ""
-#: cp/decl.c:6576
+#: cp/decl.c:6620
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array %qD"
msgstr ""
-#: cp/decl.c:6578
+#: cp/decl.c:6622
#, gcc-internal-format
msgid "ISO C++ forbids zero-size array"
msgstr ""
-#: cp/decl.c:6585
+#: cp/decl.c:6629
#, gcc-internal-format
msgid "size of array %qD is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:6588
+#: cp/decl.c:6632
#, gcc-internal-format
msgid "size of array is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:6594
+#: cp/decl.c:6638
#, gcc-internal-format
msgid "ISO C++ forbids variable-size array %qD"
msgstr ""
-#: cp/decl.c:6596
+#: cp/decl.c:6640
#, gcc-internal-format
msgid "ISO C++ forbids variable-size array"
msgstr ""
-#: cp/decl.c:6627
+#: cp/decl.c:6671
#, gcc-internal-format
msgid "overflow in array dimension"
msgstr ""
-#: cp/decl.c:6701
+#: cp/decl.c:6752
#, gcc-internal-format
msgid "declaration of %qD as %s"
msgstr ""
-#: cp/decl.c:6703
+#: cp/decl.c:6754
#, gcc-internal-format
msgid "creating %s"
msgstr ""
-#: cp/decl.c:6715
+#: cp/decl.c:6766
#, gcc-internal-format
msgid ""
"declaration of %qD as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: cp/decl.c:6719
+#: cp/decl.c:6770
#, gcc-internal-format
msgid ""
"multidimensional array must have bounds for all dimensions except the first"
msgstr ""
-#: cp/decl.c:6754
+#: cp/decl.c:6805
#, gcc-internal-format
msgid "return type specification for constructor invalid"
msgstr ""
-#: cp/decl.c:6764
+#: cp/decl.c:6815
#, gcc-internal-format
msgid "return type specification for destructor invalid"
msgstr ""
-#: cp/decl.c:6777
+#: cp/decl.c:6828
#, gcc-internal-format
msgid "operator %qT declared to return %qT"
msgstr ""
-#: cp/decl.c:6779
+#: cp/decl.c:6830
#, gcc-internal-format
msgid "return type specified for %<operator %T%>"
msgstr ""
-#: cp/decl.c:6801
+#: cp/decl.c:6852
#, gcc-internal-format
msgid "unnamed variable or field declared void"
msgstr ""
-#: cp/decl.c:6805
+#: cp/decl.c:6856
#, gcc-internal-format
msgid "variable or field %qE declared void"
msgstr ""
-#: cp/decl.c:6808
+#: cp/decl.c:6859
#, gcc-internal-format
msgid "variable or field declared void"
msgstr ""
-#: cp/decl.c:6973
+#: cp/decl.c:7025
#, gcc-internal-format
msgid "invalid use of qualified-name %<::%D%>"
msgstr ""
-#: cp/decl.c:6976
+#: cp/decl.c:7028
#, gcc-internal-format
msgid "invalid use of qualified-name %<%T::%D%>"
msgstr ""
-#: cp/decl.c:6979
+#: cp/decl.c:7031
#, gcc-internal-format
msgid "invalid use of qualified-name %<%D::%D%>"
msgstr ""
-#: cp/decl.c:6991
+#: cp/decl.c:7043
#, gcc-internal-format
msgid "type %qT is not derived from type %qT"
msgstr ""
-#: cp/decl.c:7007 cp/decl.c:7097 cp/decl.c:8170
+#: cp/decl.c:7059 cp/decl.c:7149 cp/decl.c:8233
#, gcc-internal-format
msgid "declaration of %qD as non-function"
msgstr ""
-#: cp/decl.c:7013
+#: cp/decl.c:7065
#, gcc-internal-format
msgid "declaration of %qD as non-member"
msgstr ""
-#: cp/decl.c:7042
+#: cp/decl.c:7094
#, gcc-internal-format
msgid "declarator-id missing; using reserved word %qD"
msgstr ""
-#: cp/decl.c:7089
+#: cp/decl.c:7141
#, gcc-internal-format
msgid "function definition does not declare parameters"
msgstr ""
-#: cp/decl.c:7131
+#: cp/decl.c:7183
#, gcc-internal-format
msgid "two or more data types in declaration of %qs"
msgstr ""
-#: cp/decl.c:7198 cp/decl.c:7200
+#: cp/decl.c:7250 cp/decl.c:7253
#, gcc-internal-format
msgid "ISO C++ forbids declaration of %qs with no type"
msgstr ""
-#: cp/decl.c:7225
+#: cp/decl.c:7278
#, gcc-internal-format
msgid "%<signed%> or %<unsigned%> invalid for %qs"
msgstr ""
-#: cp/decl.c:7227
+#: cp/decl.c:7280
#, gcc-internal-format
msgid "%<signed%> and %<unsigned%> specified together for %qs"
msgstr ""
-#: cp/decl.c:7229
+#: cp/decl.c:7282
#, gcc-internal-format
msgid "%<long long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:7231
+#: cp/decl.c:7284
#, gcc-internal-format
msgid "%<long%> invalid for %qs"
msgstr ""
-#: cp/decl.c:7233
+#: cp/decl.c:7286
#, gcc-internal-format
msgid "%<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:7235
+#: cp/decl.c:7288
#, gcc-internal-format
msgid "%<long%> or %<short%> invalid for %qs"
msgstr ""
-#: cp/decl.c:7237
+#: cp/decl.c:7290
#, gcc-internal-format
msgid "%<long%> or %<short%> specified with char for %qs"
msgstr ""
-#: cp/decl.c:7239
+#: cp/decl.c:7292
#, gcc-internal-format
msgid "%<long%> and %<short%> specified together for %qs"
msgstr ""
-#: cp/decl.c:7245
+#: cp/decl.c:7298
#, gcc-internal-format
msgid "long, short, signed or unsigned used invalidly for %qs"
msgstr ""
-#: cp/decl.c:7309
+#: cp/decl.c:7362
#, gcc-internal-format
msgid "complex invalid for %qs"
msgstr ""
-#: cp/decl.c:7338
+#: cp/decl.c:7391
#, gcc-internal-format
msgid "qualifiers are not allowed on declaration of %<operator %T%>"
msgstr ""
-#: cp/decl.c:7350 cp/typeck.c:6791
+#: cp/decl.c:7403 cp/typeck.c:6893
#, gcc-internal-format
msgid "ignoring %qV qualifiers added to function type %qT"
msgstr ""
-#: cp/decl.c:7373
+#: cp/decl.c:7426
#, gcc-internal-format
msgid "member %qD cannot be declared both virtual and static"
msgstr ""
-#: cp/decl.c:7381
+#: cp/decl.c:7434
#, gcc-internal-format
msgid "%<%T::%D%> is not a valid declarator"
msgstr ""
-#: cp/decl.c:7390
+#: cp/decl.c:7443
#, gcc-internal-format
msgid "typedef declaration invalid in parameter declaration"
msgstr ""
-#: cp/decl.c:7396
+#: cp/decl.c:7449
#, gcc-internal-format
msgid "storage class specifiers invalid in parameter declarations"
msgstr ""
-#: cp/decl.c:7403
+#: cp/decl.c:7456
#, gcc-internal-format
msgid "virtual outside class declaration"
msgstr ""
-#: cp/decl.c:7417
+#: cp/decl.c:7474
#, gcc-internal-format
-msgid "conflicting specifiers in declaration of %qs"
+msgid "multiple storage classes in declaration of %qs"
msgstr ""
-#: cp/decl.c:7426
+#: cp/decl.c:7479
#, gcc-internal-format
-msgid "multiple storage classes in declaration of %qs"
+msgid "conflicting specifiers in declaration of %qs"
msgstr ""
-#: cp/decl.c:7449
+#: cp/decl.c:7502
#, gcc-internal-format
msgid "storage class specified for %qs"
msgstr ""
-#: cp/decl.c:7483
+#: cp/decl.c:7536
#, gcc-internal-format
msgid "top-level declaration of %qs specifies %<auto%>"
msgstr ""
-#: cp/decl.c:7495
+#: cp/decl.c:7548
#, gcc-internal-format
msgid "storage class specifiers invalid in friend function declarations"
msgstr ""
-#: cp/decl.c:7615
+#: cp/decl.c:7675
#, gcc-internal-format
msgid "destructor cannot be static member function"
msgstr ""
-#: cp/decl.c:7620
+#: cp/decl.c:7680
#, gcc-internal-format
msgid "destructors may not be cv-qualified"
msgstr ""
-#: cp/decl.c:7638
+#: cp/decl.c:7698
#, gcc-internal-format
msgid "constructors cannot be declared virtual"
msgstr ""
-#: cp/decl.c:7651
+#: cp/decl.c:7711
#, gcc-internal-format
msgid "can't initialize friend function %qs"
msgstr ""
#. Cannot be both friend and virtual.
-#: cp/decl.c:7655
+#: cp/decl.c:7715
#, gcc-internal-format
msgid "virtual functions cannot be friends"
msgstr ""
-#: cp/decl.c:7659
+#: cp/decl.c:7719
#, gcc-internal-format
msgid "friend declaration not in class definition"
msgstr ""
-#: cp/decl.c:7661
+#: cp/decl.c:7721
#, gcc-internal-format
msgid "can't define friend function %qs in a local class definition"
msgstr ""
-#: cp/decl.c:7674
+#: cp/decl.c:7734
#, gcc-internal-format
msgid "destructors may not have parameters"
msgstr ""
-#: cp/decl.c:7692 cp/decl.c:7699
+#: cp/decl.c:7752 cp/decl.c:7759
#, gcc-internal-format
msgid "cannot declare reference to %q#T"
msgstr ""
-#: cp/decl.c:7701
+#: cp/decl.c:7761
#, gcc-internal-format
msgid "cannot declare pointer to %q#T member"
msgstr ""
-#: cp/decl.c:7764
+#: cp/decl.c:7824
#, gcc-internal-format
msgid "template-id %qD used as a declarator"
msgstr ""
-#: cp/decl.c:7814
+#: cp/decl.c:7874
#, gcc-internal-format
msgid "member functions are implicitly friends of their class"
msgstr ""
-#: cp/decl.c:7816
+#: cp/decl.c:7876
#, gcc-internal-format
msgid "extra qualification %<%T::%> on member %qs"
msgstr ""
-#: cp/decl.c:7848
+#: cp/decl.c:7908
#, gcc-internal-format
msgid "cannot define member function %<%T::%s%> within %<%T%>"
msgstr ""
-#: cp/decl.c:7865
+#: cp/decl.c:7925
#, gcc-internal-format
msgid "cannot declare member %<%T::%s%> within %qT"
msgstr ""
-#: cp/decl.c:7899
+#: cp/decl.c:7959
#, gcc-internal-format
msgid "data member may not have variably modified type %qT"
msgstr ""
-#: cp/decl.c:7901
+#: cp/decl.c:7961
#, gcc-internal-format
msgid "parameter may not have variably modified type %qT"
msgstr ""
#. [dcl.fct.spec] The explicit specifier shall only be used in
#. declarations of constructors within a class definition.
-#: cp/decl.c:7909
+#: cp/decl.c:7969
#, gcc-internal-format
msgid "only declarations of constructors can be %<explicit%>"
msgstr ""
-#: cp/decl.c:7917
+#: cp/decl.c:7977
#, gcc-internal-format
msgid "non-member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:7922
+#: cp/decl.c:7982
#, gcc-internal-format
msgid "non-object member %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:7928
+#: cp/decl.c:7988
#, gcc-internal-format
msgid "function %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:7933
+#: cp/decl.c:7993
#, gcc-internal-format
msgid "static %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:7938
+#: cp/decl.c:7998
#, gcc-internal-format
msgid "const %qs cannot be declared %<mutable%>"
msgstr ""
-#: cp/decl.c:7970
+#: cp/decl.c:8030
#, gcc-internal-format
msgid "%Jtypedef name may not be a nested-name-specifier"
msgstr ""
-#: cp/decl.c:7986
+#: cp/decl.c:8046
#, gcc-internal-format
msgid "ISO C++ forbids nested type %qD with same name as enclosing class"
msgstr ""
-#: cp/decl.c:8076
+#: cp/decl.c:8137
+#, gcc-internal-format
+msgid ""
+"qualified function types cannot be used to declare static member functions"
+msgstr ""
+
+#: cp/decl.c:8139
#, gcc-internal-format
-msgid "qualified function types cannot be used to declare %s functions"
+msgid "qualified function types cannot be used to declare free functions"
msgstr ""
-#: cp/decl.c:8102
+#: cp/decl.c:8165
#, gcc-internal-format
msgid "type qualifiers specified for friend class declaration"
msgstr ""
-#: cp/decl.c:8107
+#: cp/decl.c:8170
#, gcc-internal-format
msgid "%<inline%> specified for friend class declaration"
msgstr ""
-#: cp/decl.c:8115
+#: cp/decl.c:8178
#, gcc-internal-format
msgid "template parameters cannot be friends"
msgstr ""
-#: cp/decl.c:8117
+#: cp/decl.c:8180
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>"
msgstr ""
-#: cp/decl.c:8121
+#: cp/decl.c:8184
#, gcc-internal-format
msgid "friend declaration requires class-key, i.e. %<friend %#T%>"
msgstr ""
-#: cp/decl.c:8134
+#: cp/decl.c:8197
#, gcc-internal-format
msgid "trying to make class %qT a friend of global scope"
msgstr ""
-#: cp/decl.c:8145
+#: cp/decl.c:8208
#, gcc-internal-format
msgid "invalid qualifiers on non-member function type"
msgstr ""
-#: cp/decl.c:8160
+#: cp/decl.c:8223
#, gcc-internal-format
msgid "abstract declarator %qT used as declaration"
msgstr ""
-#: cp/decl.c:8189
+#: cp/decl.c:8252
#, gcc-internal-format
msgid "cannot use %<::%> in parameter declaration"
msgstr ""
#. Something like struct S { int N::j; };
-#: cp/decl.c:8235
+#: cp/decl.c:8298
#, gcc-internal-format
msgid "invalid use of %<::%>"
msgstr ""
-#: cp/decl.c:8250
+#: cp/decl.c:8313
#, gcc-internal-format
msgid "can't make %qD into a method -- not in a class"
msgstr ""
-#: cp/decl.c:8259
+#: cp/decl.c:8322
#, gcc-internal-format
msgid "function %qD declared virtual inside a union"
msgstr ""
-#: cp/decl.c:8268
+#: cp/decl.c:8331
#, gcc-internal-format
msgid "%qD cannot be declared virtual, since it is always static"
msgstr ""
-#: cp/decl.c:8284
+#: cp/decl.c:8347
#, gcc-internal-format
msgid "expected qualified name in friend declaration for destructor %qD"
msgstr ""
-#: cp/decl.c:8294
+#: cp/decl.c:8357
#, gcc-internal-format
msgid "declaration of %qD as member of %qT"
msgstr ""
-#: cp/decl.c:8370
+#: cp/decl.c:8433
#, gcc-internal-format
msgid "field %qD has incomplete type"
msgstr ""
-#: cp/decl.c:8372
+#: cp/decl.c:8435
#, gcc-internal-format
msgid "name %qT has incomplete type"
msgstr ""
-#: cp/decl.c:8381
+#: cp/decl.c:8444
#, gcc-internal-format
msgid " in instantiation of template %qT"
msgstr ""
-#: cp/decl.c:8390
+#: cp/decl.c:8453
#, gcc-internal-format
msgid "%qE is neither function nor member function; cannot be declared friend"
msgstr ""
@@ -26616,97 +27201,97 @@ 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:8442
+#: cp/decl.c:8505
#, gcc-internal-format
msgid "ISO C++ forbids initialization of member %qD"
msgstr ""
-#: cp/decl.c:8444
+#: cp/decl.c:8507
#, gcc-internal-format
msgid "making %qD static"
msgstr ""
-#: cp/decl.c:8514
+#: cp/decl.c:8569
#, gcc-internal-format
msgid "storage class %<auto%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:8516
+#: cp/decl.c:8571
#, gcc-internal-format
msgid "storage class %<register%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:8518
+#: cp/decl.c:8573
#, gcc-internal-format
msgid "storage class %<__thread%> invalid for function %qs"
msgstr ""
-#: cp/decl.c:8529
+#: cp/decl.c:8584
#, gcc-internal-format
msgid ""
"%<static%> specified invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:8532
+#: cp/decl.c:8587
#, gcc-internal-format
msgid ""
"%<inline%> specifier invalid for function %qs declared out of global scope"
msgstr ""
-#: cp/decl.c:8540
+#: cp/decl.c:8595
#, gcc-internal-format
msgid "virtual non-class function %qs"
msgstr ""
-#: cp/decl.c:8571
+#: cp/decl.c:8626
#, gcc-internal-format
msgid "cannot declare member function %qD to have static linkage"
msgstr ""
#. FIXME need arm citation
-#: cp/decl.c:8578
+#: cp/decl.c:8633
#, gcc-internal-format
msgid "cannot declare static function inside another function"
msgstr ""
-#: cp/decl.c:8608
+#: cp/decl.c:8663
#, gcc-internal-format
msgid ""
"%<static%> may not be used when defining (as opposed to declaring) a static "
"data member"
msgstr ""
-#: cp/decl.c:8615
+#: cp/decl.c:8670
#, gcc-internal-format
msgid "static member %qD declared %<register%>"
msgstr ""
-#: cp/decl.c:8620
+#: cp/decl.c:8675
#, gcc-internal-format
msgid "cannot explicitly declare member %q#D to have extern linkage"
msgstr ""
-#: cp/decl.c:8758
+#: cp/decl.c:8816
#, gcc-internal-format
msgid "default argument for %q#D has type %qT"
msgstr ""
-#: cp/decl.c:8761
+#: cp/decl.c:8819
#, gcc-internal-format
msgid "default argument for parameter of type %qT has type %qT"
msgstr ""
-#: cp/decl.c:8778
+#: cp/decl.c:8836
#, gcc-internal-format
msgid "default argument %qE uses local variable %qD"
msgstr ""
-#: cp/decl.c:8847
+#: cp/decl.c:8905
#, gcc-internal-format
msgid "parameter %qD invalidly declared method type"
msgstr ""
-#: cp/decl.c:8871
+#: cp/decl.c:8929
#, gcc-internal-format
msgid "parameter %qD includes %s to array of unknown bound %qT"
msgstr ""
@@ -26726,139 +27311,139 @@ msgstr ""
#. or implicitly defined), there's no need to worry about their
#. existence. Theoretically, they should never even be
#. instantiated, but that's hard to forestall.
-#: cp/decl.c:9039
+#: cp/decl.c:9097
#, gcc-internal-format
msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
msgstr ""
-#: cp/decl.c:9161
+#: cp/decl.c:9219
#, gcc-internal-format
msgid "%qD may not be declared within a namespace"
msgstr ""
-#: cp/decl.c:9166
+#: cp/decl.c:9224
#, gcc-internal-format
msgid "%qD may not be declared as static"
msgstr ""
-#: cp/decl.c:9189
+#: cp/decl.c:9247
#, gcc-internal-format
msgid "%qD must be a nonstatic member function"
msgstr ""
-#: cp/decl.c:9198
+#: cp/decl.c:9256
#, gcc-internal-format
msgid ""
"%qD must be either a non-static member function or a non-member function"
msgstr ""
-#: cp/decl.c:9219
+#: cp/decl.c:9277
#, gcc-internal-format
msgid "%qD must have an argument of class or enumerated type"
msgstr ""
-#: cp/decl.c:9260
+#: cp/decl.c:9318
#, gcc-internal-format
msgid "conversion to %s%s will never use a type conversion operator"
msgstr ""
#. 13.4.0.3
-#: cp/decl.c:9268
+#: cp/decl.c:9326
#, gcc-internal-format
msgid "ISO C++ prohibits overloading operator ?:"
msgstr ""
-#: cp/decl.c:9273
+#: cp/decl.c:9331
#, gcc-internal-format
msgid "%qD must not have variable number of arguments"
msgstr ""
-#: cp/decl.c:9324
+#: cp/decl.c:9382
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its argument"
msgstr ""
-#: cp/decl.c:9327
+#: cp/decl.c:9385
#, gcc-internal-format
msgid "postfix %qD must take %<int%> as its second argument"
msgstr ""
-#: cp/decl.c:9335
+#: cp/decl.c:9393
#, gcc-internal-format
msgid "%qD must take either zero or one argument"
msgstr ""
-#: cp/decl.c:9337
+#: cp/decl.c:9395
#, gcc-internal-format
msgid "%qD must take either one or two arguments"
msgstr ""
-#: cp/decl.c:9359
+#: cp/decl.c:9417
#, gcc-internal-format
msgid "prefix %qD should return %qT"
msgstr ""
-#: cp/decl.c:9365
+#: cp/decl.c:9423
#, gcc-internal-format
msgid "postfix %qD should return %qT"
msgstr ""
-#: cp/decl.c:9374
+#: cp/decl.c:9432
#, gcc-internal-format
msgid "%qD must take %<void%>"
msgstr ""
-#: cp/decl.c:9376 cp/decl.c:9385
+#: cp/decl.c:9434 cp/decl.c:9443
#, gcc-internal-format
msgid "%qD must take exactly one argument"
msgstr ""
-#: cp/decl.c:9387
+#: cp/decl.c:9445
#, gcc-internal-format
msgid "%qD must take exactly two arguments"
msgstr ""
-#: cp/decl.c:9396
+#: cp/decl.c:9454
#, gcc-internal-format
msgid "user-defined %qD always evaluates both arguments"
msgstr ""
-#: cp/decl.c:9410
+#: cp/decl.c:9468
#, gcc-internal-format
msgid "%qD should return by value"
msgstr ""
-#: cp/decl.c:9422 cp/decl.c:9426
+#: cp/decl.c:9480 cp/decl.c:9484
#, gcc-internal-format
msgid "%qD cannot have default arguments"
msgstr ""
-#: cp/decl.c:9484
+#: cp/decl.c:9542
#, gcc-internal-format
msgid "using template type parameter %qT after %qs"
msgstr ""
-#: cp/decl.c:9499
+#: cp/decl.c:9557
#, gcc-internal-format
msgid "using typedef-name %qD after %qs"
msgstr ""
-#: cp/decl.c:9500
+#: cp/decl.c:9558
#, gcc-internal-format
msgid "%q+D has a previous declaration here"
msgstr ""
-#: cp/decl.c:9508
+#: cp/decl.c:9566
#, gcc-internal-format
msgid "%qT referred to as %qs"
msgstr ""
-#: cp/decl.c:9509 cp/decl.c:9516
+#: cp/decl.c:9567 cp/decl.c:9574
#, gcc-internal-format
msgid "%q+T has a previous declaration here"
msgstr ""
-#: cp/decl.c:9515
+#: cp/decl.c:9573
#, gcc-internal-format
msgid "%qT referred to as enum"
msgstr ""
@@ -26870,67 +27455,67 @@ msgstr ""
#. void f(class C); // No template header here
#.
#. then the required template argument is missing.
-#: cp/decl.c:9530
+#: cp/decl.c:9588
#, gcc-internal-format
msgid "template argument required for %<%s %T%>"
msgstr ""
-#: cp/decl.c:9578 cp/name-lookup.c:2658
+#: cp/decl.c:9636 cp/name-lookup.c:2676
#, gcc-internal-format
msgid "%qD has the same name as the class in which it is declared"
msgstr ""
-#: cp/decl.c:9716
+#: cp/decl.c:9774
#, gcc-internal-format
msgid "use of enum %q#D without previous declaration"
msgstr ""
-#: cp/decl.c:9737
+#: cp/decl.c:9795
#, gcc-internal-format
msgid "redeclaration of %qT as a non-template"
msgstr ""
-#: cp/decl.c:9738 cp/pt.c:3359
+#: cp/decl.c:9796 cp/pt.c:3401
#, gcc-internal-format
msgid "previous declaration %q+D"
msgstr ""
-#: cp/decl.c:9849
+#: cp/decl.c:9907
#, gcc-internal-format
msgid "derived union %qT invalid"
msgstr ""
-#: cp/decl.c:9858
+#: cp/decl.c:9916
#, gcc-internal-format
msgid "Java class %qT cannot have multiple bases"
msgstr ""
-#: cp/decl.c:9869
+#: cp/decl.c:9927
#, gcc-internal-format
msgid "Java class %qT cannot have virtual bases"
msgstr ""
-#: cp/decl.c:9890
+#: cp/decl.c:9948
#, gcc-internal-format
msgid "base type %qT fails to be a struct or class type"
msgstr ""
-#: cp/decl.c:9923
+#: cp/decl.c:9981
#, gcc-internal-format
msgid "recursive type %qT undefined"
msgstr ""
-#: cp/decl.c:9925
+#: cp/decl.c:9983
#, gcc-internal-format
msgid "duplicate base type %qT invalid"
msgstr ""
-#: cp/decl.c:9997
+#: cp/decl.c:10055
#, gcc-internal-format
msgid "multiple definition of %q#T"
msgstr ""
-#: cp/decl.c:9998
+#: cp/decl.c:10056
#, gcc-internal-format
msgid "%Jprevious definition here"
msgstr ""
@@ -26939,247 +27524,239 @@ msgstr ""
#.
#. IF no integral type can represent all the enumerator values, the
#. enumeration is ill-formed.
-#: cp/decl.c:10137
+#: cp/decl.c:10195
#, gcc-internal-format
msgid "no integral type can represent all of the enumerator values for %qT"
msgstr ""
-#: cp/decl.c:10248
+#: cp/decl.c:10306
#, gcc-internal-format
-msgid "enumerator value for %qD not integer constant"
+msgid "enumerator value for %qD is not an integer constant"
msgstr ""
-#: cp/decl.c:10276
+#: cp/decl.c:10334
#, gcc-internal-format
msgid "overflow in enumeration values at %qD"
msgstr ""
-#: cp/decl.c:10351
+#: cp/decl.c:10409
#, gcc-internal-format
msgid "return type %q#T is incomplete"
msgstr ""
-#: cp/decl.c:10461 cp/typeck.c:6538
+#: cp/decl.c:10525 cp/typeck.c:6640
#, gcc-internal-format
msgid "%<operator=%> should return a reference to %<*this%>"
msgstr ""
-#: cp/decl.c:10819
+#: cp/decl.c:10916
#, gcc-internal-format
msgid "parameter %qD declared void"
msgstr ""
-#: cp/decl.c:11300
+#: cp/decl.c:11401
#, gcc-internal-format
msgid "invalid member function declaration"
msgstr ""
-#: cp/decl.c:11315
+#: cp/decl.c:11416
#, gcc-internal-format
msgid "%qD is already defined in class %qT"
msgstr ""
-#: cp/decl.c:11524
+#: cp/decl.c:11625
#, gcc-internal-format
msgid "static member function %q#D declared with type qualifiers"
msgstr ""
-#: cp/decl2.c:268
+#: cp/decl2.c:263
#, gcc-internal-format
msgid "name missing for member function"
msgstr ""
-#: cp/decl2.c:339 cp/decl2.c:353
+#: cp/decl2.c:334 cp/decl2.c:348
#, gcc-internal-format
msgid "ambiguous conversion for array subscript"
msgstr ""
-#: cp/decl2.c:347
+#: cp/decl2.c:342
#, gcc-internal-format
msgid "invalid types %<%T[%T]%> for array subscript"
msgstr ""
-#: cp/decl2.c:390
+#: cp/decl2.c:385
#, gcc-internal-format
msgid "deleting array %q#D"
msgstr ""
-#: cp/decl2.c:396
+#: cp/decl2.c:391
#, gcc-internal-format
msgid "type %q#T argument given to %<delete%>, expected pointer"
msgstr ""
-#: cp/decl2.c:408
+#: cp/decl2.c:403
#, gcc-internal-format
msgid ""
"cannot delete a function. Only pointer-to-objects are valid arguments to %"
"<delete%>"
msgstr ""
-#: cp/decl2.c:416
+#: cp/decl2.c:411
#, gcc-internal-format
msgid "deleting %qT is undefined"
msgstr ""
-#. 14.5.2.2 [temp.mem]
-#.
-#. A local class shall not have member templates.
-#: cp/decl2.c:452
-#, gcc-internal-format
-msgid "invalid declaration of member template %q#D in local class"
-msgstr ""
-
-#: cp/decl2.c:464 cp/pt.c:3102
+#: cp/decl2.c:454 cp/pt.c:3151
#, gcc-internal-format
msgid "template declaration of %q#D"
msgstr ""
-#: cp/decl2.c:516
+#: cp/decl2.c:506
#, gcc-internal-format
msgid "Java method %qD has non-Java return type %qT"
msgstr ""
-#: cp/decl2.c:533
+#: cp/decl2.c:523
#, gcc-internal-format
msgid "Java method %qD has non-Java parameter type %qT"
msgstr ""
-#: cp/decl2.c:644
+#: cp/decl2.c:634
#, gcc-internal-format
msgid "prototype for %q#D does not match any in class %qT"
msgstr ""
-#: cp/decl2.c:731
+#: cp/decl2.c:721
#, gcc-internal-format
msgid "local class %q#T shall not have static data member %q#D"
msgstr ""
-#: cp/decl2.c:739
+#: cp/decl2.c:729
#, gcc-internal-format
msgid "initializer invalid for static member with constructor"
msgstr ""
-#: cp/decl2.c:742
+#: cp/decl2.c:732
#, gcc-internal-format
msgid "(an out of class initialization is required)"
msgstr ""
-#: cp/decl2.c:802
+#: cp/decl2.c:792
#, gcc-internal-format
msgid "member %qD conflicts with virtual function table field name"
msgstr ""
-#: cp/decl2.c:821
+#: cp/decl2.c:811
#, gcc-internal-format
msgid "applying attributes to template parameters is not implemented"
msgstr ""
-#: cp/decl2.c:831
+#: cp/decl2.c:821
#, gcc-internal-format
msgid "%qD is already defined in %qT"
msgstr ""
-#: cp/decl2.c:852
+#: cp/decl2.c:842
#, gcc-internal-format
msgid "initializer specified for static member function %qD"
msgstr ""
-#: cp/decl2.c:875
+#: cp/decl2.c:865
#, gcc-internal-format
msgid "field initializer is not constant"
msgstr ""
-#: cp/decl2.c:902
+#: cp/decl2.c:892
#, gcc-internal-format
msgid "%<asm%> specifiers are not permitted on non-static data members"
msgstr ""
-#: cp/decl2.c:953
+#: cp/decl2.c:943
#, gcc-internal-format
msgid "bit-field %qD with non-integral type"
msgstr ""
-#: cp/decl2.c:959
+#: cp/decl2.c:949
#, gcc-internal-format
msgid "cannot declare %qD to be a bit-field type"
msgstr ""
-#: cp/decl2.c:969
+#: cp/decl2.c:959
#, gcc-internal-format
msgid "cannot declare bit-field %qD with function type"
msgstr ""
-#: cp/decl2.c:976
+#: cp/decl2.c:966
#, gcc-internal-format
msgid "%qD is already defined in the class %qT"
msgstr ""
-#: cp/decl2.c:983
+#: cp/decl2.c:973
#, gcc-internal-format
msgid "static member %qD cannot be a bit-field"
msgstr ""
-#: cp/decl2.c:1029
+#: cp/decl2.c:1019
#, gcc-internal-format
msgid "anonymous struct not inside named type"
msgstr ""
-#: cp/decl2.c:1112
+#: cp/decl2.c:1102
#, gcc-internal-format
msgid "namespace-scope anonymous aggregates must be static"
msgstr ""
-#: cp/decl2.c:1121
+#: cp/decl2.c:1111
#, gcc-internal-format
msgid "anonymous union with no members"
msgstr ""
-#: cp/decl2.c:1157
+#: cp/decl2.c:1147
#, gcc-internal-format
msgid "%<operator new%> must return type %qT"
msgstr ""
-#: cp/decl2.c:1166
+#: cp/decl2.c:1156
#, gcc-internal-format
msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter"
msgstr ""
-#: cp/decl2.c:1195
+#: cp/decl2.c:1185
#, gcc-internal-format
msgid "%<operator delete%> must return type %qT"
msgstr ""
-#: cp/decl2.c:1204
+#: cp/decl2.c:1194
#, gcc-internal-format
msgid "%<operator delete%> takes type %qT as first parameter"
msgstr ""
-#: cp/decl2.c:1867
+#: cp/decl2.c:1857
#, gcc-internal-format
msgid "%qT has a field %qD whose type uses the anonymous namespace"
msgstr ""
-#: cp/decl2.c:1873
+#: cp/decl2.c:1863
#, gcc-internal-format
msgid "%qT declared with greater visibility than the type of its field %qD"
msgstr ""
-#: cp/decl2.c:1884
+#: cp/decl2.c:1874
#, gcc-internal-format
msgid "%qT has a base %qT whose type uses the anonymous namespace"
msgstr ""
-#: cp/decl2.c:1889
+#: cp/decl2.c:1879
#, gcc-internal-format
msgid "%qT declared with greater visibility than its base %qT"
msgstr ""
-#: cp/decl2.c:3313
+#: cp/decl2.c:3267
#, gcc-internal-format
msgid "inline function %q+D used but never defined"
msgstr ""
-#: cp/decl2.c:3467
+#: cp/decl2.c:3417
#, gcc-internal-format
msgid "default argument missing for parameter %P of %q+#D"
msgstr ""
@@ -27320,8 +27897,7 @@ msgstr ""
#, gcc-internal-format
msgid ""
"(if this is not what you intended, make sure the function template has "
-"already been declared and add <> after the function name here) -Wno-non-"
-"template-friend disables this warning"
+"already been declared and add <> after the function name here) "
msgstr ""
#: cp/init.c:334
@@ -27553,37 +28129,37 @@ msgstr ""
msgid "type to vector delete is neither pointer or array type"
msgstr ""
-#: cp/lex.c:467
+#: cp/lex.c:470
#, gcc-internal-format
msgid "junk at end of #pragma %s"
msgstr ""
-#: cp/lex.c:474
+#: cp/lex.c:477
#, gcc-internal-format
msgid "invalid #pragma %s"
msgstr ""
-#: cp/lex.c:482
+#: cp/lex.c:485
#, gcc-internal-format
msgid "#pragma vtable no longer supported"
msgstr ""
-#: cp/lex.c:561
+#: cp/lex.c:564
#, gcc-internal-format
msgid "#pragma implementation for %qs appears after file is included"
msgstr ""
-#: cp/lex.c:586
+#: cp/lex.c:589
#, gcc-internal-format
msgid "junk at end of #pragma GCC java_exceptions"
msgstr ""
-#: cp/lex.c:600
+#: cp/lex.c:603
#, gcc-internal-format
msgid "%qD not defined"
msgstr ""
-#: cp/lex.c:604
+#: cp/lex.c:607
#, gcc-internal-format
msgid "%qD was not declared in this scope"
msgstr ""
@@ -27598,68 +28174,68 @@ msgstr ""
#. Note that we have the exact wording of the following message in
#. the manual (trouble.texi, node "Name lookup"), so they need to
#. be kept in synch.
-#: cp/lex.c:641
+#: cp/lex.c:644
#, gcc-internal-format
msgid ""
"there are no arguments to %qD that depend on a template parameter, so a "
"declaration of %qD must be available"
msgstr ""
-#: cp/lex.c:650
+#: cp/lex.c:653
#, gcc-internal-format
msgid ""
"(if you use %<-fpermissive%>, G++ will accept your code, but allowing the "
"use of an undeclared name is deprecated)"
msgstr ""
-#: cp/mangle.c:2165
+#: cp/mangle.c:2161
#, gcc-internal-format
msgid "call_expr cannot be mangled due to a defect in the C++ ABI"
msgstr ""
-#: cp/mangle.c:2173
+#: cp/mangle.c:2169
#, gcc-internal-format
msgid "zero-operand casts cannot be mangled due to a defect in the C++ ABI"
msgstr ""
-#: cp/mangle.c:2223
+#: cp/mangle.c:2219
#, gcc-internal-format
msgid "omitted middle operand to %<?:%> operand cannot be mangled"
msgstr ""
-#: cp/mangle.c:2533
+#: cp/mangle.c:2529
#, gcc-internal-format
msgid "the mangled name of %qD will change in a future version of GCC"
msgstr ""
-#: cp/method.c:459
+#: cp/method.c:463
#, gcc-internal-format
msgid "generic thunk code fails for method %q#D which uses %<...%>"
msgstr ""
-#: cp/method.c:695
+#: cp/method.c:698
#, gcc-internal-format
msgid "non-static const member %q#D, can't use default assignment operator"
msgstr ""
-#: cp/method.c:701
+#: cp/method.c:704
#, gcc-internal-format
msgid "non-static reference member %q#D, can't use default assignment operator"
msgstr ""
-#: cp/method.c:813
+#: cp/method.c:816
#, gcc-internal-format
msgid "%Hsynthesized method %qD first required here "
msgstr ""
-#: cp/method.c:1148
+#: cp/method.c:1151
#, gcc-internal-format
msgid ""
"vtable layout for class %qT may not be ABI-compliantand may change in a "
"future version of GCC due to implicit virtual destructor"
msgstr ""
-#: cp/name-lookup.c:712
+#: cp/name-lookup.c:730
#, gcc-internal-format
msgid "redeclaration of %<wchar_t%> as %qT"
msgstr ""
@@ -27670,504 +28246,514 @@ msgstr ""
#. [basic.start.main]
#.
#. This function shall not be overloaded.
-#: cp/name-lookup.c:742
+#: cp/name-lookup.c:760
#, gcc-internal-format
msgid "invalid redeclaration of %q+D"
msgstr ""
-#: cp/name-lookup.c:743
+#: cp/name-lookup.c:761
#, gcc-internal-format
msgid "as %qD"
msgstr ""
-#: cp/name-lookup.c:834
+#: cp/name-lookup.c:852
#, gcc-internal-format
msgid "type mismatch with previous external decl of %q#D"
msgstr ""
-#: cp/name-lookup.c:835
+#: cp/name-lookup.c:853
#, gcc-internal-format
msgid "previous external decl of %q+#D"
msgstr ""
-#: cp/name-lookup.c:926
+#: cp/name-lookup.c:944
#, gcc-internal-format
msgid "extern declaration of %q#D doesn't match"
msgstr ""
-#: cp/name-lookup.c:927
+#: cp/name-lookup.c:945
#, gcc-internal-format
msgid "global declaration %q+#D"
msgstr ""
-#: cp/name-lookup.c:964 cp/name-lookup.c:971
+#: cp/name-lookup.c:982 cp/name-lookup.c:989
#, gcc-internal-format
msgid "declaration of %q#D shadows a parameter"
msgstr ""
#. Location of previous decl is not useful in this case.
-#: cp/name-lookup.c:996
+#: cp/name-lookup.c:1014
#, gcc-internal-format
msgid "declaration of %qD shadows a member of 'this'"
msgstr ""
-#: cp/name-lookup.c:1002
+#: cp/name-lookup.c:1020
#, gcc-internal-format
msgid "declaration of %qD shadows a previous local"
msgstr ""
-#: cp/name-lookup.c:1009
+#: cp/name-lookup.c:1027
#, gcc-internal-format
msgid "declaration of %qD shadows a global declaration"
msgstr ""
-#: cp/name-lookup.c:1132
+#: cp/name-lookup.c:1150
#, gcc-internal-format
msgid "name lookup of %qD changed"
msgstr ""
-#: cp/name-lookup.c:1133
+#: cp/name-lookup.c:1151
#, gcc-internal-format
msgid " matches this %q+D under ISO standard rules"
msgstr ""
-#: cp/name-lookup.c:1135
+#: cp/name-lookup.c:1153
#, gcc-internal-format
msgid " matches this %q+D under old rules"
msgstr ""
-#: cp/name-lookup.c:1153 cp/name-lookup.c:1161
+#: cp/name-lookup.c:1171 cp/name-lookup.c:1179
#, gcc-internal-format
msgid "name lookup of %qD changed for new ISO %<for%> scoping"
msgstr ""
-#: cp/name-lookup.c:1155
+#: cp/name-lookup.c:1173
#, gcc-internal-format
msgid " cannot use obsolete binding at %q+D because it has a destructor"
msgstr ""
-#: cp/name-lookup.c:1163
+#: cp/name-lookup.c:1181
#, gcc-internal-format
msgid " using obsolete binding at %q+D"
msgstr ""
-#: cp/name-lookup.c:1216
+#: cp/name-lookup.c:1234
#, gcc-internal-format
msgid "%s %s(%E) %p %d\n"
msgstr ""
-#: cp/name-lookup.c:1219
+#: cp/name-lookup.c:1237
#, gcc-internal-format
msgid "%s %s %p %d\n"
msgstr ""
-#: cp/name-lookup.c:1346
+#: cp/name-lookup.c:1364
#, gcc-internal-format
msgid "XXX is_class_level != (current_scope == class_scope)\n"
msgstr ""
-#: cp/name-lookup.c:1909
+#: cp/name-lookup.c:1927
#, gcc-internal-format
msgid "%q#D hides constructor for %q#T"
msgstr ""
-#: cp/name-lookup.c:1926
+#: cp/name-lookup.c:1944
#, gcc-internal-format
msgid "%q#D conflicts with previous using declaration %q#D"
msgstr ""
-#: cp/name-lookup.c:1949
+#: cp/name-lookup.c:1967
#, gcc-internal-format
msgid "previous non-function declaration %q+#D"
msgstr ""
-#: cp/name-lookup.c:1950
+#: cp/name-lookup.c:1968
#, gcc-internal-format
msgid "conflicts with function declaration %q#D"
msgstr ""
#. It's a nested name with template parameter dependent scope.
#. This can only be using-declaration for class member.
-#: cp/name-lookup.c:2028 cp/name-lookup.c:2053
+#: cp/name-lookup.c:2046 cp/name-lookup.c:2071
#, gcc-internal-format
msgid "%qT is not a namespace"
msgstr ""
#. 7.3.3/5
#. A using-declaration shall not name a template-id.
-#: cp/name-lookup.c:2038
+#: cp/name-lookup.c:2056
#, gcc-internal-format
msgid "a using-declaration cannot specify a template-id. Try %<using %D%>"
msgstr ""
-#: cp/name-lookup.c:2045
+#: cp/name-lookup.c:2063
#, gcc-internal-format
msgid "namespace %qD not allowed in using-declaration"
msgstr ""
-#: cp/name-lookup.c:2081
+#: cp/name-lookup.c:2099
#, gcc-internal-format
msgid "%qD not declared"
msgstr ""
-#: cp/name-lookup.c:2102 cp/name-lookup.c:2139 cp/name-lookup.c:2173
+#: cp/name-lookup.c:2120 cp/name-lookup.c:2157 cp/name-lookup.c:2191
#, gcc-internal-format
msgid "%qD is already declared in this scope"
msgstr ""
-#: cp/name-lookup.c:2179
+#: cp/name-lookup.c:2197
#, gcc-internal-format
msgid "using declaration %qD introduced ambiguous type %qT"
msgstr ""
-#: cp/name-lookup.c:2777
+#: cp/name-lookup.c:2795
#, gcc-internal-format
msgid "using-declaration for non-member at class scope"
msgstr ""
-#: cp/name-lookup.c:2784
+#: cp/name-lookup.c:2802
#, gcc-internal-format
msgid "%<%T::%D%> names destructor"
msgstr ""
-#: cp/name-lookup.c:2789
+#: cp/name-lookup.c:2807
#, gcc-internal-format
msgid "%<%T::%D%> names constructor"
msgstr ""
-#: cp/name-lookup.c:2794
+#: cp/name-lookup.c:2812
#, gcc-internal-format
msgid "%<%T::%D%> names constructor in %qT"
msgstr ""
-#: cp/name-lookup.c:2844
+#: cp/name-lookup.c:2862
#, gcc-internal-format
msgid "no members matching %<%T::%D%> in %q#T"
msgstr ""
-#: cp/name-lookup.c:2912
+#: cp/name-lookup.c:2930
#, gcc-internal-format
msgid "declaration of %qD not in a namespace surrounding %qD"
msgstr ""
-#: cp/name-lookup.c:2920
+#: cp/name-lookup.c:2938
#, gcc-internal-format
msgid "explicit qualification in declaration of %qD"
msgstr ""
-#: cp/name-lookup.c:2963
+#: cp/name-lookup.c:2981
#, gcc-internal-format
msgid "%qD should have been declared inside %qD"
msgstr ""
-#: cp/name-lookup.c:3034
+#: cp/name-lookup.c:3048
#, gcc-internal-format
msgid "namespace alias %qD not allowed here, assuming %qD"
msgstr ""
-#: cp/name-lookup.c:3089
+#: cp/name-lookup.c:3103
#, gcc-internal-format
msgid "%qs attribute requires a single NTBS argument"
msgstr ""
-#: cp/name-lookup.c:3378
+#: cp/name-lookup.c:3392
#, gcc-internal-format
msgid "strong using only meaningful at namespace scope"
msgstr ""
-#: cp/name-lookup.c:3382
+#: cp/name-lookup.c:3396
#, gcc-internal-format
msgid "current namespace %qD does not enclose strongly used namespace %qD"
msgstr ""
-#: cp/name-lookup.c:3390
+#: cp/name-lookup.c:3404
#, gcc-internal-format
msgid "%qD attribute directive ignored"
msgstr ""
-#: cp/name-lookup.c:3540
+#: cp/name-lookup.c:3554
#, gcc-internal-format
msgid "%qD denotes an ambiguous type"
msgstr ""
-#: cp/name-lookup.c:3541
+#: cp/name-lookup.c:3555
#, gcc-internal-format
msgid "%J first type here"
msgstr ""
-#: cp/name-lookup.c:3542
+#: cp/name-lookup.c:3556
#, gcc-internal-format
msgid "%J other type here"
msgstr ""
-#: cp/name-lookup.c:4257
+#: cp/name-lookup.c:4271
#, gcc-internal-format
msgid "%q+D is not a function,"
msgstr ""
-#: cp/name-lookup.c:4258
+#: cp/name-lookup.c:4272
#, gcc-internal-format
msgid " conflict with %q+D"
msgstr ""
-#: cp/name-lookup.c:4679
+#: cp/name-lookup.c:4693
#, gcc-internal-format
msgid "argument dependent lookup finds %q+D"
msgstr ""
-#: cp/name-lookup.c:5111
+#: cp/name-lookup.c:5125
#, gcc-internal-format
msgid "XXX entering pop_everything ()\n"
msgstr ""
-#: cp/name-lookup.c:5120
+#: cp/name-lookup.c:5134
#, gcc-internal-format
msgid "XXX leaving pop_everything ()\n"
msgstr ""
-#: cp/parser.c:1942
+#: cp/parser.c:453
+#, gcc-internal-format
+msgid "identifier %<%s%> will become a keyword in C++0x"
+msgstr ""
+
+#: cp/parser.c:1990
#, gcc-internal-format
msgid "%<#pragma%> is not allowed here"
msgstr ""
-#: cp/parser.c:1972
+#: cp/parser.c:2020
#, gcc-internal-format
msgid "%<%D::%D%> has not been declared"
msgstr ""
-#: cp/parser.c:1975 cp/semantics.c:2388
+#: cp/parser.c:2023 cp/semantics.c:2426
#, gcc-internal-format
msgid "%<::%D%> has not been declared"
msgstr ""
-#: cp/parser.c:1978
+#: cp/parser.c:2026
#, gcc-internal-format
msgid "request for member %qD in non-class type %qT"
msgstr ""
-#: cp/parser.c:1981
+#: cp/parser.c:2029
#, gcc-internal-format
msgid "%<%T::%D%> has not been declared"
msgstr ""
-#: cp/parser.c:1984
+#: cp/parser.c:2032
#, gcc-internal-format
msgid "%qD has not been declared"
msgstr ""
-#: cp/parser.c:1987
+#: cp/parser.c:2035
#, gcc-internal-format
msgid "%<%D::%D%> %s"
msgstr ""
-#: cp/parser.c:1989
+#: cp/parser.c:2037
#, gcc-internal-format
msgid "%<::%D%> %s"
msgstr ""
-#: cp/parser.c:1991
+#: cp/parser.c:2039
#, gcc-internal-format
msgid "%qD %s"
msgstr ""
-#: cp/parser.c:2027
+#: cp/parser.c:2075
#, gcc-internal-format
msgid "ISO C++ does not support %<long long%>"
msgstr ""
-#: cp/parser.c:2047
+#: cp/parser.c:2095
#, gcc-internal-format
msgid "duplicate %qs"
msgstr ""
-#: cp/parser.c:2090
+#: cp/parser.c:2138
#, gcc-internal-format
msgid "new types may not be defined in a return type"
msgstr ""
-#: cp/parser.c:2091
+#: cp/parser.c:2139
#, gcc-internal-format
msgid "(perhaps a semicolon is missing after the definition of %qT)"
msgstr ""
-#: cp/parser.c:2110 cp/parser.c:3858 cp/pt.c:4537
+#: cp/parser.c:2158 cp/parser.c:3918 cp/pt.c:4467
#, gcc-internal-format
msgid "%qT is not a template"
msgstr ""
-#: cp/parser.c:2112
+#: cp/parser.c:2160
#, gcc-internal-format
msgid "%qE is not a template"
msgstr ""
-#: cp/parser.c:2114
+#: cp/parser.c:2162
#, gcc-internal-format
msgid "invalid template-id"
msgstr ""
-#: cp/parser.c:2143
+#: cp/parser.c:2191
#, gcc-internal-format
msgid "%s cannot appear in a constant-expression"
msgstr ""
-#: cp/parser.c:2168
+#: cp/parser.c:2216
#, gcc-internal-format
msgid "invalid use of template-name %qE without an argument list"
msgstr ""
-#: cp/parser.c:2170
+#: cp/parser.c:2218
#, gcc-internal-format
msgid "invalid use of destructor %qD as a type"
msgstr ""
#. Something like 'unsigned A a;'
-#: cp/parser.c:2173
+#: cp/parser.c:2221
#, gcc-internal-format
msgid "invalid combination of multiple type-specifiers"
msgstr ""
#. Issue an error message.
-#: cp/parser.c:2177
+#: cp/parser.c:2225
#, gcc-internal-format
msgid "%qE does not name a type"
msgstr ""
-#: cp/parser.c:2209
+#: cp/parser.c:2257
#, gcc-internal-format
msgid "(perhaps %<typename %T::%E%> was intended)"
msgstr ""
-#: cp/parser.c:2224
+#: cp/parser.c:2272
#, gcc-internal-format
msgid "%qE in namespace %qE does not name a type"
msgstr ""
-#: cp/parser.c:2227
+#: cp/parser.c:2275
#, gcc-internal-format
msgid "%qE in class %qT does not name a type"
msgstr ""
-#: cp/parser.c:2983
+#: cp/parser.c:3034
#, gcc-internal-format
msgid "ISO C++ forbids braced-groups within expressions"
msgstr ""
-#: cp/parser.c:2992
+#: cp/parser.c:3044
#, gcc-internal-format
msgid "statement-expressions are allowed only inside functions"
msgstr ""
-#: cp/parser.c:3043
+#: cp/parser.c:3101
#, gcc-internal-format
msgid "%<this%> may not be used in this context"
msgstr ""
-#: cp/parser.c:3195
+#: cp/parser.c:3253
#, gcc-internal-format
msgid "local variable %qD may not appear in this context"
msgstr ""
-#: cp/parser.c:3492
+#: cp/parser.c:3552
#, gcc-internal-format
msgid "scope %qT before %<~%> is not a class-name"
msgstr ""
-#: cp/parser.c:3593
+#: cp/parser.c:3653
#, gcc-internal-format
msgid "declaration of %<~%T%> as member of %qT"
msgstr ""
-#: cp/parser.c:3607
+#: cp/parser.c:3667
#, gcc-internal-format
msgid "typedef-name %qD used as destructor declarator"
msgstr ""
-#: cp/parser.c:3817 cp/parser.c:12932 cp/parser.c:15066
+#: cp/parser.c:3877 cp/parser.c:13162 cp/parser.c:15331
#, gcc-internal-format
msgid "reference to %qD is ambiguous"
msgstr ""
-#: cp/parser.c:4248
+#: cp/parser.c:4308
#, gcc-internal-format
msgid "ISO C++ forbids compound-literals"
msgstr ""
-#: cp/parser.c:4581
+#: cp/parser.c:4640
#, gcc-internal-format
msgid "%qE does not have class type"
msgstr ""
-#: cp/parser.c:4657 cp/typeck.c:1950
+#: cp/parser.c:4716 cp/typeck.c:1944
#, gcc-internal-format
msgid "invalid use of %qD"
msgstr ""
-#: cp/parser.c:5181
+#: cp/parser.c:5240
#, gcc-internal-format
msgid "array bound forbidden after parenthesized type-id"
msgstr ""
-#: cp/parser.c:5182
+#: cp/parser.c:5241
#, gcc-internal-format
msgid "try removing the parentheses around the type-id"
msgstr ""
-#: cp/parser.c:5384
+#: cp/parser.c:5443
#, gcc-internal-format
msgid "expression in new-declarator must have integral or enumeration type"
msgstr ""
-#: cp/parser.c:5573
+#: cp/parser.c:5632
#, gcc-internal-format
msgid "use of old-style cast"
msgstr ""
-#: cp/parser.c:6362
+#: cp/parser.c:6435
#, gcc-internal-format
msgid "case label %qE not within a switch statement"
msgstr ""
-#: cp/parser.c:6928
+#: cp/parser.c:6552
+#, gcc-internal-format
+msgid "%<else%> without a previous %<if%>"
+msgstr ""
+
+#: cp/parser.c:7051
#, gcc-internal-format
msgid "ISO C++ forbids computed gotos"
msgstr ""
-#: cp/parser.c:7060
+#: cp/parser.c:7191
#, gcc-internal-format
msgid "extra %<;%>"
msgstr ""
-#: cp/parser.c:7399
+#: cp/parser.c:7538
#, gcc-internal-format
msgid "mixing declarations and function-definitions is forbidden"
msgstr ""
-#: cp/parser.c:7531
+#: cp/parser.c:7670
#, gcc-internal-format
msgid "%<friend%> used outside of class"
msgstr ""
-#: cp/parser.c:7685
+#: cp/parser.c:7824
#, gcc-internal-format
msgid "class definition may not be declared a friend"
msgstr ""
-#: cp/parser.c:7749 cp/parser.c:14020
+#: cp/parser.c:7888 cp/parser.c:14285
#, gcc-internal-format
msgid "templates may not be %<virtual%>"
msgstr ""
-#: cp/parser.c:8002
+#: cp/parser.c:8203
#, gcc-internal-format
msgid "only constructors take base initializers"
msgstr ""
-#: cp/parser.c:8054
+#: cp/parser.c:8255
#, gcc-internal-format
msgid "anachronistic old-style base class initializer"
msgstr ""
-#: cp/parser.c:8098
+#: cp/parser.c:8299
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (a qualified member "
@@ -28175,74 +28761,74 @@ msgid ""
msgstr ""
#. Warn that we do not support `export'.
-#: cp/parser.c:8443
+#: cp/parser.c:8644
#, gcc-internal-format
msgid "keyword %<export%> 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:8826
+#: cp/parser.c:9037
#, gcc-internal-format
msgid "%<<::%> cannot begin a template-argument list"
msgstr ""
-#: cp/parser.c:8827
+#: cp/parser.c:9038
#, gcc-internal-format
msgid ""
"%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> "
"and %<::%>"
msgstr ""
-#: cp/parser.c:8834
+#: cp/parser.c:9045
#, gcc-internal-format
msgid "(if you use -fpermissive G++ will accept your code)"
msgstr ""
-#: cp/parser.c:8907
+#: cp/parser.c:9118
#, gcc-internal-format
msgid "parse error in template argument list"
msgstr ""
#. Explain what went wrong.
-#: cp/parser.c:9020
+#: cp/parser.c:9231
#, gcc-internal-format
msgid "non-template %qD used as template"
msgstr ""
-#: cp/parser.c:9021
+#: cp/parser.c:9232
#, gcc-internal-format
msgid "use %<%T::template %D%> to indicate that it is a template"
msgstr ""
-#: cp/parser.c:9531
+#: cp/parser.c:9742
#, gcc-internal-format
msgid "template specialization with C linkage"
msgstr ""
-#: cp/parser.c:10106
+#: cp/parser.c:10317
#, gcc-internal-format
msgid "using %<typename%> outside of template"
msgstr ""
-#: cp/parser.c:10321
+#: cp/parser.c:10537
#, gcc-internal-format
msgid "attributes ignored on uninstantiated type"
msgstr ""
-#: cp/parser.c:10325
+#: cp/parser.c:10541
#, gcc-internal-format
msgid "attributes ignored on template instantiation"
msgstr ""
-#: cp/parser.c:10330
+#: cp/parser.c:10546
#, gcc-internal-format
msgid ""
"attributes ignored on elaborated-type-specifier that is not a forward "
"declaration"
msgstr ""
-#: cp/parser.c:10544
+#: cp/parser.c:10760
#, gcc-internal-format
msgid "%qD is not a namespace-name"
msgstr ""
@@ -28250,136 +28836,141 @@ msgstr ""
#. [namespace.udecl]
#.
#. A using declaration shall not name a template-id.
-#: cp/parser.c:10764
+#: cp/parser.c:10980
#, gcc-internal-format
msgid "a template-id may not appear in a using-declaration"
msgstr ""
-#: cp/parser.c:11105
+#: cp/parser.c:11325
#, gcc-internal-format
msgid "an asm-specification is not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:11107
+#: cp/parser.c:11327
#, gcc-internal-format
msgid "attributes are not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:11250
+#: cp/parser.c:11460
+#, gcc-internal-format
+msgid "initializer provided for function"
+msgstr ""
+
+#: cp/parser.c:11480
#, gcc-internal-format
msgid "attributes after parenthesized initializer ignored"
msgstr ""
-#: cp/parser.c:11630 cp/pt.c:7272
+#: cp/parser.c:11860 cp/pt.c:7254
#, gcc-internal-format
msgid "array bound is not an integer constant"
msgstr ""
-#: cp/parser.c:11707
+#: cp/parser.c:11937
#, gcc-internal-format
msgid "%<%T::%D%> is not a type"
msgstr ""
-#: cp/parser.c:11732
+#: cp/parser.c:11962
#, gcc-internal-format
msgid "invalid use of constructor as a template"
msgstr ""
-#: cp/parser.c:11733
+#: cp/parser.c:11963
#, gcc-internal-format
msgid ""
"use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified "
"name"
msgstr ""
-#: cp/parser.c:11892
+#: cp/parser.c:12122
#, gcc-internal-format
msgid "%qD is a namespace"
msgstr ""
-#: cp/parser.c:11967
+#: cp/parser.c:12197
#, gcc-internal-format
msgid "duplicate cv-qualifier"
msgstr ""
-#: cp/parser.c:12515
+#: cp/parser.c:12745
#, gcc-internal-format
msgid "file ends in default argument"
msgstr ""
-#: cp/parser.c:12588
+#: cp/parser.c:12818
#, gcc-internal-format
msgid "deprecated use of default argument for parameter of non-function"
msgstr ""
-#: cp/parser.c:12591
+#: cp/parser.c:12821
#, gcc-internal-format
msgid "default arguments are only permitted for function parameters"
msgstr ""
-#: cp/parser.c:12791
+#: cp/parser.c:13021
#, gcc-internal-format
msgid "ISO C++ does not allow designated initializers"
msgstr ""
-#: cp/parser.c:13355
+#: cp/parser.c:13611
#, gcc-internal-format
msgid "invalid class name in declaration of %qD"
msgstr ""
-#: cp/parser.c:13366
+#: cp/parser.c:13622
#, gcc-internal-format
msgid "declaration of %qD in %qD which does not enclose %qD"
msgstr ""
-#: cp/parser.c:13379
+#: cp/parser.c:13635
#, gcc-internal-format
msgid "extra qualification ignored"
msgstr ""
-#: cp/parser.c:13390
+#: cp/parser.c:13646
#, gcc-internal-format
msgid "an explicit specialization must be preceded by %<template <>%>"
msgstr ""
-#: cp/parser.c:13483
+#: cp/parser.c:13739
#, gcc-internal-format
msgid "previous definition of %q+#T"
msgstr ""
-#: cp/parser.c:13720
+#: cp/parser.c:13985
#, gcc-internal-format
msgid "%Hextra %<;%>"
msgstr ""
-#: cp/parser.c:13738
+#: cp/parser.c:14003
#, gcc-internal-format
msgid "a class-key must be used when declaring a friend"
msgstr ""
-#: cp/parser.c:13752
+#: cp/parser.c:14017
#, gcc-internal-format
msgid "friend declaration does not name a class or function"
msgstr ""
-#: cp/parser.c:13929
+#: cp/parser.c:14194
#, gcc-internal-format
msgid "pure-specifier on function-definition"
msgstr ""
-#: cp/parser.c:14205
+#: cp/parser.c:14470
#, gcc-internal-format
msgid "keyword %<typename%> not allowed outside of templates"
msgstr ""
-#: cp/parser.c:14207
+#: cp/parser.c:14472
#, gcc-internal-format
msgid ""
"keyword %<typename%> not allowed in this context (the base class is "
"implicitly a type)"
msgstr ""
-#: cp/parser.c:15235
+#: cp/parser.c:15504
#, gcc-internal-format
msgid "too few template-parameter-lists"
msgstr ""
@@ -28388,222 +28979,230 @@ msgstr ""
#. something like:
#.
#. template <class T> template <class U> void S::f();
-#: cp/parser.c:15250
+#: cp/parser.c:15519
#, gcc-internal-format
msgid "too many template-parameter-lists"
msgstr ""
#. Issue an error message.
-#: cp/parser.c:15509
+#: cp/parser.c:15791
#, gcc-internal-format
msgid "named return values are no longer supported"
msgstr ""
-#: cp/parser.c:15580
+#. 14.5.2.2 [temp.mem]
+#.
+#. A local class shall not have member templates.
+#: cp/parser.c:15863
+#, gcc-internal-format
+msgid "invalid declaration of member template in local class"
+msgstr ""
+
+#: cp/parser.c:15872
#, gcc-internal-format
msgid "template with C linkage"
msgstr ""
-#: cp/parser.c:15722
+#: cp/parser.c:16014
#, gcc-internal-format
msgid "template declaration of %qs"
msgstr ""
-#: cp/parser.c:15937
+#: cp/parser.c:16229
#, gcc-internal-format
msgid "%H%<>>%> should be %<> >%> within a nested template argument list"
msgstr ""
-#: cp/parser.c:15952
+#: cp/parser.c:16244
#, gcc-internal-format
msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
msgstr ""
-#: cp/parser.c:16268
+#: cp/parser.c:16560
#, gcc-internal-format
msgid "invalid use of %qD in linkage specification"
msgstr ""
-#: cp/parser.c:16281
+#: cp/parser.c:16573
#, gcc-internal-format
msgid "%<__thread%> before %qD"
msgstr ""
-#: cp/parser.c:16576
+#: cp/parser.c:16868
#, gcc-internal-format
msgid "%qs tag used in naming %q#T"
msgstr ""
-#: cp/parser.c:16597
+#: cp/parser.c:16889
#, gcc-internal-format
msgid "%qD redeclared with different access"
msgstr ""
-#: cp/parser.c:16614
+#: cp/parser.c:16906
#, gcc-internal-format
msgid "%<template%> (as a disambiguator) is only allowed within templates"
msgstr ""
-#: cp/parser.c:16855 cp/parser.c:17778 cp/parser.c:17909
+#: cp/parser.c:17159 cp/parser.c:18082 cp/parser.c:18213
#, gcc-internal-format
msgid "misplaced %<@%D%> Objective-C++ construct"
msgstr ""
-#: cp/parser.c:16996
+#: cp/parser.c:17300
#, gcc-internal-format
msgid "%<@encode%> must specify a type as an argument"
msgstr ""
-#: cp/parser.c:17311
+#: cp/parser.c:17615
#, gcc-internal-format
msgid "invalid Objective-C++ selector name"
msgstr ""
-#: cp/parser.c:17642
+#: cp/parser.c:17946
#, gcc-internal-format
msgid "identifier expected after %<@protocol%>"
msgstr ""
-#: cp/parser.c:19129
+#: cp/parser.c:19411
#, gcc-internal-format
msgid "junk at end of %<#pragma GCC pch_preprocess%>"
msgstr ""
-#: cp/parser.c:19274
+#: cp/parser.c:19556
#, gcc-internal-format
msgid "inter-module optimizations not implemented for C++"
msgstr ""
-#: cp/pt.c:238
+#: cp/pt.c:243
#, gcc-internal-format
msgid "data member %qD cannot be a member template"
msgstr ""
-#: cp/pt.c:250
+#: cp/pt.c:255
#, gcc-internal-format
msgid "invalid member template declaration %qD"
msgstr ""
-#: cp/pt.c:557
+#: cp/pt.c:562
#, gcc-internal-format
msgid "explicit specialization in non-namespace scope %qD"
msgstr ""
-#: cp/pt.c:571
+#: cp/pt.c:576
#, gcc-internal-format
msgid "enclosing class templates are not explicitly specialized"
msgstr ""
-#: cp/pt.c:659
+#: cp/pt.c:664
#, gcc-internal-format
msgid "specialization of %qD in different namespace"
msgstr ""
-#: cp/pt.c:660 cp/pt.c:757
+#: cp/pt.c:665 cp/pt.c:762
#, gcc-internal-format
msgid " from definition of %q+#D"
msgstr ""
-#: cp/pt.c:677
+#: cp/pt.c:682
#, gcc-internal-format
msgid ""
"explicit instantiation of %qD in namespace %qD (which does not enclose "
"namespace %qD)"
msgstr ""
-#: cp/pt.c:695
+#: cp/pt.c:700
#, gcc-internal-format
msgid "name of class shadows template template parameter %qD"
msgstr ""
-#: cp/pt.c:724
+#: cp/pt.c:729
#, gcc-internal-format
msgid "specialization of %qT after instantiation"
msgstr ""
-#: cp/pt.c:756
+#: cp/pt.c:761
#, gcc-internal-format
msgid "specializing %q#T in different namespace"
msgstr ""
-#: cp/pt.c:771
+#: cp/pt.c:776
#, gcc-internal-format
msgid "specialization %qT after instantiation %qT"
msgstr ""
-#: cp/pt.c:784
+#: cp/pt.c:789
#, gcc-internal-format
msgid "explicit specialization of non-template %qT"
msgstr ""
-#: cp/pt.c:1185
+#: cp/pt.c:1190
#, gcc-internal-format
msgid "specialization of %qD after instantiation"
msgstr ""
-#: cp/pt.c:1400
+#: cp/pt.c:1416
#, gcc-internal-format
msgid "%qD is not a function template"
msgstr ""
-#: cp/pt.c:1606
+#: cp/pt.c:1625
#, gcc-internal-format
msgid "template-id %qD for %q+D does not match any template declaration"
msgstr ""
-#: cp/pt.c:1614
+#: cp/pt.c:1633
#, gcc-internal-format
msgid "ambiguous template specialization %qD for %q+D"
msgstr ""
#. This case handles bogus declarations like template <>
#. template <class T> void f<int>();
-#: cp/pt.c:1849 cp/pt.c:1903
+#: cp/pt.c:1868 cp/pt.c:1922
#, gcc-internal-format
msgid "template-id %qD in declaration of primary template"
msgstr ""
-#: cp/pt.c:1862
+#: cp/pt.c:1881
#, gcc-internal-format
msgid "template parameter list used in explicit instantiation"
msgstr ""
-#: cp/pt.c:1868
+#: cp/pt.c:1887
#, gcc-internal-format
msgid "definition provided for explicit instantiation"
msgstr ""
-#: cp/pt.c:1876
+#: cp/pt.c:1895
#, gcc-internal-format
msgid "too many template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:1879
+#: cp/pt.c:1898
#, gcc-internal-format
msgid "too few template parameter lists in declaration of %qD"
msgstr ""
-#: cp/pt.c:1881
+#: cp/pt.c:1900
#, gcc-internal-format
msgid "explicit specialization of %qD must be introduced by %<template <>%>"
msgstr ""
-#: cp/pt.c:1900
+#: cp/pt.c:1919
#, gcc-internal-format
msgid "function template partial specialization %qD is not allowed"
msgstr ""
-#: cp/pt.c:1932
+#: cp/pt.c:1951
#, gcc-internal-format
msgid "default argument specified in explicit specialization"
msgstr ""
-#: cp/pt.c:1962
+#: cp/pt.c:1981
#, gcc-internal-format
msgid "%qD is not a template function"
msgstr ""
-#: cp/pt.c:1970
+#: cp/pt.c:1989
#, gcc-internal-format
msgid "%qD is not declared in %qD"
msgstr ""
@@ -28616,57 +29215,57 @@ msgstr ""
#. program is ill-formed.
#.
#. Similar language is found in [temp.explicit].
-#: cp/pt.c:2032
+#: cp/pt.c:2051
#, gcc-internal-format
msgid "specialization of implicitly-declared special member function"
msgstr ""
-#: cp/pt.c:2076
+#: cp/pt.c:2095
#, gcc-internal-format
msgid "no member function %qD declared in %qT"
msgstr ""
-#: cp/pt.c:2300
+#: cp/pt.c:2319
#, gcc-internal-format
msgid "declaration of %q+#D"
msgstr ""
-#: cp/pt.c:2301
+#: cp/pt.c:2320
#, gcc-internal-format
msgid " shadows template parm %q+#D"
msgstr ""
-#: cp/pt.c:2725
+#: cp/pt.c:2774
#, gcc-internal-format
msgid "template parameters not used in partial specialization:"
msgstr ""
-#: cp/pt.c:2729
+#: cp/pt.c:2778
#, gcc-internal-format
msgid " %qD"
msgstr ""
-#: cp/pt.c:2740
+#: cp/pt.c:2789
#, gcc-internal-format
msgid "partial specialization %qT does not specialize any template arguments"
msgstr ""
-#: cp/pt.c:2765
+#: cp/pt.c:2814
#, gcc-internal-format
msgid "template argument %qE involves template parameter(s)"
msgstr ""
-#: cp/pt.c:2809
+#: cp/pt.c:2858
#, gcc-internal-format
msgid "type %qT of template argument %qE depends on template parameter(s)"
msgstr ""
-#: cp/pt.c:2900
+#: cp/pt.c:2949
#, gcc-internal-format
msgid "no default argument for %qD"
msgstr ""
-#: cp/pt.c:3070
+#: cp/pt.c:3119
#, gcc-internal-format
msgid "template class without a name"
msgstr ""
@@ -28674,7 +29273,7 @@ msgstr ""
#. [temp.mem]
#.
#. A destructor shall not be a member template.
-#: cp/pt.c:3078
+#: cp/pt.c:3127
#, gcc-internal-format
msgid "destructor %qD declared as member template"
msgstr ""
@@ -28684,62 +29283,62 @@ msgstr ""
#. An allocation function can be a function
#. template. ... Template allocation functions shall
#. have two or more parameters.
-#: cp/pt.c:3093
+#: cp/pt.c:3142
#, gcc-internal-format
msgid "invalid template declaration of %qD"
msgstr ""
-#: cp/pt.c:3173
+#: cp/pt.c:3222
#, gcc-internal-format
msgid "%qD does not declare a template type"
msgstr ""
-#: cp/pt.c:3179
+#: cp/pt.c:3228
#, gcc-internal-format
msgid "template definition of non-template %q#D"
msgstr ""
-#: cp/pt.c:3222
+#: cp/pt.c:3271
#, gcc-internal-format
msgid "expected %d levels of template parms for %q#D, got %d"
msgstr ""
-#: cp/pt.c:3234
+#: cp/pt.c:3283
#, gcc-internal-format
msgid "got %d template parameters for %q#D"
msgstr ""
-#: cp/pt.c:3237
+#: cp/pt.c:3286
#, gcc-internal-format
msgid "got %d template parameters for %q#T"
msgstr ""
-#: cp/pt.c:3239
+#: cp/pt.c:3288
#, gcc-internal-format
msgid " but %d required"
msgstr ""
-#: cp/pt.c:3336
+#: cp/pt.c:3378
#, gcc-internal-format
msgid "%qT is not a template type"
msgstr ""
-#: cp/pt.c:3349
+#: cp/pt.c:3391
#, gcc-internal-format
msgid "template specifiers not specified in declaration of %qD"
msgstr ""
-#: cp/pt.c:3360
+#: cp/pt.c:3402
#, gcc-internal-format
msgid "used %d template parameter(s) instead of %d"
msgstr ""
-#: cp/pt.c:3389
+#: cp/pt.c:3431
#, gcc-internal-format
msgid "template parameter %q+#D"
msgstr ""
-#: cp/pt.c:3390
+#: cp/pt.c:3432
#, gcc-internal-format
msgid "redeclared here as %q#D"
msgstr ""
@@ -28748,391 +29347,415 @@ msgstr ""
#.
#. A template-parameter may not be given default arguments
#. by two different declarations in the same scope.
-#: cp/pt.c:3400
+#: cp/pt.c:3442
#, gcc-internal-format
msgid "redefinition of default argument for %q#D"
msgstr ""
-#: cp/pt.c:3401
+#: cp/pt.c:3443
#, gcc-internal-format
msgid "%J original definition appeared here"
msgstr ""
-#: cp/pt.c:3505
+#: cp/pt.c:3547
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because function %qD has "
"not external linkage"
msgstr ""
-#: cp/pt.c:3546
+#: cp/pt.c:3588
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because string literals "
"can never be used in this context"
msgstr ""
-#: cp/pt.c:3623
+#: cp/pt.c:3665
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is a non-"
"constant expression"
msgstr ""
-#: cp/pt.c:3667
+#: cp/pt.c:3709
#, gcc-internal-format
msgid ""
"%qD is not a valid template argument because %qD is a variable, not the "
"address of a variable"
msgstr ""
-#: cp/pt.c:3685
+#: cp/pt.c:3727
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qE is not a "
"variable"
msgstr ""
-#: cp/pt.c:3692
+#: cp/pt.c:3734
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument of type %qT because %qD does not have "
"external linkage"
msgstr ""
-#: cp/pt.c:3722
+#: cp/pt.c:3764
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because of conflicts in cv-"
"qualification"
msgstr ""
-#: cp/pt.c:3729
+#: cp/pt.c:3771
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is not an lvalue"
msgstr ""
-#: cp/pt.c:3742
+#: cp/pt.c:3784
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because object %qD has not "
"external linkage"
msgstr ""
-#: cp/pt.c:3782
+#: cp/pt.c:3824
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is a pointer"
msgstr ""
-#: cp/pt.c:3784
+#: cp/pt.c:3826
#, gcc-internal-format
msgid "try using %qE instead"
msgstr ""
-#: cp/pt.c:3819
+#: cp/pt.c:3861
#, gcc-internal-format
msgid ""
"%qE is not a valid template argument for type %qT because it is of type %qT"
msgstr ""
-#: cp/pt.c:3822
+#: cp/pt.c:3864
#, gcc-internal-format
msgid "standard conversions are not allowed in this context"
msgstr ""
-#: cp/pt.c:3984
+#: cp/pt.c:4026
#, gcc-internal-format
msgid "to refer to a type member of a template parameter, use %<typename %E%>"
msgstr ""
-#: cp/pt.c:3999 cp/pt.c:4018 cp/pt.c:4058
+#: cp/pt.c:4041 cp/pt.c:4060 cp/pt.c:4100
#, gcc-internal-format
msgid "type/value mismatch at argument %d in template parameter list for %qD"
msgstr ""
-#: cp/pt.c:4003
+#: cp/pt.c:4045
#, gcc-internal-format
msgid " expected a constant of type %qT, got %qT"
msgstr ""
-#: cp/pt.c:4007
+#: cp/pt.c:4049
#, gcc-internal-format
msgid " expected a class template, got %qE"
msgstr ""
-#: cp/pt.c:4009
+#: cp/pt.c:4051
#, gcc-internal-format
msgid " expected a type, got %qE"
msgstr ""
-#: cp/pt.c:4022
+#: cp/pt.c:4064
#, gcc-internal-format
msgid " expected a type, got %qT"
msgstr ""
-#: cp/pt.c:4024
+#: cp/pt.c:4066
#, gcc-internal-format
msgid " expected a class template, got %qT"
msgstr ""
-#: cp/pt.c:4061
+#: cp/pt.c:4103
#, gcc-internal-format
msgid " expected a template of type %qD, got %qD"
msgstr ""
-#: cp/pt.c:4104
+#: cp/pt.c:4146
#, gcc-internal-format
msgid "could not convert template argument %qE to %qT"
msgstr ""
-#: cp/pt.c:4148
+#: cp/pt.c:4191
#, gcc-internal-format
msgid "wrong number of template arguments (%d, should be %d)"
msgstr ""
-#: cp/pt.c:4152
+#: cp/pt.c:4195
#, gcc-internal-format
msgid "provided for %q+D"
msgstr ""
-#: cp/pt.c:4188
+#: cp/pt.c:4235
#, gcc-internal-format
msgid "template argument %d is invalid"
msgstr ""
-#: cp/pt.c:4549
+#: cp/pt.c:4479
#, gcc-internal-format
msgid "non-template type %qT used as a template"
msgstr ""
-#: cp/pt.c:4551
+#: cp/pt.c:4481
#, gcc-internal-format
msgid "for template declaration %q+D"
msgstr ""
-#: cp/pt.c:5211
+#: cp/pt.c:5156
#, gcc-internal-format
msgid ""
"template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN "
"to increase the maximum) instantiating %qD"
msgstr ""
-#: cp/pt.c:6816
+#: cp/pt.c:6771
#, gcc-internal-format
msgid "instantiation of %q+D as type %qT"
msgstr ""
-#: cp/pt.c:7032
+#. It may seem that this case cannot occur, since:
+#.
+#. typedef void f();
+#. void g() { f x; }
+#.
+#. declares a function, not a variable. However:
+#.
+#. typedef void f();
+#. template <typename T> void g() { T t; }
+#. template void g<f>();
+#.
+#. is an attempt to declare a variable with function
+#. type.
+#: cp/pt.c:6903
+#, gcc-internal-format
+msgid "variable %qD has function type"
+msgstr ""
+
+#: cp/pt.c:7008
#, gcc-internal-format
msgid "invalid parameter type %qT"
msgstr ""
-#: cp/pt.c:7034
+#: cp/pt.c:7010
#, gcc-internal-format
msgid "in declaration %q+D"
msgstr ""
-#: cp/pt.c:7107
+#: cp/pt.c:7083
#, gcc-internal-format
msgid "function returning an array"
msgstr ""
-#: cp/pt.c:7109
+#: cp/pt.c:7085
#, gcc-internal-format
msgid "function returning a function"
msgstr ""
-#: cp/pt.c:7136
+#: cp/pt.c:7119
#, gcc-internal-format
msgid "creating pointer to member function of non-class type %qT"
msgstr ""
-#: cp/pt.c:7292
+#: cp/pt.c:7274
#, gcc-internal-format
msgid "creating array with negative size (%qE)"
msgstr ""
-#: cp/pt.c:7519
+#: cp/pt.c:7515
#, gcc-internal-format
msgid "forming reference to void"
msgstr ""
-#: cp/pt.c:7521
+#: cp/pt.c:7517
#, gcc-internal-format
msgid "forming %s to reference type %qT"
msgstr ""
-#: cp/pt.c:7558
+#: cp/pt.c:7554
#, gcc-internal-format
msgid "creating pointer to member of non-class type %qT"
msgstr ""
-#: cp/pt.c:7564
+#: cp/pt.c:7560
#, gcc-internal-format
msgid "creating pointer to member reference type %qT"
msgstr ""
-#: cp/pt.c:7570
+#: cp/pt.c:7566
#, gcc-internal-format
msgid "creating pointer to member of type void"
msgstr ""
-#: cp/pt.c:7637
+#: cp/pt.c:7633
#, gcc-internal-format
msgid "creating array of %qT"
msgstr ""
-#: cp/pt.c:7643
+#: cp/pt.c:7639
#, gcc-internal-format
msgid "creating array of %qT, which is an abstract class type"
msgstr ""
-#: cp/pt.c:7687
+#: cp/pt.c:7683
#, gcc-internal-format
msgid "%qT is not a class, struct, or union type"
msgstr ""
-#: cp/pt.c:7722
+#: cp/pt.c:7718
#, gcc-internal-format
msgid "%qT resolves to %qT, which is not an enumeration type"
msgstr ""
-#: cp/pt.c:7725
+#: cp/pt.c:7721
#, gcc-internal-format
msgid "%qT resolves to %qT, which is is not a class type"
msgstr ""
-#: cp/pt.c:7790
+#: cp/pt.c:7786
#, gcc-internal-format
msgid "use of %qs in template"
msgstr ""
-#: cp/pt.c:7927
+#: cp/pt.c:7923
#, gcc-internal-format
msgid ""
"dependent-name %qE is parsed as a non-type, but instantiation yields a type"
msgstr ""
-#: cp/pt.c:7929
+#: cp/pt.c:7925
#, gcc-internal-format
msgid "say %<typename %E%> if a type is meant"
msgstr ""
-#: cp/pt.c:8056
+#: cp/pt.c:8052
#, gcc-internal-format
msgid "using invalid field %qD"
msgstr ""
-#: cp/pt.c:8945
+#: cp/pt.c:8959
#, gcc-internal-format
msgid ""
"a cast to a type other than an integral or enumeration type cannot appear in "
"a constant-expression"
msgstr ""
-#: cp/pt.c:9302
+#: cp/pt.c:9330
#, gcc-internal-format
msgid "%qT is not a class or namespace"
msgstr ""
-#: cp/pt.c:9305
+#: cp/pt.c:9333
#, gcc-internal-format
msgid "%qD is not a class or namespace"
msgstr ""
-#: cp/pt.c:9458
+#: cp/pt.c:9486
#, gcc-internal-format
msgid "%qT is/uses anonymous type"
msgstr ""
-#: cp/pt.c:9460
+#: cp/pt.c:9488
#, gcc-internal-format
msgid "template argument for %qD uses local type %qT"
msgstr ""
-#: cp/pt.c:9470
+#: cp/pt.c:9498
#, gcc-internal-format
msgid "%qT is a variably modified type"
msgstr ""
-#: cp/pt.c:9481
+#: cp/pt.c:9509
#, gcc-internal-format
msgid "integral expression %qE is not constant"
msgstr ""
-#: cp/pt.c:9486
+#: cp/pt.c:9514
#, gcc-internal-format
msgid " trying to instantiate %qD"
msgstr ""
-#: cp/pt.c:11534
+#: cp/pt.c:11559
#, gcc-internal-format
msgid "ambiguous class template instantiation for %q#T"
msgstr ""
-#: cp/pt.c:11537
+#: cp/pt.c:11562
#, gcc-internal-format
msgid "%s %+#T"
msgstr ""
-#: cp/pt.c:11560 cp/pt.c:11631
+#: cp/pt.c:11585 cp/pt.c:11663
#, gcc-internal-format
msgid "explicit instantiation of non-template %q#D"
msgstr ""
-#: cp/pt.c:11576 cp/pt.c:11626
+#: cp/pt.c:11601 cp/pt.c:11658
#, gcc-internal-format
msgid "no matching template for %qD found"
msgstr ""
-#: cp/pt.c:11582
+#: cp/pt.c:11606
+#, gcc-internal-format
+msgid ""
+"type %qT for explicit instantiation %qD does not match declared type %qT"
+msgstr ""
+
+#: cp/pt.c:11614
#, gcc-internal-format
msgid "explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:11618
+#: cp/pt.c:11650
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#D"
msgstr ""
-#: cp/pt.c:11640
+#: cp/pt.c:11672
#, gcc-internal-format
msgid "ISO C++ forbids the use of %<extern%> on explicit instantiations"
msgstr ""
-#: cp/pt.c:11645 cp/pt.c:11738
+#: cp/pt.c:11677 cp/pt.c:11770
#, gcc-internal-format
msgid "storage class %qD applied to template instantiation"
msgstr ""
-#: cp/pt.c:11710
+#: cp/pt.c:11742
#, gcc-internal-format
msgid "explicit instantiation of non-template type %qT"
msgstr ""
-#: cp/pt.c:11719
+#: cp/pt.c:11751
#, gcc-internal-format
msgid "explicit instantiation of %q#T before definition of template"
msgstr ""
-#: cp/pt.c:11727
+#: cp/pt.c:11759
#, gcc-internal-format
msgid "ISO C++ forbids the use of %qE on explicit instantiations"
msgstr ""
-#: cp/pt.c:11772
+#: cp/pt.c:11804
#, gcc-internal-format
msgid "duplicate explicit instantiation of %q#T"
msgstr ""
-#: cp/pt.c:12186
+#: cp/pt.c:12218
#, gcc-internal-format
msgid "explicit instantiation of %qD but no definition available"
msgstr ""
-#: cp/pt.c:12343
+#: cp/pt.c:12375
#, gcc-internal-format
msgid ""
"template instantiation depth exceeds maximum of %d instantiating %q+D, "
@@ -29140,7 +29763,7 @@ msgid ""
"the maximum)"
msgstr ""
-#: cp/pt.c:12617
+#: cp/pt.c:12649
#, gcc-internal-format
msgid "%q#T is not a valid type for a template constant parameter"
msgstr ""
@@ -29160,34 +29783,34 @@ msgstr ""
msgid "can't create repository information file %qs"
msgstr ""
-#: cp/rtti.c:270
+#: cp/rtti.c:271
#, gcc-internal-format
msgid "cannot use typeid with -fno-rtti"
msgstr ""
-#: cp/rtti.c:276
+#: cp/rtti.c:277
#, gcc-internal-format
msgid "must #include <typeinfo> before using typeid"
msgstr ""
-#: cp/rtti.c:347
+#: cp/rtti.c:348
#, gcc-internal-format
msgid ""
"cannot create type information for type %qT because it involves types of "
"variable size"
msgstr ""
-#: cp/rtti.c:600 cp/rtti.c:614
+#: cp/rtti.c:603 cp/rtti.c:617
#, gcc-internal-format
msgid "dynamic_cast of %q#D to %q#T can never succeed"
msgstr ""
-#: cp/rtti.c:624
+#: cp/rtti.c:627
#, gcc-internal-format
msgid "%<dynamic_cast%> not permitted with -fno-rtti"
msgstr ""
-#: cp/rtti.c:702
+#: cp/rtti.c:704
#, gcc-internal-format
msgid "cannot dynamic_cast %qE (of type %q#T) to type %q#T (%s)"
msgstr ""
@@ -29244,492 +29867,523 @@ msgstr ""
msgid " since %q+#D declared in base class"
msgstr ""
-#: cp/semantics.c:1256
+#: cp/semantics.c:1279
#, gcc-internal-format
msgid "type of asm operand %qE could not be determined"
msgstr ""
-#: cp/semantics.c:1379
+#: cp/semantics.c:1402
#, gcc-internal-format
msgid "invalid use of member %q+D in static member function"
msgstr ""
-#: cp/semantics.c:1381
+#: cp/semantics.c:1404
#, gcc-internal-format
msgid "invalid use of non-static data member %q+D"
msgstr ""
-#: cp/semantics.c:1382 cp/semantics.c:1421
+#: cp/semantics.c:1405 cp/semantics.c:1444
#, gcc-internal-format
msgid "from this location"
msgstr ""
-#: cp/semantics.c:1420
+#: cp/semantics.c:1443
#, gcc-internal-format
msgid "object missing in reference to %q+D"
msgstr ""
-#: cp/semantics.c:1848
+#: cp/semantics.c:1878
#, gcc-internal-format
msgid "arguments to destructor are not allowed"
msgstr ""
-#: cp/semantics.c:1899
+#: cp/semantics.c:1928
#, gcc-internal-format
msgid "%<this%> is unavailable for static member functions"
msgstr ""
-#: cp/semantics.c:1905
+#: cp/semantics.c:1934
#, gcc-internal-format
msgid "invalid use of %<this%> in non-member function"
msgstr ""
-#: cp/semantics.c:1907
+#: cp/semantics.c:1936
#, gcc-internal-format
msgid "invalid use of %<this%> at top level"
msgstr ""
-#: cp/semantics.c:1931
+#: cp/semantics.c:1960
#, gcc-internal-format
msgid "invalid qualifying scope in pseudo-destructor name"
msgstr ""
-#: cp/semantics.c:1951
+#: cp/semantics.c:1965 cp/typeck.c:1970
+#, gcc-internal-format
+msgid "qualified type %qT does not match destructor name ~%qT"
+msgstr ""
+
+#: cp/semantics.c:1987
#, gcc-internal-format
msgid "%qE is not of type %qT"
msgstr ""
-#: cp/semantics.c:1993
+#: cp/semantics.c:2031
#, gcc-internal-format
msgid "compound literal of non-object type %qT"
msgstr ""
-#: cp/semantics.c:2070
+#: cp/semantics.c:2108
#, gcc-internal-format
msgid "template type parameters must use the keyword %<class%> or %<typename%>"
msgstr ""
-#: cp/semantics.c:2107
+#: cp/semantics.c:2145
#, gcc-internal-format
msgid ""
"invalid use of type %qT as a default value for a template template-parameter"
msgstr ""
-#: cp/semantics.c:2110
+#: cp/semantics.c:2148
#, gcc-internal-format
msgid "invalid default argument for a template template parameter"
msgstr ""
-#: cp/semantics.c:2127
+#: cp/semantics.c:2165
#, gcc-internal-format
msgid "definition of %q#T inside template parameter list"
msgstr ""
-#: cp/semantics.c:2138
+#: cp/semantics.c:2176
#, gcc-internal-format
msgid "invalid definition of qualified type %qT"
msgstr ""
-#: cp/semantics.c:2345
+#: cp/semantics.c:2383
#, gcc-internal-format
msgid "invalid base-class specification"
msgstr ""
-#: cp/semantics.c:2354
+#: cp/semantics.c:2392
#, gcc-internal-format
msgid "base class %qT has cv qualifiers"
msgstr ""
-#: cp/semantics.c:2376
+#: cp/semantics.c:2414
#, gcc-internal-format
msgid "incomplete type %qT used in nested name specifier"
msgstr ""
-#: cp/semantics.c:2379
+#: cp/semantics.c:2417
#, gcc-internal-format
msgid "reference to %<%T::%D%> is ambiguous"
msgstr ""
-#: cp/semantics.c:2383 cp/typeck.c:1785
+#: cp/semantics.c:2421 cp/typeck.c:1779
#, gcc-internal-format
msgid "%qD is not a member of %qT"
msgstr ""
-#: cp/semantics.c:2386
+#: cp/semantics.c:2424
#, gcc-internal-format
msgid "%qD is not a member of %qD"
msgstr ""
-#: cp/semantics.c:2529
+#: cp/semantics.c:2567
#, gcc-internal-format
msgid "use of %<auto%> variable from containing function"
msgstr ""
-#: cp/semantics.c:2531
+#: cp/semantics.c:2569
#, gcc-internal-format
msgid " %q+#D declared here"
msgstr ""
-#: cp/semantics.c:2569
+#: cp/semantics.c:2607
#, gcc-internal-format
msgid ""
"template parameter %qD of type %qT is not allowed in an integral constant "
"expression because it is not of integral or enumeration type"
msgstr ""
-#: cp/semantics.c:2738
+#: cp/semantics.c:2776
#, gcc-internal-format
msgid "%qD cannot appear in a constant-expression"
msgstr ""
-#: cp/semantics.c:2746
+#: cp/semantics.c:2784
#, gcc-internal-format
msgid "use of namespace %qD as expression"
msgstr ""
-#: cp/semantics.c:2751
+#: cp/semantics.c:2789
#, gcc-internal-format
msgid "use of class template %qT as expression"
msgstr ""
#. Ambiguous reference to base members.
-#: cp/semantics.c:2757
+#: cp/semantics.c:2795
#, gcc-internal-format
msgid "request for member %qD is ambiguous in multiple inheritance lattice"
msgstr ""
-#: cp/semantics.c:2875
+#: cp/semantics.c:2913
#, gcc-internal-format
msgid "type of %qE is unknown"
msgstr ""
-#: cp/semantics.c:2890
+#: cp/semantics.c:2928
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to destructor %<~%T%>"
msgstr ""
-#: cp/semantics.c:2900
+#: cp/semantics.c:2938
#, gcc-internal-format
msgid "cannot apply %<offsetof%> to member function %qD"
msgstr ""
-#: cp/semantics.c:3391
+#: cp/semantics.c:3417
#, gcc-internal-format
msgid "num_threads expression must be integral"
msgstr ""
-#: cp/semantics.c:3405
+#: cp/semantics.c:3431
#, gcc-internal-format
msgid "schedule chunk size expression must be integral"
msgstr ""
-#: cp/semantics.c:3535
+#: cp/semantics.c:3561
#, gcc-internal-format
msgid "%qE has reference type for %qs"
msgstr ""
-#: cp/semantics.c:3674
+#: cp/semantics.c:3700
#, gcc-internal-format
msgid "%<threadprivate%> %qE is not file, namespace or block scope variable"
msgstr ""
-#: cp/tree.c:580
+#. Report the error.
+#: cp/semantics.c:3974
+#, gcc-internal-format
+msgid "static assertion failed: %E"
+msgstr ""
+
+#: cp/semantics.c:3976
+#, gcc-internal-format
+msgid "non-constant condition for static assertion"
+msgstr ""
+
+#: cp/tree.c:766
#, gcc-internal-format
msgid "%qV qualifiers cannot be applied to %qT"
msgstr ""
-#: cp/tree.c:1807
+#: cp/tree.c:2050
#, gcc-internal-format
msgid "%qE attribute can only be applied to Java class definitions"
msgstr ""
-#: cp/tree.c:1836
+#: cp/tree.c:2079
#, gcc-internal-format
msgid "%qE attribute can only be applied to class definitions"
msgstr ""
-#: cp/tree.c:1842
+#: cp/tree.c:2085
#, gcc-internal-format
msgid "%qE is obsolete; g++ vtables are now COM-compatible by default"
msgstr ""
-#: cp/tree.c:1866
+#: cp/tree.c:2109
#, gcc-internal-format
msgid "requested init_priority is not an integer constant"
msgstr ""
-#: cp/tree.c:1887
+#: cp/tree.c:2130
#, gcc-internal-format
msgid ""
"can only use %qE attribute on file-scope definitions of objects of class type"
msgstr ""
-#: cp/tree.c:1895
+#: cp/tree.c:2138
#, gcc-internal-format
msgid "requested init_priority is out of range"
msgstr ""
-#: cp/tree.c:1905
+#: cp/tree.c:2148
#, gcc-internal-format
msgid "requested init_priority is reserved for internal use"
msgstr ""
-#: cp/tree.c:1916
+#: cp/tree.c:2159
#, gcc-internal-format
msgid "%qE attribute is not supported on this platform"
msgstr ""
-#: cp/typeck.c:438 cp/typeck.c:452 cp/typeck.c:552
+#: cp/typeck.c:434 cp/typeck.c:448 cp/typeck.c:548
#, gcc-internal-format
msgid "%s between distinct pointer types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:514
+#: cp/typeck.c:510
#, gcc-internal-format
msgid ""
"ISO C++ forbids %s between pointer of type %<void *%> and pointer-to-function"
msgstr ""
-#: cp/typeck.c:572
+#: cp/typeck.c:568
#, gcc-internal-format
msgid "%s between distinct pointer-to-member types %qT and %qT lacks a cast"
msgstr ""
-#: cp/typeck.c:1255
+#: cp/typeck.c:1124
+#, gcc-internal-format
+msgid "canonical types differ for identical types %T and %T"
+msgstr ""
+
+#: cp/typeck.c:1135
+#, gcc-internal-format
+msgid "same canonical type node for different types %T and %T"
+msgstr ""
+
+#: cp/typeck.c:1246
#, gcc-internal-format
msgid "invalid application of %qs to a member function"
msgstr ""
-#: cp/typeck.c:1305
+#: cp/typeck.c:1296
#, gcc-internal-format
msgid "invalid application of %<sizeof%> to a bit-field"
msgstr ""
-#: cp/typeck.c:1310
+#: cp/typeck.c:1301
#, gcc-internal-format
msgid "ISO C++ forbids applying %<sizeof%> to an expression of function type"
msgstr ""
-#: cp/typeck.c:1353
+#: cp/typeck.c:1344
#, gcc-internal-format
msgid "invalid application of %<__alignof%> to a bit-field"
msgstr ""
-#: cp/typeck.c:1361
+#: cp/typeck.c:1352
#, gcc-internal-format
msgid ""
"ISO C++ forbids applying %<__alignof%> to an expression of function type"
msgstr ""
-#: cp/typeck.c:1409
+#: cp/typeck.c:1400
#, gcc-internal-format
msgid "invalid use of non-static member function"
msgstr ""
-#: cp/typeck.c:1644
+#: cp/typeck.c:1635
#, gcc-internal-format
msgid "deprecated conversion from string constant to %qT"
msgstr ""
-#: cp/typeck.c:1756 cp/typeck.c:2104
+#: cp/typeck.c:1750 cp/typeck.c:2098
#, gcc-internal-format
msgid "request for member %qD in %qE, which is of non-class type %qT"
msgstr ""
-#: cp/typeck.c:1783
+#: cp/typeck.c:1777
#, gcc-internal-format
msgid "invalid use of nonstatic data member %qE"
msgstr ""
-#: cp/typeck.c:1835 cp/typeck.c:1863
+#: cp/typeck.c:1829 cp/typeck.c:1857
#, gcc-internal-format
msgid "invalid access to non-static data member %qD of NULL object"
msgstr ""
-#: cp/typeck.c:1838 cp/typeck.c:1865
+#: cp/typeck.c:1832 cp/typeck.c:1859
#, gcc-internal-format
msgid "(perhaps the %<offsetof%> macro was used incorrectly)"
msgstr ""
#: cp/typeck.c:1976
#, gcc-internal-format
-msgid "qualified type %qT does not match destructor name ~%qT"
-msgstr ""
-
-#: cp/typeck.c:1982
-#, gcc-internal-format
msgid "the type being destroyed is %qT, but the destructor refers to %qT"
msgstr ""
-#: cp/typeck.c:2021 cp/typeck.c:2041
+#: cp/typeck.c:2015 cp/typeck.c:2035
#, gcc-internal-format
msgid "%qD is not a template"
msgstr ""
-#: cp/typeck.c:2142
+#: cp/typeck.c:2136
#, gcc-internal-format
msgid "%<%D::%D%> is not a member of %qT"
msgstr ""
-#: cp/typeck.c:2157
+#: cp/typeck.c:2151
#, gcc-internal-format
msgid "%qT is not a base of %qT"
msgstr ""
-#: cp/typeck.c:2176
+#: cp/typeck.c:2170
#, gcc-internal-format
msgid "%qD has no member named %qE"
msgstr ""
-#: cp/typeck.c:2191
+#: cp/typeck.c:2185
#, gcc-internal-format
msgid "%qD is not a member template function"
msgstr ""
#. A pointer to incomplete type (other than cv void) can be
#. dereferenced [expr.unary.op]/1
-#: cp/typeck.c:2311
+#: cp/typeck.c:2305
#, gcc-internal-format
msgid "%qT is not a pointer-to-object type"
msgstr ""
-#: cp/typeck.c:2336
+#: cp/typeck.c:2330
#, gcc-internal-format
msgid "invalid use of %qs on pointer to member"
msgstr ""
-#: cp/typeck.c:2342
+#: cp/typeck.c:2336
#, gcc-internal-format
msgid "invalid type argument"
msgstr ""
-#: cp/typeck.c:2365
+#: cp/typeck.c:2359
#, gcc-internal-format
msgid "subscript missing in array reference"
msgstr ""
-#: cp/typeck.c:2439
+#: cp/typeck.c:2433
#, gcc-internal-format
msgid "ISO C++ forbids subscripting non-lvalue array"
msgstr ""
-#: cp/typeck.c:2450
+#: cp/typeck.c:2444
#, gcc-internal-format
msgid "subscripting array declared %<register%>"
msgstr ""
-#: cp/typeck.c:2533
+#: cp/typeck.c:2529
#, gcc-internal-format
msgid "object missing in use of %qE"
msgstr ""
-#: cp/typeck.c:2647
+#: cp/typeck.c:2645
#, gcc-internal-format
msgid "ISO C++ forbids calling %<::main%> from within program"
msgstr ""
-#: cp/typeck.c:2672
+#: cp/typeck.c:2670
#, gcc-internal-format
msgid ""
"must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E (...)%>"
msgstr ""
-#: cp/typeck.c:2686
+#: cp/typeck.c:2684
#, gcc-internal-format
msgid "%qE cannot be used as a function"
msgstr ""
-#: cp/typeck.c:2766
+#: cp/typeck.c:2774
#, gcc-internal-format
msgid "too many arguments to %s %q+#D"
msgstr ""
-#: cp/typeck.c:2767 cp/typeck.c:2869
+#: cp/typeck.c:2775 cp/typeck.c:2873
#, gcc-internal-format
msgid "at this point in file"
msgstr ""
-#: cp/typeck.c:2770
+#: cp/typeck.c:2778
#, gcc-internal-format
msgid "too many arguments to function"
msgstr ""
-#: cp/typeck.c:2804
+#: cp/typeck.c:2808
#, gcc-internal-format
msgid "parameter %P of %qD has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:2807
+#: cp/typeck.c:2811
#, gcc-internal-format
msgid "parameter %P has incomplete type %qT"
msgstr ""
-#: cp/typeck.c:2868
+#: cp/typeck.c:2872
#, gcc-internal-format
msgid "too few arguments to %s %q+#D"
msgstr ""
-#: cp/typeck.c:2872
+#: cp/typeck.c:2876
#, gcc-internal-format
msgid "too few arguments to function"
msgstr ""
-#: cp/typeck.c:3020 cp/typeck.c:3030
+#: cp/typeck.c:3044 cp/typeck.c:3054
#, gcc-internal-format
msgid "assuming cast to type %qT from overloaded function"
msgstr ""
-#: cp/typeck.c:3110
+#: cp/typeck.c:3136
#, gcc-internal-format
msgid "division by zero in %<%E / 0%>"
msgstr ""
-#: cp/typeck.c:3112
+#: cp/typeck.c:3138
#, gcc-internal-format
msgid "division by zero in %<%E / 0.%>"
msgstr ""
-#: cp/typeck.c:3147
+#: cp/typeck.c:3173
#, gcc-internal-format
msgid "division by zero in %<%E %% 0%>"
msgstr ""
-#: cp/typeck.c:3149
+#: cp/typeck.c:3175
#, gcc-internal-format
msgid "division by zero in %<%E %% 0.%>"
msgstr ""
-#: cp/typeck.c:3229
+#: cp/typeck.c:3256
+#, gcc-internal-format
+msgid "left rotate count is negative"
+msgstr ""
+
+#: cp/typeck.c:3257
#, gcc-internal-format
-msgid "%s rotate count is negative"
+msgid "right rotate count is negative"
msgstr ""
-#: cp/typeck.c:3232
+#: cp/typeck.c:3260
#, gcc-internal-format
-msgid "%s rotate count >= width of type"
+msgid "left rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:3271 cp/typeck.c:3276 cp/typeck.c:3377 cp/typeck.c:3382
+#: cp/typeck.c:3261
+#, gcc-internal-format
+msgid "right rotate count >= width of type"
+msgstr ""
+
+#: cp/typeck.c:3310 cp/typeck.c:3315 cp/typeck.c:3470 cp/typeck.c:3475
#, gcc-internal-format
msgid "ISO C++ forbids comparison between pointer and integer"
msgstr ""
-#: cp/typeck.c:3396
+#: cp/typeck.c:3489
#, gcc-internal-format
msgid "unordered comparison on non-floating point argument"
msgstr ""
-#: cp/typeck.c:3434
+#: cp/typeck.c:3527
#, gcc-internal-format
msgid "invalid operands of types %qT and %qT to binary %qO"
msgstr ""
-#: cp/typeck.c:3598
+#: cp/typeck.c:3691
#, gcc-internal-format
msgid "comparison between types %q#T and %q#T"
msgstr ""
-#: cp/typeck.c:3634
+#: cp/typeck.c:3727
#, gcc-internal-format
msgid "comparison between signed and unsigned integer expressions"
msgstr ""
@@ -29738,149 +30392,164 @@ msgstr ""
#. performed. Note that pointer-difference and pointer-addition
#. have already been handled above, and so we don't end up here in
#. that case.
-#: cp/typeck.c:3713
+#: cp/typeck.c:3799
#, gcc-internal-format
msgid "NULL used in arithmetic"
msgstr ""
-#: cp/typeck.c:3771
+#: cp/typeck.c:3868
#, gcc-internal-format
msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction"
msgstr ""
-#: cp/typeck.c:3773
+#: cp/typeck.c:3870
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a function in subtraction"
msgstr ""
-#: cp/typeck.c:3775
+#: cp/typeck.c:3872
#, gcc-internal-format
msgid "ISO C++ forbids using pointer to a method in subtraction"
msgstr ""
-#: cp/typeck.c:3787
+#: cp/typeck.c:3884
#, gcc-internal-format
msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
msgstr ""
-#: cp/typeck.c:3847
+#: cp/typeck.c:3944
#, gcc-internal-format
msgid "invalid use of %qE to form a pointer-to-member-function"
msgstr ""
-#: cp/typeck.c:3850
+#: cp/typeck.c:3947
#, gcc-internal-format
msgid " a qualified-id is required"
msgstr ""
-#: cp/typeck.c:3855
+#: cp/typeck.c:3952
#, gcc-internal-format
msgid ""
"parentheses around %qE cannot be used to form a pointer-to-member-function"
msgstr ""
-#: cp/typeck.c:3878
+#: cp/typeck.c:3975
#, gcc-internal-format
msgid "taking address of temporary"
msgstr ""
-#: cp/typeck.c:4122
+#: cp/typeck.c:4220
+#, gcc-internal-format
+msgid "ISO C++ forbids incrementing an enum"
+msgstr ""
+
+#: cp/typeck.c:4221
#, gcc-internal-format
-msgid "ISO C++ forbids %sing an enum"
+msgid "ISO C++ forbids decrementing an enum"
msgstr ""
-#: cp/typeck.c:4133
+#: cp/typeck.c:4232
#, gcc-internal-format
-msgid "cannot %s a pointer to incomplete type %qT"
+msgid "cannot increment a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:4139
+#: cp/typeck.c:4233
#, gcc-internal-format
-msgid "ISO C++ forbids %sing a pointer of type %qT"
+msgid "cannot decrement a pointer to incomplete type %qT"
msgstr ""
-#: cp/typeck.c:4164
+#: cp/typeck.c:4239
+#, gcc-internal-format
+msgid "ISO C++ forbids incrementing a pointer of type %qT"
+msgstr ""
+
+#: cp/typeck.c:4240
+#, gcc-internal-format
+msgid "ISO C++ forbids decrementing a pointer of type %qT"
+msgstr ""
+
+#: cp/typeck.c:4260
#, gcc-internal-format
msgid "cast to non-reference type used as lvalue"
msgstr ""
-#: cp/typeck.c:4199
+#: cp/typeck.c:4295
#, gcc-internal-format
msgid "invalid use of %<--%> on bool variable %qD"
msgstr ""
#. ARM $3.4
-#: cp/typeck.c:4228
+#: cp/typeck.c:4324
#, gcc-internal-format
msgid "ISO C++ forbids taking address of function %<::main%>"
msgstr ""
#. An expression like &memfn.
-#: cp/typeck.c:4284
+#: cp/typeck.c:4380
#, gcc-internal-format
msgid ""
"ISO C++ forbids taking the address of an unqualified or parenthesized non-"
"static member function to form a pointer to member function. Say %<&%T::%D%>"
msgstr ""
-#: cp/typeck.c:4289
+#: cp/typeck.c:4385
#, gcc-internal-format
msgid ""
"ISO C++ forbids taking the address of a bound member function to form a "
"pointer to member function. Say %<&%T::%D%>"
msgstr ""
-#: cp/typeck.c:4317
+#: cp/typeck.c:4410
#, gcc-internal-format
msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
msgstr ""
-#: cp/typeck.c:4341
+#: cp/typeck.c:4434
#, gcc-internal-format
msgid "cannot create pointer to reference member %qD"
msgstr ""
-#: cp/typeck.c:4552
+#: cp/typeck.c:4645
#, gcc-internal-format
msgid "cannot take the address of %<this%>, which is an rvalue expression"
msgstr ""
-#: cp/typeck.c:4575
+#: cp/typeck.c:4668
#, gcc-internal-format
msgid "address of explicit register variable %qD requested"
msgstr ""
-#: cp/typeck.c:4580
+#: cp/typeck.c:4673
#, gcc-internal-format
msgid "address requested for %qD, which is declared %<register%>"
msgstr ""
-#: cp/typeck.c:4646
+#: cp/typeck.c:4739
#, gcc-internal-format
msgid "%s expression list treated as compound expression"
msgstr ""
-#: cp/typeck.c:5043
+#: cp/typeck.c:5132
#, gcc-internal-format
msgid "invalid static_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:5065
+#: cp/typeck.c:5154
#, gcc-internal-format
msgid "converting from %qT to %qT"
msgstr ""
-#: cp/typeck.c:5113
+#: cp/typeck.c:5202
#, gcc-internal-format
msgid "invalid cast of an rvalue expression of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:5172
+#: cp/typeck.c:5261
#, gcc-internal-format
msgid "cast from %qT to %qT loses precision"
msgstr ""
-#: cp/typeck.c:5199
+#: cp/typeck.c:5288
#, gcc-internal-format
msgid "cast from %qT to %qT increases required alignment of target type"
msgstr ""
@@ -29889,165 +30558,165 @@ msgstr ""
#. where possible, and it is necessary in some cases. DR 195
#. addresses this issue, but as of 2004/10/26 is still in
#. drafting.
-#: cp/typeck.c:5218
+#: cp/typeck.c:5307
#, gcc-internal-format
msgid ""
"ISO C++ forbids casting between pointer-to-function and pointer-to-object"
msgstr ""
-#: cp/typeck.c:5229
+#: cp/typeck.c:5318
#, gcc-internal-format
msgid "invalid cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:5285
+#: cp/typeck.c:5374
#, gcc-internal-format
msgid ""
"invalid use of const_cast with type %qT, which is not a pointer, reference, "
"nor a pointer-to-data-member type"
msgstr ""
-#: cp/typeck.c:5294
+#: cp/typeck.c:5383
#, gcc-internal-format
msgid ""
"invalid use of const_cast with type %qT, which is a pointer or reference to "
"a function type"
msgstr ""
-#: cp/typeck.c:5319
+#: cp/typeck.c:5408
#, gcc-internal-format
msgid "invalid const_cast of an rvalue of type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:5370
+#: cp/typeck.c:5459
#, gcc-internal-format
msgid "invalid const_cast from type %qT to type %qT"
msgstr ""
-#: cp/typeck.c:5438 cp/typeck.c:5443
+#: cp/typeck.c:5527 cp/typeck.c:5532
#, gcc-internal-format
msgid "ISO C++ forbids casting to an array type %qT"
msgstr ""
-#: cp/typeck.c:5451
+#: cp/typeck.c:5540
#, gcc-internal-format
msgid "invalid cast to function type %qT"
msgstr ""
-#: cp/typeck.c:5665
+#: cp/typeck.c:5754
#, gcc-internal-format
msgid " in evaluation of %<%Q(%#T, %#T)%>"
msgstr ""
-#: cp/typeck.c:5734
+#: cp/typeck.c:5823
#, gcc-internal-format
msgid "incompatible types in assignment of %qT to %qT"
msgstr ""
-#: cp/typeck.c:5745
+#: cp/typeck.c:5834
#, gcc-internal-format
msgid "array used as initializer"
msgstr ""
-#: cp/typeck.c:5747
+#: cp/typeck.c:5836
#, gcc-internal-format
msgid "invalid array assignment"
msgstr ""
-#: cp/typeck.c:5869
+#: cp/typeck.c:5958
#, gcc-internal-format
msgid " in pointer to member function conversion"
msgstr ""
-#: cp/typeck.c:5880 cp/typeck.c:5906
+#: cp/typeck.c:5969 cp/typeck.c:5995
#, gcc-internal-format
msgid "pointer to member cast via virtual base %qT"
msgstr ""
-#: cp/typeck.c:5883
+#: cp/typeck.c:5972
#, gcc-internal-format
msgid "pointer to member conversion via virtual base %qT"
msgstr ""
-#: cp/typeck.c:5892
+#: cp/typeck.c:5981
#, gcc-internal-format
msgid " in pointer to member conversion"
msgstr ""
-#: cp/typeck.c:5982
+#: cp/typeck.c:6071
#, gcc-internal-format
msgid "invalid conversion to type %qT from type %qT"
msgstr ""
-#: cp/typeck.c:6226
+#: cp/typeck.c:6315
#, gcc-internal-format
msgid "cannot convert %qT to %qT for argument %qP to %qD"
msgstr ""
-#: cp/typeck.c:6229
+#: cp/typeck.c:6318
#, gcc-internal-format
msgid "cannot convert %qT to %qT in %s"
msgstr ""
-#: cp/typeck.c:6240
+#: cp/typeck.c:6329
#, gcc-internal-format
msgid "%s might be a candidate for a format attribute"
msgstr ""
-#: cp/typeck.c:6314 cp/typeck.c:6316
+#: cp/typeck.c:6416 cp/typeck.c:6418
#, gcc-internal-format
msgid "in passing argument %P of %q+D"
msgstr ""
-#: cp/typeck.c:6366
+#: cp/typeck.c:6468
#, gcc-internal-format
msgid "returning reference to temporary"
msgstr ""
-#: cp/typeck.c:6373
+#: cp/typeck.c:6475
#, gcc-internal-format
msgid "reference to non-lvalue returned"
msgstr ""
-#: cp/typeck.c:6389
+#: cp/typeck.c:6491
#, gcc-internal-format
msgid "reference to local variable %q+D returned"
msgstr ""
-#: cp/typeck.c:6392
+#: cp/typeck.c:6494
#, gcc-internal-format
msgid "address of local variable %q+D returned"
msgstr ""
-#: cp/typeck.c:6426
+#: cp/typeck.c:6528
#, gcc-internal-format
msgid "returning a value from a destructor"
msgstr ""
#. If a return statement appears in a handler of the
#. function-try-block of a constructor, the program is ill-formed.
-#: cp/typeck.c:6434
+#: cp/typeck.c:6536
#, gcc-internal-format
msgid "cannot return from a handler of a function-try-block of a constructor"
msgstr ""
#. You can't return a value from a constructor.
-#: cp/typeck.c:6437
+#: cp/typeck.c:6539
#, gcc-internal-format
msgid "returning a value from a constructor"
msgstr ""
-#: cp/typeck.c:6460
+#: cp/typeck.c:6562
#, gcc-internal-format
msgid "return-statement with no value, in function returning %qT"
msgstr ""
-#: cp/typeck.c:6481
+#: cp/typeck.c:6583
#, gcc-internal-format
msgid "return-statement with a value, in function returning 'void'"
msgstr ""
-#: cp/typeck.c:6512
+#: cp/typeck.c:6614
#, gcc-internal-format
msgid ""
"%<operator new%> must not return NULL unless it is declared %<throw()%> (or -"
@@ -30059,210 +30728,235 @@ msgstr ""
msgid "type %qT is not a base type for type %qT"
msgstr ""
-#: cp/typeck2.c:296
+#: cp/typeck2.c:97
+#, gcc-internal-format
+msgid "%s of read-only parameter %qD"
+msgstr ""
+
+#: cp/typeck2.c:102
+#, gcc-internal-format
+msgid "%s of read-only reference %qD"
+msgstr ""
+
+#: cp/typeck2.c:104
+#, gcc-internal-format
+msgid "%s of read-only named return value %qD"
+msgstr ""
+
+#: cp/typeck2.c:106
+#, gcc-internal-format
+msgid "%s of function %qD"
+msgstr ""
+
+#: cp/typeck2.c:108
+#, gcc-internal-format
+msgid "%s of read-only location"
+msgstr ""
+
+#: cp/typeck2.c:288
#, gcc-internal-format
msgid "cannot declare variable %q+D to be of abstract type %qT"
msgstr ""
-#: cp/typeck2.c:299
+#: cp/typeck2.c:291
#, gcc-internal-format
msgid "cannot declare parameter %q+D to be of abstract type %qT"
msgstr ""
-#: cp/typeck2.c:302
+#: cp/typeck2.c:294
#, gcc-internal-format
msgid "cannot declare field %q+D to be of abstract type %qT"
msgstr ""
-#: cp/typeck2.c:306
+#: cp/typeck2.c:298
#, gcc-internal-format
msgid "invalid abstract return type for member function %q+#D"
msgstr ""
-#: cp/typeck2.c:308
+#: cp/typeck2.c:300
#, gcc-internal-format
msgid "invalid abstract return type for function %q+#D"
msgstr ""
#. Here we do not have location information.
-#: cp/typeck2.c:311
+#: cp/typeck2.c:303
#, gcc-internal-format
msgid "invalid abstract type %qT for %qE"
msgstr ""
-#: cp/typeck2.c:313
+#: cp/typeck2.c:305
#, gcc-internal-format
msgid "invalid abstract type for %q+D"
msgstr ""
-#: cp/typeck2.c:316
+#: cp/typeck2.c:308
#, gcc-internal-format
msgid "cannot allocate an object of abstract type %qT"
msgstr ""
-#: cp/typeck2.c:324
+#: cp/typeck2.c:316
#, gcc-internal-format
msgid "%J because the following virtual functions are pure within %qT:"
msgstr ""
-#: cp/typeck2.c:328
+#: cp/typeck2.c:320
#, gcc-internal-format
msgid "\t%+#D"
msgstr ""
-#: cp/typeck2.c:335
+#: cp/typeck2.c:327
#, gcc-internal-format
msgid "%J since type %qT has pure virtual functions"
msgstr ""
-#: cp/typeck2.c:602
+#: cp/typeck2.c:594
#, gcc-internal-format
msgid "constructor syntax used, but no constructor declared for type %qT"
msgstr ""
-#: cp/typeck2.c:616
+#: cp/typeck2.c:608
#, gcc-internal-format
msgid "cannot initialize arrays using this syntax"
msgstr ""
-#: cp/typeck2.c:692
+#: cp/typeck2.c:684
#, gcc-internal-format
msgid "int-array initialized from non-wide string"
msgstr ""
-#: cp/typeck2.c:731
+#: cp/typeck2.c:723
#, gcc-internal-format
msgid "cannot initialize aggregate of type %qT with a compound literal"
msgstr ""
-#: cp/typeck2.c:740
+#: cp/typeck2.c:732
#, gcc-internal-format
msgid "array must be initialized with a brace-enclosed initializer"
msgstr ""
-#: cp/typeck2.c:816 cp/typeck2.c:917
+#: cp/typeck2.c:808 cp/typeck2.c:909
#, gcc-internal-format
msgid "non-trivial designated initializers not supported"
msgstr ""
-#: cp/typeck2.c:940 cp/typeck2.c:954
+#: cp/typeck2.c:932 cp/typeck2.c:946
#, gcc-internal-format
msgid "missing initializer for member %qD"
msgstr ""
-#: cp/typeck2.c:945
+#: cp/typeck2.c:937
#, gcc-internal-format
msgid "uninitialized const member %qD"
msgstr ""
-#: cp/typeck2.c:947
+#: cp/typeck2.c:939
#, gcc-internal-format
msgid "member %qD with uninitialized const fields"
msgstr ""
-#: cp/typeck2.c:949
+#: cp/typeck2.c:941
#, gcc-internal-format
msgid "member %qD is uninitialized reference"
msgstr ""
-#: cp/typeck2.c:1004
+#: cp/typeck2.c:996
#, gcc-internal-format
msgid "no field %qD found in union being initialized"
msgstr ""
-#: cp/typeck2.c:1013
+#: cp/typeck2.c:1005
#, gcc-internal-format
msgid "index value instead of field name in union initializer"
msgstr ""
-#: cp/typeck2.c:1168
+#: cp/typeck2.c:1160
#, gcc-internal-format
msgid "circular pointer delegation detected"
msgstr ""
-#: cp/typeck2.c:1181
+#: cp/typeck2.c:1173
#, gcc-internal-format
msgid "base operand of %<->%> has non-pointer type %qT"
msgstr ""
-#: cp/typeck2.c:1205
+#: cp/typeck2.c:1197
#, gcc-internal-format
msgid "result of %<operator->()%> yields non-pointer result"
msgstr ""
-#: cp/typeck2.c:1207
+#: cp/typeck2.c:1199
#, gcc-internal-format
msgid "base operand of %<->%> is not a pointer"
msgstr ""
-#: cp/typeck2.c:1229
+#: cp/typeck2.c:1221
#, gcc-internal-format
msgid "%qE cannot be used as a member pointer, since it is of type %qT"
msgstr ""
-#: cp/typeck2.c:1238
+#: cp/typeck2.c:1230
#, gcc-internal-format
msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT"
msgstr ""
-#: cp/typeck2.c:1260
+#: cp/typeck2.c:1252
#, gcc-internal-format
msgid "pointer to member type %qT incompatible with object type %qT"
msgstr ""
-#: cp/typeck2.c:1482
+#: cp/typeck2.c:1474
#, gcc-internal-format
msgid "call to function %qD which throws incomplete type %q#T"
msgstr ""
-#: cp/typeck2.c:1485
+#: cp/typeck2.c:1477
#, gcc-internal-format
msgid "call to function which throws incomplete type %q#T"
msgstr ""
-#: fortran/f95-lang.c:280
+#: fortran/f95-lang.c:282
#, gcc-internal-format
msgid "Unexpected type in truthvalue_conversion"
msgstr ""
-#: fortran/f95-lang.c:333
+#: fortran/f95-lang.c:338
#, gcc-internal-format
msgid "can't open input file: %s"
msgstr ""
-#: fortran/f95-lang.c:660
+#: fortran/f95-lang.c:670
#, gcc-internal-format
msgid "global register variable %qs used in nested function"
msgstr ""
-#: fortran/f95-lang.c:664
+#: fortran/f95-lang.c:674
#, gcc-internal-format
msgid "register variable %qs used in nested function"
msgstr ""
-#: fortran/f95-lang.c:671
+#: fortran/f95-lang.c:681
#, gcc-internal-format
msgid "address of global register variable %qs requested"
msgstr ""
-#: fortran/f95-lang.c:689
+#: fortran/f95-lang.c:699
#, gcc-internal-format
msgid "address of register variable %qs requested"
msgstr ""
-#: fortran/trans-array.c:3411
+#: fortran/trans-array.c:3634
#, gcc-internal-format
msgid "Possible frontend bug: array constructor not expanded"
msgstr ""
-#: fortran/trans-array.c:4951
+#: fortran/trans-array.c:5177
#, gcc-internal-format
msgid ""
"Possible frontend bug: Deferred array size without pointer, allocatable "
"attribute or derived type without allocatable components."
msgstr ""
-#: fortran/trans-array.c:5424
+#: fortran/trans-array.c:5650
#, gcc-internal-format
msgid "bad expression type during walk (%d)"
msgstr ""
@@ -30272,1310 +30966,331 @@ msgstr ""
msgid "gfc_conv_constant_to_tree(): invalid type: %s"
msgstr ""
-#: fortran/trans-decl.c:943
+#: fortran/trans-decl.c:953
#, gcc-internal-format
msgid "intrinsic variable which isn't a procedure"
msgstr ""
-#: fortran/trans-decl.c:2601
+#: fortran/trans-decl.c:2628
#, gcc-internal-format
msgid "Function does not return a value"
msgstr ""
-#. I don't think this should ever happen.
-#: fortran/trans-decl.c:2743
-#, gcc-internal-format
-msgid "module symbol %s in wrong namespace"
-msgstr ""
-
-#: fortran/trans-decl.c:2762
+#: fortran/trans-decl.c:2791
#, gcc-internal-format
msgid "backend decl for module variable %s already exists"
msgstr ""
-#: fortran/trans-decl.c:3225
+#: fortran/trans-decl.c:3254
#, gcc-internal-format
msgid "Function return value not set"
msgstr ""
-#: fortran/trans-expr.c:1072
+#: fortran/trans-expr.c:1106
#, gcc-internal-format
msgid "Unknown intrinsic op"
msgstr ""
-#: fortran/trans-intrinsic.c:659
+#: fortran/trans-intrinsic.c:664
#, gcc-internal-format
msgid "Intrinsic function %s(%d) not recognized"
msgstr ""
-#: fortran/trans-io.c:1755
+#: fortran/trans-io.c:1761
#, gcc-internal-format
msgid "Bad IO basetype (%d)"
msgstr ""
-#: fortran/trans-types.c:229
+#: fortran/trans-types.c:233
#, gcc-internal-format
msgid "integer kind=8 not available for -fdefault-integer-8 option"
msgstr ""
-#: fortran/trans-types.c:241
+#: fortran/trans-types.c:256
#, gcc-internal-format
msgid "real kind=8 not available for -fdefault-real-8 option"
msgstr ""
-#: fortran/trans-types.c:254
+#: fortran/trans-types.c:269
#, gcc-internal-format
msgid "Use of -fdefault-double-8 requires -fdefault-real-8"
msgstr ""
-#: fortran/trans-types.c:966
+#: fortran/trans-types.c:982
#, gcc-internal-format
msgid "Array element size too big"
msgstr ""
-#: fortran/trans.c:626
+#: fortran/trans.c:630
#, gcc-internal-format
msgid "gfc_trans_code(): Bad statement code"
msgstr ""
#. I changed this from sorry(...) because it should not return.
#. TODO: Remove gfc_todo_error before releasing version 1.0.
-#: fortran/trans.h:604
+#: fortran/trans.h:615
#, gcc-internal-format
msgid "gfc_todo: Not Implemented: "
msgstr ""
-#: java/check-init.c:248
-#, gcc-internal-format
-msgid "Can't reassign a value to the final variable %qs"
-msgstr ""
-
-#: java/check-init.c:518 java/check-init.c:531
-#, gcc-internal-format
-msgid "variable %qD may not have been initialized"
-msgstr ""
-
-#: java/check-init.c:948
-#, gcc-internal-format
-msgid "internal error in check-init: tree code not implemented: %s"
-msgstr ""
-
-#: java/check-init.c:1021
-#, gcc-internal-format
-msgid "%Jfinal field %qD may not have been initialized"
-msgstr ""
-
-#: java/class.c:766
+#: java/class.c:767
#, gcc-internal-format
msgid "bad method signature"
msgstr ""
-#: java/class.c:815
+#: java/class.c:819
#, gcc-internal-format
msgid "misplaced ConstantValue attribute (not in any field)"
msgstr ""
-#: java/class.c:818
+#: java/class.c:822
#, gcc-internal-format
msgid "duplicate ConstantValue attribute for field '%s'"
msgstr ""
-#: java/class.c:829
+#: java/class.c:833
#, gcc-internal-format
msgid "ConstantValue attribute of field '%s' has wrong type"
msgstr ""
-#: java/class.c:1511
+#: java/class.c:1521
#, gcc-internal-format
msgid "%Jabstract method in non-abstract class"
msgstr ""
-#: java/class.c:2499
+#: java/class.c:2604
#, gcc-internal-format
msgid "non-static method %q+D overrides static method"
msgstr ""
-#: java/decl.c:1248
+#: java/decl.c:1188
#, gcc-internal-format
msgid "%q+D used prior to declaration"
msgstr ""
-#: java/decl.c:1289
-#, gcc-internal-format
-msgid "declaration of %qs shadows a parameter"
-msgstr ""
-
-#: java/decl.c:1292
-#, gcc-internal-format
-msgid "declaration of %qs shadows a symbol from the parameter list"
-msgstr ""
-
-#: java/decl.c:1762
+#: java/decl.c:1611
#, gcc-internal-format
msgid "In %+D: overlapped variable and exception ranges at %d"
msgstr ""
-#: java/decl.c:1825
+#: java/decl.c:1674
#, gcc-internal-format
msgid "bad type in parameter debug info"
msgstr ""
-#: java/decl.c:1834
+#: java/decl.c:1683
#, gcc-internal-format
msgid "bad PC range for debug info for local %q+D"
msgstr ""
-#: java/expr.c:380
+#: java/expr.c:377
#, gcc-internal-format
msgid "need to insert runtime check for %s"
msgstr ""
-#: java/expr.c:509 java/expr.c:556
+#: java/expr.c:506 java/expr.c:553
#, gcc-internal-format
msgid "assert: %s is assign compatible with %s"
msgstr ""
-#: java/expr.c:675
+#: java/expr.c:672
#, gcc-internal-format
msgid "stack underflow - dup* operation"
msgstr ""
-#: java/expr.c:1654
+#: java/expr.c:1660
#, gcc-internal-format
msgid "reference %qs is ambiguous: appears in interface %qs and interface %qs"
msgstr ""
-#: java/expr.c:1682
+#: java/expr.c:1688
#, gcc-internal-format
msgid "field %qs not found"
msgstr ""
-#: java/expr.c:2178
+#: java/expr.c:2207
#, gcc-internal-format
msgid "method '%s' not found in class"
msgstr ""
-#: java/expr.c:2385
+#: java/expr.c:2409
#, gcc-internal-format
msgid "failed to find class '%s'"
msgstr ""
-#: java/expr.c:2426
+#: java/expr.c:2450
#, gcc-internal-format
msgid "class '%s' has no method named '%s' matching signature '%s'"
msgstr ""
-#: java/expr.c:2457
+#: java/expr.c:2481
#, gcc-internal-format
msgid "invokestatic on non static method"
msgstr ""
-#: java/expr.c:2462
+#: java/expr.c:2486
#, gcc-internal-format
msgid "invokestatic on abstract method"
msgstr ""
-#: java/expr.c:2470
+#: java/expr.c:2494
#, gcc-internal-format
msgid "invoke[non-static] on static method"
msgstr ""
-#: java/expr.c:2824
+#: java/expr.c:2855
#, gcc-internal-format
msgid "missing field '%s' in '%s'"
msgstr ""
-#: java/expr.c:2831
+#: java/expr.c:2862
#, gcc-internal-format
msgid "mismatching signature for field '%s' in '%s'"
msgstr ""
-#: java/expr.c:2859
+#: java/expr.c:2891
#, gcc-internal-format
msgid "assignment to final field %q+D not in field's class"
msgstr ""
-#: java/expr.c:3085
+#: java/expr.c:3111
#, gcc-internal-format
msgid "invalid PC in line number table"
msgstr ""
-#: java/expr.c:3133
+#: java/expr.c:3161
#, gcc-internal-format
msgid "unreachable bytecode from %d to before %d"
msgstr ""
-#: java/expr.c:3175
+#: java/expr.c:3205
#, gcc-internal-format
msgid "unreachable bytecode from %d to the end of the method"
msgstr ""
#. duplicate code from LOAD macro
-#: java/expr.c:3480
+#: java/expr.c:3510
#, gcc-internal-format
msgid "unrecogized wide sub-instruction"
msgstr ""
-#: java/gjavah.c:718
-#, gcc-internal-format
-msgid "static field has same name as method"
-msgstr ""
-
-#: java/gjavah.c:1266
-#, gcc-internal-format
-msgid "couldn't find class %s"
-msgstr ""
-
-#: java/gjavah.c:1273
-#, gcc-internal-format
-msgid "parse error while reading %s"
-msgstr ""
-
-#: java/gjavah.c:1499 java/gjavah.c:1601 java/gjavah.c:1676
-#, gcc-internal-format
-msgid "unparseable signature: '%s'"
-msgstr ""
-
-#: java/gjavah.c:2066
-#, gcc-internal-format
-msgid "Not a valid Java .class file."
-msgstr ""
-
-#: java/gjavah.c:2074 java/jcf-parse.c:753
-#, gcc-internal-format
-msgid "error while parsing constant pool"
-msgstr ""
-
-#: java/gjavah.c:2080
-#, gcc-internal-format
-msgid "error in constant pool entry #%d"
-msgstr ""
-
-#: java/gjavah.c:2223
-#, gcc-internal-format
-msgid "class is of array type\n"
-msgstr ""
-
-#: java/gjavah.c:2231
-#, gcc-internal-format
-msgid "base class is of array type"
-msgstr ""
-
-#: java/gjavah.c:2429 java/gjavah.c:2556
-#, gcc-internal-format
-msgid "no classes specified"
-msgstr ""
-
-#: java/gjavah.c:2522
-#, gcc-internal-format
-msgid "'-MG' option is unimplemented"
-msgstr ""
-
-#: java/gjavah.c:2564
+#: java/jcf-parse.c:522
#, gcc-internal-format
-msgid "can't specify both -o and -MD"
+msgid "<constant pool index %d not in range>"
msgstr ""
-#: java/gjavah.c:2587
+#: java/jcf-parse.c:532
#, gcc-internal-format
-msgid "%s: no such class"
+msgid "<constant pool index %d unexpected type"
msgstr ""
-#: java/jcf-io.c:549
-#, gcc-internal-format
-msgid ""
-"source file for class %qs is newer than its matching class file. Source "
-"file %qs used instead"
-msgstr ""
-
-#: java/jcf-parse.c:372
+#: java/jcf-parse.c:1112
#, gcc-internal-format
msgid "bad string constant"
msgstr ""
-#: java/jcf-parse.c:390
+#: java/jcf-parse.c:1130
#, gcc-internal-format
msgid "bad value constant type %d, index %d"
msgstr ""
-#: java/jcf-parse.c:579
-#, gcc-internal-format
-msgid "can't reopen %s: %m"
-msgstr ""
-
-#: java/jcf-parse.c:586
+#: java/jcf-parse.c:1424 java/jcf-parse.c:1430
#, gcc-internal-format
-msgid "can't close %s: %m"
+msgid "cannot find file for class %s"
msgstr ""
-#: java/jcf-parse.c:721 java/jcf-parse.c:727
+#: java/jcf-parse.c:1455
#, gcc-internal-format
-msgid "cannot find file for class %s"
+msgid "not a valid Java .class file"
msgstr ""
-#: java/jcf-parse.c:750
+#: java/jcf-parse.c:1458
#, gcc-internal-format
-msgid "not a valid Java .class file"
+msgid "error while parsing constant pool"
msgstr ""
#. FIXME - where was first time
-#: java/jcf-parse.c:768
+#: java/jcf-parse.c:1473
#, gcc-internal-format
msgid "reading class %s for the second time from %s"
msgstr ""
-#: java/jcf-parse.c:786
+#: java/jcf-parse.c:1491
#, gcc-internal-format
msgid "error while parsing fields"
msgstr ""
-#: java/jcf-parse.c:789
+#: java/jcf-parse.c:1494
#, gcc-internal-format
msgid "error while parsing methods"
msgstr ""
-#: java/jcf-parse.c:792
+#: java/jcf-parse.c:1497
#, gcc-internal-format
msgid "error while parsing final attributes"
msgstr ""
-#: java/jcf-parse.c:809
-#, gcc-internal-format
-msgid ""
-"the %<java.lang.Object%> that was found in %qs didn't have the special zero-"
-"length %<gnu.gcj.gcj-compiled%> attribute. This generally means that your "
-"classpath is incorrectly set. Use %<info gcj \"Input Options\"%> to see the "
-"info page describing how to set the classpath"
-msgstr ""
-
-#: java/jcf-parse.c:843
+#: java/jcf-parse.c:1544
#, gcc-internal-format
msgid "%Hduplicate class will only be compiled once"
msgstr ""
-#: java/jcf-parse.c:897
+#: java/jcf-parse.c:1632
#, gcc-internal-format
msgid "missing Code attribute"
msgstr ""
-#: java/jcf-parse.c:1179
+#: java/jcf-parse.c:1854
#, gcc-internal-format
msgid "no input file specified"
msgstr ""
-#: java/jcf-parse.c:1214
+#: java/jcf-parse.c:1889
#, gcc-internal-format
msgid "can't close input file %s: %m"
msgstr ""
-#: java/jcf-parse.c:1261
+#: java/jcf-parse.c:1936
#, gcc-internal-format
msgid "bad zip/jar file %s"
msgstr ""
-#: java/jcf-parse.c:1479
+#: java/jcf-parse.c:2137
#, gcc-internal-format
msgid "error while reading %s from zip file"
msgstr ""
-#: java/jcf-write.c:2668
-#, gcc-internal-format
-msgid ""
-"internal error in generate_bytecode_insn - tree code not implemented: %s"
-msgstr ""
-
-#: java/jcf-write.c:3041
-#, gcc-internal-format
-msgid "field initializer type mismatch"
-msgstr ""
-
-#: java/jcf-write.c:3497
-#, gcc-internal-format
-msgid "can't create directory %s: %m"
-msgstr ""
-
-#: java/jcf-write.c:3534
-#, gcc-internal-format
-msgid "can't open %s for writing: %m"
-msgstr ""
-
-#: java/jcf-write.c:3556
-#, gcc-internal-format
-msgid "can't create %s: %m"
-msgstr ""
-
-#: java/jv-scan.c:194
-#, gcc-internal-format
-msgid "only one of '--print-main', '--list-class', and '--complexity' allowed"
-msgstr ""
-
-#: java/jv-scan.c:197
-#, gcc-internal-format
-msgid "can't open output file '%s'"
-msgstr ""
-
-#: java/jv-scan.c:233
-#, gcc-internal-format
-msgid "file not found '%s'"
-msgstr ""
-
-#: java/jvspec.c:443
+#: java/jvspec.c:426
#, gcc-internal-format
msgid "warning: already-compiled .class files ignored with -C"
msgstr ""
-#: java/lang.c:628
+#: java/lang.c:610
#, gcc-internal-format
msgid "-findirect-dispatch is incompatible with -freduced-reflection"
msgstr ""
-#: java/lang.c:631
+#: java/lang.c:613
#, gcc-internal-format
msgid "-fjni is incompatible with -freduced-reflection"
msgstr ""
-#: java/lang.c:642
+#: java/lang.c:624
#, gcc-internal-format
msgid "can't do dependency tracking with input from stdin"
msgstr ""
-#: java/lang.c:658
+#: java/lang.c:640
#, gcc-internal-format
msgid "couldn't determine target name for dependency tracking"
msgstr ""
-#: java/lex.c:260
-#, gcc-internal-format
-msgid ""
-"unknown encoding: %qs\n"
-"This might mean that your locale's encoding is not supported\n"
-"by your system's iconv(3) implementation. If you aren't trying\n"
-"to use a particular encoding for your input file, try the\n"
-"%<--encoding=UTF-8%> option"
-msgstr ""
-
-#: java/lex.c:631
-#, gcc-internal-format
-msgid "internal error - bad unget"
-msgstr ""
-
#: java/mangle_name.c:140 java/mangle_name.c:210
#, gcc-internal-format
msgid "internal error - invalid Utf8 name"
msgstr ""
-#: java/parse.y:767
-#, gcc-internal-format
-msgid "Ambiguous class: %qs and %qs"
-msgstr ""
-
-#: java/parse.y:833
-#, gcc-internal-format
-msgid "Modifier %qs declared twice"
-msgstr ""
-
-#: java/parse.y:1081
-#, gcc-internal-format
-msgid "Discouraged form of returned type specification"
-msgstr ""
-
-#: java/parse.y:1176
-#, gcc-internal-format
-msgid ""
-"Can't define static initializer in class %qs. Static initializer can only be "
-"defined in top-level classes"
-msgstr ""
-
-#: java/parse.y:1472
-#, gcc-internal-format
-msgid "An empty declaration is a deprecated feature that should not be used"
-msgstr ""
-
-#: java/parse.y:3035
-#, gcc-internal-format
-msgid ": %qs JDK1.1(TM) feature"
-msgstr ""
-
-#: java/parse.y:3115
-#: java/parse.y:3117
-#, gcc-internal-format
-msgid ""
-"%s.\n"
-"%s"
-msgstr ""
-
-#: java/parse.y:3277
-#, gcc-internal-format
-msgid "Missing return statement"
-msgstr ""
-
-#: java/parse.y:3299
-#: java/parse.y:12046
-#: java/parse.y:12050
-#, gcc-internal-format
-msgid "Unreachable statement"
-msgstr ""
-
-#: java/parse.y:3309
-#, gcc-internal-format
-msgid "Can't access %s field %<%s.%s%> from %qs"
-msgstr ""
-
-#: java/parse.y:3378
-#, gcc-internal-format
-msgid "%s %qs already defined in %s:%d"
-msgstr ""
-
-#: java/parse.y:3396
-#, gcc-internal-format
-msgid ""
-"Variable %qs is already defined in this method and was declared %<%s %s%> at "
-"line %d"
-msgstr ""
-
-#: java/parse.y:3507
-#, gcc-internal-format
-msgid "Interface %qs repeated"
-msgstr ""
-
-#: java/parse.y:3537
-#, gcc-internal-format
-msgid "%s name %qs clashes with imported type %qs"
-msgstr ""
-
-#: java/parse.y:3569
-#, gcc-internal-format
-msgid "Public %s %qs must be defined in a file called %<%s.java%>"
-msgstr ""
-
-#: java/parse.y:3584
-#, gcc-internal-format
-msgid ""
-"Inner class %qs can't be static. Static classes can only occur in interfaces "
-"and top-level classes"
-msgstr ""
-
-#: java/parse.y:3665
-#, gcc-internal-format
-msgid ""
-"The class name %qs is already defined in this scope. An inner class may not "
-"have the same simple name as any of its enclosing classes"
-msgstr ""
-
-#: java/parse.y:3713
-#, gcc-internal-format
-msgid "Qualifier must be a reference"
-msgstr ""
-
-#: java/parse.y:3734
-#, gcc-internal-format
-msgid "Cyclic inheritance involving %s"
-msgstr ""
-
-#: java/parse.y:4002
-#, gcc-internal-format
-msgid ""
-"Redundant use of %<abstract%> modifier. Interface %qs is implicitly abstract"
-msgstr ""
-
-#: java/parse.y:4157
-#, gcc-internal-format
-msgid "Class %qs can't be declared both abstract and final"
-msgstr ""
-
-#: java/parse.y:4169
-#, gcc-internal-format
-msgid "%<java.lang.Object%> can't extend anything"
-msgstr ""
-
-#: java/parse.y:4406
-#, gcc-internal-format
-msgid "Duplicate variable declaration: %<%s %s%> was %<%s %s%> (%s:%d)"
-msgstr ""
-
-#: java/parse.y:4470
-#, gcc-internal-format
-msgid "Field %qs can't be static in inner class %qs unless it is final"
-msgstr ""
-
-#: java/parse.y:4713
-#, gcc-internal-format
-msgid "Class %qs must be declared abstract to define abstract method %qs"
-msgstr ""
-
-#: java/parse.y:4720
-#, gcc-internal-format
-msgid "native method %qs can't be strictfp"
-msgstr ""
-
-#: java/parse.y:4724
-#, gcc-internal-format
-msgid "method %qs can't be transient"
-msgstr ""
-
-#: java/parse.y:4727
-#, gcc-internal-format
-msgid "method %qs can't be volatile"
-msgstr ""
-
-#: java/parse.y:4777
-#: java/parse.y:6508
-#, gcc-internal-format
-msgid ""
-"Method %qs can't be static in inner class %qs. Only members of interfaces "
-"and top-level classes can be static"
-msgstr ""
-
-#: java/parse.y:4932
-#, gcc-internal-format
-msgid "%s method %qs can't have a body defined"
-msgstr ""
-
-#: java/parse.y:4943
-#, gcc-internal-format
-msgid "Non native and non abstract method %qs must have a body defined"
-msgstr ""
-
-#: java/parse.y:5013
-#, gcc-internal-format
-msgid "%s: recursive invocation of constructor %qs"
-msgstr ""
-
-#: java/parse.y:5043
-#, gcc-internal-format
-msgid ""
-"Inconsistent member declaration. At most one of %<public%>, %<private%>, or "
-"%<protected%> may be specified"
-msgstr ""
-
-#: java/parse.y:5051
-#, gcc-internal-format
-msgid ""
-"Inconsistent member declaration. At most one of %<final%> or %<volatile%> "
-"may be specified"
-msgstr ""
-
-#: java/parse.y:5141
-#, gcc-internal-format
-msgid "Variable %qs is used more than once in the argument list of method %qs"
-msgstr ""
-
-#: java/parse.y:5225
-#, gcc-internal-format
-msgid "%s %qs can't implement/extend %s %qs"
-msgstr ""
-
-#: java/parse.y:5259
-#, gcc-internal-format
-msgid "Class %qs can't subclass %s %qs"
-msgstr ""
-
-#: java/parse.y:5268
-#, gcc-internal-format
-msgid "Can't subclass final classes: %s"
-msgstr ""
-
-#: java/parse.y:5454
-#, gcc-internal-format
-msgid "Cyclic class inheritance%s"
-msgstr ""
-
-#: java/parse.y:6159
-#, gcc-internal-format
-msgid "Superclass %qs of class %qs not found"
-msgstr ""
-
-#: java/parse.y:6165
-#, gcc-internal-format
-msgid "Type %qs not found in declaration of field %qs"
-msgstr ""
-
-#: java/parse.y:6171
-#, gcc-internal-format
-msgid "Type %qs not found in the declaration of the argument %qs of method %qs"
-msgstr ""
-
-#: java/parse.y:6178
-#, gcc-internal-format
-msgid "Type %qs not found in the declaration of the return type of method %qs"
-msgstr ""
-
-#: java/parse.y:6184
-#, gcc-internal-format
-msgid "Superinterface %qs of %s %qs not found"
-msgstr ""
-
-#: java/parse.y:6191
-#, gcc-internal-format
-msgid "Type %qs not found in the declaration of the local variable %qs"
-msgstr ""
-
-#: java/parse.y:6198
-#, gcc-internal-format
-msgid "Class %qs not found in %<throws%>"
-msgstr ""
-
-#: java/parse.y:6255
-#, gcc-internal-format
-msgid "Duplicate %s declaration %qs"
-msgstr ""
-
-#: java/parse.y:6329
-#, gcc-internal-format
-msgid ""
-"Class %qs doesn't define the abstract method %<%s %s%> from %s %<%s%>. This "
-"method must be defined or %s %qs must be declared abstract"
-msgstr ""
-
-#: java/parse.y:6485
-#, gcc-internal-format
-msgid ""
-"Class %qs in %<throws%> clause must be a subclass of class %<java.lang."
-"Throwable%>"
-msgstr ""
-
-#: java/parse.y:6529
-#, gcc-internal-format
-msgid ""
-"Class %qs must override %qs with a public method in order to implement "
-"interface %qs"
-msgstr ""
-
-#: java/parse.y:6543
-#: java/parse.y:6766
-#, gcc-internal-format
-msgid "Method %qs was defined with return type %qs in class %qs"
-msgstr ""
-
-#: java/parse.y:6560
-#, gcc-internal-format
-msgid "%s methods can't be overridden. Method %qs is %s in class %qs"
-msgstr ""
-
-#: java/parse.y:6574
-#, gcc-internal-format
-msgid ""
-"Instance methods can't be overridden by a static method. Method %qs is an "
-"instance method in class %qs"
-msgstr ""
-
-#: java/parse.y:6597
-#, gcc-internal-format
-msgid ""
-"Methods can't be overridden to be more private. Method %qs is not %s in "
-"class %qs"
-msgstr ""
-
-#: java/parse.y:6734
-#, gcc-internal-format
-msgid ""
-"Invalid checked exception class %qs in %<throws%> clause. The exception "
-"must be a subclass of an exception thrown by %qs from class %qs"
-msgstr ""
-
-#: java/parse.y:6791
-#, gcc-internal-format
-msgid ""
-"Interface %qs inherits method %qs from interface %qs. This method is "
-"redefined with a different return type in interface %qs"
-msgstr ""
-
-#: java/parse.y:6966
-#, gcc-internal-format
-msgid "Class or interface %qs not found in import"
-msgstr ""
-
-#: java/parse.y:7055
-#, gcc-internal-format
-msgid "malformed .zip archive in CLASSPATH: %s"
-msgstr ""
-
-#: java/parse.y:7126
-#, gcc-internal-format
-msgid ""
-"Can't find default package %qs. Check the CLASSPATH environment variable and "
-"the access to the archives"
-msgstr ""
-
-#: java/parse.y:7131
-#, gcc-internal-format
-msgid "Package %qs not found in import"
-msgstr ""
-
-#: java/parse.y:7232
-#, gcc-internal-format
-msgid "Type %qs also potentially defined in package %qs"
-msgstr ""
-
-#: java/parse.y:7372
-#, gcc-internal-format
-msgid "Nested %s %s is %s; cannot be accessed from here"
-msgstr ""
-
-#: java/parse.y:7410
-#, gcc-internal-format
-msgid ""
-"Can't access %s %qs. Only public classes and interfaces in other packages "
-"can be accessed"
-msgstr ""
-
-#: java/parse.y:7448
-#, gcc-internal-format
-msgid "Only %<final%> is allowed as a local variables modifier"
-msgstr ""
-
-#: java/parse.y:9090
-#, gcc-internal-format
-msgid "No constructor matching %qs found in class %qs"
-msgstr ""
-
-#: java/parse.y:9594
-#, gcc-internal-format
-msgid "Can't reference %qs before the superclass constructor has been called"
-msgstr ""
-
-#: java/parse.y:9655
-#, gcc-internal-format
-msgid ""
-"Local variable %qs can't be accessed from within the inner class %qs unless "
-"it is declared final"
-msgstr ""
-
-#: java/parse.y:9660
-#: java/parse.y:10118
-#, gcc-internal-format
-msgid "Undefined variable %qs"
-msgstr ""
-
-#: java/parse.y:9671
-#, gcc-internal-format
-msgid "Can't make a static reference to nonstatic variable %qs in class %qs"
-msgstr ""
-
-#: java/parse.y:9872
-#: java/parse.y:10726
-#, gcc-internal-format
-msgid "No enclosing instance for inner class %qs is in scope%s"
-msgstr ""
-
-#: java/parse.y:9991
-#: java/parse.y:12480
-#, gcc-internal-format
-msgid "Keyword %<this%> used outside allowed context"
-msgstr ""
-
-#: java/parse.y:9997
-#: java/parse.y:10882
-#, gcc-internal-format
-msgid ""
-"Can't reference %<this%> before the superclass constructor has been called"
-msgstr ""
-
-#: java/parse.y:10013
-#, gcc-internal-format
-msgid ""
-"Can't use variable %<%s.this%>: type %qs isn't an outer type of type %qs"
-msgstr ""
-
-#: java/parse.y:10046
-#, gcc-internal-format
-msgid "Keyword %<super%> used outside allowed context"
-msgstr ""
-
-#: java/parse.y:10095
-#, gcc-internal-format
-msgid "No variable %qs defined in class %qs"
-msgstr ""
-
-#: java/parse.y:10100
-#, gcc-internal-format
-msgid "Undefined variable or class name: %qs"
-msgstr ""
-
-#: java/parse.y:10182
-#, gcc-internal-format
-msgid "Can't use type %qs as a qualifier"
-msgstr ""
-
-#: java/parse.y:10201
-#, gcc-internal-format
-msgid "Attempt to reference field %qs in %<%s %s%>"
-msgstr ""
-
-#: java/parse.y:10232
-#, gcc-internal-format
-msgid "No variable %qs defined in type %qs"
-msgstr ""
-
-#: java/parse.y:10324
-#, gcc-internal-format
-msgid "Attempt to reference field %<new%> in a %qs"
-msgstr ""
-
-#: java/parse.y:10461
-#, gcc-internal-format
-msgid "The class %qs has been deprecated"
-msgstr ""
-
-#: java/parse.y:10471
-#, gcc-internal-format
-msgid "The %s %qs in class %qs has been deprecated"
-msgstr ""
-
-#: java/parse.y:10562
-#, gcc-internal-format
-msgid "Can't invoke a method on primitive type %qs"
-msgstr ""
-
-#: java/parse.y:10577
-#, gcc-internal-format
-msgid "Can't make static reference to method %qs in interface %qs"
-msgstr ""
-
-#: java/parse.y:10591
-#: java/parse.y:10929
-#, gcc-internal-format
-msgid "Can't make static reference to method %<%s %s%> in class %qs"
-msgstr ""
-
-#: java/parse.y:10633
-#, gcc-internal-format
-msgid "Can't invoke super constructor on java.lang.Object"
-msgstr ""
-
-#: java/parse.y:10646
-#: java/parse.y:14550
-#, gcc-internal-format
-msgid "Class %qs not found in type declaration"
-msgstr ""
-
-#: java/parse.y:10658
-#, gcc-internal-format
-msgid "Class %qs is an abstract class. It can't be instantiated"
-msgstr ""
-
-#: java/parse.y:10688
-#, gcc-internal-format
-msgid "No method named %qs in scope"
-msgstr ""
-
-#: java/parse.y:10801
-#, gcc-internal-format
-msgid "Can't access %s %s %<%s.%s%> from %qs"
-msgstr ""
-
-#: java/parse.y:11297
-#, gcc-internal-format
-msgid "Can't find %s %<%s(%s)%> in type %qs%s"
-msgstr ""
-
-#: java/parse.y:11892
-#, gcc-internal-format
-msgid "Constant expression required"
-msgstr ""
-
-#: java/parse.y:11905
-#, gcc-internal-format
-msgid "Incompatible type for case. Can't convert %qs to %<int%>"
-msgstr ""
-
-#: java/parse.y:11939
-#, gcc-internal-format
-msgid "Duplicate case label: %<default%>"
-msgstr ""
-
-#: java/parse.y:12279
-#, gcc-internal-format
-msgid "Incompatible type for %<+=%>. Can't convert %qs to %<java.lang.String%>"
-msgstr ""
-
-#: java/parse.y:12462
-#, gcc-internal-format
-msgid "missing static field %qs"
-msgstr ""
-
-#: java/parse.y:12467
-#, gcc-internal-format
-msgid "not a static field %qs"
-msgstr ""
-
-#: java/parse.y:12488
-#, gcc-internal-format
-msgid ""
-"Can't reference %<this%> or %<super%> before the superclass constructor has "
-"been called"
-msgstr ""
-
-#: java/parse.y:12508
-#, gcc-internal-format
-msgid "No case for %s"
-msgstr ""
-
-#: java/parse.y:12938
-#, gcc-internal-format
-msgid "Invalid left hand side of assignment"
-msgstr ""
-
-#: java/parse.y:12989
-#, gcc-internal-format
-msgid "Incompatible type for %s. Can't convert %qs to %qs"
-msgstr ""
-
-#: java/parse.y:12992
-#, gcc-internal-format
-msgid "Incompatible type for %s. Explicit cast needed to convert %qs to %qs"
-msgstr ""
-
-#: java/parse.y:13164
-#, gcc-internal-format
-msgid ""
-"Constant expression %qs too wide for narrowing primitive conversion to %qs"
-msgstr ""
-
-#: java/parse.y:13454
-#, gcc-internal-format
-msgid "unregistered operator %s"
-msgstr ""
-
-#: java/parse.y:13603
-#, gcc-internal-format
-msgid ""
-"Evaluating this expression will result in an arithmetic exception being "
-"thrown"
-msgstr ""
-
-#: java/parse.y:13685
-#, gcc-internal-format
-msgid ""
-"Incompatible type for %qs. Explicit cast needed to convert shift distance "
-"from %qs to integral"
-msgstr ""
-
-#: java/parse.y:13690
-#, gcc-internal-format
-msgid ""
-"Incompatible type for %qs. Can't convert shift distance from %qs to integral"
-msgstr ""
-
-#: java/parse.y:13764
-#, gcc-internal-format
-msgid "Invalid argument %qs for %<instanceof%>"
-msgstr ""
-
-#: java/parse.y:13791
-#, gcc-internal-format
-msgid "Impossible for %qs to be instance of %qs"
-msgstr ""
-
-#: java/parse.y:13922
-#, gcc-internal-format
-msgid "Incompatible type for %qs. Can't convert %qs to %qs"
-msgstr ""
-
-#: java/parse.y:14240
-#, gcc-internal-format
-msgid "%qs cannot be used with a constant"
-msgstr ""
-
-#: java/parse.y:14405
-#, gcc-internal-format
-msgid "Invalid argument type %qs to %qs"
-msgstr ""
-
-#: java/parse.y:14641
-#, gcc-internal-format
-msgid "Invalid cast from %qs to %qs"
-msgstr ""
-
-#: java/parse.y:14688
-#, gcc-internal-format
-msgid "%<[]%> can only be applied to arrays. It can't be applied to %qs"
-msgstr ""
-
-#: java/parse.y:14701
-#, gcc-internal-format
-msgid ""
-"Incompatible type for %<[]%>. Explicit cast needed to convert %qs to %<int%>"
-msgstr ""
-
-#: java/parse.y:14705
-#, gcc-internal-format
-msgid "Incompatible type for %<[]%>. Can't convert %qs to %<int%>"
-msgstr ""
-
-#: java/parse.y:14776
-#, gcc-internal-format
-msgid ""
-"Incompatible type for dimension in array creation expression. %s convert %qs "
-"to %<int%>"
-msgstr ""
-
-#: java/parse.y:14894
-#, gcc-internal-format
-msgid "Invalid array initializer for non-array type %qs"
-msgstr ""
-
-#: java/parse.y:14981
-#, gcc-internal-format
-msgid "Incompatible type for array. %s convert %qs to %qs"
-msgstr ""
-
-#: java/parse.y:15050
-#, gcc-internal-format
-msgid "%<return%> inside instance initializer"
-msgstr ""
-
-#: java/parse.y:15054
-#, gcc-internal-format
-msgid "%<return%> inside static initializer"
-msgstr ""
-
-#: java/parse.y:15060
-#, gcc-internal-format
-msgid "%<return%> with%s value from %<%s %s%>"
-msgstr ""
-
-#: java/parse.y:15067
-#, gcc-internal-format
-msgid "%<return%> with value from constructor %qs"
-msgstr ""
-
-#: java/parse.y:15132
-#, gcc-internal-format
-msgid "Incompatible type for %<if%>. Can't convert %qs to %<boolean%>"
-msgstr ""
-
-#: java/parse.y:15165
-#, gcc-internal-format
-msgid "Declaration of %qs shadows a previous label declaration"
-msgstr ""
-
-#: java/parse.y:15170
-#, gcc-internal-format
-msgid "This is the location of the previous declaration of label %qs"
-msgstr ""
-
-#: java/parse.y:15417
-#, gcc-internal-format
-msgid "No label definition found for %qs"
-msgstr ""
-
-#: java/parse.y:15430
-#, gcc-internal-format
-msgid "%<continue%> must be in loop"
-msgstr ""
-
-#: java/parse.y:15433
-#, gcc-internal-format
-msgid "continue label %qs does not name a loop"
-msgstr ""
-
-#: java/parse.y:15454
-#, gcc-internal-format
-msgid "%<break%> must be in loop or switch"
-msgstr ""
-
-#: java/parse.y:15495
-#, gcc-internal-format
-msgid ""
-"Incompatible type for loop conditional. Can't convert %qs to %<boolean%>"
-msgstr ""
-
-#: java/parse.y:15533
-#, gcc-internal-format
-msgid "Incompatible type for %<switch%>. Can't convert %qs to %<int%>"
-msgstr ""
-
-#. The case_label_list is in reverse order, so print the
-#. outer label first.
-#: java/parse.y:15564
-#, gcc-internal-format
-msgid "duplicate case label: %<"
-msgstr ""
-
-#: java/parse.y:15568
-#, gcc-internal-format
-msgid "original label is here"
-msgstr ""
-
-#: java/parse.y:15785
-#, gcc-internal-format
-msgid ""
-"Can't catch class %qs. Catch clause parameter type must be a subclass of "
-"class %<java.lang.Throwable%>"
-msgstr ""
-
-#: java/parse.y:15809
-#, gcc-internal-format
-msgid "%<catch%> not reached because of the catch clause at line %d"
-msgstr ""
-
-#: java/parse.y:15876
-#, gcc-internal-format
-msgid ""
-"Incompatible type for %<synchronized%>. Can't convert %qs to %<java.lang."
-"Object%>"
-msgstr ""
-
-#: java/parse.y:15927
-#, gcc-internal-format
-msgid "Can't throw %qs; it must be a subclass of class %<java.lang.Throwable%>"
-msgstr ""
-
-#: java/parse.y:15956
-#, gcc-internal-format
-msgid ""
-"Checked exception %qs can't be thrown in instance initializer (not all "
-"declared constructor are declaring it in their %<throws%> clause)"
-msgstr ""
-
-#: java/parse.y:15977
-#, gcc-internal-format
-msgid ""
-"Checked exception %qs can't be caught by any of the catch clause(s) of the "
-"surrounding %<try%> block"
-msgstr ""
-
-#: java/parse.y:15990
-#, gcc-internal-format
-msgid "Checked exception %qs can't be thrown in initializer"
-msgstr ""
-
-#: java/parse.y:15994
-#, gcc-internal-format
-msgid "Checked exception %qs isn't thrown from a %<try%> block"
-msgstr ""
-
-#: java/parse.y:16000
-#, gcc-internal-format
-msgid ""
-"Checked exception %qs doesn't match any of current method's %<throws%> "
-"declaration(s)"
-msgstr ""
-
-#: java/parse.y:16090
-#, gcc-internal-format
-msgid "Exception %qs can't be thrown in initializer"
-msgstr ""
-
-#: java/parse.y:16096
-#, gcc-internal-format
-msgid ""
-"Exception %qs must be caught, or it must be declared in the %<throws%> "
-"clause of %qs"
-msgstr ""
-
-#: java/parse.y:16189
-#, gcc-internal-format
-msgid "Incompatible type for %<?:%>. Can't convert %qs to %<boolean%>"
-msgstr ""
-
-#: java/parse.y:16257
-#, gcc-internal-format
-msgid "Incompatible type for %<?:%>. Can't convert %qs to %qs"
-msgstr ""
-
-#: java/typeck.c:529
+#: java/typeck.c:527
#, gcc-internal-format
msgid "junk at end of signature string"
msgstr ""
@@ -31595,283 +31310,234 @@ msgstr ""
msgid "bad pc in exception_table"
msgstr ""
-#: java/parse.h:129
-#, gcc-internal-format
-msgid "%s method can't be abstract"
-msgstr ""
-
-#: java/parse.h:133
-#, gcc-internal-format
-msgid "Constructor can't be %s"
-msgstr ""
-
-#. Pedantic warning on obsolete modifiers. Note: when cl is NULL,
-#. flags was set artificially, such as for an interface method.
-#: java/parse.h:165
-#, gcc-internal-format
-msgid "Discouraged redundant use of %qs modifier in declaration of %s"
-msgstr ""
-
-#: java/parse.h:172
-#, gcc-internal-format
-msgid "Discouraged redundant use of %qs modifier in declaration of %s %qs"
-msgstr ""
-
-#. Standard error messages
-#: java/parse.h:355
-#, gcc-internal-format
-msgid "Incompatible type for %qs. Can't convert %qs to boolean"
-msgstr ""
-
-#: java/parse.h:360
-#, gcc-internal-format
-msgid "Incompatible type for %qs. Can't convert %qs to numeric type"
-msgstr ""
-
-#: java/parse.h:368
-#, gcc-internal-format
-msgid ""
-"Incompatible type for %qs. Explicit cast needed to convert %qs to integral"
-msgstr ""
-
-#: java/parse.h:373
-#, gcc-internal-format
-msgid "Incompatible type for %qs. Can't convert %qs to integral"
-msgstr ""
-
-#: java/parse.h:380
-#, gcc-internal-format
-msgid "Variable %qs may not have been initialized"
-msgstr ""
-
-#: objc/objc-act.c:709
+#: objc/objc-act.c:705
#, gcc-internal-format
msgid "%<@end%> must appear in an @implementation context"
msgstr ""
-#: objc/objc-act.c:738
+#: objc/objc-act.c:734
#, gcc-internal-format
msgid "method declaration not in @interface context"
msgstr ""
-#: objc/objc-act.c:749
+#: objc/objc-act.c:745
#, gcc-internal-format
msgid "method definition not in @implementation context"
msgstr ""
-#: objc/objc-act.c:1173
+#: objc/objc-act.c:1177
#, gcc-internal-format
msgid "comparison of distinct Objective-C types lacks a cast"
msgstr ""
-#: objc/objc-act.c:1177
+#: objc/objc-act.c:1181
#, gcc-internal-format
msgid "initialization from distinct Objective-C type"
msgstr ""
-#: objc/objc-act.c:1181
+#: objc/objc-act.c:1185
#, gcc-internal-format
msgid "assignment from distinct Objective-C type"
msgstr ""
-#: objc/objc-act.c:1185
+#: objc/objc-act.c:1189
#, gcc-internal-format
msgid "distinct Objective-C type in return"
msgstr ""
-#: objc/objc-act.c:1189
+#: objc/objc-act.c:1193
#, gcc-internal-format
msgid "passing argument %d of %qE from distinct Objective-C type"
msgstr ""
-#: objc/objc-act.c:1344
+#: objc/objc-act.c:1348
#, gcc-internal-format
msgid "statically allocated instance of Objective-C class %qs"
msgstr ""
-#: objc/objc-act.c:1415
+#: objc/objc-act.c:1425
#, gcc-internal-format
msgid "protocol %qs has circular dependency"
msgstr ""
-#: objc/objc-act.c:1440 objc/objc-act.c:6569
+#: objc/objc-act.c:1450 objc/objc-act.c:6584
#, gcc-internal-format
msgid "cannot find protocol declaration for %qs"
msgstr ""
-#: objc/objc-act.c:1904 objc/objc-act.c:3339 objc/objc-act.c:7182
-#: objc/objc-act.c:7518 objc/objc-act.c:7572 objc/objc-act.c:7597
+#: objc/objc-act.c:1914 objc/objc-act.c:3350 objc/objc-act.c:7197
+#: objc/objc-act.c:7533 objc/objc-act.c:7587 objc/objc-act.c:7612
#, gcc-internal-format
msgid "cannot find interface declaration for %qs"
msgstr ""
-#: objc/objc-act.c:1908
+#: objc/objc-act.c:1918
#, gcc-internal-format
msgid "interface %qs does not have valid constant string layout"
msgstr ""
-#: objc/objc-act.c:1913
+#: objc/objc-act.c:1923
#, gcc-internal-format
msgid "cannot find reference tag for class %qs"
msgstr ""
-#: objc/objc-act.c:2539
+#: objc/objc-act.c:2550
#, gcc-internal-format
msgid "%Hcreating selector for nonexistent method %qE"
msgstr ""
-#: objc/objc-act.c:2741
+#: objc/objc-act.c:2752
#, gcc-internal-format
msgid "%qs is not an Objective-C class name or alias"
msgstr ""
-#: objc/objc-act.c:2867 objc/objc-act.c:2898 objc/objc-act.c:7446
-#: objc/objc-act.c:7747 objc/objc-act.c:7777
+#: objc/objc-act.c:2878 objc/objc-act.c:2909 objc/objc-act.c:7461
+#: objc/objc-act.c:7762 objc/objc-act.c:7792
#, gcc-internal-format
msgid "Objective-C declarations may only appear in global scope"
msgstr ""
-#: objc/objc-act.c:2872
+#: objc/objc-act.c:2883
#, gcc-internal-format
msgid "cannot find class %qs"
msgstr ""
-#: objc/objc-act.c:2874
+#: objc/objc-act.c:2885
#, gcc-internal-format
msgid "class %qs already exists"
msgstr ""
-#: objc/objc-act.c:2918 objc/objc-act.c:7487
+#: objc/objc-act.c:2929 objc/objc-act.c:7502
#, gcc-internal-format
msgid "%qs redeclared as different kind of symbol"
msgstr ""
-#: objc/objc-act.c:3192
+#: objc/objc-act.c:3203
#, gcc-internal-format
msgid "strong-cast assignment has been intercepted"
msgstr ""
-#: objc/objc-act.c:3234
+#: objc/objc-act.c:3245
#, gcc-internal-format
msgid "strong-cast may possibly be needed"
msgstr ""
-#: objc/objc-act.c:3244
+#: objc/objc-act.c:3255
#, gcc-internal-format
msgid "instance variable assignment has been intercepted"
msgstr ""
-#: objc/objc-act.c:3263
+#: objc/objc-act.c:3274
#, gcc-internal-format
msgid "pointer arithmetic for garbage-collected objects not allowed"
msgstr ""
-#: objc/objc-act.c:3269
+#: objc/objc-act.c:3280
#, gcc-internal-format
msgid "global/static variable assignment has been intercepted"
msgstr ""
-#: objc/objc-act.c:3452
+#: objc/objc-act.c:3463
#, gcc-internal-format
msgid "use %<-fobjc-exceptions%> to enable Objective-C exception syntax"
msgstr ""
-#: objc/objc-act.c:3794
+#: objc/objc-act.c:3805
#, gcc-internal-format
msgid "@catch parameter is not a known Objective-C class type"
msgstr ""
-#: objc/objc-act.c:3810
+#: objc/objc-act.c:3821
#, gcc-internal-format
msgid "exception of type %<%T%> will be caught"
msgstr ""
-#: objc/objc-act.c:3812
+#: objc/objc-act.c:3823
#, gcc-internal-format
msgid "%H by earlier handler for %<%T%>"
msgstr ""
-#: objc/objc-act.c:3865
+#: objc/objc-act.c:3876
#, gcc-internal-format
msgid "%<@try%> without %<@catch%> or %<@finally%>"
msgstr ""
-#: objc/objc-act.c:3913
+#: objc/objc-act.c:3924
#, gcc-internal-format
msgid "%<@throw%> (rethrow) used outside of a @catch block"
msgstr ""
-#: objc/objc-act.c:4308
+#: objc/objc-act.c:4325
#, gcc-internal-format
msgid "type %q+D does not have a known size"
msgstr ""
-#: objc/objc-act.c:4941
+#: objc/objc-act.c:4958
#, gcc-internal-format
msgid "%J%s %qs"
msgstr ""
-#: objc/objc-act.c:4964 objc/objc-act.c:4983
+#: objc/objc-act.c:4981 objc/objc-act.c:5000
#, gcc-internal-format
msgid "inconsistent instance variable specification"
msgstr ""
-#: objc/objc-act.c:5841
+#: objc/objc-act.c:5858
#, gcc-internal-format
msgid "can not use an object as parameter to a method"
msgstr ""
-#: objc/objc-act.c:6064
+#: objc/objc-act.c:6081
#, gcc-internal-format
msgid "multiple %s named %<%c%s%> found"
msgstr ""
-#: objc/objc-act.c:6293
+#: objc/objc-act.c:6308
#, gcc-internal-format
msgid "no super class declared in @interface for %qs"
msgstr ""
-#: objc/objc-act.c:6331
+#: objc/objc-act.c:6346
#, gcc-internal-format
msgid "found %<-%s%> instead of %<+%s%> in protocol(s)"
msgstr ""
-#: objc/objc-act.c:6390
+#: objc/objc-act.c:6405
#, gcc-internal-format
msgid "invalid receiver type %qs"
msgstr ""
-#: objc/objc-act.c:6405
+#: objc/objc-act.c:6420
#, gcc-internal-format
msgid "%<%c%s%> not found in protocol(s)"
msgstr ""
-#: objc/objc-act.c:6419
+#: objc/objc-act.c:6434
#, gcc-internal-format
msgid "%qs may not respond to %<%c%s%>"
msgstr ""
-#: objc/objc-act.c:6427
+#: objc/objc-act.c:6442
#, gcc-internal-format
msgid "no %<%c%s%> method found"
msgstr ""
-#: objc/objc-act.c:6433
+#: objc/objc-act.c:6448
#, gcc-internal-format
msgid "(Messages without a matching method signature"
msgstr ""
-#: objc/objc-act.c:6434
+#: objc/objc-act.c:6449
#, gcc-internal-format
msgid "will be assumed to return %<id%> and accept"
msgstr ""
-#: objc/objc-act.c:6435
+#: objc/objc-act.c:6450
#, gcc-internal-format
msgid "%<...%> as arguments.)"
msgstr ""
-#: objc/objc-act.c:6668
+#: objc/objc-act.c:6683
#, gcc-internal-format
msgid "undeclared selector %qs"
msgstr ""
@@ -31885,161 +31551,161 @@ msgstr ""
#. to an instance variable. It's better to catch the cases
#. where this is done unknowingly than to support the above
#. paradigm.
-#: objc/objc-act.c:6710
+#: objc/objc-act.c:6725
#, gcc-internal-format
msgid "instance variable %qs accessed in class method"
msgstr ""
-#: objc/objc-act.c:6943
+#: objc/objc-act.c:6958
#, gcc-internal-format
msgid "duplicate declaration of method %<%c%s%>"
msgstr ""
-#: objc/objc-act.c:7004
+#: objc/objc-act.c:7019
#, gcc-internal-format
msgid "duplicate interface declaration for category %<%s(%s)%>"
msgstr ""
-#: objc/objc-act.c:7031
+#: objc/objc-act.c:7046
#, gcc-internal-format
msgid "illegal reference type specified for instance variable %qs"
msgstr ""
-#: objc/objc-act.c:7042
+#: objc/objc-act.c:7057
#, gcc-internal-format
msgid "instance variable %qs has unknown size"
msgstr ""
-#: objc/objc-act.c:7067
+#: objc/objc-act.c:7082
#, gcc-internal-format
msgid "type %qs has no default constructor to call"
msgstr ""
-#: objc/objc-act.c:7073
+#: objc/objc-act.c:7088
#, gcc-internal-format
msgid "destructor for %qs shall not be run either"
msgstr ""
#. Vtable pointers are Real Bad(tm), since Obj-C cannot
#. initialize them.
-#: objc/objc-act.c:7085
+#: objc/objc-act.c:7100
#, gcc-internal-format
msgid "type %qs has virtual member functions"
msgstr ""
-#: objc/objc-act.c:7086
+#: objc/objc-act.c:7101
#, gcc-internal-format
msgid "illegal aggregate type %qs specified for instance variable %qs"
msgstr ""
-#: objc/objc-act.c:7096
+#: objc/objc-act.c:7111
#, gcc-internal-format
msgid "type %qs has a user-defined constructor"
msgstr ""
-#: objc/objc-act.c:7098
+#: objc/objc-act.c:7113
#, gcc-internal-format
msgid "type %qs has a user-defined destructor"
msgstr ""
-#: objc/objc-act.c:7102
+#: objc/objc-act.c:7117
#, gcc-internal-format
msgid ""
"C++ constructors and destructors will not be invoked for Objective-C fields"
msgstr ""
-#: objc/objc-act.c:7211
+#: objc/objc-act.c:7226
#, gcc-internal-format
msgid "instance variable %qs is declared private"
msgstr ""
-#: objc/objc-act.c:7222
+#: objc/objc-act.c:7237
#, gcc-internal-format
msgid "instance variable %qs is %s; this will be a hard error in the future"
msgstr ""
-#: objc/objc-act.c:7229
+#: objc/objc-act.c:7244
#, gcc-internal-format
msgid "instance variable %qs is declared %s"
msgstr ""
-#: objc/objc-act.c:7255 objc/objc-act.c:7343
+#: objc/objc-act.c:7270 objc/objc-act.c:7358
#, gcc-internal-format
msgid "incomplete implementation of class %qs"
msgstr ""
-#: objc/objc-act.c:7259 objc/objc-act.c:7348
+#: objc/objc-act.c:7274 objc/objc-act.c:7363
#, gcc-internal-format
msgid "incomplete implementation of category %qs"
msgstr ""
-#: objc/objc-act.c:7264 objc/objc-act.c:7353
+#: objc/objc-act.c:7279 objc/objc-act.c:7368
#, gcc-internal-format
msgid "method definition for %<%c%s%> not found"
msgstr ""
-#: objc/objc-act.c:7394
+#: objc/objc-act.c:7409
#, gcc-internal-format
msgid "%s %qs does not fully implement the %qs protocol"
msgstr ""
-#: objc/objc-act.c:7452 objc/objc-act.c:9142
+#: objc/objc-act.c:7467 objc/objc-act.c:9157
#, gcc-internal-format
msgid "%<@end%> missing in implementation context"
msgstr ""
-#: objc/objc-act.c:7471
+#: objc/objc-act.c:7486
#, gcc-internal-format
msgid "cannot find interface declaration for %qs, superclass of %qs"
msgstr ""
-#: objc/objc-act.c:7501
+#: objc/objc-act.c:7516
#, gcc-internal-format
msgid "reimplementation of class %qs"
msgstr ""
-#: objc/objc-act.c:7533
+#: objc/objc-act.c:7548
#, gcc-internal-format
msgid "conflicting super class name %qs"
msgstr ""
-#: objc/objc-act.c:7535
+#: objc/objc-act.c:7550
#, gcc-internal-format
msgid "previous declaration of %qs"
msgstr ""
-#: objc/objc-act.c:7551 objc/objc-act.c:7549
+#: objc/objc-act.c:7566 objc/objc-act.c:7564
#, gcc-internal-format
msgid "duplicate interface declaration for class %qs"
msgstr ""
-#: objc/objc-act.c:7805
+#: objc/objc-act.c:7820
#, gcc-internal-format
msgid "duplicate declaration for protocol %qs"
msgstr ""
#. Add a readable method name to the warning.
-#: objc/objc-act.c:8383
+#: objc/objc-act.c:8398
#, gcc-internal-format
msgid "%J%s %<%c%s%>"
msgstr ""
-#: objc/objc-act.c:8713
+#: objc/objc-act.c:8728
#, gcc-internal-format
msgid "no super class declared in interface for %qs"
msgstr ""
-#: objc/objc-act.c:8762
+#: objc/objc-act.c:8777
#, gcc-internal-format
msgid "[super ...] must appear in a method context"
msgstr ""
-#: objc/objc-act.c:8802
+#: objc/objc-act.c:8817
#, gcc-internal-format
msgid "method possibly missing a [super dealloc] call"
msgstr ""
-#: objc/objc-act.c:9432
+#: objc/objc-act.c:9447
#, gcc-internal-format
msgid "local declaration of %qs hides instance variable"
msgstr ""
@@ -32049,27 +31715,27 @@ msgstr ""
msgid "%HDuplicate name %q.*s."
msgstr ""
-#: treelang/treetree.c:813
+#: treelang/treetree.c:809
#, gcc-internal-format
msgid "Global register variable %qD used in nested function."
msgstr ""
-#: treelang/treetree.c:817
+#: treelang/treetree.c:813
#, gcc-internal-format
msgid "Register variable %qD used in nested function."
msgstr ""
-#: treelang/treetree.c:823
+#: treelang/treetree.c:819
#, gcc-internal-format
msgid "Address of global register variable %qD requested."
msgstr ""
-#: treelang/treetree.c:828
+#: treelang/treetree.c:824
#, gcc-internal-format
msgid "Address of register variable %qD requested."
msgstr ""
-#: treelang/treetree.c:1213
+#: treelang/treetree.c:1209
#, gcc-internal-format
msgid "%qD attribute ignored"
msgstr ""
diff --git a/gcc/po/sr.po b/gcc/po/sr.po
new file mode 100644
index 00000000000..f2f5e430297
--- /dev/null
+++ b/gcc/po/sr.po
@@ -0,0 +1,28674 @@
+# Serbian translation of `gcc'.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# Caslav Ilic <caslav.ilic@gmx.net>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gcc 4.1.1\n"
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
+"POT-Creation-Date: 2006-05-24 16:19-0700\n"
+"PO-Revision-Date: 2007-02-15 12:00+0100\n"
+"Last-Translator: Caslav Ilic <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: c-decl.c:3739
+msgid "<anonymous>"
+msgstr "<анонимно>"
+
+#: c-format.c:343 c-format.c:367
+msgid "' ' flag"
+msgstr "заÑтавица ‘ ’"
+
+#: c-format.c:343 c-format.c:367
+msgid "the ' ' printf flag"
+msgstr "заÑтавица ‘ ’ у printf"
+
+#: c-format.c:344 c-format.c:368 c-format.c:402 c-format.c:414 c-format.c:471
+msgid "'+' flag"
+msgstr "заÑтавица ‘+’"
+
+#: c-format.c:344 c-format.c:368 c-format.c:402 c-format.c:414
+msgid "the '+' printf flag"
+msgstr "заÑтавица ‘+’ у printf"
+
+#: c-format.c:345 c-format.c:369 c-format.c:415 c-format.c:447
+msgid "'#' flag"
+msgstr "заÑтавица ‘#’"
+
+#: c-format.c:345 c-format.c:369 c-format.c:415
+msgid "the '#' printf flag"
+msgstr "заÑтавица ‘#’ у printf"
+
+#: c-format.c:346 c-format.c:370 c-format.c:445
+msgid "'0' flag"
+msgstr "заÑтавица ‘0’"
+
+#: c-format.c:346 c-format.c:370
+msgid "the '0' printf flag"
+msgstr "заÑтавица ‘0’ у printf"
+
+#: c-format.c:347 c-format.c:371 c-format.c:444 c-format.c:474
+msgid "'-' flag"
+msgstr "заÑтавица ‘-’"
+
+#: c-format.c:347 c-format.c:371
+msgid "the '-' printf flag"
+msgstr "заÑтавица ‘-’ у printf"
+
+#: c-format.c:348 c-format.c:428
+msgid "''' flag"
+msgstr "заÑтавица ‘'’"
+
+#: c-format.c:348
+msgid "the ''' printf flag"
+msgstr "заÑтавица ‘'’ у printf"
+
+#: c-format.c:349 c-format.c:429
+msgid "'I' flag"
+msgstr "заÑтавица ‘I’"
+
+#: c-format.c:349
+msgid "the 'I' printf flag"
+msgstr "заÑтавица ‘I’ у printf"
+
+#: c-format.c:350 c-format.c:372 c-format.c:426 c-format.c:448 c-format.c:475
+#: c-format.c:1601 config/sol2-c.c:46
+msgid "field width"
+msgstr "ширина поља"
+
+#: c-format.c:350 c-format.c:372 config/sol2-c.c:46
+msgid "field width in printf format"
+msgstr "ширина поља у формату printf"
+
+#: c-format.c:351 c-format.c:373 c-format.c:404 c-format.c:417
+msgid "precision"
+msgstr "тачноÑÑ‚"
+
+#: c-format.c:351 c-format.c:373 c-format.c:404 c-format.c:417
+msgid "precision in printf format"
+msgstr "тачноÑÑ‚ у формату printf"
+
+#: c-format.c:352 c-format.c:374 c-format.c:405 c-format.c:418 c-format.c:427
+#: c-format.c:478 config/sol2-c.c:47
+msgid "length modifier"
+msgstr "модификатор дужине"
+
+#: c-format.c:352 c-format.c:374 c-format.c:405 c-format.c:418
+#: config/sol2-c.c:47
+msgid "length modifier in printf format"
+msgstr "модификатор дужине у формату printf"
+
+#: c-format.c:403 c-format.c:416
+msgid "'q' flag"
+msgstr "заÑтавица ‘q’"
+
+#: c-format.c:403 c-format.c:416
+msgid "the 'q' diagnostic flag"
+msgstr "дијагноÑтичка заÑтавица ‘q’"
+
+#: c-format.c:424
+msgid "assignment suppression"
+msgstr "потиÑкивање доделе"
+
+#: c-format.c:424
+msgid "the assignment suppression scanf feature"
+msgstr "могућноÑÑ‚ scanf за потиÑкивање доделе"
+
+#: c-format.c:425
+msgid "'a' flag"
+msgstr "заÑтавица ‘a’"
+
+#: c-format.c:425
+msgid "the 'a' scanf flag"
+msgstr "заÑтавица ‘a’ у scanf"
+
+#: c-format.c:426
+msgid "field width in scanf format"
+msgstr "ширина поља у формату scanf"
+
+#: c-format.c:427
+msgid "length modifier in scanf format"
+msgstr "модификатор дужине у формату scanf"
+
+#: c-format.c:428
+msgid "the ''' scanf flag"
+msgstr "заÑтавица ‘'’ у scanf"
+
+#: c-format.c:429
+msgid "the 'I' scanf flag"
+msgstr "заÑтавица ‘I’ у scanf"
+
+#: c-format.c:443
+msgid "'_' flag"
+msgstr "заÑтавица ‘_’"
+
+#: c-format.c:443
+msgid "the '_' strftime flag"
+msgstr "заÑтавица ‘_’ у strftime"
+
+#: c-format.c:444
+msgid "the '-' strftime flag"
+msgstr "заÑтавица ‘-’ у strftime"
+
+#: c-format.c:445
+msgid "the '0' strftime flag"
+msgstr "заÑтавица ‘0’ у strftime"
+
+#: c-format.c:446 c-format.c:470
+msgid "'^' flag"
+msgstr "заÑтавица ‘^’"
+
+#: c-format.c:446
+msgid "the '^' strftime flag"
+msgstr "заÑтавица ‘^’ у strftime"
+
+#: c-format.c:447
+msgid "the '#' strftime flag"
+msgstr "заÑтавица ‘#’ у strftime"
+
+#: c-format.c:448
+msgid "field width in strftime format"
+msgstr "ширина поља у формату strftime"
+
+#: c-format.c:449
+msgid "'E' modifier"
+msgstr "модификатор ‘E’"
+
+#: c-format.c:449
+msgid "the 'E' strftime modifier"
+msgstr "модификатор ‘E’ у strftime"
+
+#: c-format.c:450
+msgid "'O' modifier"
+msgstr "модификатор ‘O’ у strftime"
+
+#: c-format.c:450
+msgid "the 'O' strftime modifier"
+msgstr "модификатор ‘O’ у strftime"
+
+#: c-format.c:451
+msgid "the 'O' modifier"
+msgstr "модификатор ‘O’"
+
+#: c-format.c:469
+msgid "fill character"
+msgstr "знак за попуну"
+
+#: c-format.c:469
+msgid "fill character in strfmon format"
+msgstr "знак за попуну у формату strfmon"
+
+#: c-format.c:470
+msgid "the '^' strfmon flag"
+msgstr "заÑтавица ‘^’ у strfmon"
+
+#: c-format.c:471
+msgid "the '+' strfmon flag"
+msgstr "заÑтавица ‘+’ у strfmon"
+
+#: c-format.c:472
+msgid "'(' flag"
+msgstr "заÑтавица ‘(’"
+
+#: c-format.c:472
+msgid "the '(' strfmon flag"
+msgstr "заÑтавица ‘(’ у strfmon"
+
+#: c-format.c:473
+msgid "'!' flag"
+msgstr "заÑтавица ‘!’"
+
+#: c-format.c:473
+msgid "the '!' strfmon flag"
+msgstr "заÑтавица ‘!’ у strfmon"
+
+#: c-format.c:474
+msgid "the '-' strfmon flag"
+msgstr "заÑтавица ‘-’ у strfmon"
+
+#: c-format.c:475
+msgid "field width in strfmon format"
+msgstr "ширина поља у формату strfmon"
+
+#: c-format.c:476
+msgid "left precision"
+msgstr "лева тачноÑÑ‚"
+
+#: c-format.c:476
+msgid "left precision in strfmon format"
+msgstr "лева тачноÑÑ‚ у формату strfmon"
+
+#: c-format.c:477
+msgid "right precision"
+msgstr "деÑна тачноÑÑ‚"
+
+#: c-format.c:477
+msgid "right precision in strfmon format"
+msgstr "деÑна тачноÑÑ‚ у формату strfmon"
+
+#: c-format.c:478
+msgid "length modifier in strfmon format"
+msgstr "модификатор дужине у формату strfmon"
+
+#: c-format.c:1703
+msgid "field precision"
+msgstr "тачноÑÑ‚ поља"
+
+#: c-incpath.c:70
+#, c-format
+msgid "ignoring duplicate directory \"%s\"\n"
+msgstr "игноришем директоријум дупликат „%s“\n"
+
+#: c-incpath.c:73
+#, c-format
+msgid " as it is a non-system directory that duplicates a system directory\n"
+msgstr " пошто је неÑиÑтемÑки директоријум који је дупликат ÑиÑтемÑког директоријума\n"
+
+#: c-incpath.c:77
+#, c-format
+msgid "ignoring nonexistent directory \"%s\"\n"
+msgstr "игноришем непоÑтојећи директоријум „%s“\n"
+
+#: c-incpath.c:286
+#, c-format
+msgid "#include \"...\" search starts here:\n"
+msgstr "Тражење за #include \"...\" почиње овде:\n"
+
+#: c-incpath.c:290
+#, c-format
+msgid "#include <...> search starts here:\n"
+msgstr "Тражење за #include <...> почиње овде:\n"
+
+#: c-incpath.c:295
+#, c-format
+msgid "End of search list.\n"
+msgstr "Крај лиÑте тражења.\n"
+
+#: c-opts.c:1339
+msgid "<built-in>"
+msgstr "<уграђено>"
+
+#: c-opts.c:1355
+msgid "<command line>"
+msgstr "<командна линија>"
+
+#: c-typeck.c:2225 c-typeck.c:4592 c-typeck.c:4594 c-typeck.c:4602
+#: c-typeck.c:4632 c-typeck.c:6011
+msgid "initializer element is not constant"
+msgstr "елемент уÑпоÑтављача није конÑтантан"
+
+#: c-typeck.c:4397
+msgid "array initialized from parenthesized string constant"
+msgstr "низ уÑпоÑтављен конÑтантном ниÑком у заградама"
+
+#: c-typeck.c:4458 cp/typeck2.c:672
+#, gcc-internal-format
+msgid "char-array initialized from wide string"
+msgstr "char-низ уÑпоÑтављен широком ниÑком"
+
+#: c-typeck.c:4463
+msgid "wchar_t-array initialized from non-wide string"
+msgstr "wchar_t-низ уÑпоÑтављен не-широком ниÑком"
+
+#: c-typeck.c:4481 cp/typeck2.c:692
+#, gcc-internal-format
+msgid "initializer-string for array of chars is too long"
+msgstr "предугачка ниÑка уÑпоÑтављача за низ знакова"
+
+#: c-typeck.c:4487
+msgid "array of inappropriate type initialized from string constant"
+msgstr "низ неподеÑног типа уÑпоÑтављен конÑтантном ниÑком"
+
+#. ??? This should not be an error when inlining calls to
+#. unprototyped functions.
+#: c-typeck.c:4551 c-typeck.c:4049 cp/typeck.c:1398
+#, gcc-internal-format
+msgid "invalid use of non-lvalue array"
+msgstr "неиÑправна употреба не-л-вредноÑног низа"
+
+#: c-typeck.c:4575
+msgid "array initialized from non-constant array expression"
+msgstr "низ уÑпоÑтављен не-конÑтантним низовним изразом"
+
+#: c-typeck.c:4639 c-typeck.c:6015
+#, gcc-internal-format
+msgid "initializer element is not computable at load time"
+msgstr "елемент уÑпоÑтављача Ñе не може израчунати при учитавању"
+
+#. Although C99 is unclear about whether incomplete arrays
+#. of VLAs themselves count as VLAs, it does not make
+#. sense to permit them to be initialized given that
+#. ordinary VLAs may not be initialized.
+#: c-typeck.c:4650 c-decl.c:3181 c-decl.c:3196
+#, gcc-internal-format
+msgid "variable-sized object may not be initialized"
+msgstr "објекат променљиве величине не може Ñе уÑпоÑтављати"
+
+#: c-typeck.c:4654
+msgid "invalid initializer"
+msgstr "неиÑправан уÑпоÑтављач"
+
+#: c-typeck.c:5128
+msgid "extra brace group at end of initializer"
+msgstr "Ñувишна група витичаÑтих заграда на крају уÑпоÑтављача"
+
+#: c-typeck.c:5148
+msgid "missing braces around initializer"
+msgstr "недоÑтају витичаÑте заграде око уÑпоÑтављача"
+
+#: c-typeck.c:5209
+msgid "braces around scalar initializer"
+msgstr "витичаÑте заграде око Ñкаларног уÑпоÑтављача"
+
+#: c-typeck.c:5266
+msgid "initialization of flexible array member in a nested context"
+msgstr "уÑпоÑтављање флекÑибилног чланÑког низа у угњежденом контекÑту"
+
+#: c-typeck.c:5268
+msgid "initialization of a flexible array member"
+msgstr "уÑпоÑтављање флекÑибилног чланÑког низа"
+
+#: c-typeck.c:5295
+msgid "missing initializer"
+msgstr "недоÑтаје уÑпоÑтављач"
+
+#: c-typeck.c:5317
+msgid "empty scalar initializer"
+msgstr "празан Ñкаларни уÑпоÑтављач"
+
+#: c-typeck.c:5322
+msgid "extra elements in scalar initializer"
+msgstr "Ñувишни елементи у Ñкаларном инцијализатору"
+
+#: c-typeck.c:5426 c-typeck.c:5486
+msgid "array index in non-array initializer"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° у не-низовном уÑпоÑтављачу"
+
+#: c-typeck.c:5431 c-typeck.c:5539
+msgid "field name not in record or union initializer"
+msgstr "име поља није у уÑпоÑтављачу Ñлога или уније"
+
+#: c-typeck.c:5477
+msgid "array index in initializer not of integer type"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° у уÑпоÑтављачу није целобројан"
+
+#: c-typeck.c:5482 c-typeck.c:5484
+msgid "nonconstant array index in initializer"
+msgstr "неконÑтантан Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° у уÑпоÑтављачу"
+
+#: c-typeck.c:5488 c-typeck.c:5491
+msgid "array index in initializer exceeds array bounds"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ñƒ уÑпоÑтављачу премашује границе низа"
+
+#: c-typeck.c:5502
+msgid "empty index range in initializer"
+msgstr "празан индекÑни опÑег у уÑпоÑтављачу"
+
+#: c-typeck.c:5511
+msgid "array index range in initializer exceeds array bounds"
+msgstr "индекÑни опÑег у уÑпоÑтављачу премашује границе низа"
+
+#: c-typeck.c:5586 c-typeck.c:5607 c-typeck.c:6079
+msgid "initialized field with side-effects overwritten"
+msgstr "уÑпоÑтављено поље Ñа Ñпоредним ефектима пребриÑано"
+
+#: c-typeck.c:6287
+msgid "excess elements in char array initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу знаковног низа"
+
+#: c-typeck.c:6294 c-typeck.c:6340
+msgid "excess elements in struct initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу Ñтруктуре"
+
+#: c-typeck.c:6355
+msgid "non-static initialization of a flexible array member"
+msgstr "неÑтатичко уÑпоÑтављање флекÑибилног чланÑког низа"
+
+#: c-typeck.c:6423
+msgid "excess elements in union initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу уније"
+
+#: c-typeck.c:6510
+msgid "excess elements in array initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу низа"
+
+#: c-typeck.c:6540
+msgid "excess elements in vector initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу вектора"
+
+#: c-typeck.c:6564
+msgid "excess elements in scalar initializer"
+msgstr "Ñувишни елементи у уÑпоÑтављачу Ñкалара"
+
+#: cfgrtl.c:2130
+msgid "flow control insn inside a basic block"
+msgstr "ија контроле тока унутар оÑновног блока"
+
+#: cfgrtl.c:2208
+msgid "wrong insn in the fallthru edge"
+msgstr "погрешна ија у пропадном потегу"
+
+#: cfgrtl.c:2250
+msgid "insn outside basic block"
+msgstr "ија изван оÑновног блока"
+
+#: cfgrtl.c:2257
+msgid "return not followed by barrier"
+msgstr "повратак није праћен баријером"
+
+#: cgraph.c:300 ipa-inline.c:296
+msgid "function body not available"
+msgstr "тело функције није доÑтупно"
+
+#: cgraph.c:302 cgraphunit.c:594
+msgid "redefined extern inline functions are not considered for inlining"
+msgstr "редефиниÑане Ñпољашње уткане функције не разматрају Ñе за уткивање"
+
+#: cgraph.c:305 cgraphunit.c:599
+msgid "function not considered for inlining"
+msgstr "функција Ñе не разматра за уткивање"
+
+#: cgraph.c:307 cgraphunit.c:597 ipa-inline.c:289
+msgid "function not inlinable"
+msgstr "функција Ñе не може уткати"
+
+#: collect2.c:373 gcc.c:6765
+#, c-format
+msgid "internal gcc abort in %s, at %s:%d"
+msgstr "инутрашњи прекид у %s, код %s:%d"
+
+#: collect2.c:872
+#, c-format
+msgid "no arguments"
+msgstr "без аргумената"
+
+#: collect2.c:1246 collect2.c:1394 collect2.c:1429
+#, c-format
+msgid "fopen %s"
+msgstr "fopen %s"
+
+#: collect2.c:1249 collect2.c:1399 collect2.c:1432
+#, c-format
+msgid "fclose %s"
+msgstr "fclose %s"
+
+#: collect2.c:1258
+#, c-format
+msgid "collect2 version %s"
+msgstr "collect2 верзија %s"
+
+#: collect2.c:1348
+#, c-format
+msgid "%d constructor(s) found\n"
+msgstr "нађених конÑтруктора: %d\n"
+
+#: collect2.c:1349
+#, c-format
+msgid "%d destructor(s) found\n"
+msgstr "нађених деÑтруктора: %d\n"
+
+#: collect2.c:1350
+#, c-format
+msgid "%d frame table(s) found\n"
+msgstr "нађених табела оквира: %d\n"
+
+#: collect2.c:1487
+#, c-format
+msgid "can't get program status"
+msgstr "не могу да добавим Ñтање програма"
+
+#: collect2.c:1537
+#, c-format
+msgid "[cannot find %s]"
+msgstr "[не могу да нађем %s]"
+
+#: collect2.c:1552
+#, c-format
+msgid "cannot find '%s'"
+msgstr "не могу да нађем ‘%s’"
+
+#: collect2.c:1556 collect2.c:2045 collect2.c:2200 gcc.c:2809
+#, c-format
+msgid "pex_init failed"
+msgstr "pex_init није прошло"
+
+#: collect2.c:1591
+#, c-format
+msgid "[Leaving %s]\n"
+msgstr "[Ðапуштам %s]\n"
+
+#: collect2.c:1811
+#, c-format
+msgid ""
+"\n"
+"write_c_file - output name is %s, prefix is %s\n"
+msgstr ""
+"\n"
+"write_c_file - излазно име је %s, Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ñ˜Ðµ %s\n"
+
+#: collect2.c:2019
+#, c-format
+msgid "cannot find 'nm'"
+msgstr "не могу да нађем ‘nm’"
+
+#: collect2.c:2066
+#, c-format
+msgid "can't open nm output"
+msgstr "не могу да отворим излаз из nm"
+
+#: collect2.c:2110
+#, c-format
+msgid "init function found in object %s"
+msgstr "функција init нађена у објекту %s"
+
+#: collect2.c:2118
+#, c-format
+msgid "fini function found in object %s"
+msgstr "функција fini нађена у објекту %s"
+
+#: collect2.c:2221
+#, c-format
+msgid "can't open ldd output"
+msgstr "не могу да отворим излаз из ldd"
+
+#: collect2.c:2224
+#, c-format
+msgid ""
+"\n"
+"ldd output with constructors/destructors.\n"
+msgstr ""
+"\n"
+"излаз из ldd Ñа конÑтрукторима/деÑтрукторима.\n"
+
+#: collect2.c:2239
+#, c-format
+msgid "dynamic dependency %s not found"
+msgstr "динамичка завиÑноÑÑ‚ %s није нађена"
+
+#: collect2.c:2251
+#, c-format
+msgid "unable to open dynamic dependency '%s'"
+msgstr "не могу да отворим динамичку завиÑноÑÑ‚ ‘%s’"
+
+#: collect2.c:2407
+#, c-format
+msgid "%s: not a COFF file"
+msgstr "%s: није КОФФ датотека"
+
+#: collect2.c:2527
+#, c-format
+msgid "%s: cannot open as COFF file"
+msgstr "%s: не могу да отворим као КОФФ датотеку"
+
+#: collect2.c:2585
+#, c-format
+msgid "library lib%s not found"
+msgstr "библиотека lib%s није нађена"
+
+#: cppspec.c:106
+#, c-format
+msgid "\"%s\" is not a valid option to the preprocessor"
+msgstr "„%s“ није иÑправна опција предобрађивача"
+
+#: cppspec.c:128
+#, c-format
+msgid "too many input files"
+msgstr "превише улазних датотека"
+
+#: diagnostic.c:186
+#, c-format
+msgid "%s:%d: confused by earlier errors, bailing out\n"
+msgstr "%s:%d: збуњен претходним грешкама, одуÑтајем\n"
+
+#: diagnostic.c:246
+#, c-format
+msgid "compilation terminated due to -Wfatal-errors.\n"
+msgstr "компиловање је прекинуто уÑлед -Wfatal-errors.\n"
+
+#: diagnostic.c:255
+#, c-format
+msgid ""
+"Please submit a full bug report,\n"
+"with preprocessed source if appropriate.\n"
+"See %s for instructions.\n"
+msgstr ""
+"Молимо поднеÑите пун извештај о грешци,\n"
+"Ñа предобрађеним извором ако је подеÑно.\n"
+"Погледајте %s за упутÑтва.\n"
+
+#: diagnostic.c:264
+#, c-format
+msgid "compilation terminated.\n"
+msgstr "компиловање прекинуто.\n"
+
+#: diagnostic.c:583
+#, c-format
+msgid "Internal compiler error: Error reporting routines re-entered.\n"
+msgstr "Унутрашња грешка компилатора: Грешка извештавања о рутинама у које је поново уђено.\n"
+
+#: final.c:1110
+msgid "negative insn length"
+msgstr "негативна дужина ије"
+
+#: final.c:2479
+msgid "could not split insn"
+msgstr "ниÑам могао да поделим ију"
+
+#: final.c:2828
+msgid "invalid 'asm': "
+msgstr "неиÑправна ‘asm’: "
+
+#: final.c:3011
+#, c-format
+msgid "nested assembly dialect alternatives"
+msgstr "алтернативе дијалекта угњежденог аÑемблера"
+
+#: final.c:3028 final.c:3040
+#, c-format
+msgid "unterminated assembly dialect alternative"
+msgstr "неодређена алтернатива дијалекта аÑемблера"
+
+#: final.c:3087
+#, c-format
+msgid "operand number missing after %%-letter"
+msgstr "број операнда недоÑтаје поÑле %%-Ñлова"
+
+#: final.c:3090 final.c:3131
+#, c-format
+msgid "operand number out of range"
+msgstr "број операнда изван опÑега"
+
+#: final.c:3150
+#, c-format
+msgid "invalid %%-code"
+msgstr "неиÑправан %%-код"
+
+#: final.c:3180
+#, c-format
+msgid "'%%l' operand isn't a label"
+msgstr "операнд уз ‘%%l’ није етикета"
+
+#. We can't handle floating point constants;
+#. PRINT_OPERAND must handle them.
+#. We can't handle floating point constants; PRINT_OPERAND must
+#. handle them.
+#. We can't handle floating point constants;
+#. PRINT_OPERAND must handle them.
+#: final.c:3281 vmsdbgout.c:487 config/i386/i386.c:6642
+#: config/pdp11/pdp11.c:1700
+#, c-format
+msgid "floating constant misused"
+msgstr "лоша употреба реалне конÑтанте"
+
+#: final.c:3337 vmsdbgout.c:544 config/i386/i386.c:6718
+#: config/pdp11/pdp11.c:1747
+#, c-format
+msgid "invalid expression as operand"
+msgstr "неиÑправан израз као операнд"
+
+#: flow.c:1699
+msgid "Attempt to delete prologue/epilogue insn:"
+msgstr "Покушај бриÑања ије пролога/епилога:"
+
+#: gcc.c:1641
+#, c-format
+msgid "Using built-in specs.\n"
+msgstr "КориÑтим уграђене наводе.\n"
+
+#: gcc.c:1824
+#, c-format
+msgid ""
+"Setting spec %s to '%s'\n"
+"\n"
+msgstr ""
+"ПоÑтављам навод %s на '%s'\n"
+"\n"
+
+#: gcc.c:1939
+#, c-format
+msgid "Reading specs from %s\n"
+msgstr "Читам наводе из %s\n"
+
+#: gcc.c:2035 gcc.c:2054
+#, c-format
+msgid "specs %%include syntax malformed after %ld characters"
+msgstr "наводи: %%include ÑинтакÑа лоше формирана поÑле %ld знакова"
+
+#: gcc.c:2062
+#, c-format
+msgid "could not find specs file %s\n"
+msgstr "ниÑам могао да нађем датотеку навода %s\n"
+
+#: gcc.c:2079 gcc.c:2087 gcc.c:2096 gcc.c:2105
+#, c-format
+msgid "specs %%rename syntax malformed after %ld characters"
+msgstr "наводи: %%rename ÑинтакÑа лоше формирана поÑле %ld знакова"
+
+#: gcc.c:2114
+#, c-format
+msgid "specs %s spec was not found to be renamed"
+msgstr "наводи: није утврђено да је навод %s преименован"
+
+#: gcc.c:2121
+#, c-format
+msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
+msgstr "%s: покушај преименовања навода ‘%s’ у већ дефиниÑан навод ‘%s’"
+
+#: gcc.c:2126
+#, c-format
+msgid "rename spec %s to %s\n"
+msgstr "преименуј навод %s у %s\n"
+
+#: gcc.c:2128
+#, c-format
+msgid ""
+"spec is '%s'\n"
+"\n"
+msgstr ""
+"навод је ‘%s’\n"
+"\n"
+
+#: gcc.c:2141
+#, c-format
+msgid "specs unknown %% command after %ld characters"
+msgstr "наводи: непозната %% наредба поÑле %ld знакова"
+
+#: gcc.c:2152 gcc.c:2165
+#, c-format
+msgid "specs file malformed after %ld characters"
+msgstr "датотека навода лоше формирана поÑле %ld знакова"
+
+#: gcc.c:2218
+#, c-format
+msgid "spec file has no spec for linking"
+msgstr "датотека навода нема навод за повезивање"
+
+#: gcc.c:2640
+#, c-format
+msgid "system path '%s' is not absolute"
+msgstr "ÑиÑтемÑка путања ‘%s’ није апÑолутна"
+
+#: gcc.c:2703
+#, c-format
+msgid "-pipe not supported"
+msgstr "-pipe није подржано"
+
+#: gcc.c:2765
+#, c-format
+msgid ""
+"\n"
+"Go ahead? (y or n) "
+msgstr ""
+"\n"
+"ÐаÑтавити? (y или n) "
+
+#: gcc.c:2848
+msgid "failed to get exit status"
+msgstr "ниÑам уÑпео да добавим излазни ÑтатуÑ"
+
+#: gcc.c:2854
+msgid "failed to get process times"
+msgstr "ниÑам уÑпео да добавим времена процеÑа"
+
+#: gcc.c:2877
+#, c-format
+msgid ""
+"Internal error: %s (program %s)\n"
+"Please submit a full bug report.\n"
+"See %s for instructions."
+msgstr ""
+"Унутрашња грешка: %s (програм %s)\n"
+"Молимо поднеÑите пун извештај о грешци.\n"
+"Погледајте %s за упутÑтва."
+
+#: gcc.c:2905
+#, c-format
+msgid "# %s %.2f %.2f\n"
+msgstr "# %s %.2f %.2f\n"
+
+#: gcc.c:3041
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Употреба: %s [опције] датотека...\n"
+
+#: gcc.c:3042
+msgid "Options:\n"
+msgstr "Опције:\n"
+
+#: gcc.c:3044
+msgid " -pass-exit-codes Exit with highest error code from a phase\n"
+msgstr " -pass-exit-codes Изађи Ñа највишим кодом грешке из фазе\n"
+
+#: gcc.c:3045
+msgid " --help Display this information\n"
+msgstr " --help Прикажи ове информације\n"
+
+#: gcc.c:3046
+msgid " --target-help Display target specific command line options\n"
+msgstr " --target-help Прикажи опције командне линије поÑебне за циљ\n"
+
+#: gcc.c:3048
+msgid " (Use '-v --help' to display command line options of sub-processes)\n"
+msgstr " (Употребите „-v --help“ за приказ опција командне линије потпроцеÑâ)\n"
+
+#: gcc.c:3049
+msgid " -dumpspecs Display all of the built in spec strings\n"
+msgstr " -dumpspecs Прикажи Ñве уграђене ниÑке навода\n"
+
+#: gcc.c:3050
+msgid " -dumpversion Display the version of the compiler\n"
+msgstr " -dumpversion Прикажи верзију компилатора\n"
+
+#: gcc.c:3051
+msgid " -dumpmachine Display the compiler's target processor\n"
+msgstr " -dumpmachine Прикажи компилаторов циљни процеÑор\n"
+
+#: gcc.c:3052
+msgid " -print-search-dirs Display the directories in the compiler's search path\n"
+msgstr ""
+" -print-search-dirs Прикажи директоријуме у компилаторовој путањи\n"
+" тражења\n"
+
+#: gcc.c:3053
+msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n"
+msgstr " -print-libgcc-file-name Прикажи име придружене библиотеке компилатора\n"
+
+#: gcc.c:3054
+msgid " -print-file-name=<lib> Display the full path to library <lib>\n"
+msgstr " -print-file-name=<биб> Прикажу пуну путању до библиотеке <биб>\n"
+
+#: gcc.c:3055
+msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>\n"
+msgstr " -print-prog-name=<прог> Прикажи пуну путању до компоненте компилатора <прог>\n"
+
+#: gcc.c:3056
+msgid " -print-multi-directory Display the root directory for versions of libgcc\n"
+msgstr " -print-multi-directory Прикажи корени директоријум за верзије libgcc\n"
+
+#: gcc.c:3057
+msgid ""
+" -print-multi-lib Display the mapping between command line options and\n"
+" multiple library search directories\n"
+msgstr ""
+" -print-multi-lib Прикажи мапирање између опција командне линије и\n"
+" вишеÑтруких директоријума за тражење библиотека\n"
+
+#: gcc.c:3060
+msgid " -print-multi-os-directory Display the relative path to OS libraries\n"
+msgstr " -print-multi-os-directory Прикажи релативну путању до библиотека ОСа\n"
+
+#: gcc.c:3061
+msgid " -Wa,<options> Pass comma-separated <options> on to the assembler\n"
+msgstr " -Wa,<опције> ПроÑледи зарезима раздвојене <опције> аÑемблеру\n"
+
+#: gcc.c:3062
+msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor\n"
+msgstr " -Wp,<опције> ПроÑледи зарезима раздвојене <опције> предобрађивачу\n"
+
+#: gcc.c:3063
+msgid " -Wl,<options> Pass comma-separated <options> on to the linker\n"
+msgstr " -Wl,<опције> ПроÑледи зарезима раздвојене <опције> повезивачу\n"
+
+#: gcc.c:3064
+msgid " -Xassembler <arg> Pass <arg> on to the assembler\n"
+msgstr " -Xassembler <арг> ПроÑледи <арг> аÑемблеру\n"
+
+#: gcc.c:3065
+msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"
+msgstr " -Xpreprocessor <арг> ПроÑледи <арг> предобрађивачу\n"
+
+#: gcc.c:3066
+msgid " -Xlinker <arg> Pass <arg> on to the linker\n"
+msgstr " -Xlinker <арг> ПроÑледи <арг> повезивачу\n"
+
+#: gcc.c:3067
+msgid " -combine Pass multiple source files to compiler at once\n"
+msgstr " -combine ПроÑледи одједном више изворних датотека компилатору\n"
+
+#: gcc.c:3068
+msgid " -save-temps Do not delete intermediate files\n"
+msgstr " -save-temps Ðе бриши међудатотеке\n"
+
+#: gcc.c:3069
+msgid " -pipe Use pipes rather than intermediate files\n"
+msgstr " -pipe КориÑти цеви пре него међудатотеке\n"
+
+#: gcc.c:3070
+msgid " -time Time the execution of each subprocess\n"
+msgstr " -time Мери време извршавања Ñваког потпроцеÑа\n"
+
+#: gcc.c:3071
+msgid " -specs=<file> Override built-in specs with the contents of <file>\n"
+msgstr " -specs=<датотека> ПотиÑни уграђене наводе Ñадржајем <датотеке>\n"
+
+#: gcc.c:3072
+msgid " -std=<standard> Assume that the input sources are for <standard>\n"
+msgstr " -std=<Ñтандард> ПретпоÑтави да Ñу улазни извори по датом <Ñтандарду>\n"
+
+#: gcc.c:3073
+msgid ""
+" --sysroot=<directory> Use <directory> as the root directory for headers\n"
+" for headers and libraries\n"
+msgstr ""
+" --sysroot=<директоријум> КориÑти <директоријум> као корени директоријум за\n"
+" заглавља и библиотеке\n"
+
+#: gcc.c:3076
+msgid " -B <directory> Add <directory> to the compiler's search paths\n"
+msgstr " -B <директоријум> Додај <директоријум> у компилаторове путање тражења\n"
+
+#: gcc.c:3077
+msgid " -b <machine> Run gcc for target <machine>, if installed\n"
+msgstr " -b <машина> Изврши gcc за циљну <машину>, ако је инÑталиран\n"
+
+#: gcc.c:3078
+msgid " -V <version> Run gcc version number <version>, if installed\n"
+msgstr " -V <верзија> Изврши gcc дате <верзије>, ако је инÑталирана\n"
+
+#: gcc.c:3079
+msgid " -v Display the programs invoked by the compiler\n"
+msgstr " -v Прикажи програме које компилатор позива\n"
+
+#: gcc.c:3080
+msgid " -### Like -v but options quoted and commands not executed\n"
+msgstr ""
+" -### Као -v али Ñу опције цитиране и наредбе Ñе не\n"
+" извршавају\n"
+
+#: gcc.c:3081
+msgid " -E Preprocess only; do not compile, assemble or link\n"
+msgstr ""
+" -E Само предобрада; без компиловања, ÑаÑтављања и\n"
+" повезивања\n"
+
+#: gcc.c:3082
+msgid " -S Compile only; do not assemble or link\n"
+msgstr " -S Само компиловање; без ÑаÑтављања или повезивања\n"
+
+#: gcc.c:3083
+msgid " -c Compile and assemble, but do not link\n"
+msgstr " -c Компиловање и ÑаÑтављање, али без повезивања\n"
+
+#: gcc.c:3084
+msgid " -o <file> Place the output into <file>\n"
+msgstr " -o <датотека> СмеÑти излаз у <датотеку>\n"
+
+#: gcc.c:3085
+msgid ""
+" -x <language> Specify the language of the following input files\n"
+" Permissible languages include: c c++ assembler none\n"
+" 'none' means revert to the default behavior of\n"
+" guessing the language based on the file's extension\n"
+msgstr ""
+" -x <језик> Ðавођење језика улазних датотека које Ñледе.\n"
+" Прихватљиви језици Ñу: c c++ assembler none\n"
+" ‘none’ значи враћање на подразумевано понашање,\n"
+" погађање језика на оÑнову наÑтавка датотеке\n"
+
+#: gcc.c:3092
+#, c-format
+msgid ""
+"\n"
+"Options starting with -g, -f, -m, -O, -W, or --param are automatically\n"
+" passed on to the various sub-processes invoked by %s. In order to pass\n"
+" other options on to these processes the -W<letter> options must be used.\n"
+msgstr ""
+"\n"
+"Опције које почињу Ñа -g, -f, -m, -O, -W, или --param аутоматÑки Ñе\n"
+"проÑлеђују разним потпроцеÑима које Ñазива %s. Да би Ñе тим процеÑима\n"
+"проÑледиле друге опције, мора Ñе употребити -W<Ñлово>.\n"
+
+#: gcc.c:3215
+#, c-format
+msgid "'-%c' option must have argument"
+msgstr "Опција ‘-%c’ мора имати аргумент"
+
+#: gcc.c:3237
+#, c-format
+msgid "couldn't run '%s': %s"
+msgstr "не могу да извршим ‘%s’: %s"
+
+#. translate_options () has turned --version into -fversion.
+#: gcc.c:3422
+#, c-format
+msgid "%s (GCC) %s\n"
+msgstr "%s (ГЦЦ) %s\n"
+
+#: gcc.c:3424 gcov.c:415 fortran/gfortranspec.c:351 java/gjavah.c:2406
+#: java/jcf-dump.c:931 java/jv-scan.c:129
+msgid "(C)"
+msgstr "©"
+
+#: gcc.c:3425 java/gjavah.c:2407 java/jcf-dump.c:932 java/jv-scan.c:130
+#, c-format
+msgid ""
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"\n"
+msgstr ""
+"Ово је Ñлободан Ñофтвер; погледајте изворе за уÑлове копирања. Ðема БИЛО КÐКВЕ\n"
+"ГÐРÐÐЦИЈЕ; чак ни за КОМЕРЦИЈÐЛÐУ ВРЕДÐОСТ или ИСПУЊÐÐ’ÐЊЕ ОДРЕЂЕÐЕ ПОТРЕБЕ.\n"
+"\n"
+
+#: gcc.c:3526
+#, c-format
+msgid "argument to '-Xlinker' is missing"
+msgstr "недоÑтаје аргумент за ‘-Xlinker’"
+
+#: gcc.c:3534
+#, c-format
+msgid "argument to '-Xpreprocessor' is missing"
+msgstr "недоÑтаје аргумент за ‘-Xpreprocessor’"
+
+#: gcc.c:3541
+#, c-format
+msgid "argument to '-Xassembler' is missing"
+msgstr "недоÑтаје аргумент за ‘-Xassembler’"
+
+#: gcc.c:3548
+#, c-format
+msgid "argument to '-l' is missing"
+msgstr "недоÑтаје аргумент за ‘-l’"
+
+#: gcc.c:3569
+#, c-format
+msgid "argument to '-specs' is missing"
+msgstr "недоÑтаје аргумент за ‘-specs’"
+
+#: gcc.c:3583
+#, c-format
+msgid "argument to '-specs=' is missing"
+msgstr "недоÑтаје аргумент за ‘-specs=’"
+
+#: gcc.c:3621
+#, c-format
+msgid "'-%c' must come at the start of the command line"
+msgstr "‘-%c’ Ñе мора наћи на почетку командне линије"
+
+#: gcc.c:3630
+#, c-format
+msgid "argument to '-B' is missing"
+msgstr "недоÑтаје аргумент за ‘-B’"
+
+#: gcc.c:4016
+#, c-format
+msgid "argument to '-x' is missing"
+msgstr "недоÑтаје аргумент за ‘-x’"
+
+#: gcc.c:4044
+#, c-format
+msgid "argument to '-%s' is missing"
+msgstr "недоÑтаје аргумент за ‘-%s’"
+
+#: gcc.c:4382
+#, c-format
+msgid "switch '%s' does not start with '-'"
+msgstr "прекидач ‘%s’ не почиње Ñа ‘-’"
+
+#: gcc.c:4612
+#, c-format
+msgid "spec '%s' invalid"
+msgstr "неиÑправан навод ‘%s’"
+
+#: gcc.c:4678
+#, c-format
+msgid "%s\n"
+msgstr "%s\n"
+
+#: gcc.c:4751
+#, c-format
+msgid "spec '%s' has invalid '%%0%c'"
+msgstr "навод ‘%s’ има неиÑправно ‘%%0%c’"
+
+#: gcc.c:4948
+#, c-format
+msgid "spec '%s' has invalid '%%W%c"
+msgstr "навод ‘%s’ има неиÑправно ‘%%W%c’"
+
+#: gcc.c:4979
+#, c-format
+msgid "spec '%s' has invalid '%%x%c'"
+msgstr "навод ‘%s’ има неиÑправно ‘%%x%c’"
+
+#: gcc.c:5201
+#, c-format
+msgid "Processing spec %c%s%c, which is '%s'\n"
+msgstr "Обрађујем навод %c%s%c, који је ‘%s’\n"
+
+#: gcc.c:5343
+#, c-format
+msgid "unknown spec function '%s'"
+msgstr "непозната функција навода ‘%s’"
+
+#: gcc.c:5362
+#, c-format
+msgid "error in args to spec function '%s'"
+msgstr "грешка у аргументима за функцију навода ‘%s’"
+
+#: gcc.c:5410
+#, c-format
+msgid "malformed spec function name"
+msgstr "лоше формирано име функције навода"
+
+#. )
+#: gcc.c:5413
+#, c-format
+msgid "no arguments for spec function"
+msgstr "нема аргумената за функцију навода"
+
+#: gcc.c:5432
+#, c-format
+msgid "malformed spec function arguments"
+msgstr "лоше формирани аргументи функције навода"
+
+#: gcc.c:5671
+#, c-format
+msgid "braced spec '%s' is invalid at '%c'"
+msgstr "навод ‘%s’ у витичаÑтим заградама није иÑправан код ‘%c’"
+
+#: gcc.c:5759
+#, c-format
+msgid "braced spec body '%s' is invalid"
+msgstr "тело навода ‘%s’ у витичаÑтим заградама није иÑправно"
+
+#: gcc.c:6306
+#, c-format
+msgid "install: %s%s\n"
+msgstr "инÑталирање: %s%s\n"
+
+#: gcc.c:6307
+#, c-format
+msgid "programs: %s\n"
+msgstr "програми: %s\n"
+
+#: gcc.c:6308
+#, c-format
+msgid "libraries: %s\n"
+msgstr "библиотеке: %s\n"
+
+#: gcc.c:6365
+#, c-format
+msgid ""
+"\n"
+"For bug reporting instructions, please see:\n"
+msgstr ""
+"\n"
+"За упутÑтва за пријављивање грешака, погледајте:\n"
+
+#: gcc.c:6381
+#, c-format
+msgid "Target: %s\n"
+msgstr "Циљ: %s\n"
+
+#: gcc.c:6382
+#, c-format
+msgid "Configured with: %s\n"
+msgstr "КонфигуриÑано помоћу: %s\n"
+
+#: gcc.c:6396
+#, c-format
+msgid "Thread model: %s\n"
+msgstr "Ðитни модел: %s\n"
+
+#: gcc.c:6407
+#, c-format
+msgid "gcc version %s\n"
+msgstr "gcc верзија %s\n"
+
+#: gcc.c:6409
+#, c-format
+msgid "gcc driver version %s executing gcc version %s\n"
+msgstr "gcc драјвер верзије %s извршава gcc верзију %s\n"
+
+#: gcc.c:6417
+#, c-format
+msgid "no input files"
+msgstr "нема улазних датотека"
+
+#: gcc.c:6466
+#, c-format
+msgid "cannot specify -o with -c or -S with multiple files"
+msgstr "не може Ñе задати -o Ñа -c или -S кад има више датотека"
+
+#: gcc.c:6500
+#, c-format
+msgid "spec '%s' is invalid"
+msgstr "навод ‘%s’ није иÑправан"
+
+#: gcc.c:6965
+#, c-format
+msgid "multilib spec '%s' is invalid"
+msgstr "вишебиб. навод ‘%s’ није иÑправан"
+
+#: gcc.c:7157
+#, c-format
+msgid "multilib exclusions '%s' is invalid"
+msgstr "вишебиб. иÑкључење ‘%s’ није иÑправно"
+
+#: gcc.c:7215 gcc.c:7356
+#, c-format
+msgid "multilib select '%s' is invalid"
+msgstr "вишебиб. избор ‘%s’ није иÑправан"
+
+#: gcc.c:7394
+#, c-format
+msgid "multilib exclusion '%s' is invalid"
+msgstr "вишебиб. иÑкључење ‘%s’ није иÑправно"
+
+#: gcc.c:7653 gcc.c:7658
+#, c-format
+msgid "invalid version number `%s'"
+msgstr "неиÑправан број верзије ‘%s’"
+
+#: gcc.c:7701
+#, c-format
+msgid "too few arguments to %%:version-compare"
+msgstr "премало аргумената за %%:version-compare"
+
+#: gcc.c:7707
+#, c-format
+msgid "too many arguments to %%:version-compare"
+msgstr "премало аргумената за %%:version-compare"
+
+#: gcc.c:7748
+#, c-format
+msgid "unknown operator '%s' in %%:version-compare"
+msgstr "непознате оператор ‘%s’ у %%:version-compare"
+
+#: gcov.c:388
+#, c-format
+msgid ""
+"Usage: gcov [OPTION]... SOURCEFILE\n"
+"\n"
+msgstr ""
+"Употреба: gcov [ОПЦИЈÐ]... ИЗВОРÐÐ_ДÐТОТЕКÐ\n"
+"\n"
+
+#: gcov.c:389
+#, c-format
+msgid ""
+"Print code coverage information.\n"
+"\n"
+msgstr ""
+"ИÑпиши податке о покривеноÑти кôда.\n"
+"\n"
+
+#: gcov.c:390
+#, c-format
+msgid " -h, --help Print this help, then exit\n"
+msgstr " -h, --help ИÑпиши ову помоћ, затим изађи\n"
+
+#: gcov.c:391
+#, c-format
+msgid " -v, --version Print version number, then exit\n"
+msgstr " -v, --version ИÑпиши број верзије, затим изађи\n"
+
+#: gcov.c:392
+#, c-format
+msgid " -a, --all-blocks Show information for every basic block\n"
+msgstr " -a, --all-blocks Прикажи податке за Ñваки оÑновни блок\n"
+
+#: gcov.c:393
+#, c-format
+msgid " -b, --branch-probabilities Include branch probabilities in output\n"
+msgstr " -b, --branch-probabilities Укључи вероватноће гранања у излаз\n"
+
+#: gcov.c:394
+#, c-format
+msgid ""
+" -c, --branch-counts Given counts of branches taken\n"
+" rather than percentages\n"
+msgstr ""
+" -c, --branch-counts Дати збирови извршених гранања\n"
+" пре него проценти\n"
+
+#: gcov.c:396
+#, c-format
+msgid " -n, --no-output Do not create an output file\n"
+msgstr " -n, --no-output Ðе прави излазну датотеку\n"
+
+#: gcov.c:397
+#, c-format
+msgid ""
+" -l, --long-file-names Use long output file names for included\n"
+" source files\n"
+msgstr ""
+" -l, --long-file-names КориÑти дуга излазна имена датотека за\n"
+" изворне датотеке\n"
+
+#: gcov.c:399
+#, c-format
+msgid " -f, --function-summaries Output summaries for each function\n"
+msgstr " -f, --function-summaries ИÑпиши Ñажетке за Ñваку функцију\n"
+
+#: gcov.c:400
+#, c-format
+msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
+msgstr ""
+" -o, --object-directory ДИР|ТЕКРТражи објектне датотеке у ДИРу или по\n"
+" имену ТЕКÐ\n"
+
+#: gcov.c:401
+#, c-format
+msgid " -p, --preserve-paths Preserve all pathname components\n"
+msgstr " -p, --preserve-paths Чувај Ñве делове путање\n"
+
+#: gcov.c:402
+#, c-format
+msgid " -u, --unconditional-branches Show unconditional branch counts too\n"
+msgstr " -u, --unconditional-branches Прикажи и збирове безуÑловних гранања\n"
+
+#: gcov.c:403
+#, c-format
+msgid ""
+"\n"
+"For bug reporting instructions, please see:\n"
+"%s.\n"
+msgstr ""
+"\n"
+"За упутÑтва за пријаву грешака, погледајте:\n"
+"%s.\n"
+
+#: gcov.c:413
+#, c-format
+msgid "gcov (GCC) %s\n"
+msgstr "gcov (ГЦЦ) %s\n"
+
+#: gcov.c:417
+#, c-format
+msgid ""
+"This is free software; see the source for copying conditions.\n"
+"There is NO warranty; not even for MERCHANTABILITY or \n"
+"FITNESS FOR A PARTICULAR PURPOSE.\n"
+"\n"
+msgstr ""
+"Ово је Ñлободан Ñофтвер; погледајте изворе за уÑлове копирања. Ðема БИЛО КÐКВЕ\n"
+"ГÐРÐÐЦИЈЕ; чак ни за КОМЕРЦИЈÐЛÐУ ВРЕДÐОСТ или ИСПУЊÐÐ’ÐЊЕ ОДРЕЂЕÐЕ ПОТРЕБЕ.\n"
+"\n"
+
+#: gcov.c:507
+#, c-format
+msgid "%s:no functions found\n"
+msgstr "%s: ниједна функција није нађена\n"
+
+#: gcov.c:528 gcov.c:556 fortran/dump-parse-tree.c:68
+#, c-format
+msgid "\n"
+msgstr "\n"
+
+#: gcov.c:543
+#, c-format
+msgid "%s:creating '%s'\n"
+msgstr "%s:правим ‘%s’\n"
+
+#: gcov.c:547
+#, c-format
+msgid "%s:error writing output file '%s'\n"
+msgstr "%s:грешка при пиÑању у излазну датотеку ‘%s’\n"
+
+#: gcov.c:552
+#, c-format
+msgid "%s:could not open output file '%s'\n"
+msgstr "%s:ниÑам могао да отворим излазну датотеку ‘%s’\n"
+
+#: gcov.c:703
+#, c-format
+msgid "%s:cannot open graph file\n"
+msgstr "%s:не могу да отворим датотеку графа\n"
+
+#: gcov.c:709
+#, c-format
+msgid "%s:not a gcov graph file\n"
+msgstr "%s:није датотека графа гкова\n"
+
+#: gcov.c:722
+#, c-format
+msgid "%s:version '%.4s', prefer '%.4s'\n"
+msgstr "%s:верзија ‘%.4s’, боље је ‘%.4s’\n"
+
+#: gcov.c:774
+#, c-format
+msgid "%s:already seen blocks for '%s'\n"
+msgstr "%s:већ виђени блокови за ‘%s’\n"
+
+#: gcov.c:892 gcov.c:1048
+#, c-format
+msgid "%s:corrupted\n"
+msgstr "%s:иÑкварено\n"
+
+#: gcov.c:966
+#, c-format
+msgid "%s:cannot open data file\n"
+msgstr "%s:не могу да отворим датотеку података\n"
+
+#: gcov.c:971
+#, c-format
+msgid "%s:not a gcov data file\n"
+msgstr "%s: није датотека података гкова\n"
+
+#: gcov.c:984
+#, c-format
+msgid "%s:version '%.4s', prefer version '%.4s'\n"
+msgstr "%s:верзија ‘%.4s’, боља је ‘%.4s’\n"
+
+#: gcov.c:990
+#, c-format
+msgid "%s:stamp mismatch with graph file\n"
+msgstr "%s:неÑлагање печата Ñа датотеком графа\n"
+
+#: gcov.c:1016
+#, c-format
+msgid "%s:unknown function '%u'\n"
+msgstr "%s:непозната функција ‘%u’\n"
+
+#: gcov.c:1029
+#, c-format
+msgid "%s:profile mismatch for '%s'\n"
+msgstr "%s:неÑлагање профила за ‘%s’\n"
+
+#: gcov.c:1048
+#, c-format
+msgid "%s:overflowed\n"
+msgstr "%s:преливено\n"
+
+#: gcov.c:1072
+#, c-format
+msgid "%s:'%s' lacks entry and/or exit blocks\n"
+msgstr "%s:‘%s’ нема улазине и/или излазне блокове\n"
+
+#: gcov.c:1077
+#, c-format
+msgid "%s:'%s' has arcs to entry block\n"
+msgstr "%s:‘%s’ има лукове до улазног блока\n"
+
+#: gcov.c:1085
+#, c-format
+msgid "%s:'%s' has arcs from exit block\n"
+msgstr "%s:‘%s’ има лукове из излазног блока\n"
+
+#: gcov.c:1293
+#, c-format
+msgid "%s:graph is unsolvable for '%s'\n"
+msgstr "%s:граф је нерешив за ‘%s’\n"
+
+#: gcov.c:1373
+#, c-format
+msgid "%s '%s'\n"
+msgstr "%s ‘%s’\n"
+
+#: gcov.c:1376
+#, c-format
+msgid "Lines executed:%s of %d\n"
+msgstr "Извршено линија:%s од %d\n"
+
+#: gcov.c:1380
+#, c-format
+msgid "No executable lines\n"
+msgstr "Ðема извршивих линија\n"
+
+#: gcov.c:1386
+#, c-format
+msgid "Branches executed:%s of %d\n"
+msgstr "Извршених гранања:%s од %d\n"
+
+#: gcov.c:1390
+#, c-format
+msgid "Taken at least once:%s of %d\n"
+msgstr "Извршених бар једном:%s од %d\n"
+
+#: gcov.c:1396
+#, c-format
+msgid "No branches\n"
+msgstr "Ðема гранања\n"
+
+#: gcov.c:1398
+#, c-format
+msgid "Calls executed:%s of %d\n"
+msgstr "Извршених позива:%s од %d\n"
+
+#: gcov.c:1402
+#, c-format
+msgid "No calls\n"
+msgstr "Ðема позива\n"
+
+#: gcov.c:1543
+#, c-format
+msgid "%s:no lines for '%s'\n"
+msgstr "%s:нема линија за ‘%s’\n"
+
+#: gcov.c:1738
+#, c-format
+msgid "call %2d returned %s\n"
+msgstr "позив %2d Ñе вратио %s\n"
+
+#: gcov.c:1743
+#, c-format
+msgid "call %2d never executed\n"
+msgstr "позив %2d никада није извршен\n"
+
+#: gcov.c:1748
+#, c-format
+msgid "branch %2d taken %s%s\n"
+msgstr "грана %2d извршена %s%s\n"
+
+#: gcov.c:1752
+#, c-format
+msgid "branch %2d never executed\n"
+msgstr "грана %2d никада није извршена\n"
+
+#: gcov.c:1757
+#, c-format
+msgid "unconditional %2d taken %s\n"
+msgstr "безуÑловни %2d извршен %s\n"
+
+#: gcov.c:1760
+#, c-format
+msgid "unconditional %2d never executed\n"
+msgstr "безуÑловни %2d никад није извршен\n"
+
+#: gcov.c:1792
+#, c-format
+msgid "%s:cannot open source file\n"
+msgstr "%s:не могу да отворим изворну датотеку\n"
+
+#: gcov.c:1802
+#, c-format
+msgid "%s:source file is newer than graph file '%s'\n"
+msgstr "%s:изворна датотека је новија од датотеке графа ‘%s’\n"
+
+#. Return if there's nothing to do, or it is too expensive.
+#: gcse.c:694
+msgid "GCSE disabled"
+msgstr "ГЦСЕ иÑкључен"
+
+#. Return if there's nothing to do, or it is too expensive.
+#: gcse.c:6526
+msgid "jump bypassing disabled"
+msgstr "заобилажење Ñкокова иÑкључено"
+
+#. Opening quotation mark.
+#: intl.c:58
+msgid "`"
+msgstr "‘"
+
+#. Closing quotation mark.
+#: intl.c:61
+msgid "'"
+msgstr "’"
+
+#: ipa-inline.c:275
+msgid "--param large-function-growth limit reached"
+msgstr "--param large-function-growth ограничење доÑтигнуто"
+
+#: ipa-inline.c:305
+msgid "--param max-inline-insns-single limit reached"
+msgstr "--param max-inline-insns-single ограничење доÑтигнуто"
+
+#: ipa-inline.c:314
+msgid "--param max-inline-insns-auto limit reached"
+msgstr "--param max-inline-insns-auto ограничење доÑтигнуто"
+
+#: ipa-inline.c:340 ipa-inline.c:766
+msgid "recursive inlining"
+msgstr "рекурзивно уткивање"
+
+#: ipa-inline.c:779
+msgid "call is unlikely"
+msgstr "позив није вероватан"
+
+#: ipa-inline.c:850
+msgid "--param inline-unit-growth limit reached"
+msgstr "--param inline-unit-growth ограничење доÑтигнуто"
+
+#: langhooks.c:507
+msgid "At top level:"
+msgstr "Ðа највишем нивоу:"
+
+#: langhooks.c:512
+#, c-format
+msgid "In member function %qs:"
+msgstr "У чланÑкој функцији %qs:"
+
+#: langhooks.c:516
+#, c-format
+msgid "In function %qs:"
+msgstr "У функцији %qs:"
+
+#: loop-iv.c:2709 tree-ssa-loop-niter.c:1109
+msgid "assuming that the loop is not infinite"
+msgstr "под претпоÑтавком да петља није беÑконачна"
+
+#: loop-iv.c:2710 tree-ssa-loop-niter.c:1110
+msgid "cannot optimize possibly infinite loops"
+msgstr "не могу да оптимизујем могуће беÑконачне петље"
+
+#: loop-iv.c:2718 tree-ssa-loop-niter.c:1114
+msgid "assuming that the loop counter does not overflow"
+msgstr "под претпоÑтавком да Ñе бројач петље не прелива"
+
+#: loop-iv.c:2719 tree-ssa-loop-niter.c:1115
+msgid "cannot optimize loop, the loop counter may overflow"
+msgstr "не могу да оптимизујем петљу, бројач петље Ñе може прелити"
+
+#. What to print when a switch has no documentation.
+#: opts.c:90
+msgid "This switch lacks documentation"
+msgstr "Овом прекидачу недоÑтаје документација"
+
+#: opts.c:1227
+#, c-format
+msgid ""
+"\n"
+"Target specific options:\n"
+msgstr ""
+"\n"
+"Опције поÑебне за циљ:\n"
+
+#: opts.c:1248
+msgid "The following options are language-independent:\n"
+msgstr "Следеће опције не завиÑе од језика:\n"
+
+#: opts.c:1255
+#, c-format
+msgid ""
+"The %s front end recognizes the following options:\n"
+"\n"
+msgstr ""
+"Прочеље %s разликује Ñледеће опције:\n"
+"\n"
+
+#: opts.c:1268
+msgid "The --param option recognizes the following as parameters:\n"
+msgstr "Опција --param препознаје Ñледеће параметре:\n"
+
+#: protoize.c:583
+#, c-format
+msgid "%s: error writing file '%s': %s\n"
+msgstr "%s: грешка при пиÑању у датотеку ‘%s’: %s\n"
+
+#: protoize.c:627
+#, c-format
+msgid "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n"
+msgstr "%s: употреба ‘%s [ -VqfnkN ] [ -i <и-ниÑка> ] [ датотека ... ]’\n"
+
+#: protoize.c:630
+#, c-format
+msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B <dirname> ] [ filename ... ]'\n"
+msgstr "%s: употреба ‘%s [ -VqfnkNlgC ] [ -B <имедира> ] [ датотека ... ]’\n"
+
+#: protoize.c:731
+#, c-format
+msgid "%s: warning: no read access for file '%s'\n"
+msgstr "%s: упозорење: нема дозволе за читање датотеке ‘%s’\n"
+
+#: protoize.c:739
+#, c-format
+msgid "%s: warning: no write access for file '%s'\n"
+msgstr "%s: упозорење: нема дозволе за пиÑање датотеке ‘%s’\n"
+
+#: protoize.c:747
+#, c-format
+msgid "%s: warning: no write access for dir containing '%s'\n"
+msgstr "%s: упозорење: нема дозволе за пиÑање у директоријум који Ñадржи ‘%s’\n"
+
+#. Catch cases like /.. where we try to backup to a
+#. point above the absolute root of the logical file
+#. system.
+#: protoize.c:1134
+#, c-format
+msgid "%s: invalid file name: %s\n"
+msgstr "%s: неиÑправно име датотеке: %s\n"
+
+#: protoize.c:1282
+#, c-format
+msgid "%s: %s: can't get status: %s\n"
+msgstr "%s: %s: не могу да добавим Ñтање: %s\n"
+
+#: protoize.c:1303
+#, c-format
+msgid ""
+"\n"
+"%s: fatal error: aux info file corrupted at line %d\n"
+msgstr ""
+"\n"
+"%s: кобна грешка: помоћна инфотека иÑкварена у линији %d\n"
+
+#: protoize.c:1632
+#, c-format
+msgid "%s:%d: declaration of function '%s' takes different forms\n"
+msgstr "%s:%d: декларација функције ‘%s’ има различите облике\n"
+
+#: protoize.c:1887
+#, c-format
+msgid "%s: compiling '%s'\n"
+msgstr "%s: компилујем ‘%s’\n"
+
+#: protoize.c:1910
+#, c-format
+msgid "%s: wait: %s\n"
+msgstr "%s: чекање: %s\n"
+
+#: protoize.c:1915
+#, c-format
+msgid "%s: subprocess got fatal signal %d\n"
+msgstr "%s: Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ добио кобни Ñигнал %d\n"
+
+#: protoize.c:1923
+#, c-format
+msgid "%s: %s exited with status %d\n"
+msgstr "%s: %s изађе Ñа ÑтатуÑом %d\n"
+
+#: protoize.c:1972
+#, c-format
+msgid "%s: warning: missing SYSCALLS file '%s'\n"
+msgstr "%s: упозорење: недоÑтаје СИСКОЛС датотека ‘%s’\n"
+
+#: protoize.c:1981 protoize.c:2010
+#, c-format
+msgid "%s: can't read aux info file '%s': %s\n"
+msgstr "%s: не могу да прочитам помоћну инфотеку ‘%s’: %s\n"
+
+#: protoize.c:2026 protoize.c:2054
+#, c-format
+msgid "%s: can't get status of aux info file '%s': %s\n"
+msgstr "%s: не могу да добавим Ñтање помоћне инфотеке ‘%s’: %s\n"
+
+#: protoize.c:2082
+#, c-format
+msgid "%s: can't open aux info file '%s' for reading: %s\n"
+msgstr "%s: не могу да отворим помоћну инфотеку ‘%s’ за читање: %s\n"
+
+#: protoize.c:2100
+#, c-format
+msgid "%s: error reading aux info file '%s': %s\n"
+msgstr "%s: грешка при читању помоћне инфотеке ‘%s’: %s\n"
+
+#: protoize.c:2113
+#, c-format
+msgid "%s: error closing aux info file '%s': %s\n"
+msgstr "%s: грешка при затварању помоћне инфотеке ‘%s’: %s\n"
+
+#: protoize.c:2129
+#, c-format
+msgid "%s: can't delete aux info file '%s': %s\n"
+msgstr "%s: не могу да обришем помоћну инфотеку ‘%s’: %s\n"
+
+#: protoize.c:2211 protoize.c:4180
+#, c-format
+msgid "%s: can't delete file '%s': %s\n"
+msgstr "%s: не могу да обришем датотеку ‘%s’: %s\n"
+
+#: protoize.c:2289
+#, c-format
+msgid "%s: warning: can't rename file '%s' to '%s': %s\n"
+msgstr "%s: упозорење: не могу да преименујем датотеку ‘%s’ у ‘%s’: %s\n"
+
+#: protoize.c:2411
+#, c-format
+msgid "%s: conflicting extern definitions of '%s'\n"
+msgstr "%s: Ñукобљене Ñпољашње дефиниције за ‘%s’\n"
+
+#: protoize.c:2415
+#, c-format
+msgid "%s: declarations of '%s' will not be converted\n"
+msgstr "%s: декларације од ‘%s’ неће бити претворене\n"
+
+#: protoize.c:2417
+#, c-format
+msgid "%s: conflict list for '%s' follows:\n"
+msgstr "%s: лиÑта Ñукоба за ‘%s’ Ñледи:\n"
+
+#: protoize.c:2450
+#, c-format
+msgid "%s: warning: using formals list from %s(%d) for function '%s'\n"
+msgstr "%s: упозорење: кориÑтим формалну лиÑту из %s(%d) за функцију ‘%s’\n"
+
+#: protoize.c:2490
+#, c-format
+msgid "%s: %d: '%s' used but missing from SYSCALLS\n"
+msgstr "%s: %d: ‘%s’ Ñе кориÑти али недоÑтаје у СИСКОЛСу\n"
+
+#: protoize.c:2496
+#, c-format
+msgid "%s: %d: warning: no extern definition for '%s'\n"
+msgstr "%s: %d: упозорење: нема Ñпољашње дефиниције за ‘%s’\n"
+
+#: protoize.c:2526
+#, c-format
+msgid "%s: warning: no static definition for '%s' in file '%s'\n"
+msgstr "%s: упозорење: нема Ñтатичке дефиниције за ‘%s’ у датотеци ‘%s’\n"
+
+#: protoize.c:2532
+#, c-format
+msgid "%s: multiple static defs of '%s' in file '%s'\n"
+msgstr "%s: више Ñтатичких дефиниција за ‘%s’ у датотеци ‘%s’\n"
+
+#: protoize.c:2702 protoize.c:2705
+#, c-format
+msgid "%s: %d: warning: source too confusing\n"
+msgstr "%s: %d: упозорење: извор је превише збуњујући\n"
+
+#: protoize.c:2900
+#, c-format
+msgid "%s: %d: warning: varargs function declaration not converted\n"
+msgstr "%s: %d: упозорење: декларација варарг функције није претворена\n"
+
+#: protoize.c:2915
+#, c-format
+msgid "%s: declaration of function '%s' not converted\n"
+msgstr "%s: декларација функције ‘%s’ није претворена\n"
+
+#: protoize.c:3038
+#, c-format
+msgid "%s: warning: too many parameter lists in declaration of '%s'\n"
+msgstr "%s: упозорење: превише параметарÑких лиÑта у декларацији ‘%s’\n"
+
+#: protoize.c:3059
+#, c-format
+msgid ""
+"\n"
+"%s: warning: too few parameter lists in declaration of '%s'\n"
+msgstr ""
+"\n"
+"%s: упозорење: премало параметарÑких лиÑта у декларацији ‘%s’\n"
+
+#: protoize.c:3155
+#, c-format
+msgid "%s: %d: warning: found '%s' but expected '%s'\n"
+msgstr "%s: %d: упозорење: нађох ‘%s’ а очекивах ‘%s’\n"
+
+#: protoize.c:3330
+#, c-format
+msgid "%s: local declaration for function '%s' not inserted\n"
+msgstr "%s: локална декларација за функцију ‘%s’ није уметнута\n"
+
+#: protoize.c:3357
+#, c-format
+msgid ""
+"\n"
+"%s: %d: warning: can't add declaration of '%s' into macro call\n"
+msgstr ""
+"\n"
+"%s: %d: упозорење: не могу да додам декларацију ‘%s’ у позив макроа\n"
+
+#: protoize.c:3429
+#, c-format
+msgid "%s: global declarations for file '%s' not inserted\n"
+msgstr "%s: глобалне декларације за датотеку ‘%s’ ниÑу уметнуте\n"
+
+#: protoize.c:3518 protoize.c:3548
+#, c-format
+msgid "%s: definition of function '%s' not converted\n"
+msgstr "%s: дефиниција функције ‘%s’ није претворена\n"
+
+#: protoize.c:3537
+#, c-format
+msgid "%s: %d: warning: definition of %s not converted\n"
+msgstr "%s: %d: упозорење: дефиниција за %s није претворена\n"
+
+#: protoize.c:3863
+#, c-format
+msgid "%s: found definition of '%s' at %s(%d)\n"
+msgstr "%s: нађох дефиницију за ‘%s’ код %s(%d)\n"
+
+#. If we make it here, then we did not know about this
+#. function definition.
+#: protoize.c:3879
+#, c-format
+msgid "%s: %d: warning: '%s' excluded by preprocessing\n"
+msgstr "%s: %d: упозорење: ‘%s’ иÑкључено предобрадом\n"
+
+#: protoize.c:3882
+#, c-format
+msgid "%s: function definition not converted\n"
+msgstr "%s: дефиниција функције није претворена\n"
+
+#: protoize.c:3940
+#, c-format
+msgid "%s: '%s' not converted\n"
+msgstr "%s: ‘%s’ није претворено\n"
+
+#: protoize.c:3948
+#, c-format
+msgid "%s: would convert file '%s'\n"
+msgstr "%s: претворио би датотеку ‘%s’\n"
+
+#: protoize.c:3951
+#, c-format
+msgid "%s: converting file '%s'\n"
+msgstr "%s: претварам датотеку ‘%s’\n"
+
+#: protoize.c:3961
+#, c-format
+msgid "%s: can't get status for file '%s': %s\n"
+msgstr "%s: не могу да добавим Ñтање датотеке ‘%s’: %s\n"
+
+#: protoize.c:4003
+#, c-format
+msgid "%s: can't open file '%s' for reading: %s\n"
+msgstr "%s: не могу да отворим датотеку ‘%s’ за читање: %s\n"
+
+#: protoize.c:4018
+#, c-format
+msgid ""
+"\n"
+"%s: error reading input file '%s': %s\n"
+msgstr ""
+"\n"
+"%s: грешка при читању улазне датотеке ‘%s’: %s\n"
+
+#: protoize.c:4052
+#, c-format
+msgid "%s: can't create/open clean file '%s': %s\n"
+msgstr "%s: не могу да направим/отворим чиÑту датотеку ‘%s’: %s\n"
+
+#: protoize.c:4157
+#, c-format
+msgid "%s: warning: file '%s' already saved in '%s'\n"
+msgstr "%s: упозорење: датотека ‘%s’ је већ Ñачувана у ‘%s’\n"
+
+#: protoize.c:4165
+#, c-format
+msgid "%s: can't link file '%s' to '%s': %s\n"
+msgstr "%s: не могу да повежем датотеку ‘%s’ Ñа ‘%s’: %s\n"
+
+#: protoize.c:4195
+#, c-format
+msgid "%s: can't create/open output file '%s': %s\n"
+msgstr "%s: не могу да направим/отворим улазну датотеку ‘%s’: %s\n"
+
+#: protoize.c:4228
+#, c-format
+msgid "%s: can't change mode of file '%s': %s\n"
+msgstr "%s: не могу да променим режим датотеке ‘%s’: %s\n"
+
+#: protoize.c:4404
+#, c-format
+msgid "%s: cannot get working directory: %s\n"
+msgstr "%s: не могу да добавим радни директоријум: %s\n"
+
+#: protoize.c:4502
+#, c-format
+msgid "%s: input file names must have .c suffixes: %s\n"
+msgstr "%s: улазне датотеке морају имати наÑтавке .c: %s\n"
+
+#: reload.c:3738
+msgid "unable to generate reloads for:"
+msgstr "не могу да Ñтворим поновљена учитавања за:"
+
+#: reload1.c:1901
+msgid "this is the insn:"
+msgstr "ово је ија:"
+
+#. It's the compiler's fault.
+#: reload1.c:5103
+msgid "could not find a spill register"
+msgstr "ниÑам могао да нађем региÑтар проÑипања"
+
+#. It's the compiler's fault.
+#: reload1.c:6737
+msgid "VOIDmode on an output"
+msgstr "VOIDmode на излазу"
+
+#: reload1.c:7710
+msgid "Failure trying to reload:"
+msgstr "ÐеуÑпех при покушају поновљеног учитавања:"
+
+#: rtl-error.c:128
+msgid "unrecognizable insn:"
+msgstr "непрепознатљива ија:"
+
+#: rtl-error.c:130
+msgid "insn does not satisfy its constraints:"
+msgstr "ија не задовољава Ñвоја ограничења:"
+
+#: timevar.c:412
+msgid ""
+"\n"
+"Execution times (seconds)\n"
+msgstr ""
+"\n"
+"Времена извршавања (Ñекунде)\n"
+
+#. Print total time.
+#: timevar.c:470
+msgid " TOTAL :"
+msgstr " УКУПÐО :"
+
+#: timevar.c:499
+#, c-format
+msgid "time in %s: %ld.%06ld (%ld%%)\n"
+msgstr "време у %s: %ld.%06ld (%ld%%)\n"
+
+#: tlink.c:384
+#, c-format
+msgid "collect: reading %s\n"
+msgstr "collect: читам %s\n"
+
+#: tlink.c:478
+#, c-format
+msgid "removing .rpo file"
+msgstr "уклањам .rpo датотеку"
+
+#: tlink.c:480
+#, c-format
+msgid "renaming .rpo file"
+msgstr "преименујем .rpo датотеку"
+
+#: tlink.c:534
+#, c-format
+msgid "collect: recompiling %s\n"
+msgstr "collect: поново компилујем %s\n"
+
+#: tlink.c:714
+#, c-format
+msgid "collect: tweaking %s in %s\n"
+msgstr "collect: штелујем %s у %s\n"
+
+#: tlink.c:764
+#, c-format
+msgid "collect: relinking\n"
+msgstr "collect: поново повезујем\n"
+
+#: toplev.c:583
+#, c-format
+msgid "unrecoverable error"
+msgstr "неповратна грешка"
+
+#: toplev.c:1115
+#, c-format
+msgid ""
+"%s%s%s version %s (%s)\n"
+"%s\tcompiled by GNU C version %s.\n"
+msgstr ""
+"%s%s%s верзија %s (%s)\n"
+"%s\tкомпиловано Гнуовим Ц-ом верзија %s.\n"
+
+#: toplev.c:1117
+#, c-format
+msgid "%s%s%s version %s (%s) compiled by CC.\n"
+msgstr "%s%s%s верзија %s (%s) компиловано ЦЦом.\n"
+
+#: toplev.c:1121
+#, c-format
+msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+msgstr "%s%sГГЦова хеуриÑтика: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+
+#: toplev.c:1183
+msgid "options passed: "
+msgstr "проÑлеђене опције: "
+
+#: toplev.c:1212
+msgid "options enabled: "
+msgstr "укључене опције: "
+
+#: toplev.c:1331
+#, c-format
+msgid "created and used with differing settings of '%s'"
+msgstr "направљено и употребљено Ñа различитим поÑтавкама за ‘%s’"
+
+#: toplev.c:1333
+msgid "out of memory"
+msgstr "нема меморије"
+
+#: toplev.c:1348
+msgid "created and used with different settings of -fpic"
+msgstr "направљено и употребљено Ñа различитим поÑтавкама за -fpic"
+
+#: toplev.c:1350
+msgid "created and used with different settings of -fpie"
+msgstr "направљено и употребљено Ñа различитим поÑтавкама за -fpie"
+
+#: tree-inline.c:2026
+msgid "originally indirect function call not considered for inlining"
+msgstr "изворно поÑредан позив функције Ñе не разматра за уткивање"
+
+#.
+#. Local variables:
+#. mode:c
+#. End:
+#.
+#: diagnostic.def:1
+msgid "fatal error: "
+msgstr "кобна грешка: "
+
+#: diagnostic.def:2
+msgid "internal compiler error: "
+msgstr "унутрашња грешка компилатора: "
+
+#: diagnostic.def:3
+msgid "error: "
+msgstr "грешка: "
+
+#: diagnostic.def:4
+msgid "sorry, unimplemented: "
+msgstr "извините, није имплементирано: "
+
+#: diagnostic.def:5
+msgid "warning: "
+msgstr "упозорење: "
+
+#: diagnostic.def:6
+msgid "anachronism: "
+msgstr "анахронизам: "
+
+#: diagnostic.def:7
+msgid "note: "
+msgstr "напомена: "
+
+#: diagnostic.def:8
+msgid "debug: "
+msgstr "иÑправљање: "
+
+#: params.def:48
+msgid "The maximum number of fields in a structure variable without direct structure accesses that GCC will attempt to track separately"
+msgstr "Ðајвећи број поља у Ñтруктурној променљивој без непоÑредног приÑтупа Ñтруктури које ће ГЦЦ покушати да прати одвојено"
+
+#: params.def:57
+msgid "The maximum structure size (in bytes) for which GCC will use by-element copies"
+msgstr "Ðајвећа величина Ñтрукутре (у бајтовима) за које ће ГЦЦ кориÑтити копије по елементу"
+
+#: params.def:66
+msgid "The maximum number of structure fields for which GCC will use by-element copies"
+msgstr "Ðајвећи број поља Ñтруктуре за које ће ГЦЦ кориÑтити копије по елементу"
+
+#: params.def:78
+msgid "The threshold ratio between instantiated fields and the total structure size"
+msgstr "Праг одноÑа између изведених поља и укупне величине Ñтруктуре"
+
+#: params.def:95
+msgid "The maximum number of instructions in a single function eligible for inlining"
+msgstr "Ðајвећи број инÑтрукција у једној функцији подеÑној за уткивање"
+
+#: params.def:107
+msgid "The maximum number of instructions when automatically inlining"
+msgstr "Ðајвећи број инÑтрукција при аутоматÑком уткивању"
+
+#: params.def:112
+msgid "The maximum number of instructions inline function can grow to via recursive inlining"
+msgstr "Ðајвећи број инÑтрукција до којег уткана функција може нараÑти путем рекурзивног уткивања"
+
+#: params.def:117
+msgid "The maximum number of instructions non-inline function can grow to via recursive inlining"
+msgstr "Ðајвећи број инÑтрукција до којег неуткана функција може нараÑти путем рекурзивног уткивања"
+
+#: params.def:122
+msgid "The maximum depth of recursive inlining for inline functions"
+msgstr "Ðајвећа дубина рекурзивног уткивања за уткане функције"
+
+#: params.def:127
+msgid "The maximum depth of recursive inlining for non-inline functions"
+msgstr "Ðајвећа дубина рекурзивног уткивања за неуткане функције"
+
+#: params.def:132
+msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+msgstr "Уткивај рекурзивно Ñамо када вероватноћа извршавања позива премашује параметар"
+
+#: params.def:139
+msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
+msgstr "Ðко Ñе кориÑти -fvariable-expansion-in-unroller, највећи број пута који ће поједина променљива бити раширена током одмотавања петље"
+
+#: params.def:150
+msgid "The maximum number of instructions to consider to fill a delay slot"
+msgstr "Ðајвећи број инÑтрукција за разматрање при попуњавању жлеба заÑтоја"
+
+#: params.def:161
+msgid "The maximum number of instructions to consider to find accurate live register information"
+msgstr "Ðајвећи број инÑтрукција за разматрање при тражењу прецизних података о живим региÑтрима"
+
+#: params.def:171
+msgid "The maximum length of scheduling's pending operations list"
+msgstr "Ðајвећа дужина лиÑте наÑтупајућих операција у раÑпоређивању"
+
+#: params.def:176
+msgid "The size of function body to be considered large"
+msgstr "Величина тела функције која Ñе Ñматра великом"
+
+#: params.def:180
+msgid "Maximal growth due to inlining of large function (in percent)"
+msgstr "Ðајвећи раÑÑ‚ уÑлед уткивања велике функције (у процентима)"
+
+#: params.def:184
+msgid "The size of translation unit to be considered large"
+msgstr "Величина преводилачке јединице која Ñе Ñматра великом"
+
+#: params.def:188
+msgid "how much can given compilation unit grow because of the inlining (in percent)"
+msgstr "колико дата јединица компиловања може раÑти уÑлед уткивања (у процентима)"
+
+#: params.def:192
+msgid "expense of call operation relative to ordinary arithmetic operations"
+msgstr "трошак операције позива у одноÑу на обичне аритметичке операције"
+
+#: params.def:199
+msgid "The maximum amount of memory to be allocated by GCSE"
+msgstr "Ðајвећа количина меморије коју ГЦСЕ може да резервише"
+
+#: params.def:204
+msgid "The maximum number of passes to make when doing GCSE"
+msgstr "Ðајвећи број пролаза при извршавању ГЦСЕа"
+
+#: params.def:214
+msgid "The threshold ratio for performing partial redundancy elimination after reload"
+msgstr "Праг одноÑа за делимичну елиминацију редунданÑи поÑле поновљеног учитавања"
+
+#: params.def:221
+msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload"
+msgstr "Праг одноÑа броја извршавања критичних потега који дозвољава делимичну елиминацију редунданÑи поÑле поновљеног учитавања"
+
+#: params.def:232
+msgid "The maximum number of instructions to consider to unroll in a loop"
+msgstr "Ðајвећи број инÑтрукција за разматрање при одмотавању петље"
+
+#: params.def:238
+msgid "The maximum number of instructions to consider to unroll in a loop on average"
+msgstr "Ðајвећи број инÑтрукција за разматрање при одмотавању петље, у проÑеку"
+
+#: params.def:243
+msgid "The maximum number of unrollings of a single loop"
+msgstr "Ðајвећи број одмотавања једне петље"
+
+#: params.def:248
+msgid "The maximum number of insns of a peeled loop"
+msgstr "Ðајвећи број ија Ñљушћене петље"
+
+#: params.def:253
+msgid "The maximum number of peelings of a single loop"
+msgstr "Ðајвећи број љушћења једне петље"
+
+#: params.def:258
+msgid "The maximum number of insns of a completely peeled loop"
+msgstr "Ðајвећи број ија потпуно Ñљушћене петље"
+
+#: params.def:263
+msgid "The maximum number of peelings of a single loop that is peeled completely"
+msgstr "Ðајвећи број љушћења једне петље која Ñе потпуно љушти"
+
+#: params.def:268
+msgid "The maximum number of insns of a peeled loop that rolls only once"
+msgstr "Ðајвећи број ија Ñљушћене петље која Ñе замотава Ñамо једном"
+
+#: params.def:274
+msgid "The maximum number of insns of an unswitched loop"
+msgstr "Ðајвећи број ија непребачене петље"
+
+#: params.def:279
+msgid "The maximum number of unswitchings in a single loop"
+msgstr "Ðајвећи број непребацивања у једној петљи"
+
+#: params.def:286
+msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates"
+msgstr "Граница броја итерација које Ñрачунава алгоритам за анализу броја итерација Ñировом Ñилом"
+
+#: params.def:291
+msgid "Maximum number of loops to perform swing modulo scheduling on (mainly for debugging)"
+msgstr "Ðајвећи број петљи над којима треба извршити окретно модуло-раÑпоређивање (углавном за иÑправљање)"
+
+#: params.def:297
+msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop"
+msgstr "Фактор за штеловање горње границе коју окретни модуло-раÑпоређивач кориÑти за раÑпоређивање петље"
+
+#: params.def:301
+msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA"
+msgstr "Број циклуÑа које окретни модуло-раÑпоређивач разматра при провери Ñукоба ДФÐом"
+
+#: params.def:305
+msgid "A threshold on the average loop count considered by the swing modulo scheduler"
+msgstr "Праг за проÑечан број петљи који окретни модуло-раÑпоређивач разматра"
+
+#: params.def:310
+msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot"
+msgstr "Део највећег броја понављања оÑновног блока у програму које дати оÑновни блок мора да има да би био Ñматран врућим"
+
+#: params.def:314
+msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+msgstr "Део највеће учеÑтаноÑти извршавања оÑновног блока у функцији које дати оÑновни блок мора да има да би био Ñматран врућим"
+
+#: params.def:330
+msgid "The maximum number of loop iterations we predict statically"
+msgstr "Ðајвећи број итерација петље које предвиђамо Ñтатички"
+
+#: params.def:334
+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:338
+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:342
+msgid "Maximal code growth caused by tail duplication (in percent)"
+msgstr "Ðајвећи раÑÑ‚ кôда уÑлед умножавања репа (у процентима)"
+
+#: params.def:346
+msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+msgstr "ЗауÑтави повратни раÑÑ‚ ако је повратна вероватноћа најбољег потега мања од овог прага (у процентима)"
+
+#: params.def:350
+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:354
+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:360
+msgid "The maximum number of incoming edges to consider for crossjumping"
+msgstr "Ðајвећи број долазећих потега за разматрање унакрÑног Ñкакања"
+
+#: params.def:366
+msgid "The minimum number of matching instructions to consider for crossjumping"
+msgstr "Ðајмањи број поклапајућих инÑтрукција за разматрање унакрÑног Ñкакања"
+
+#: params.def:372
+msgid "The maximum expansion factor when copying basic blocks"
+msgstr "Ðајвећи фактор ширења при копирању оÑновних блокова"
+
+#: params.def:378
+msgid "The maximum number of insns to duplicate when unfactoring computed gotos"
+msgstr "Ðајвећи број ија за умножавање при дефакториÑању рачунÑке goto"
+
+#: params.def:384
+msgid "The maximum length of path considered in cse"
+msgstr "Ðајвећа дужина путање које Ñе разматра у ЦСЕу"
+
+#: params.def:388
+msgid "The maximum instructions CSE process before flushing"
+msgstr "Ðајвише инÑтрукција у процеÑу ЦСЕа пре иÑпирања"
+
+#: params.def:395
+msgid "The minimum cost of an expensive expression in the loop invariant motion"
+msgstr "Ðајмања цена Ñкупог израза у кретању инваријанте петље"
+
+#: params.def:404
+msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
+msgstr "Граница броја кандидата иÑпод које Ñе Ñви кандидати разматрају у нп. оптимизацијама"
+
+#: params.def:412
+msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+msgstr "Граница броја употреба нп. у нп. оптимизацији петљи"
+
+#: params.def:420
+msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+msgstr "Ðко је број кандидата у Ñкупу мањи, увек покушавамо да уклонимо неиÑкоришћене нп. током оптимизације"
+
+#: params.def:425
+msgid "Bound on size of expressions used in the scalar evolutions analyzer"
+msgstr "Граница величине израза који Ñе кориÑте у анализатору Ñкаларних еволуција"
+
+#: params.def:430
+msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning"
+msgstr "Граница броја провера током извршавања које умеће векторизаторово верзиониÑање петљи"
+
+#: params.def:437
+msgid "Given N calls and V call-clobbered vars in a function. Use .GLOBAL_VAR if NxV is larger than this limit"
+msgstr "За датих N позива и V позивом продрманих променљивих у функцији, кориÑти .GLOBAL_VAR ако је NxV веће од овог ограничења"
+
+#: params.def:442
+msgid "The maximum memory locations recorded by cselib"
+msgstr "Ðајвећи број меморијÑких локација које Ñнима cselib"
+
+#: params.def:446
+msgid "The maximum memory locations recorded by flow"
+msgstr "Ðајвећи број меморијÑких локација које Ñнима flow"
+
+#: params.def:459
+msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+msgstr "Ðајмање ширење хрпе које окида Ñакупљање Ñмећа, као проценат укупне величине хрпе"
+
+#: params.def:464
+msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+msgstr "Ðајмања величина хрпе пре покретања Ñакупљања Ñмећа, у килобајтима"
+
+#: params.def:472
+msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+msgstr "Ðајвећи број инÑтрукција које треба претражити уназад када Ñе тражи еквивалентно поновљено учитавање"
+
+#: params.def:477
+msgid "The maximum number of virtual operands allowed to represent aliases before triggering alias grouping"
+msgstr "Ðајвећи број виртуелних операнада дозвољен за предÑтављање алијаÑа пре окидања групиÑања алијаÑа"
+
+#: params.def:482
+msgid "The maximum number of blocks in a region to be considered for interblock scheduling"
+msgstr "Ðајвећи број блокова у облаÑти која Ñе разматра за мећублоковÑко раÑпоређивање"
+
+#: params.def:487
+msgid "The maximum number of insns in a region to be considered for interblock scheduling"
+msgstr "Ðајвећи број ија у облаÑти која Ñе разматра за мећублоковÑко раÑпоређивање"
+
+#: params.def:492
+msgid "The minimum probability of reaching a source block for interblock speculative scheduling"
+msgstr "Ðајмања вероватноћа доÑтизања изворног блока за међублоковÑко Ñпекулативно раÑпоређивање"
+
+#: params.def:497
+msgid "The maximum number of RTL nodes that can be recorded as combiner's last value"
+msgstr "Ðајвећи број РТЛ чворова који Ñе може Ñнимити као поÑледња вредноÑÑ‚ комбинатора"
+
+#: params.def:505
+msgid "The upper bound for sharing integer constants"
+msgstr "Горња граница за дељење целобројних конÑтанти"
+
+#: params.def:524
+msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
+msgstr "Ðајмањи број виртуелних мапирања за разматрање пребацивања на пуна виртуална преименовања"
+
+#: params.def:529
+msgid "Ratio between virtual mappings and virtual symbols to do full virtual renames"
+msgstr "ÐžÐ´Ð½Ð¾Ñ Ð¸Ð·Ð¼ÐµÑ’Ñƒ виртуелних мапирања и виртуелних Ñимбола да би Ñе радила пуна виртуелна преименовања"
+
+#: params.def:534
+msgid "The lower bound for a buffer to be considered for stack smashing protection"
+msgstr "Доња граница за бафер да би Ñе размотрила заштита разбијања Ñтека"
+
+#: params.def:552
+msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps"
+msgstr "Ðајвећи број наредби дозвољен у блоку којем је потребно умножавање при уплитању Ñкокова"
+
+#: params.def:561
+msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable"
+msgstr "Ðајвећи број поља у Ñтруктури пре него што анализа показивача Ñматра Ñтруктуру као једну променљиву"
+
+#: config/alpha/alpha.c:5087
+#, c-format
+msgid "invalid %%H value"
+msgstr "неиÑправна %%H вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5108 config/bfin/bfin.c:1191
+#, c-format
+msgid "invalid %%J value"
+msgstr "неиÑправна %%J вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5138 config/ia64/ia64.c:4603
+#, c-format
+msgid "invalid %%r value"
+msgstr "неиÑправна %%r вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5148 config/rs6000/rs6000.c:10433
+#: config/xtensa/xtensa.c:1691
+#, c-format
+msgid "invalid %%R value"
+msgstr "неиÑправна %%R вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5154 config/rs6000/rs6000.c:10352
+#: config/xtensa/xtensa.c:1658
+#, c-format
+msgid "invalid %%N value"
+msgstr "неиÑправна %%N вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5162 config/rs6000/rs6000.c:10380
+#, c-format
+msgid "invalid %%P value"
+msgstr "неиÑправна %%P вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5170
+#, c-format
+msgid "invalid %%h value"
+msgstr "неиÑправна %%h вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5178 config/xtensa/xtensa.c:1684
+#, c-format
+msgid "invalid %%L value"
+msgstr "неиÑправна %%L вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5217 config/rs6000/rs6000.c:10334
+#, c-format
+msgid "invalid %%m value"
+msgstr "неиÑправна %%m вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5225 config/rs6000/rs6000.c:10342
+#, c-format
+msgid "invalid %%M value"
+msgstr "неиÑправна %%M вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5269
+#, c-format
+msgid "invalid %%U value"
+msgstr "неиÑправна %%U вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5281 config/alpha/alpha.c:5295
+#: config/rs6000/rs6000.c:10441
+#, c-format
+msgid "invalid %%s value"
+msgstr "неиÑправна %%s вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5318
+#, c-format
+msgid "invalid %%C value"
+msgstr "неиÑправна %%C вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5355 config/rs6000/rs6000.c:10173
+#: config/rs6000/rs6000.c:10191
+#, c-format
+msgid "invalid %%E value"
+msgstr "неиÑправна %%E вредноÑÑ‚"
+
+#: config/alpha/alpha.c:5380 config/alpha/alpha.c:5428
+#, c-format
+msgid "unknown relocation unspec"
+msgstr "непознато unspec релокације"
+
+#: config/alpha/alpha.c:5389 config/crx/crx.c:1082
+#: config/rs6000/rs6000.c:10755
+#, c-format
+msgid "invalid %%xn code"
+msgstr "неиÑправан %%xn кôд"
+
+#: config/arc/arc.c:1726 config/m32r/m32r.c:1805
+#, c-format
+msgid "invalid operand to %%R code"
+msgstr "неиÑправан операнд за %%R кôд"
+
+#: config/arc/arc.c:1758 config/m32r/m32r.c:1828
+#, c-format
+msgid "invalid operand to %%H/%%L code"
+msgstr "неиÑправан операнд за %%H/%%L кôд"
+
+#: config/arc/arc.c:1780 config/m32r/m32r.c:1899
+#, c-format
+msgid "invalid operand to %%U code"
+msgstr "неиÑправан операнд за %%U кôд"
+
+#: config/arc/arc.c:1791
+#, c-format
+msgid "invalid operand to %%V code"
+msgstr "неиÑправан операнд за %%V кôд"
+
+#. Unknown flag.
+#. Undocumented flag.
+#: config/arc/arc.c:1798 config/m32r/m32r.c:1926 config/sparc/sparc.c:6818
+#, c-format
+msgid "invalid operand output code"
+msgstr "неиÑправан кôд излаза операнада"
+
+#: config/arm/arm.c:10913 config/arm/arm.c:10931
+#, c-format
+msgid "predicated Thumb instruction"
+msgstr "предикатна инÑтрукција Тамба"
+
+#: config/arm/arm.c:10919
+#, c-format
+msgid "predicated instruction in conditional sequence"
+msgstr "предикатна инÑтрукција у уÑловном низу"
+
+#: config/arm/arm.c:11027 config/arm/arm.c:11037 config/arm/arm.c:11047
+#: config/arm/arm.c:11073 config/arm/arm.c:11091 config/arm/arm.c:11126
+#: config/arm/arm.c:11145 config/arm/arm.c:11160 config/arm/arm.c:11186
+#: config/arm/arm.c:11193 config/arm/arm.c:11200
+#, c-format
+msgid "invalid operand for code '%c'"
+msgstr "неиÑправан операнд за кôд ‘%c’"
+
+#: config/arm/arm.c:11086
+#, c-format
+msgid "instruction never exectued"
+msgstr "инÑтрукција Ñе никад не извршава"
+
+#: config/arm/arm.c:11211
+#, c-format
+msgid "missing operand"
+msgstr "недоÑтаје операнд"
+
+#: config/avr/avr.c:1116
+msgid "bad address, not (reg+disp):"
+msgstr "лоша адреÑа, није (reg+disp):"
+
+#: config/avr/avr.c:1123
+msgid "bad address, not post_inc or pre_dec:"
+msgstr "лоша адреÑа, није post_inc или pre_dec:"
+
+#: config/avr/avr.c:1134
+msgid "internal compiler error. Bad address:"
+msgstr "унутрашња грешка компилатора. Лоша адреÑа:"
+
+#: config/avr/avr.c:1147
+msgid "internal compiler error. Unknown mode:"
+msgstr "унутрашња грешка компилатора. Ðепознат режим:"
+
+#: config/avr/avr.c:1770 config/avr/avr.c:2453
+msgid "invalid insn:"
+msgstr "неиÑправна ија:"
+
+#: config/avr/avr.c:1804 config/avr/avr.c:1890 config/avr/avr.c:1939
+#: config/avr/avr.c:1967 config/avr/avr.c:2062 config/avr/avr.c:2231
+#: config/avr/avr.c:2487 config/avr/avr.c:2599
+msgid "incorrect insn:"
+msgstr "нетачна ија:"
+
+#: config/avr/avr.c:1986 config/avr/avr.c:2147 config/avr/avr.c:2302
+#: config/avr/avr.c:2665
+msgid "unknown move insn:"
+msgstr "непозната ија премештања:"
+
+#: config/avr/avr.c:2895
+msgid "bad shift insn:"
+msgstr "лоша ија помака:"
+
+#: config/avr/avr.c:3011 config/avr/avr.c:3459 config/avr/avr.c:3845
+msgid "internal compiler error. Incorrect shift:"
+msgstr "унутрашња грешка компилатора. Ðетачан помак:"
+
+#: config/bfin/bfin.c:1153
+#, c-format
+msgid "invalid %%j value"
+msgstr "неиÑправна %%j вредноÑÑ‚"
+
+#: config/bfin/bfin.c:1270
+#, c-format
+msgid "invalid const_double operand"
+msgstr "неиÑправан const_double операнд"
+
+#: config/c4x/c4x.c:1584
+msgid "using CONST_DOUBLE for address"
+msgstr "кориÑти Ñе CONST_DOUBLE за адреÑу"
+
+#: config/c4x/c4x.c:1722
+msgid "c4x_address_cost: Invalid addressing mode"
+msgstr "c4x_address_cost: ÐеиÑправан адреÑни режим"
+
+#: config/c4x/c4x.c:1857
+#, c-format
+msgid "c4x_print_operand: %%L inconsistency"
+msgstr "c4x_print_operand: %%L неÑаглаÑноÑÑ‚"
+
+#: config/c4x/c4x.c:1863
+#, c-format
+msgid "c4x_print_operand: %%N inconsistency"
+msgstr "c4x_print_operand: %%N неÑаглаÑноÑÑ‚"
+
+#: config/c4x/c4x.c:1904
+#, c-format
+msgid "c4x_print_operand: %%O inconsistency"
+msgstr "c4x_print_operand: %%O неÑаглаÑноÑÑ‚"
+
+#: config/c4x/c4x.c:1999
+msgid "c4x_print_operand: Bad operand case"
+msgstr "c4x_print_operand: Лош облик операнда"
+
+#: config/c4x/c4x.c:2040
+msgid "c4x_print_operand_address: Bad post_modify"
+msgstr "c4x_print_operand_address: Лош post_modify"
+
+#: config/c4x/c4x.c:2062
+msgid "c4x_print_operand_address: Bad pre_modify"
+msgstr "c4x_print_operand_address: Лош pre_modify"
+
+#: config/c4x/c4x.c:2110 config/c4x/c4x.c:2122 config/c4x/c4x.c:2137
+msgid "c4x_print_operand_address: Bad operand case"
+msgstr "c4x_print_operand_address: Лош облик операнда"
+
+#: config/c4x/c4x.c:2388
+msgid "c4x_rptb_insert: Cannot find start label"
+msgstr "c4x_rptb_insert: Ðе могу да нађем почетну етикету"
+
+#: config/c4x/c4x.c:2990
+msgid "invalid indirect memory address"
+msgstr "неиÑправна поÑредна меморијÑка адреÑа"
+
+#: config/c4x/c4x.c:3079
+msgid "invalid indirect (S) memory address"
+msgstr "неиÑправна поÑредна (S) меморијÑка адреÑа"
+
+#: config/c4x/c4x.c:3414
+msgid "c4x_valid_operands: Internal error"
+msgstr "c4x_valid_operands: Унутрашња грешка"
+
+#: config/c4x/c4x.c:3853
+msgid "c4x_operand_subword: invalid mode"
+msgstr "c4x_operand_subword: неиÑправан режим"
+
+#: config/c4x/c4x.c:3856
+msgid "c4x_operand_subword: invalid operand"
+msgstr "c4x_operand_subword: неиÑправан операнд"
+
+#. We could handle these with some difficulty.
+#. e.g., *p-- => *(p-=2); *(p+1).
+#: config/c4x/c4x.c:3882
+msgid "c4x_operand_subword: invalid autoincrement"
+msgstr "c4x_operand_subword: неиÑправно Ñамоувећање"
+
+#: config/c4x/c4x.c:3888
+msgid "c4x_operand_subword: invalid address"
+msgstr "c4x_operand_subword: неиÑправна адреÑа"
+
+#: config/c4x/c4x.c:3899
+msgid "c4x_operand_subword: address not offsettable"
+msgstr "c4x_operand_subword: адреÑи Ñе не може дати помак"
+
+#: config/c4x/c4x.c:4101
+msgid "c4x_rptb_rpts_p: Repeat block top label moved"
+msgstr "c4x_rptb_rpts_p: Померена горња етикета блока понављања"
+
+#. Use `%s' to print the string in case there are any escape
+#. characters in the message.
+#: config/cris/cris.c:492 fortran/dump-parse-tree.c:84
+#: fortran/dump-parse-tree.c:416 fortran/dump-parse-tree.c:747 c-typeck.c:4350
+#: c-typeck.c:4365 c-typeck.c:4380 final.c:2833 final.c:2835 gcc.c:4664
+#: loop-iv.c:2711 loop-iv.c:2720 rtl-error.c:113 toplev.c:587
+#: tree-ssa-loop-niter.c:1120 cp/parser.c:1972 cp/typeck.c:4291
+#: java/expr.c:406
+#, gcc-internal-format
+msgid "%s"
+msgstr "%s"
+
+#: config/cris/cris.c:544
+msgid "unexpected index-type in cris_print_index"
+msgstr "неочекиван тип индекÑа у cris_print_index"
+
+#: config/cris/cris.c:558
+msgid "unexpected base-type in cris_print_base"
+msgstr "неочекиван оÑновни тип у cris_print_base"
+
+#: config/cris/cris.c:674
+msgid "invalid operand for 'b' modifier"
+msgstr "неиÑправан операнд за модификатор ‘b’"
+
+#: config/cris/cris.c:691
+msgid "invalid operand for 'o' modifier"
+msgstr "неиÑправан операнд за модификатор ‘o’"
+
+#: config/cris/cris.c:710
+msgid "invalid operand for 'O' modifier"
+msgstr "неиÑправан операнд за модификатор ‘O’"
+
+#: config/cris/cris.c:743
+msgid "invalid operand for 'p' modifier"
+msgstr "неиÑправан операнд за модификатор ‘p’"
+
+#: config/cris/cris.c:782
+msgid "invalid operand for 'z' modifier"
+msgstr "неиÑправан операнд за модификатор ‘z’"
+
+#: config/cris/cris.c:836 config/cris/cris.c:866
+msgid "invalid operand for 'H' modifier"
+msgstr "неиÑправан операнд за модификатор ‘H;’"
+
+#: config/cris/cris.c:842
+msgid "bad register"
+msgstr "лош региÑтар"
+
+#: config/cris/cris.c:887
+msgid "invalid operand for 'e' modifier"
+msgstr "неиÑправан операнд за модификатор ‘e’"
+
+#: config/cris/cris.c:904
+msgid "invalid operand for 'm' modifier"
+msgstr "неиÑправан операнд за модификатор ‘m’"
+
+#: config/cris/cris.c:929
+msgid "invalid operand for 'A' modifier"
+msgstr "неиÑправан операнд за модификатор ‘A’"
+
+#: config/cris/cris.c:952
+msgid "invalid operand for 'D' modifier"
+msgstr "неиÑправан операнд за модификатор ‘D’"
+
+#: config/cris/cris.c:966
+msgid "invalid operand for 'T' modifier"
+msgstr "неиÑправан операнд за модификатор ‘T’"
+
+#: config/cris/cris.c:975
+msgid "invalid operand modifier letter"
+msgstr "неиÑправно Ñлово модификатора операнда"
+
+#: config/cris/cris.c:1032
+msgid "unexpected multiplicative operand"
+msgstr "неочекиван множећи операнд"
+
+#: config/cris/cris.c:1052
+msgid "unexpected operand"
+msgstr "неочекиван операнд"
+
+#: config/cris/cris.c:1085 config/cris/cris.c:1095
+msgid "unrecognized address"
+msgstr "непрепозната адреÑа"
+
+#: config/cris/cris.c:2021
+msgid "unrecognized supposed constant"
+msgstr "непрепозната претпоÑтављена конÑтанта"
+
+#: config/cris/cris.c:2396 config/cris/cris.c:2460
+msgid "unexpected side-effects in address"
+msgstr "неочекивани Ñпоредни ефекти у адреÑи"
+
+#. Can't possibly get a GOT-needing-fixup for a function-call,
+#. right?
+#: config/cris/cris.c:3254
+msgid "Unidentifiable call op"
+msgstr "Ðеидентификован оп. позива"
+
+#: config/cris/cris.c:3305
+#, c-format
+msgid "PIC register isn't set up"
+msgstr "ПИЦ региÑтар није поÑтављен"
+
+#: config/fr30/fr30.c:464
+#, c-format
+msgid "fr30_print_operand_address: unhandled address"
+msgstr "fr30_print_operand_address: необрађена адреÑа"
+
+#: config/fr30/fr30.c:488
+#, c-format
+msgid "fr30_print_operand: unrecognized %%p code"
+msgstr "fr30_print_operand: непрепознат %%p кôд"
+
+#: config/fr30/fr30.c:508
+#, c-format
+msgid "fr30_print_operand: unrecognized %%b code"
+msgstr "fr30_print_operand: непрепознат %%b кôд"
+
+#: config/fr30/fr30.c:529
+#, c-format
+msgid "fr30_print_operand: unrecognized %%B code"
+msgstr "fr30_print_operand: непрепознат %%B кôд"
+
+#: config/fr30/fr30.c:537
+#, c-format
+msgid "fr30_print_operand: invalid operand to %%A code"
+msgstr "fr30_print_operand: неиÑправан операнд за %%A кôд"
+
+#: config/fr30/fr30.c:554
+#, c-format
+msgid "fr30_print_operand: invalid %%x code"
+msgstr "fr30_print_operand: неиÑправан %%x кôд"
+
+#: config/fr30/fr30.c:561
+#, c-format
+msgid "fr30_print_operand: invalid %%F code"
+msgstr "fr30_print_operand: неиÑправан %%F кôд"
+
+#: config/fr30/fr30.c:578
+#, c-format
+msgid "fr30_print_operand: unknown code"
+msgstr "fr30_print_operand: непознат кôд"
+
+#: config/fr30/fr30.c:606 config/fr30/fr30.c:615 config/fr30/fr30.c:626
+#: config/fr30/fr30.c:639
+#, c-format
+msgid "fr30_print_operand: unhandled MEM"
+msgstr "fr30_print_operand: необрађен MEM"
+
+#: config/frv/frv.c:2541
+msgid "bad insn to frv_print_operand_address:"
+msgstr "лоша ија за frv_print_operand_address:"
+
+#: config/frv/frv.c:2552
+msgid "bad register to frv_print_operand_memory_reference_reg:"
+msgstr "лош региÑтар за frv_print_operand_memory_reference_reg:"
+
+#: config/frv/frv.c:2591 config/frv/frv.c:2601 config/frv/frv.c:2610
+#: config/frv/frv.c:2631 config/frv/frv.c:2636
+msgid "bad insn to frv_print_operand_memory_reference:"
+msgstr "лоша ија за frv_print_operand_memory_reference:"
+
+#: config/frv/frv.c:2722
+#, c-format
+msgid "bad condition code"
+msgstr "лош уÑловни кôд"
+
+#: config/frv/frv.c:2797
+msgid "bad insn in frv_print_operand, bad const_double"
+msgstr "лоша ија у frv_print_operand, лош const_double"
+
+#: config/frv/frv.c:2858
+msgid "bad insn to frv_print_operand, 'e' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘e’:"
+
+#: config/frv/frv.c:2866
+msgid "bad insn to frv_print_operand, 'F' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘F’:"
+
+#: config/frv/frv.c:2882
+msgid "bad insn to frv_print_operand, 'f' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘f’:"
+
+#: config/frv/frv.c:2896
+msgid "bad insn to frv_print_operand, 'g' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘g’:"
+
+#: config/frv/frv.c:2944
+msgid "bad insn to frv_print_operand, 'L' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘L’:"
+
+#: config/frv/frv.c:2957
+msgid "bad insn to frv_print_operand, 'M/N' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘M/N’:"
+
+#: config/frv/frv.c:2978
+msgid "bad insn to frv_print_operand, 'O' modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘O’:"
+
+#: config/frv/frv.c:2996
+msgid "bad insn to frv_print_operand, P modifier:"
+msgstr "лоша ија за frv_print_operand, модификатор ‘P’:"
+
+#: config/frv/frv.c:3016
+msgid "bad insn in frv_print_operand, z case"
+msgstr "лоша ија у frv_print_operand, Ñлучај z"
+
+#: config/frv/frv.c:3047
+msgid "bad insn in frv_print_operand, 0 case"
+msgstr "лоша ија у frv_print_operand, Ñлучај 0"
+
+#: config/frv/frv.c:3052
+msgid "frv_print_operand: unknown code"
+msgstr "frv_print_operand: непознат кôд"
+
+#: config/frv/frv.c:4421
+msgid "bad output_move_single operand"
+msgstr "лош операнд output_move_single"
+
+#: config/frv/frv.c:4548
+msgid "bad output_move_double operand"
+msgstr "лош операнд output_move_double"
+
+#: config/frv/frv.c:4690
+msgid "bad output_condmove_single operand"
+msgstr "лош операнд output_condmove_single"
+
+#. This macro is a C statement to print on `stderr' a string describing the
+#. particular machine description choice. Every machine description should
+#. define `TARGET_VERSION'. For example:
+#.
+#. #ifdef MOTOROLA
+#. #define TARGET_VERSION fprintf (stderr, " (68k, Motorola syntax)");
+#. #else
+#. #define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)");
+#. #endif
+#: config/frv/frv.h:329
+#, c-format
+msgid " (frv)"
+msgstr " (frv)"
+
+#: config/i386/i386.c:6712
+#, c-format
+msgid "invalid UNSPEC as operand"
+msgstr "неиÑправан УÐСПЕЦ као операнд"
+
+#: config/i386/i386.c:7294
+#, c-format
+msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
+msgstr "операнд није ни конÑтанта ни уÑловни кôд, неиÑправан кôд аргумента ‘c’"
+
+#: config/i386/i386.c:7347
+#, c-format
+msgid "invalid operand code '%c'"
+msgstr "неиÑправан кôд операнда ‘%c;’"
+
+#: config/i386/i386.c:7390
+#, c-format
+msgid "invalid constraints for operand"
+msgstr "неиÑправна ограничења за операнд"
+
+#: config/i386/i386.c:12984
+msgid "unknown insn mode"
+msgstr "непознат режим ије"
+
+#. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later.
+#. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong.
+#: config/i386/xm-djgpp.h:62
+#, c-format
+msgid "environment variable DJGPP not defined"
+msgstr "променљива окружења DJGPP није дефиниÑана"
+
+#: config/i386/xm-djgpp.h:64
+#, c-format
+msgid "environment variable DJGPP points to missing file '%s'"
+msgstr "променљива окружења DJGPP указује на недоÑтајућу датотеку ‘%s’"
+
+#: config/i386/xm-djgpp.h:67
+#, c-format
+msgid "environment variable DJGPP points to corrupt file '%s'"
+msgstr "променљива окружења DJGPP указује на иÑкварену датотеку ‘%s’"
+
+#: config/ia64/ia64.c:4653
+#, c-format
+msgid "ia64_print_operand: unknown code"
+msgstr "ia64_print_operand: непознат кôд"
+
+#: config/ia64/ia64.c:9013
+msgid "invalid conversion from %<__fpreg%>"
+msgstr "неиÑправно претварање из %<__fpreg%>"
+
+#: config/ia64/ia64.c:9016
+msgid "invalid conversion to %<__fpreg%>"
+msgstr "неиÑправно претварање у %<__fpreg%>"
+
+#: config/ia64/ia64.c:9029 config/ia64/ia64.c:9040
+msgid "invalid operation on %<__fpreg%>"
+msgstr "неиÑправна операција на %<__fpreg%>"
+
+#: config/iq2000/iq2000.c:3125
+#, c-format
+msgid "invalid %%P operand"
+msgstr "неиÑправан %%P операнд"
+
+#: config/iq2000/iq2000.c:3133 config/rs6000/rs6000.c:10370
+#, c-format
+msgid "invalid %%p value"
+msgstr "неиÑправна %%p вредноÑÑ‚"
+
+#: config/iq2000/iq2000.c:3189 config/mips/mips.c:5535
+#, c-format
+msgid "invalid use of %%d, %%x, or %%X"
+msgstr "неиÑправна употреба %%d, %%x, или %%X"
+
+#: config/m32r/m32r.c:1775
+#, c-format
+msgid "invalid operand to %%s code"
+msgstr "неиÑправан операнд за %%s кôд"
+
+#: config/m32r/m32r.c:1782
+#, c-format
+msgid "invalid operand to %%p code"
+msgstr "неиÑправан операнд за %%p кôд"
+
+#: config/m32r/m32r.c:1837
+msgid "bad insn for 'A'"
+msgstr "лоша ија за ‘A’"
+
+#: config/m32r/m32r.c:1884
+#, c-format
+msgid "invalid operand to %%T/%%B code"
+msgstr "неиÑправан операнд за %%T/%%B кôд"
+
+#: config/m32r/m32r.c:1907
+#, c-format
+msgid "invalid operand to %%N code"
+msgstr "неиÑправан операнд за %%N кôд"
+
+#: config/m32r/m32r.c:1940
+msgid "pre-increment address is not a register"
+msgstr "адреÑа предувећања није региÑтар"
+
+#: config/m32r/m32r.c:1947
+msgid "pre-decrement address is not a register"
+msgstr "адреÑа предумањења није региÑтар"
+
+#: config/m32r/m32r.c:1954
+msgid "post-increment address is not a register"
+msgstr "адреÑа поÑтувећања није региÑтар"
+
+#: config/m32r/m32r.c:2030 config/m32r/m32r.c:2044
+#: config/rs6000/rs6000.c:17606
+msgid "bad address"
+msgstr "лоша адреÑа"
+
+#: config/m32r/m32r.c:2049
+msgid "lo_sum not of register"
+msgstr "lo_sum није од региÑтра"
+
+#. !!!! SCz wrong here.
+#: config/m68hc11/m68hc11.c:3189 config/m68hc11/m68hc11.c:3567
+msgid "move insn not handled"
+msgstr "ија премештања није обрађена"
+
+#: config/m68hc11/m68hc11.c:3413 config/m68hc11/m68hc11.c:3497
+#: config/m68hc11/m68hc11.c:3770
+msgid "invalid register in the move instruction"
+msgstr "неиÑправан региÑтар у инÑтрукцији премештања"
+
+#: config/m68hc11/m68hc11.c:3447
+msgid "invalid operand in the instruction"
+msgstr "неиÑправан операнд у инÑтрукцији"
+
+#: config/m68hc11/m68hc11.c:3744
+msgid "invalid register in the instruction"
+msgstr "неиÑправан региÑтар у инÑтрукцији"
+
+#: config/m68hc11/m68hc11.c:3777
+msgid "operand 1 must be a hard register"
+msgstr "операнд 1 мора бити чврÑти региÑтар"
+
+#: config/m68hc11/m68hc11.c:3791
+msgid "invalid rotate insn"
+msgstr "неиÑправна ија ротације"
+
+#: config/m68hc11/m68hc11.c:4215
+msgid "registers IX, IY and Z used in the same INSN"
+msgstr "региÑтри IX, IY и Z употребљени у иÑтој ији"
+
+#: config/m68hc11/m68hc11.c:4552 config/m68hc11/m68hc11.c:4852
+msgid "cannot do z-register replacement"
+msgstr "не могу да обавим замену региÑтра Z"
+
+#: config/m68hc11/m68hc11.c:4915
+msgid "invalid Z register replacement for insn"
+msgstr "неиÑправна замена региÑтра Z за ију"
+
+#: config/mips/mips.c:5203
+msgid "mips_debugger_offset called with non stack/frame/arg pointer"
+msgstr "mips_debugger_offset позван без показивача на Ñтек/оквир/арг"
+
+#: config/mips/mips.c:5413
+#, c-format
+msgid "PRINT_OPERAND, invalid insn for %%C"
+msgstr "PRINT_OPERAND, неиÑправна ија за %%C"
+
+#: config/mips/mips.c:5430
+#, c-format
+msgid "PRINT_OPERAND, invalid insn for %%N"
+msgstr "PRINT_OPERAND, неиÑправна ија за %%N"
+
+#: config/mips/mips.c:5439
+#, c-format
+msgid "PRINT_OPERAND, invalid insn for %%F"
+msgstr "PRINT_OPERAND, неиÑправна ија за %%F"
+
+#: config/mips/mips.c:5448
+#, c-format
+msgid "PRINT_OPERAND, invalid insn for %%W"
+msgstr "PRINT_OPERAND, неиÑправна ија за %%W"
+
+#: config/mips/mips.c:5469
+#, c-format
+msgid "invalid %%Y value"
+msgstr "неиÑправна %%Y вредноÑÑ‚"
+
+#: config/mips/mips.c:5486 config/mips/mips.c:5494
+#, c-format
+msgid "PRINT_OPERAND, invalid insn for %%q"
+msgstr "PRINT_OPERAND, неиÑправна ија за %%q"
+
+#: config/mips/mips.c:5563
+msgid "PRINT_OPERAND, invalid operand for relocation"
+msgstr "PRINT_OPERAND, неиÑправан операнд за релокацију"
+
+#: config/mmix/mmix.c:1468 config/mmix/mmix.c:1598
+msgid "MMIX Internal: Expected a CONST_INT, not this"
+msgstr "MMIX унутрашње: Очекиван је CONST_INT, не ово"
+
+#: config/mmix/mmix.c:1547
+msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
+msgstr "MMIX унутрашње: Лоша вредноÑÑ‚ за ‘m’, није CONST_INT"
+
+#: config/mmix/mmix.c:1566
+msgid "MMIX Internal: Expected a register, not this"
+msgstr "MMIX унутрашње: Очекиван је региÑтар, не ово"
+
+#: config/mmix/mmix.c:1576
+msgid "MMIX Internal: Expected a constant, not this"
+msgstr "MMIX унутрашње: Очекивана је конÑтанта, не ово"
+
+#. We need the original here.
+#: config/mmix/mmix.c:1660
+msgid "MMIX Internal: Cannot decode this operand"
+msgstr "MMIX унутрашње: Ðе могу да декодирам овај операнд"
+
+#: config/mmix/mmix.c:1717
+msgid "MMIX Internal: This is not a recognized address"
+msgstr "MMIX унутрашње: Ово није препозната адреÑа"
+
+#: config/mmix/mmix.c:2650
+msgid "MMIX Internal: Trying to output invalidly reversed condition:"
+msgstr "MMIX унутрашње: Покушавам да иÑпишем неиÑправно обрнут уÑлов:"
+
+#: config/mmix/mmix.c:2657
+msgid "MMIX Internal: What's the CC of this?"
+msgstr "MMIX унутрашње: Шта је CC за ово?"
+
+#: config/mmix/mmix.c:2661
+msgid "MMIX Internal: What is the CC of this?"
+msgstr "MMIX унутрашње: Шта је CC за ово?"
+
+#: config/mmix/mmix.c:2725
+msgid "MMIX Internal: This is not a constant:"
+msgstr "MMIX унутрашње: Ово није конÑтанта:"
+
+#: config/mt/mt.c:298
+msgid "mt_final_prescan_insn, invalid insn #1"
+msgstr "mt_final_prescan_insn, неиÑправна ија #1"
+
+#: config/mt/mt.c:369
+msgid "PRINT_OPERAND_ADDRESS, 2 regs"
+msgstr "PRINT_OPERAND_ADDRESS, 2 региÑтра"
+
+#: config/mt/mt.c:393
+msgid "PRINT_OPERAND_ADDRESS, invalid insn #1"
+msgstr "PRINT_OPERAND_ADDRESS, неиÑправна ија #1"
+
+#: config/rs6000/host-darwin.c:87
+#, c-format
+msgid "Out of stack space.\n"
+msgstr "Ðема меÑта на Ñтеку.\n"
+
+#: config/rs6000/host-darwin.c:108
+#, c-format
+msgid "Try running '%s' in the shell to raise its limit.\n"
+msgstr "Покушајте да покренете ‘%s’ у шкољци да повећате ограничење.\n"
+
+#: config/rs6000/rs6000.c:10200
+#, c-format
+msgid "invalid %%f value"
+msgstr "неиÑправна %%f вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10209
+#, c-format
+msgid "invalid %%F value"
+msgstr "неиÑправна %%F вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10218
+#, c-format
+msgid "invalid %%G value"
+msgstr "неиÑправна %%G вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10253
+#, c-format
+msgid "invalid %%j code"
+msgstr "неиÑправан %%j кôд"
+
+#: config/rs6000/rs6000.c:10263
+#, c-format
+msgid "invalid %%J code"
+msgstr "неиÑправан %%J кôд"
+
+#: config/rs6000/rs6000.c:10273
+#, c-format
+msgid "invalid %%k value"
+msgstr "неиÑправна %%k вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10293 config/xtensa/xtensa.c:1677
+#, c-format
+msgid "invalid %%K value"
+msgstr "неиÑправна %%K вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10360
+#, c-format
+msgid "invalid %%O value"
+msgstr "неиÑправна %%O вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10407
+#, c-format
+msgid "invalid %%q value"
+msgstr "неиÑправна %%q вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10451
+#, c-format
+msgid "invalid %%S value"
+msgstr "неиÑправна %%S вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10491
+#, c-format
+msgid "invalid %%T value"
+msgstr "неиÑправна %%T вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10501
+#, c-format
+msgid "invalid %%u value"
+msgstr "неиÑправна %%u вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:10510 config/xtensa/xtensa.c:1647
+#, c-format
+msgid "invalid %%v value"
+msgstr "неиÑправна %%v вредноÑÑ‚"
+
+#: config/rs6000/rs6000.c:19123
+msgid "AltiVec argument passed to unprototyped function"
+msgstr "алтивек аргумент проÑлеђен непрототипизираној функцији"
+
+#: config/s390/s390.c:4490
+#, c-format
+msgid "cannot decompose address"
+msgstr "не могу да разложим адреÑу"
+
+#: config/s390/s390.c:4700
+msgid "UNKNOWN in print_operand !?"
+msgstr "ÐЕПОЗÐÐТРу print_operand !?"
+
+#: config/sh/sh.c:746
+#, c-format
+msgid "invalid operand to %%R"
+msgstr "неиÑправан операнд за %%R"
+
+#: config/sh/sh.c:773
+#, c-format
+msgid "invalid operand to %%S"
+msgstr "неиÑправан операнд за %%S"
+
+#: config/sh/sh.c:7679
+msgid "created and used with different architectures / ABIs"
+msgstr "направљено и употребљено на различитим архитектурама / ÐБИјима"
+
+#: config/sh/sh.c:7681
+msgid "created and used with different ABIs"
+msgstr "направљено и употребљено Ñа различитим ÐБИјима"
+
+#: config/sh/sh.c:7683
+msgid "created and used with different endianness"
+msgstr "направљено и употребељно Ñа различитом крајношћу"
+
+#: config/sparc/sparc.c:6626 config/sparc/sparc.c:6632
+#, c-format
+msgid "invalid %%Y operand"
+msgstr "неиÑправан %%Y операнд"
+
+#: config/sparc/sparc.c:6702
+#, c-format
+msgid "invalid %%A operand"
+msgstr "неиÑправан %%A операнд"
+
+#: config/sparc/sparc.c:6712
+#, c-format
+msgid "invalid %%B operand"
+msgstr "неиÑправан %%B операнд"
+
+#: config/sparc/sparc.c:6751
+#, c-format
+msgid "invalid %%c operand"
+msgstr "неиÑправан %%c операнд"
+
+#: config/sparc/sparc.c:6752
+#, c-format
+msgid "invalid %%C operand"
+msgstr "неиÑправан %%C операнд"
+
+#: config/sparc/sparc.c:6773
+#, c-format
+msgid "invalid %%d operand"
+msgstr "неиÑправан %%d операнд"
+
+#: config/sparc/sparc.c:6774
+#, c-format
+msgid "invalid %%D operand"
+msgstr "неиÑправан %%D операнд"
+
+#: config/sparc/sparc.c:6790
+#, c-format
+msgid "invalid %%f operand"
+msgstr "неиÑправан %%f операнд"
+
+#: config/sparc/sparc.c:6804
+#, c-format
+msgid "invalid %%s operand"
+msgstr "неиÑправан %%s операнд"
+
+#: config/sparc/sparc.c:6858
+#, c-format
+msgid "long long constant not a valid immediate operand"
+msgstr "long long конÑтанта није прихватљив непоÑредни операнд"
+
+#: config/sparc/sparc.c:6861
+#, c-format
+msgid "floating point constant not a valid immediate operand"
+msgstr "реална конÑтанта није прихватљив непоÑредни операнд"
+
+#: config/stormy16/stormy16.c:1764 config/stormy16/stormy16.c:1835
+#, c-format
+msgid "'B' operand is not constant"
+msgstr "‘B’ операнд није конÑтанта"
+
+#: config/stormy16/stormy16.c:1791
+#, c-format
+msgid "'B' operand has multiple bits set"
+msgstr "‘B’ операнд има више поÑтављених битова"
+
+#: config/stormy16/stormy16.c:1817
+#, c-format
+msgid "'o' operand is not constant"
+msgstr "‘o’ операнд није конÑтанта"
+
+#: config/stormy16/stormy16.c:1849
+#, c-format
+msgid "xstormy16_print_operand: unknown code"
+msgstr "xstormy16_print_operand: непознат кôд"
+
+#: config/v850/v850.c:360
+msgid "const_double_split got a bad insn:"
+msgstr "const_double_split доби лошу ију:"
+
+#: config/v850/v850.c:924
+msgid "output_move_single:"
+msgstr "output_move_single:"
+
+#: config/xtensa/xtensa.c:748 config/xtensa/xtensa.c:780
+#: config/xtensa/xtensa.c:789
+msgid "bad test"
+msgstr "лоша проба"
+
+#: config/xtensa/xtensa.c:1635
+#, c-format
+msgid "invalid %%D value"
+msgstr "неиÑправна %%D вредноÑÑ‚"
+
+#: config/xtensa/xtensa.c:1672
+msgid "invalid mask"
+msgstr "неиÑправна маÑка"
+
+#: config/xtensa/xtensa.c:1698
+#, c-format
+msgid "invalid %%x value"
+msgstr "неиÑправна %%x вредноÑÑ‚"
+
+#: config/xtensa/xtensa.c:1705
+#, c-format
+msgid "invalid %%d value"
+msgstr "неиÑправна %%d вредноÑÑ‚"
+
+#: config/xtensa/xtensa.c:1726 config/xtensa/xtensa.c:1736
+#, c-format
+msgid "invalid %%t/%%b value"
+msgstr "неиÑправна %%t/%%b вредноÑÑ‚"
+
+#: config/xtensa/xtensa.c:1778
+msgid "invalid address"
+msgstr "неиÑправна адреÑа"
+
+#: config/xtensa/xtensa.c:1803
+msgid "no register in address"
+msgstr "нема региÑтара у адреÑи"
+
+#: config/xtensa/xtensa.c:1811
+msgid "address offset not a constant"
+msgstr "помак адреÑе није конÑтанта"
+
+#: cp/call.c:2441
+msgid "candidates are:"
+msgstr "кандидати Ñу:"
+
+#: cp/call.c:6213
+msgid "candidate 1:"
+msgstr "кандидат 1:"
+
+#: cp/call.c:6214
+msgid "candidate 2:"
+msgstr "кандидат 2:"
+
+#: cp/decl2.c:695
+msgid "candidates are: %+#D"
+msgstr "кандидати Ñу: %+#D"
+
+#: cp/decl2.c:697
+msgid "candidate is: %+#D"
+msgstr "кандидат је: %+#D"
+
+#: cp/g++spec.c:238 java/jvspec.c:417
+#, c-format
+msgid "argument to '%s' missing\n"
+msgstr "аргумент за ‘%s’ недоÑтаје\n"
+
+#: fortran/arith.c:141
+msgid "Arithmetic OK at %L"
+msgstr "Ðритметичко OK код %L"
+
+#: fortran/arith.c:144
+msgid "Arithmetic overflow at %L"
+msgstr "Ðритметичко преливање код %L"
+
+#: fortran/arith.c:147
+msgid "Arithmetic underflow at %L"
+msgstr "Ðритметичко подливање код %L"
+
+#: fortran/arith.c:150
+msgid "Arithmetic NaN at %L"
+msgstr "Ðритметичко ÐаРкод %L"
+
+#: fortran/arith.c:153
+msgid "Division by zero at %L"
+msgstr "Дељење нулом код %L"
+
+#: fortran/arith.c:156
+msgid "Array operands are incommensurate at %L"
+msgstr "Ðизовни операнди Ñу неÑамерљиви код %L"
+
+#: fortran/arith.c:160
+msgid "Integer outside symmetric range implied by Standard Fortran at %L"
+msgstr "Цео број ван Ñиметричног опÑега имплицираног Ñтандардним фортраном код %L"
+
+#: fortran/arith.c:1384
+msgid "Elemental binary operation"
+msgstr "Елементална бинарна операција"
+
+#: fortran/arith.c:1920
+#, no-c-format
+msgid "Arithmetic OK converting %s to %s at %L"
+msgstr "Ðритметичко OK при претварању %s у %s код %L"
+
+#: fortran/arith.c:1924
+#, no-c-format
+msgid "Arithmetic overflow converting %s to %s at %L"
+msgstr "Ðритметичко преливање при претварању %s у %s код %L"
+
+#: fortran/arith.c:1928
+#, no-c-format
+msgid "Arithmetic underflow converting %s to %s at %L"
+msgstr "Ðритметичко подливање при претварању %s у %s код %L"
+
+#: fortran/arith.c:1932
+#, no-c-format
+msgid "Arithmetic NaN converting %s to %s at %L"
+msgstr "Ðритметичко ÐаРпри претварању %s у %s код %L"
+
+#: fortran/arith.c:1936
+#, no-c-format
+msgid "Division by zero converting %s to %s at %L"
+msgstr "Дељење нулом при претварању %s у %s код %L"
+
+#: fortran/arith.c:1940
+#, no-c-format
+msgid "Array operands are incommensurate converting %s to %s at %L"
+msgstr "Ðизовни операнди Ñу неÑамерљиви при претварању %s у %s код %L"
+
+#: fortran/arith.c:1944
+#, no-c-format
+msgid "Integer outside symmetric range implied by Standard Fortran converting %s to %s at %L"
+msgstr "Цео број ван Ñиметричног опÑега имплицираног Ñтандардним фортраном при претварању %s у %s код %L"
+
+#: fortran/arith.c:2277 fortran/arith.c:2312 fortran/arith.c:2349
+#: fortran/arith.c:2399
+#, no-c-format
+msgid "The Hollerith constant at %L is too long to convert to %s"
+msgstr "Холеритова конÑтанта код %L је предугачка за претварање у %s"
+
+#: fortran/arith.c:2445
+#, no-c-format
+msgid "Enumerator exceeds the C integer type at %C"
+msgstr "Ðабрајач премашује Ц-ов целобројни тип код %C"
+
+#: fortran/array.c:97
+#, no-c-format
+msgid "Expected array subscript at %C"
+msgstr "Очекиван је Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° код %C"
+
+#: fortran/array.c:124
+#, no-c-format
+msgid "Expected array subscript stride at %C"
+msgstr "Очекиван је корак индекÑа низа код %C"
+
+#: fortran/array.c:167
+#, no-c-format
+msgid "Invalid form of array reference at %C"
+msgstr "ÐеиÑправан облик упућивача низа код %C"
+
+#: fortran/array.c:172
+#, no-c-format
+msgid "Array reference at %C cannot have more than %d dimensions"
+msgstr "Упућивач низа код %C не може имати више од %d димензија"
+
+#: fortran/array.c:224
+#, no-c-format
+msgid "Variable '%s' at %L in this context must be constant"
+msgstr "Променљива ‘%s’ код %L мора бити конÑтантна у овом контекÑту"
+
+#: fortran/array.c:300
+#, no-c-format
+msgid "Expected expression in array specification at %C"
+msgstr "Очекиван је израз у одредници низа код %C"
+
+#: fortran/array.c:379
+#, no-c-format
+msgid "Bad array specification for an explicitly shaped array at %C"
+msgstr "Лоша одредница за низ екÑплицитног облика код %C"
+
+#: fortran/array.c:390
+#, no-c-format
+msgid "Bad array specification for assumed shape array at %C"
+msgstr "Лоша одредница за низ претпоÑтављеног облика код %C"
+
+#: fortran/array.c:403
+#, no-c-format
+msgid "Bad specification for deferred shape array at %C"
+msgstr "Лоша одредница за низ одложеног облика код %C"
+
+#: fortran/array.c:407
+#, no-c-format
+msgid "Bad specification for assumed size array at %C"
+msgstr "Лоша одредница за низ претпоÑтављене величине код %C"
+
+#: fortran/array.c:416
+#, no-c-format
+msgid "Expected another dimension in array declaration at %C"
+msgstr "Очекивана је друга димензија у декларацији низа код %C"
+
+#: fortran/array.c:422
+#, no-c-format
+msgid "Array specification at %C has more than %d dimensions"
+msgstr "Одредница низа код %C има више од %d димензија"
+
+#: fortran/array.c:627
+#, no-c-format
+msgid "duplicated initializer"
+msgstr "двоÑтруки уÑпоÑтављач"
+
+#: fortran/array.c:720
+#, no-c-format
+msgid "DO-iterator '%s' at %L is inside iterator of the same name"
+msgstr "DO-итератор ‘%s’ код %L је унутар иÑтоименог итератора"
+
+#: fortran/array.c:822 fortran/array.c:931
+#, no-c-format
+msgid "Syntax error in array constructor at %C"
+msgstr "СинтакÑна грешка у конÑтруктору низа код %C"
+
+#: fortran/array.c:877
+#, no-c-format
+msgid "New in Fortran 2003: [...] style array constructors at %C"
+msgstr "Ðово у фортрану 2003: [...] конÑтруктори низа код %C"
+
+#: fortran/array.c:891
+#, no-c-format
+msgid "Empty array constructor at %C is not allowed"
+msgstr "Празан конÑтруктор низа код %C није дозвољен"
+
+#: fortran/array.c:976
+#, no-c-format
+msgid "Element in %s array constructor at %L is %s"
+msgstr "Елемент у конÑтруктору низа %s код %L је %s"
+
+#: fortran/array.c:1305
+#, no-c-format
+msgid "Iterator step at %L cannot be zero"
+msgstr "Корак итератора код %L не може бити нула"
+
+#: fortran/check.c:44
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be %s"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити %s"
+
+#: fortran/check.c:60
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити бројевног типа"
+
+#: fortran/check.c:75 fortran/check.c:684 fortran/check.c:694
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити целобројан или реалан"
+
+#: fortran/check.c:92
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити реалан или комплекÑан"
+
+#: fortran/check.c:118
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a constant"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити конÑтанта"
+
+#: fortran/check.c:126
+#, no-c-format
+msgid "Invalid kind for %s at %L"
+msgstr "ÐеиÑправна врÑта за %s код %L"
+
+#: fortran/check.c:146
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be double precision"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити двоÑтруке тачноÑти"
+
+#: fortran/check.c:163
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a logical array"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити логички низ"
+
+#: fortran/check.c:180
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be an array"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити низ"
+
+#: fortran/check.c:195
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a scalar"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити Ñкалар"
+
+#: fortran/check.c:210
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be the same type and kind as '%s'"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити иÑтог типа и врÑте као ‘%s’"
+
+#: fortran/check.c:225
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити ранга %d"
+
+#: fortran/check.c:239
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must not be OPTIONAL"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L не Ñме бити опциони"
+
+#: fortran/check.c:259
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити врÑте %d"
+
+#: fortran/check.c:280
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L не може бити намере-у"
+
+#: fortran/check.c:286
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a variable"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити променљива"
+
+#: fortran/check.c:303
+#, no-c-format
+msgid "Missing DIM parameter in intrinsic '%s' at %L"
+msgstr "ÐедоÑтаје параметар DIM у ÑопÑтвеном ‘%s’ код %L"
+
+#: fortran/check.c:371
+#, no-c-format
+msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index"
+msgstr "Ðргумент ‘dim’ за ÑопÑтвено ‘%s’ код %L није иÑправан димензиони индекÑ"
+
+#: fortran/check.c:456
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити резервљив"
+
+#: fortran/check.c:477 fortran/check.c:3178
+#, no-c-format
+msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type"
+msgstr "Ðргументи ‘%s’ и ‘%s’ ÑопÑтвеног ‘%s’ код %L морају бити иÑтог типа"
+
+#: fortran/check.c:486 fortran/check.c:974 fortran/check.c:1109
+#: fortran/check.c:1172 fortran/check.c:1397
+#, no-c-format
+msgid "Extension: Different type kinds at %L"
+msgstr "Проширење: Различите врÑте типова код %L"
+
+#: fortran/check.c:511 fortran/check.c:1732
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити показивач"
+
+#: fortran/check.c:523
+#, no-c-format
+msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
+msgstr "Ðулти показивач код %L није дозвољен као Ñтварни аргумент ÑопÑтвене функције ‘%s’"
+
+#: fortran/check.c:538
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити показивач или циљ"
+
+#: fortran/check.c:554
+#, no-c-format
+msgid "Array section with a vector subscript at %L shall not be the target of a pointer"
+msgstr "Одељак низа Ñа векторÑким индекÑом код %L неће бити циљ показивача"
+
+#: fortran/check.c:664 fortran/check.c:766
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L не Ñме бити приÑутан ако је ‘x’ комплекÑно"
+
+#: fortran/check.c:815 fortran/check.c:1477 fortran/check.c:1485
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити бројеван или логички"
+
+#: fortran/check.c:829
+#, no-c-format
+msgid "different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'"
+msgstr "различити облици аргумената ‘%s’ и ‘%s’ код %L за ÑопÑтвено ‘dot_product’"
+
+#: fortran/check.c:1079
+#, no-c-format
+msgid "Argument of %s at %L must be of length one"
+msgstr "Ðргумент за %s код %L мора бити дужине један"
+
+#: fortran/check.c:1131
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити иÑте врÑте као ‘%s’"
+
+#: fortran/check.c:1246
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type"
+msgstr "Ðргумент ‘%s’ за ÑопÑтвено ‘%s’ код %L мора бити неизведени тип"
+
+#: fortran/check.c:1369
+#, no-c-format
+msgid "Intrinsic '%s' at %L must have at least two arguments"
+msgstr "СопÑтвено ‘%s’ код %L мора имати бар два аргумента"
+
+#: fortran/check.c:1403
+#, no-c-format
+msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)"
+msgstr "Ðргумент ‘a%d’ ÑопÑтвеног ‘%s’ код %L мора бити %s(%d)"
+
+#: fortran/check.c:1428
+#, no-c-format
+msgid "'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL"
+msgstr "Ðргумент ‘a1’ ÑопÑтвеног ‘%s’ код %L мора бити целобројан или реалан"
+
+#: fortran/check.c:1499
+#, no-c-format
+msgid "different shape on dimension 1 for arguments '%s' and '%s' at %L for intrinsic matmul"
+msgstr "различити облици по димензији 1 аргумената ‘%s’ и ‘%s’ код %L за ÑопÑтвено ’matmul’"
+
+#: fortran/check.c:1519
+#, no-c-format
+msgid "different shape on dimension 2 for argument '%s' and dimension 1 for argument '%s' at %L for intrinsic matmul"
+msgstr "различити облици по димензији 2 аргумента ‘%s’ и димензији 1 аргумента ‘%s’ код %L за ÑопÑтвено ’matmul’"
+
+#: fortran/check.c:1528
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити ранга 1 или 2"
+
+#: fortran/check.c:1779
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of type REAL or COMPLEX"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити целобројан или реалан"
+
+#: fortran/check.c:1800
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити од лажне променљиве"
+
+#: fortran/check.c:1808
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити од опционе лажне променљиве"
+
+#: fortran/check.c:1924
+#, no-c-format
+msgid "'shape' argument of 'reshape' intrinsic at %L must be an array of constant size"
+msgstr "Ðргумент ‘shape’ ÑопÑтвеног ‘reshape’ код %L мора бити низ конÑтантне величине"
+
+#: fortran/check.c:1934
+#, no-c-format
+msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements"
+msgstr "Ðргумент ‘shape’ ÑопÑтвеног ‘reshape’ код %L има више од %d елемената"
+
+#: fortran/check.c:2022
+#, no-c-format
+msgid "Missing arguments to %s intrinsic at %L"
+msgstr "ÐедоÑтају аргументи за ÑопÑтвено %s код %L"
+
+#: fortran/check.c:2063
+#, no-c-format
+msgid "'source' argument of 'shape' intrinsic at %L must not be an assumed size array"
+msgstr "Ðргумент ‘source’ ÑопÑтвеног ‘shape’ код %L не Ñме бити низ претпоÑтављене величине"
+
+#: fortran/check.c:2125
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити мање ранга од %d"
+
+#: fortran/check.c:2582 fortran/check.c:2602
+#, no-c-format
+msgid "Too many arguments to %s at %L"
+msgstr "Превише аргумената за %s код %L"
+
+#: fortran/check.c:2730 fortran/check.c:3092 fortran/check.c:3116
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити целобројан или процедура"
+
+#: fortran/check.c:3163 fortran/check.c:3171
+#, no-c-format
+msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL"
+msgstr "Ðргумент ‘%s’ ÑопÑтвеног ‘%s’ код %L мора бити целобројан или логички"
+
+#: fortran/data.c:63
+#, no-c-format
+msgid "non-constant array in DATA statement %L."
+msgstr "неконÑтантан низа у наредби DATA %L."
+
+#: fortran/data.c:327
+#, no-c-format
+msgid "Extension: re-initialization of '%s' at %L"
+msgstr "Проширење: реуÑпоÑтављање ‘%s’ код %L"
+
+#: fortran/decl.c:208
+#, no-c-format
+msgid "Host associated variable '%s' may not be in the DATA statement at %C."
+msgstr "Домаћином придружена променљива ‘%s’ не може бити у наредби DATA код %C."
+
+#: fortran/decl.c:215
+#, no-c-format
+msgid "Extension: initialization of common block variable '%s' in DATA statement at %C"
+msgstr "Проширење: уÑпоÑтављање заједничког блока ‘%s’ у наредби DATA код %C"
+
+#: fortran/decl.c:301
+#, no-c-format
+msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C"
+msgstr "Симбол ‘%s’ мора бити параметар у наредби DATA код %C"
+
+#: fortran/decl.c:408
+#, no-c-format
+msgid "Initialization at %C is not allowed in a PURE procedure"
+msgstr "Иницијализација код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/decl.c:455
+#, no-c-format
+msgid "DATA statement at %C is not allowed in a PURE procedure"
+msgstr "Ðаредба DATA код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/decl.c:483
+#, no-c-format
+msgid "Bad INTENT specification at %C"
+msgstr "Лоша одредница намере код %C"
+
+#: fortran/decl.c:548
+#, no-c-format
+msgid "Syntax error in character length specification at %C"
+msgstr "СинтакÑна грешка у одредници знаковне дужине код %C"
+
+#: fortran/decl.c:623
+#, no-c-format
+msgid "Procedure '%s' at %C is already defined at %L"
+msgstr "Процедура ‘%s’ код %C већ је дефиниÑана код %L"
+
+#: fortran/decl.c:633
+#, no-c-format
+msgid "Procedure '%s' at %C has an explicit interface and must not have attributes declared at %L"
+msgstr "Процедура ‘%s’ код %C има екÑплицитно Ñучеље и не може имати атрибуте деклариÑане код %L"
+
+#: fortran/decl.c:805
+#, no-c-format
+msgid "Initializer not allowed for PARAMETER '%s' at %C"
+msgstr "Иницијализатор није дозвољен за параметар ‘%s’ код %C"
+
+#: fortran/decl.c:814
+#, no-c-format
+msgid "Initializer not allowed for COMMON variable '%s' at %C"
+msgstr "Иницијализатор није дозвољен за заједничку променљиву ‘%s’ код %C"
+
+#: fortran/decl.c:824
+#, no-c-format
+msgid "PARAMETER at %L is missing an initializer"
+msgstr "ÐедоÑтаје уÑпоÑтављач за параметар код %L"
+
+#: fortran/decl.c:835
+#, no-c-format
+msgid "Variable '%s' at %C with an initializer already appears in a DATA statement"
+msgstr "Променљива ‘%s’ код %C Ñа уÑпоÑтављачем већ Ñе појављује у наредби DATA"
+
+#: fortran/decl.c:913
+#, no-c-format
+msgid "Component at %C must have the POINTER attribute"
+msgstr "Компонента код %C мора имати атрибут показивача"
+
+#: fortran/decl.c:922
+#, no-c-format
+msgid "Array component of structure at %C must have explicit or deferred shape"
+msgstr "Ðизовна компонента Ñтруктуре код %C мора имати екÑплицитан или одложени облик"
+
+#: fortran/decl.c:951
+#, no-c-format
+msgid "Pointer array component of structure at %C must have a deferred shape"
+msgstr "Показивачка низовна компонента Ñтруктуре код %C мора имати одложен облик"
+
+#: fortran/decl.c:961
+#, no-c-format
+msgid "Array component of structure at %C must have an explicit shape"
+msgstr "Ðизовна компонента Ñтруктуре код %C мора имати екÑплицитан облик"
+
+#: fortran/decl.c:987
+#, no-c-format
+msgid "NULL() initialization at %C is ambiguous"
+msgstr "ДвоÑмиÑлено уÑпоÑтављање NULL() код %C"
+
+#: fortran/decl.c:1054
+#, no-c-format
+msgid "Enumerator cannot be array at %C"
+msgstr "Ðабрајач не може бити низ код %C"
+
+#: fortran/decl.c:1115 fortran/decl.c:3374
+#, no-c-format
+msgid "Duplicate array spec for Cray pointee at %C."
+msgstr "ДвоÑтрука одредница низа за Крејов показиваног код %C."
+
+#: fortran/decl.c:1167
+#, no-c-format
+msgid "Function name '%s' not allowed at %C"
+msgstr "Име функције ‘%s’ није дозвољено код %C"
+
+#: fortran/decl.c:1183
+#, no-c-format
+msgid "Extension: Old-style initialization at %C"
+msgstr "Проширење: СтаровремÑко уÑпоÑтављање код %C"
+
+#: fortran/decl.c:1199
+#, no-c-format
+msgid "Initialization at %C isn't for a pointer variable"
+msgstr "Иницијализација код %C није за показивачку променљиву"
+
+#: fortran/decl.c:1207
+#, no-c-format
+msgid "Pointer initialization requires a NULL() at %C"
+msgstr "Иницијализација показивача код %C захтева NULL()"
+
+#: fortran/decl.c:1214
+#, no-c-format
+msgid "Initialization of pointer at %C is not allowed in a PURE procedure"
+msgstr "Иницијализација показивача код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/decl.c:1228
+#, no-c-format
+msgid "Pointer initialization at %C requires '=>', not '='"
+msgstr "Иницијализација показивача код %C захтева ‘=>’, не ‘=’"
+
+#: fortran/decl.c:1236
+#, no-c-format
+msgid "Expected an initialization expression at %C"
+msgstr "Очекиван је уÑпоÑтављачки израз код %C"
+
+#: fortran/decl.c:1243
+#, no-c-format
+msgid "Initialization of variable at %C is not allowed in a PURE procedure"
+msgstr "Иницијализација променљиве код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/decl.c:1265
+#, no-c-format
+msgid "ENUMERATOR %L not initialized with integer expression"
+msgstr "Ðабрајач %L није уÑпоÑтављен целобројним изразом"
+
+#: fortran/decl.c:1324 fortran/decl.c:1333
+#, no-c-format
+msgid "Old-style type declaration %s*%d not supported at %C"
+msgstr "СтаровремÑка декларација типа %s*%d није подржана код %C"
+
+#: fortran/decl.c:1338
+#, no-c-format
+msgid "Nonstandard type declaration %s*%d at %C"
+msgstr "ÐеÑтандардна декларација типа %s*%d код %C"
+
+#: fortran/decl.c:1372
+#, no-c-format
+msgid "Expected initialization expression at %C"
+msgstr "Очекиван је уÑпоÑтављачки израз код %C"
+
+#: fortran/decl.c:1378
+#, no-c-format
+msgid "Expected scalar initialization expression at %C"
+msgstr "Очекиван је Ñкаларни уÑпоÑтављачки израз код %C"
+
+#: fortran/decl.c:1396
+#, no-c-format
+msgid "Kind %d not supported for type %s at %C"
+msgstr "Ð’Ñ€Ñта %d није подржана за тип %s код %C"
+
+#: fortran/decl.c:1405
+#, no-c-format
+msgid "Missing right paren at %C"
+msgstr "ÐедоÑтаје лева заграда код %C"
+
+#: fortran/decl.c:1494 fortran/decl.c:1537
+#, no-c-format
+msgid "Kind %d is not a CHARACTER kind at %C"
+msgstr "Ð’Ñ€Ñта %d није знаковна код %C"
+
+#: fortran/decl.c:1531
+#, no-c-format
+msgid "Syntax error in CHARACTER declaration at %C"
+msgstr "СинтакÑна грешка у декларацији CHARACTER код %C"
+
+#: fortran/decl.c:1592
+#, no-c-format
+msgid "Extension: BYTE type at %C"
+msgstr "Проширење: тип BYTE код %C"
+
+#: fortran/decl.c:1598
+#, no-c-format
+msgid "BYTE type used at %C is not available on the target machine"
+msgstr "Тип BYTE употребљен код %C није доÑтупан на циљној машини"
+
+#: fortran/decl.c:1647
+#, no-c-format
+msgid "DOUBLE COMPLEX at %C does not conform to the Fortran 95 standard"
+msgstr "DOUBLE COMPLEX код %C не поштује Ñтандард фортрана 95"
+
+#: fortran/decl.c:1670
+#, no-c-format
+msgid "Type name '%s' at %C is ambiguous"
+msgstr "ДвоÑмиÑлено име типа ‘%s’ код %C"
+
+#: fortran/decl.c:1736
+#, no-c-format
+msgid "Missing character range in IMPLICIT at %C"
+msgstr "ÐедоÑтаје знаковни опÑег за имплицитно код %C"
+
+#: fortran/decl.c:1782
+#, no-c-format
+msgid "Letters must be in alphabetic order in IMPLICIT statement at %C"
+msgstr "Слова морају бити у алфабетÑком поретку у наредби IMPLICIT код %C"
+
+#: fortran/decl.c:1836
+#, no-c-format
+msgid "Empty IMPLICIT statement at %C"
+msgstr "Празна наредба IMPLICIT код %C"
+
+#: fortran/decl.c:2000
+#, no-c-format
+msgid "Enumerator cannot have attributes %C"
+msgstr "Ðабрајач не може имати атрибуте %C"
+
+#: fortran/decl.c:2013
+#, no-c-format
+msgid "Missing dimension specification at %C"
+msgstr "ÐедоÑтаје одредница димензија код %C"
+
+#: fortran/decl.c:2095
+#, no-c-format
+msgid "Duplicate %s attribute at %L"
+msgstr "ДвоÑтруки атрибут %s код %L"
+
+#: fortran/decl.c:2112
+#, no-c-format
+msgid "Attribute at %L is not allowed in a TYPE definition"
+msgstr "Ðтрибут код %L није дозвољен у дефиницији типа"
+
+#: fortran/decl.c:2126
+#, no-c-format
+msgid "%s attribute at %L is not allowed outside of a MODULE"
+msgstr "Ðтрибут %s код %L није дозвољен изван модула"
+
+#. Now we have an error, which we signal, and then fix up
+#. because the knock-on is plain and simple confusing.
+#: fortran/decl.c:2264
+#, no-c-format
+msgid "Derived type at %C has not been previously defined and so cannot appear in a derived type definition."
+msgstr "Изведени тип код %C није претходно дефиниÑан и зато Ñе не може појавити у дефиницији изведеног типа."
+
+#: fortran/decl.c:2294
+#, no-c-format
+msgid "Syntax error in data declaration at %C"
+msgstr "СинтакÑна грешка у декларацији података код %C"
+
+#: fortran/decl.c:2440
+#, no-c-format
+msgid "Name '%s' at %C is the name of the procedure"
+msgstr "Име ‘%s’ код %C је име процедуре"
+
+#: fortran/decl.c:2452
+#, no-c-format
+msgid "Unexpected junk in formal argument list at %C"
+msgstr "Ðеочекивано Ñмеће у формалној лиÑти аргумената код %C"
+
+#: fortran/decl.c:2470
+#, no-c-format
+msgid "Duplicate symbol '%s' in formal argument list at %C"
+msgstr "ДвоÑтруки Ñимбол ‘%s’ у формалној лиÑти аргумената код %C"
+
+#: fortran/decl.c:2513
+#, no-c-format
+msgid "Unexpected junk following RESULT variable at %C"
+msgstr "Ðеочекивано Ñмеће поÑле променљиве RESULT код %C"
+
+#: fortran/decl.c:2520
+#, no-c-format
+msgid "RESULT variable at %C must be different than function name"
+msgstr "Променљива RESULT код %C мора бити различита од имена функције"
+
+#: fortran/decl.c:2575
+#, no-c-format
+msgid "Expected formal argument list in function definition at %C"
+msgstr "Очекивана је формална лиÑта аргумената у дефиницији функције код %C"
+
+#: fortran/decl.c:2586
+#, no-c-format
+msgid "Unexpected junk after function declaration at %C"
+msgstr "Ðеочекивано Ñмеће поÑле декларације функције код %C"
+
+#: fortran/decl.c:2607
+#, no-c-format
+msgid "Function '%s' at %C already has a type of %s"
+msgstr "Функција ‘%s’ код %C већ има тип %s"
+
+#: fortran/decl.c:2678
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a PROGRAM"
+msgstr "Ðаредба ENTRY код %C не може бити унутар PROGRAM"
+
+#: fortran/decl.c:2681
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a MODULE"
+msgstr "Ðаредба ENTRY код %C не може бити унутар MODULE"
+
+#: fortran/decl.c:2685
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a BLOCK DATA"
+msgstr "Ðаредба ENTRY код %C не може бити унутар BLOCK DATA"
+
+#: fortran/decl.c:2689
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within an INTERFACE"
+msgstr "Ðаредба ENTRY код %C не може бити унутар INTERFACE"
+
+#: fortran/decl.c:2693
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока DERIVED TYPE"
+
+#: fortran/decl.c:2698
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within an IF-THEN block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока IF-THEN"
+
+#: fortran/decl.c:2702
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a DO block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока DO"
+
+#: fortran/decl.c:2706
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a SELECT block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока SELECT"
+
+#: fortran/decl.c:2710
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a FORALL block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока FORALL"
+
+#: fortran/decl.c:2714
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a WHERE block"
+msgstr "Ðаредба ENTRY код %C не може бити унутар блока WHERE"
+
+#: fortran/decl.c:2718
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear within a contained subprogram"
+msgstr "Ðаредба ENTRY код %C не може бити унутар Ñадржаног потпрограма"
+
+#: fortran/decl.c:2731
+#, no-c-format
+msgid "ENTRY statement at %C cannot appear in a contained procedure"
+msgstr "Ðаредба ENTRY код %C не може бити у Ñадржаној процедури"
+
+#: fortran/decl.c:2812
+#, no-c-format
+msgid "RESULT attribute required in ENTRY statement at %C"
+msgstr "Ðеопходан је атрибут RESULT у наредби ENTRY код %C"
+
+#: fortran/decl.c:3053
+#, no-c-format
+msgid "Unexpected END statement at %C"
+msgstr "Ðеочекивана наредба END код %C"
+
+#. We would have required END [something]
+#: fortran/decl.c:3062
+#, no-c-format
+msgid "%s statement expected at %L"
+msgstr "Очекивана је наредба %s код %L"
+
+#: fortran/decl.c:3073
+#, no-c-format
+msgid "Expecting %s statement at %C"
+msgstr "Очекивана је наредба %s код %C"
+
+#: fortran/decl.c:3087
+#, no-c-format
+msgid "Expected block name of '%s' in %s statement at %C"
+msgstr "Очекивано је име блока за ‘%s’ у наредби %s код %C"
+
+#: fortran/decl.c:3103
+#, no-c-format
+msgid "Expected terminating name at %C"
+msgstr "Очекивано је завршно име код %C"
+
+#: fortran/decl.c:3112
+#, no-c-format
+msgid "Expected label '%s' for %s statement at %C"
+msgstr "Очекивана је етикета ‘%s’ за наредбу %s код %C"
+
+#: fortran/decl.c:3167
+#, no-c-format
+msgid "Missing array specification at %L in DIMENSION statement"
+msgstr "ÐедоÑтаје одредница низа код %L у наредби DIMENSION"
+
+#: fortran/decl.c:3176
+#, no-c-format
+msgid "Array specification must be deferred at %L"
+msgstr "Одредница низа мора бити одложена код %L"
+
+#: fortran/decl.c:3253
+#, no-c-format
+msgid "Unexpected character in variable list at %C"
+msgstr "Ðеочекиван знак у лиÑти променљивих код %C"
+
+#: fortran/decl.c:3290
+#, no-c-format
+msgid "Expected '(' at %C"
+msgstr "Очекивано је ‘(’ код %C"
+
+#: fortran/decl.c:3304 fortran/decl.c:3345
+#, no-c-format
+msgid "Expected variable name at %C"
+msgstr "Очекивано је име променљиве код %C"
+
+#: fortran/decl.c:3320
+#, no-c-format
+msgid "Cray pointer at %C must be an integer."
+msgstr "Крејов показивач код %C мора бити целобројни."
+
+#: fortran/decl.c:3324
+#, no-c-format
+msgid "Cray pointer at %C has %d bytes of precision; memory addresses require %d bytes."
+msgstr "Крејов показивач код %C има %d бајтова тачноÑти; меморијÑка адреÑа захтева %d бајтова."
+
+#: fortran/decl.c:3331
+#, no-c-format
+msgid "Expected \",\" at %C"
+msgstr "Очекивано је ‘,’ код %C"
+
+#: fortran/decl.c:3394
+#, no-c-format
+msgid "Expected \")\" at %C"
+msgstr "Очекивано је ‘)’ код %C"
+
+#: fortran/decl.c:3406
+#, no-c-format
+msgid "Expected \",\" or end of statement at %C"
+msgstr "Очекивано је ‘,’ или крај наредбе код %C"
+
+#: fortran/decl.c:3471
+#, no-c-format
+msgid "Cray pointer declaration at %C requires -fcray-pointer flag."
+msgstr "Декларација Крејовог показивача код %C захтева заÑтавицу -fcray-pointer."
+
+#: fortran/decl.c:3569
+#, no-c-format
+msgid "Access specification of the %s operator at %C has already been specified"
+msgstr "Одредница приÑтупа оператора %s код %C је већ наведена"
+
+#: fortran/decl.c:3587
+#, no-c-format
+msgid "Access specification of the .%s. operator at %C has already been specified"
+msgstr "Одредница приÑтупа оператора .%s. код %C је већ наведена"
+
+#: fortran/decl.c:3674
+#, no-c-format
+msgid "Expected variable name at %C in PARAMETER statement"
+msgstr "Очекивано је име променљиве код %C у наредби PARAMETER"
+
+#: fortran/decl.c:3681
+#, no-c-format
+msgid "Expected = sign in PARAMETER statement at %C"
+msgstr "Очекиван је знак = у наредби PARAMETER код %C"
+
+#: fortran/decl.c:3687
+#, no-c-format
+msgid "Expected expression at %C in PARAMETER statement"
+msgstr "Очекиван је израз код %C у наредби PARAMETER"
+
+#: fortran/decl.c:3745
+#, no-c-format
+msgid "Unexpected characters in PARAMETER statement at %C"
+msgstr "Ðеочекивани знакови у наредби PARAMETER код %C"
+
+#: fortran/decl.c:3770
+#, no-c-format
+msgid "Blanket SAVE statement at %C follows previous SAVE statement"
+msgstr "Покривачка наредба SAVE код %C прати претходну наредбу SAVE"
+
+#: fortran/decl.c:3783
+#, no-c-format
+msgid "SAVE statement at %C follows blanket SAVE statement"
+msgstr "Ðаредба SAVE код %C прати покривачку наредбу SAVE"
+
+#: fortran/decl.c:3829
+#, no-c-format
+msgid "Syntax error in SAVE statement at %C"
+msgstr "СинтакÑна грешка у наредби SAVE код %C"
+
+#: fortran/decl.c:3850
+#, no-c-format
+msgid "MODULE PROCEDURE at %C must be in a generic module interface"
+msgstr "MODULE PROCEDURE код %C мора бити у генеричком Ñучељу модула"
+
+#: fortran/decl.c:3910
+#, no-c-format
+msgid "Derived type at %C can only be PRIVATE within a MODULE"
+msgstr "Изведени тип код %C може бити Ñамо приватан унутар модула"
+
+#: fortran/decl.c:3923
+#, no-c-format
+msgid "Derived type at %C can only be PUBLIC within a MODULE"
+msgstr "Изведени тип код %C може бити Ñамо јаван унутар модула"
+
+#: fortran/decl.c:3934
+#, no-c-format
+msgid "Expected :: in TYPE definition at %C"
+msgstr "Очекивано је :: у дефиницији TYPE код %C"
+
+#: fortran/decl.c:3951
+#, no-c-format
+msgid "Type name '%s' at %C cannot be the same as an intrinsic type"
+msgstr "Име типа ‘%s’ код %C не може бити иÑто као ÑопÑтвеног типа"
+
+#: fortran/decl.c:3961
+#, no-c-format
+msgid "Derived type name '%s' at %C already has a basic type of %s"
+msgstr "Име изведеног типа ‘%s’ код %C већ има оÑновни тип %s"
+
+#: fortran/decl.c:3978
+#, no-c-format
+msgid "Derived type definition of '%s' at %C has already been defined"
+msgstr "Дефиниција изведеног типа ‘%s’ код %C је већ учињена"
+
+#: fortran/decl.c:4012
+#, no-c-format
+msgid "Cray Pointee at %C cannot be assumed shape array"
+msgstr "Крејов показивани код %C не може бити низ претпоÑтављеног облика"
+
+#: fortran/decl.c:4033
+#, no-c-format
+msgid "New in Fortran 2003: ENUM AND ENUMERATOR at %C"
+msgstr "Ðово у фортрану 2003: ENUM AND ENUMERATOR код %C"
+
+#: fortran/decl.c:4057
+#, no-c-format
+msgid "ENUM definition statement expected before %C"
+msgstr "Очекивана је наредба дефиниције ENUM пре %C"
+
+#: fortran/decl.c:4090
+#, no-c-format
+msgid "Syntax error in ENUMERATOR definition at %C"
+msgstr "СинтакÑна грешка у дефиницији ENUMERATOR код %C"
+
+#: fortran/dump-parse-tree.c:53
+#, c-format
+msgid "%-5d "
+msgstr "%-5d "
+
+#: fortran/dump-parse-tree.c:55
+#, c-format
+msgid " "
+msgstr " "
+
+#: fortran/dump-parse-tree.c:79 fortran/dump-parse-tree.c:597
+#, c-format
+msgid "(%s "
+msgstr "(%s "
+
+#: fortran/dump-parse-tree.c:92 fortran/dump-parse-tree.c:844
+#: fortran/dump-parse-tree.c:881 fortran/dump-parse-tree.c:891
+#, c-format
+msgid "%d"
+msgstr "%d"
+
+#: fortran/dump-parse-tree.c:96 fortran/dump-parse-tree.c:123
+#: fortran/dump-parse-tree.c:166 fortran/dump-parse-tree.c:403
+#: fortran/dump-parse-tree.c:498 fortran/dump-parse-tree.c:584
+#: fortran/dump-parse-tree.c:605
+#, c-format
+msgid ")"
+msgstr ")"
+
+#: fortran/dump-parse-tree.c:106 fortran/dump-parse-tree.c:421
+#, c-format
+msgid "("
+msgstr "("
+
+#: fortran/dump-parse-tree.c:112
+#, c-format
+msgid "%s = "
+msgstr "%s = "
+
+#: fortran/dump-parse-tree.c:116
+#, c-format
+msgid "(arg not-present)"
+msgstr "(arg not-present)"
+
+#: fortran/dump-parse-tree.c:120 fortran/dump-parse-tree.c:397
+#: fortran/dump-parse-tree.c:494
+#, c-format
+msgid " "
+msgstr " "
+
+#: fortran/dump-parse-tree.c:137 fortran/dump-parse-tree.c:312
+#, c-format
+msgid "()"
+msgstr "()"
+
+#: fortran/dump-parse-tree.c:141
+#, c-format
+msgid "(%d"
+msgstr "(%d"
+
+#: fortran/dump-parse-tree.c:155
+#, c-format
+msgid " %s "
+msgstr " %s "
+
+#: fortran/dump-parse-tree.c:182
+#, c-format
+msgid "FULL"
+msgstr "FULL"
+
+#: fortran/dump-parse-tree.c:213 fortran/dump-parse-tree.c:222
+#: fortran/dump-parse-tree.c:297
+#, c-format
+msgid " , "
+msgstr " , "
+
+#: fortran/dump-parse-tree.c:227
+#, c-format
+msgid "UNKNOWN"
+msgstr "UNKNOWN"
+
+#: fortran/dump-parse-tree.c:252
+#, c-format
+msgid " %% %s"
+msgstr " %% %s"
+
+#: fortran/dump-parse-tree.c:324 fortran/dump-parse-tree.c:381
+#, c-format
+msgid "''"
+msgstr "''"
+
+#: fortran/dump-parse-tree.c:326
+#, c-format
+msgid "%c"
+msgstr "%c"
+
+#: fortran/dump-parse-tree.c:333
+#, c-format
+msgid "%s("
+msgstr "%s("
+
+#: fortran/dump-parse-tree.c:339
+#, c-format
+msgid "(/ "
+msgstr "(/ "
+
+#: fortran/dump-parse-tree.c:341
+#, c-format
+msgid " /)"
+msgstr " /)"
+
+#: fortran/dump-parse-tree.c:347
+#, c-format
+msgid "NULL()"
+msgstr "NULL()"
+
+#: fortran/dump-parse-tree.c:357 fortran/dump-parse-tree.c:370
+#: fortran/dump-parse-tree.c:395 fortran/dump-parse-tree.c:401
+#, c-format
+msgid "_%d"
+msgstr "_%d"
+
+#: fortran/dump-parse-tree.c:362
+#, c-format
+msgid ".true."
+msgstr ".true."
+
+#: fortran/dump-parse-tree.c:364
+#, c-format
+msgid ".false."
+msgstr ".false."
+
+#: fortran/dump-parse-tree.c:391
+#, c-format
+msgid "(complex "
+msgstr "(complex "
+
+#: fortran/dump-parse-tree.c:407
+#, c-format
+msgid "???"
+msgstr "???"
+
+#: fortran/dump-parse-tree.c:415 fortran/dump-parse-tree.c:701
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: fortran/dump-parse-tree.c:425
+#, c-format
+msgid "U+ "
+msgstr "U+ "
+
+#: fortran/dump-parse-tree.c:428
+#, c-format
+msgid "U- "
+msgstr "U- "
+
+#: fortran/dump-parse-tree.c:431
+#, c-format
+msgid "+ "
+msgstr "+ "
+
+#: fortran/dump-parse-tree.c:434
+#, c-format
+msgid "- "
+msgstr "- "
+
+#: fortran/dump-parse-tree.c:437
+#, c-format
+msgid "* "
+msgstr "* "
+
+#: fortran/dump-parse-tree.c:440
+#, c-format
+msgid "/ "
+msgstr "/ "
+
+#: fortran/dump-parse-tree.c:443
+#, c-format
+msgid "** "
+msgstr "** "
+
+#: fortran/dump-parse-tree.c:446
+#, c-format
+msgid "// "
+msgstr "// "
+
+#: fortran/dump-parse-tree.c:449
+#, c-format
+msgid "AND "
+msgstr "AND "
+
+#: fortran/dump-parse-tree.c:452
+#, c-format
+msgid "OR "
+msgstr "OR "
+
+#: fortran/dump-parse-tree.c:455
+#, c-format
+msgid "EQV "
+msgstr "EQV "
+
+#: fortran/dump-parse-tree.c:458
+#, c-format
+msgid "NEQV "
+msgstr "NEQV "
+
+#: fortran/dump-parse-tree.c:461
+#, c-format
+msgid "= "
+msgstr "= "
+
+#: fortran/dump-parse-tree.c:464
+#, c-format
+msgid "<> "
+msgstr "<> "
+
+#: fortran/dump-parse-tree.c:467
+#, c-format
+msgid "> "
+msgstr "> "
+
+#: fortran/dump-parse-tree.c:470
+#, c-format
+msgid ">= "
+msgstr ">= "
+
+#: fortran/dump-parse-tree.c:473
+#, c-format
+msgid "< "
+msgstr "< "
+
+#: fortran/dump-parse-tree.c:476
+#, c-format
+msgid "<= "
+msgstr "<= "
+
+#: fortran/dump-parse-tree.c:479
+#, c-format
+msgid "NOT "
+msgstr "NOT "
+
+#: fortran/dump-parse-tree.c:482
+#, c-format
+msgid "parens"
+msgstr "заграде"
+
+#: fortran/dump-parse-tree.c:504
+#, c-format
+msgid "%s["
+msgstr "%s["
+
+#: fortran/dump-parse-tree.c:510
+#, c-format
+msgid "%s[["
+msgstr "%s[["
+
+#: fortran/dump-parse-tree.c:531
+#, c-format
+msgid "(%s %s %s %s"
+msgstr "(%s %s %s %s"
+
+#: fortran/dump-parse-tree.c:537
+#, c-format
+msgid " ALLOCATABLE"
+msgstr " ALLOCATABLE"
+
+#: fortran/dump-parse-tree.c:539 fortran/dump-parse-tree.c:602
+#, c-format
+msgid " DIMENSION"
+msgstr " DIMENSION"
+
+#: fortran/dump-parse-tree.c:541
+#, c-format
+msgid " EXTERNAL"
+msgstr " EXTERNAL"
+
+#: fortran/dump-parse-tree.c:543
+#, c-format
+msgid " INTRINSIC"
+msgstr " INTRINSIC"
+
+#: fortran/dump-parse-tree.c:545
+#, c-format
+msgid " OPTIONAL"
+msgstr " OPTIONAL"
+
+#: fortran/dump-parse-tree.c:547 fortran/dump-parse-tree.c:600
+#, c-format
+msgid " POINTER"
+msgstr " POINTER"
+
+#: fortran/dump-parse-tree.c:549
+#, c-format
+msgid " SAVE"
+msgstr " SAVE"
+
+#: fortran/dump-parse-tree.c:551
+#, c-format
+msgid " TARGET"
+msgstr " TARGET"
+
+#: fortran/dump-parse-tree.c:553
+#, c-format
+msgid " DUMMY"
+msgstr " DUMMY"
+
+#: fortran/dump-parse-tree.c:555
+#, c-format
+msgid " RESULT"
+msgstr " RESULT"
+
+#: fortran/dump-parse-tree.c:557
+#, c-format
+msgid " ENTRY"
+msgstr " ENTRY"
+
+#: fortran/dump-parse-tree.c:560
+#, c-format
+msgid " DATA"
+msgstr " DATA"
+
+#: fortran/dump-parse-tree.c:562
+#, c-format
+msgid " USE-ASSOC"
+msgstr " USE-ASSOC"
+
+#: fortran/dump-parse-tree.c:564
+#, c-format
+msgid " IN-NAMELIST"
+msgstr " IN-NAMELIST"
+
+#: fortran/dump-parse-tree.c:566
+#, c-format
+msgid " IN-COMMON"
+msgstr " IN-COMMON"
+
+#: fortran/dump-parse-tree.c:569
+#, c-format
+msgid " FUNCTION"
+msgstr " FUNCTION"
+
+#: fortran/dump-parse-tree.c:571
+#, c-format
+msgid " SUBROUTINE"
+msgstr " SUBROUTINE"
+
+#: fortran/dump-parse-tree.c:573
+#, c-format
+msgid " IMPLICIT-TYPE"
+msgstr " IMPLICIT-TYPE"
+
+#: fortran/dump-parse-tree.c:576
+#, c-format
+msgid " SEQUENCE"
+msgstr " SEQUENCE"
+
+#: fortran/dump-parse-tree.c:578
+#, c-format
+msgid " ELEMENTAL"
+msgstr " ELEMENTAL"
+
+#: fortran/dump-parse-tree.c:580
+#, c-format
+msgid " PURE"
+msgstr " PURE"
+
+#: fortran/dump-parse-tree.c:582
+#, c-format
+msgid " RECURSIVE"
+msgstr " RECURSIVE"
+
+#: fortran/dump-parse-tree.c:628
+#, c-format
+msgid "symbol %s "
+msgstr "Ñимбол %s "
+
+#: fortran/dump-parse-tree.c:635
+#, c-format
+msgid "value: "
+msgstr "вредноÑÑ‚: "
+
+#: fortran/dump-parse-tree.c:642
+#, c-format
+msgid "Array spec:"
+msgstr "Одредница низа:"
+
+#: fortran/dump-parse-tree.c:649
+#, c-format
+msgid "Generic interfaces:"
+msgstr "Генеричка Ñучеља:"
+
+#: fortran/dump-parse-tree.c:651 fortran/dump-parse-tree.c:675
+#: fortran/dump-parse-tree.c:704 fortran/dump-parse-tree.c:1044
+#: fortran/dump-parse-tree.c:1050 fortran/dump-parse-tree.c:1535
+#, c-format
+msgid " %s"
+msgstr " %s"
+
+#: fortran/dump-parse-tree.c:657
+#, c-format
+msgid "result: %s"
+msgstr "резултат: %s"
+
+#: fortran/dump-parse-tree.c:663
+#, c-format
+msgid "components: "
+msgstr "компоненте: "
+
+#: fortran/dump-parse-tree.c:670
+#, c-format
+msgid "Formal arglist:"
+msgstr "Формална арглиÑта:"
+
+#: fortran/dump-parse-tree.c:677
+#, c-format
+msgid " [Alt Return]"
+msgstr " [алт ретурн]"
+
+#: fortran/dump-parse-tree.c:684
+#, c-format
+msgid "Formal namespace"
+msgstr "Формални именÑки проÑтор"
+
+#: fortran/dump-parse-tree.c:742
+#, c-format
+msgid "common: /%s/ "
+msgstr "заједничко: /%s/ "
+
+#: fortran/dump-parse-tree.c:750 fortran/dump-parse-tree.c:1471
+#, c-format
+msgid ", "
+msgstr ", "
+
+#: fortran/dump-parse-tree.c:763
+#, c-format
+msgid "symtree: %s Ambig %d"
+msgstr "ÑимÑтабло: %s двоÑм %d"
+
+#: fortran/dump-parse-tree.c:766
+#, c-format
+msgid " from namespace %s"
+msgstr " из именÑког проÑтора %s"
+
+#: fortran/dump-parse-tree.c:810
+#, c-format
+msgid "NOP"
+msgstr "NOP"
+
+#: fortran/dump-parse-tree.c:814
+#, c-format
+msgid "CONTINUE"
+msgstr "CONTINUE"
+
+#: fortran/dump-parse-tree.c:818
+#, c-format
+msgid "ENTRY %s"
+msgstr "ENTRY %s"
+
+#: fortran/dump-parse-tree.c:822
+#, c-format
+msgid "ASSIGN "
+msgstr "ASSIGN "
+
+#: fortran/dump-parse-tree.c:829
+#, c-format
+msgid "LABEL ASSIGN "
+msgstr "LABEL ASSIGN "
+
+#: fortran/dump-parse-tree.c:831
+#, c-format
+msgid " %d"
+msgstr " %d"
+
+#: fortran/dump-parse-tree.c:835
+#, c-format
+msgid "POINTER ASSIGN "
+msgstr "POINTER ASSIGN "
+
+#: fortran/dump-parse-tree.c:842
+#, c-format
+msgid "GOTO "
+msgstr "GOTO "
+
+#: fortran/dump-parse-tree.c:851
+#, c-format
+msgid ", ("
+msgstr ", ("
+
+#: fortran/dump-parse-tree.c:865
+#, c-format
+msgid "CALL %s "
+msgstr "CALL %s "
+
+#: fortran/dump-parse-tree.c:870
+#, c-format
+msgid "RETURN "
+msgstr "RETURN "
+
+#: fortran/dump-parse-tree.c:876
+#, c-format
+msgid "PAUSE "
+msgstr "PAUSE "
+
+#: fortran/dump-parse-tree.c:886
+#, c-format
+msgid "STOP "
+msgstr "STOP "
+
+#: fortran/dump-parse-tree.c:896 fortran/dump-parse-tree.c:904
+#, c-format
+msgid "IF "
+msgstr "IF "
+
+#: fortran/dump-parse-tree.c:898
+#, c-format
+msgid " %d, %d, %d"
+msgstr " %d, %d, %d"
+
+#: fortran/dump-parse-tree.c:915
+#, c-format
+msgid "ELSE\n"
+msgstr "ELSE\n"
+
+#: fortran/dump-parse-tree.c:918
+#, c-format
+msgid "ELSE IF "
+msgstr "ELSE IF "
+
+#: fortran/dump-parse-tree.c:928
+#, c-format
+msgid "ENDIF"
+msgstr "ENDIF"
+
+#: fortran/dump-parse-tree.c:933
+#, c-format
+msgid "SELECT CASE "
+msgstr "SELECT CASE "
+
+#: fortran/dump-parse-tree.c:941
+#, c-format
+msgid "CASE "
+msgstr "CASE "
+
+#: fortran/dump-parse-tree.c:957
+#, c-format
+msgid "END SELECT"
+msgstr "END SELECT"
+
+#: fortran/dump-parse-tree.c:961
+#, c-format
+msgid "WHERE "
+msgstr "WHERE "
+
+#: fortran/dump-parse-tree.c:972
+#, c-format
+msgid "ELSE WHERE "
+msgstr "ELSE WHERE "
+
+#: fortran/dump-parse-tree.c:979
+#, c-format
+msgid "END WHERE"
+msgstr "END WHERE"
+
+#: fortran/dump-parse-tree.c:984
+#, c-format
+msgid "FORALL "
+msgstr "FORALL "
+
+#: fortran/dump-parse-tree.c:1009
+#, c-format
+msgid "END FORALL"
+msgstr "END FORALL"
+
+#: fortran/dump-parse-tree.c:1013
+#, c-format
+msgid "DO "
+msgstr "DO "
+
+#: fortran/dump-parse-tree.c:1027 fortran/dump-parse-tree.c:1038
+#, c-format
+msgid "END DO"
+msgstr "END DO"
+
+#: fortran/dump-parse-tree.c:1031
+#, c-format
+msgid "DO WHILE "
+msgstr "DO WHILE "
+
+#: fortran/dump-parse-tree.c:1042
+#, c-format
+msgid "CYCLE"
+msgstr "CYCLE"
+
+#: fortran/dump-parse-tree.c:1048
+#, c-format
+msgid "EXIT"
+msgstr "EXIT"
+
+#: fortran/dump-parse-tree.c:1054
+#, c-format
+msgid "ALLOCATE "
+msgstr "ALLOCATE "
+
+#: fortran/dump-parse-tree.c:1057 fortran/dump-parse-tree.c:1073
+#, c-format
+msgid " STAT="
+msgstr " STAT="
+
+#: fortran/dump-parse-tree.c:1070
+#, c-format
+msgid "DEALLOCATE "
+msgstr "DEALLOCATE "
+
+#: fortran/dump-parse-tree.c:1086
+#, c-format
+msgid "OPEN"
+msgstr "OPEN"
+
+#: fortran/dump-parse-tree.c:1091 fortran/dump-parse-tree.c:1170
+#: fortran/dump-parse-tree.c:1212 fortran/dump-parse-tree.c:1235
+#: fortran/dump-parse-tree.c:1387
+#, c-format
+msgid " UNIT="
+msgstr " UNIT="
+
+#: fortran/dump-parse-tree.c:1096 fortran/dump-parse-tree.c:1175
+#: fortran/dump-parse-tree.c:1217 fortran/dump-parse-tree.c:1246
+#: fortran/dump-parse-tree.c:1404
+#, c-format
+msgid " IOMSG="
+msgstr " IOMSG="
+
+#: fortran/dump-parse-tree.c:1101 fortran/dump-parse-tree.c:1180
+#: fortran/dump-parse-tree.c:1222 fortran/dump-parse-tree.c:1251
+#: fortran/dump-parse-tree.c:1409
+#, c-format
+msgid " IOSTAT="
+msgstr " IOSTAT="
+
+#: fortran/dump-parse-tree.c:1106 fortran/dump-parse-tree.c:1240
+#, c-format
+msgid " FILE="
+msgstr " FILE="
+
+#: fortran/dump-parse-tree.c:1111 fortran/dump-parse-tree.c:1185
+#, c-format
+msgid " STATUS="
+msgstr " STATUS="
+
+#: fortran/dump-parse-tree.c:1116 fortran/dump-parse-tree.c:1281
+#, c-format
+msgid " ACCESS="
+msgstr " ACCESS="
+
+#: fortran/dump-parse-tree.c:1121 fortran/dump-parse-tree.c:1297
+#, c-format
+msgid " FORM="
+msgstr " FORM="
+
+#: fortran/dump-parse-tree.c:1126 fortran/dump-parse-tree.c:1312
+#, c-format
+msgid " RECL="
+msgstr " RECL="
+
+#: fortran/dump-parse-tree.c:1131 fortran/dump-parse-tree.c:1322
+#, c-format
+msgid " BLANK="
+msgstr " BLANK="
+
+#: fortran/dump-parse-tree.c:1136 fortran/dump-parse-tree.c:1327
+#, c-format
+msgid " POSITION="
+msgstr " POSITION="
+
+#: fortran/dump-parse-tree.c:1141 fortran/dump-parse-tree.c:1332
+#, c-format
+msgid " ACTION="
+msgstr " ACTION="
+
+#: fortran/dump-parse-tree.c:1146 fortran/dump-parse-tree.c:1352
+#, c-format
+msgid " DELIM="
+msgstr " DELIM="
+
+#: fortran/dump-parse-tree.c:1151 fortran/dump-parse-tree.c:1357
+#, c-format
+msgid " PAD="
+msgstr " PAD="
+
+#: fortran/dump-parse-tree.c:1156 fortran/dump-parse-tree.c:1362
+#, c-format
+msgid " CONVERT="
+msgstr " CONVERT="
+
+#: fortran/dump-parse-tree.c:1160 fortran/dump-parse-tree.c:1189
+#: fortran/dump-parse-tree.c:1226 fortran/dump-parse-tree.c:1367
+#: fortran/dump-parse-tree.c:1444
+#, c-format
+msgid " ERR=%d"
+msgstr " ERR=%d"
+
+#: fortran/dump-parse-tree.c:1165
+#, c-format
+msgid "CLOSE"
+msgstr "CLOSE"
+
+#: fortran/dump-parse-tree.c:1193
+#, c-format
+msgid "BACKSPACE"
+msgstr "BACKSPACE"
+
+#: fortran/dump-parse-tree.c:1197
+#, c-format
+msgid "ENDFILE"
+msgstr "ENDFILE"
+
+#: fortran/dump-parse-tree.c:1201
+#, c-format
+msgid "REWIND"
+msgstr "REWIND"
+
+#: fortran/dump-parse-tree.c:1205
+#, c-format
+msgid "FLUSH"
+msgstr "FLUSH"
+
+#: fortran/dump-parse-tree.c:1230
+#, c-format
+msgid "INQUIRE"
+msgstr "INQUIRE"
+
+#: fortran/dump-parse-tree.c:1256
+#, c-format
+msgid " EXIST="
+msgstr " EXIST="
+
+#: fortran/dump-parse-tree.c:1261
+#, c-format
+msgid " OPENED="
+msgstr " OPENED="
+
+#: fortran/dump-parse-tree.c:1266
+#, c-format
+msgid " NUMBER="
+msgstr " NUMBER="
+
+#: fortran/dump-parse-tree.c:1271
+#, c-format
+msgid " NAMED="
+msgstr " NAMED="
+
+#: fortran/dump-parse-tree.c:1276
+#, c-format
+msgid " NAME="
+msgstr " NAME="
+
+#: fortran/dump-parse-tree.c:1286
+#, c-format
+msgid " SEQUENTIAL="
+msgstr " SEQUENTIAL="
+
+#: fortran/dump-parse-tree.c:1292
+#, c-format
+msgid " DIRECT="
+msgstr " DIRECT="
+
+#: fortran/dump-parse-tree.c:1302
+#, c-format
+msgid " FORMATTED"
+msgstr " FORMATTED"
+
+#: fortran/dump-parse-tree.c:1307
+#, c-format
+msgid " UNFORMATTED="
+msgstr " UNFORMATTED="
+
+#: fortran/dump-parse-tree.c:1317
+#, c-format
+msgid " NEXTREC="
+msgstr " NEXTREC="
+
+#: fortran/dump-parse-tree.c:1337
+#, c-format
+msgid " READ="
+msgstr " READ="
+
+#: fortran/dump-parse-tree.c:1342
+#, c-format
+msgid " WRITE="
+msgstr " WRITE="
+
+#: fortran/dump-parse-tree.c:1347
+#, c-format
+msgid " READWRITE="
+msgstr " READWRITE="
+
+#: fortran/dump-parse-tree.c:1371
+#, c-format
+msgid "IOLENGTH "
+msgstr "IOLENGTH "
+
+#: fortran/dump-parse-tree.c:1377
+#, c-format
+msgid "READ"
+msgstr "READ"
+
+#: fortran/dump-parse-tree.c:1381
+#, c-format
+msgid "WRITE"
+msgstr "WRITE"
+
+#: fortran/dump-parse-tree.c:1393
+#, c-format
+msgid " FMT="
+msgstr " FMT="
+
+#: fortran/dump-parse-tree.c:1398
+#, c-format
+msgid " FMT=%d"
+msgstr " FMT=%d"
+
+#: fortran/dump-parse-tree.c:1400
+#, c-format
+msgid " NML=%s"
+msgstr " NML=%s"
+
+#: fortran/dump-parse-tree.c:1414
+#, c-format
+msgid " SIZE="
+msgstr " SIZE="
+
+#: fortran/dump-parse-tree.c:1419
+#, c-format
+msgid " REC="
+msgstr " REC="
+
+#: fortran/dump-parse-tree.c:1424
+#, c-format
+msgid " ADVANCE="
+msgstr " ADVANCE="
+
+#: fortran/dump-parse-tree.c:1435
+#, c-format
+msgid "TRANSFER "
+msgstr "TRANSFER "
+
+#: fortran/dump-parse-tree.c:1440
+#, c-format
+msgid "DT_END"
+msgstr "DT_END"
+
+#: fortran/dump-parse-tree.c:1446
+#, c-format
+msgid " END=%d"
+msgstr " END=%d"
+
+#: fortran/dump-parse-tree.c:1448
+#, c-format
+msgid " EOR=%d"
+msgstr " EOR=%d"
+
+#: fortran/dump-parse-tree.c:1465
+#, c-format
+msgid "Equivalence: "
+msgstr "Еквиваленција: "
+
+#: fortran/dump-parse-tree.c:1491
+#, c-format
+msgid "Namespace:"
+msgstr "ИменÑки проÑтор:"
+
+#: fortran/dump-parse-tree.c:1505
+#, c-format
+msgid " %c-%c: "
+msgstr " %c-%c: "
+
+#: fortran/dump-parse-tree.c:1507
+#, c-format
+msgid " %c: "
+msgstr " %c: "
+
+#: fortran/dump-parse-tree.c:1516
+#, c-format
+msgid "procedure name = %s"
+msgstr "име процедуре = %s"
+
+#: fortran/dump-parse-tree.c:1532
+#, c-format
+msgid "Operator interfaces for %s:"
+msgstr "ОператорÑка Ñучеља за %s:"
+
+#: fortran/dump-parse-tree.c:1541
+#, c-format
+msgid "User operators:\n"
+msgstr "КориÑнички оператори:\n"
+
+#: fortran/dump-parse-tree.c:1557
+#, c-format
+msgid "CONTAINS\n"
+msgstr "CONTAINS\n"
+
+#: fortran/error.c:137
+#, no-c-format
+msgid "In file %s:%d\n"
+msgstr "У датотеци %s:%d\n"
+
+#: fortran/error.c:152
+#, no-c-format
+msgid " Included at %s:%d\n"
+msgstr " Укључено код %s:%d\n"
+
+#: fortran/error.c:204
+#, no-c-format
+msgid "<During initialization>\n"
+msgstr "<Током уÑпоÑтављања>\n"
+
+#: fortran/error.c:479 fortran/error.c:535 fortran/error.c:561
+msgid "Warning:"
+msgstr "Упозорење:"
+
+#: fortran/error.c:537 fortran/error.c:611 fortran/error.c:635
+msgid "Error:"
+msgstr "Грешка:"
+
+#: fortran/error.c:656
+msgid "Fatal Error:"
+msgstr "Кобна грешка:"
+
+#: fortran/error.c:675
+#, no-c-format
+msgid "Internal Error at (1):"
+msgstr "Унутрашња грешка код (1):"
+
+#: fortran/expr.c:258
+#, c-format
+msgid "Constant expression required at %C"
+msgstr "Ðеопходан конÑтантан израз код %C"
+
+#: fortran/expr.c:261
+#, c-format
+msgid "Integer expression required at %C"
+msgstr "Ðеопходан целобројни израз код %C"
+
+#: fortran/expr.c:266
+#, c-format
+msgid "Integer value too large in expression at %C"
+msgstr "Превелика целобројна вредноÑÑ‚ у изразу код %C"
+
+#: fortran/expr.c:1274
+#, no-c-format
+msgid "Numeric or CHARACTER operands are required in expression at %L"
+msgstr "Ðеопходни бројевни или знаковни операнди у изразу код %L"
+
+#: fortran/expr.c:1294
+#, no-c-format
+msgid "Exponent at %L must be INTEGER for an initialization expression"
+msgstr "Изложилац код %L мора бити целобројан за уÑпоÑтављачки израз"
+
+#: fortran/expr.c:1307
+#, no-c-format
+msgid "Concatenation operator in expression at %L must have two CHARACTER operands"
+msgstr "Оператор надовезивања у изразу код %L мора имати два знаковна операнда"
+
+#: fortran/expr.c:1314
+#, no-c-format
+msgid "Concat operator at %L must concatenate strings of the same kind"
+msgstr "Оператор надовезивања код %L мора надовезивати ниÑке иÑте врÑте"
+
+#: fortran/expr.c:1324
+#, no-c-format
+msgid ".NOT. operator in expression at %L must have a LOGICAL operand"
+msgstr "Оператор .NOT. у изразу код %L мора имати логички операнд"
+
+#: fortran/expr.c:1340
+#, no-c-format
+msgid "LOGICAL operands are required in expression at %L"
+msgstr "Ðеопходни Ñу логички операнди у изразу код %L"
+
+#: fortran/expr.c:1351
+#, no-c-format
+msgid "Only intrinsic operators can be used in expression at %L"
+msgstr "Могу Ñе кориÑтити Ñамо ÑопÑтвени оператори у изразу код %L"
+
+#: fortran/expr.c:1359
+#, no-c-format
+msgid "Numeric operands are required in expression at %L"
+msgstr "Ðеопходни Ñу бројевни операнди у изразу код %L"
+
+#: fortran/expr.c:1423
+#, no-c-format
+msgid "The F95 does not permit the assumed character length variable '%s' in constant expression at %L."
+msgstr "Фортран 95 не допушта променљиву претпоÑтављене знаковне дужине ‘%s’ у конÑтантном изразу код %L."
+
+#: fortran/expr.c:1476
+#, no-c-format
+msgid "Function '%s' in initialization expression at %L must be an intrinsic function"
+msgstr "Функција ‘%s’ у уÑпоÑтављачком изразу код %L мора бити ÑопÑтвена"
+
+#: fortran/expr.c:1498
+#, no-c-format
+msgid "Parameter '%s' at %L has not been declared or is a variable, which does not reduce to a constant expression"
+msgstr "Параметар ‘%s’ код %L није деклариÑан или је променљива, што Ñе не Ñкраћује на конÑтантан израз"
+
+#: fortran/expr.c:1583
+#, no-c-format
+msgid "Initialization expression didn't reduce %C"
+msgstr "Иницијализујући израз не Ñкраћује %C"
+
+#: fortran/expr.c:1627
+#, no-c-format
+msgid "Specification function '%s' at %L cannot be a statement function"
+msgstr "Одредничка функција ‘%s’ код %L не може бити наредбена функција"
+
+#: fortran/expr.c:1634
+#, no-c-format
+msgid "Specification function '%s' at %L cannot be an internal function"
+msgstr "Одредничка функција ‘%s’ код %L не може бити унутрашња функција"
+
+#: fortran/expr.c:1641
+#, no-c-format
+msgid "Specification function '%s' at %L must be PURE"
+msgstr "Одредничка функција ‘%s’ код %L мора бити чиÑта"
+
+#: fortran/expr.c:1648
+#, no-c-format
+msgid "Specification function '%s' at %L cannot be RECURSIVE"
+msgstr "Одредничка функција ‘%s’ код %L не може бити рекурзивна"
+
+#: fortran/expr.c:1705
+#, no-c-format
+msgid "Dummy argument '%s' at %L cannot be OPTIONAL"
+msgstr "Лажни аргумент ‘%s’ код %L не може бити опцион"
+
+#: fortran/expr.c:1712
+#, no-c-format
+msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)"
+msgstr "Лажни аргумент ‘%s’ код %L не може бити намере-из"
+
+#: fortran/expr.c:1732
+#, no-c-format
+msgid "Variable '%s' cannot appear in the expression at %L"
+msgstr "Променљива ‘%s’ Ñе не може јавити у изразу код %L"
+
+#: fortran/expr.c:1780
+#, no-c-format
+msgid "Expression at %L must be of INTEGER type"
+msgstr "Израз код %L мора бити целобројног типа"
+
+#: fortran/expr.c:1786
+#, no-c-format
+msgid "Expression at %L must be scalar"
+msgstr "Израз код %L мора бити Ñкалар"
+
+#: fortran/expr.c:1814
+#, no-c-format
+msgid "Incompatible ranks in %s at %L"
+msgstr "ÐеÑаглаÑни рангови у %s код %L"
+
+#: fortran/expr.c:1828
+#, no-c-format
+msgid "different shape for %s at %L on dimension %d (%d/%d)"
+msgstr "%s код %L има различит облик за димензију %d (%d/%d)"
+
+#: fortran/expr.c:1861
+#, no-c-format
+msgid "Can't assign to INTENT(IN) variable '%s' at %L"
+msgstr "Ðе могу да доделим променљивој намере-у ‘%s’ код %L"
+
+#: fortran/expr.c:1905
+#, no-c-format
+msgid "'%s' at %L is not a VALUE"
+msgstr "‘%s’ код %L није вредноÑÑ‚"
+
+#: fortran/expr.c:1912
+#, no-c-format
+msgid "Incompatible ranks %d and %d in assignment at %L"
+msgstr "ÐеÑаглаÑни рангови %d и %d у додели код %L"
+
+#: fortran/expr.c:1919
+#, no-c-format
+msgid "Variable type is UNKNOWN in assignment at %L"
+msgstr "Тип променљиве је UNKNOWN у додели код %L"
+
+#: fortran/expr.c:1926
+#, no-c-format
+msgid "NULL appears on right-hand side in assignment at %L"
+msgstr "Појављује Ñе NULL на деÑној Ñтрани у додели код %L"
+
+#: fortran/expr.c:1936
+#, no-c-format
+msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal."
+msgstr "ВекторÑка додела у Крејов показивани претпоÑтављене величине код %L није дозвољена."
+
+#: fortran/expr.c:1945
+#, no-c-format
+msgid "POINTER valued function appears on right-hand side of assignment at %L"
+msgstr "Функција Ñа показивачком вредношћу појављује Ñе на деÑној Ñтрани доделе код %L"
+
+#: fortran/expr.c:1950
+msgid "Array assignment"
+msgstr "Ðизовна додела"
+
+#: fortran/expr.c:1967
+#, no-c-format
+msgid "Incompatible types in assignment at %L, %s to %s"
+msgstr "ÐеÑаглаÑни типови у додели код %L, %s у %s"
+
+#: fortran/expr.c:1990
+#, no-c-format
+msgid "Pointer assignment target is not a POINTER at %L"
+msgstr "Циљ доделе показивача није показивач код %L"
+
+#: fortran/expr.c:1998
+#, no-c-format
+msgid "'%s' in the pointer assignment at %L cannot be an l-value since it is a procedure"
+msgstr "‘%s’ у додели показивача код %L не може бити л-вредноÑÑ‚ јер је процедура"
+
+#: fortran/expr.c:2007
+#, no-c-format
+msgid "Pointer assignment to non-POINTER at %L"
+msgstr "Додела показивача непоказивачу код %L"
+
+#: fortran/expr.c:2015
+#, no-c-format
+msgid "Bad pointer object in PURE procedure at %L"
+msgstr "Лош показивачки објекат у чиÑтој процедури код %L"
+
+#: fortran/expr.c:2028
+#, no-c-format
+msgid "Different types in pointer assignment at %L"
+msgstr "Различити типови у додели показивача код %L"
+
+#: fortran/expr.c:2035
+#, no-c-format
+msgid "Different kind type parameters in pointer assignment at %L"
+msgstr "Различите врÑте типова параметара у додели показивача код %L"
+
+#: fortran/expr.c:2042
+#, no-c-format
+msgid "Different ranks in pointer assignment at %L"
+msgstr "Различити рангови у додели показивача код %L"
+
+#: fortran/expr.c:2056
+#, no-c-format
+msgid "Different character lengths in pointer assignment at %L"
+msgstr "Различите знаковне дужине у додели показивача код %L"
+
+#: fortran/expr.c:2064
+#, no-c-format
+msgid "Pointer assignment target is neither TARGET nor POINTER at %L"
+msgstr "Циљ доделе показивача није ни циљ ни показивач код %L"
+
+#: fortran/expr.c:2071
+#, no-c-format
+msgid "Bad target in pointer assignment in PURE procedure at %L"
+msgstr "Лош циљ у додели показивача у чиÑтој процедури код %L"
+
+#: fortran/expr.c:2077
+#, no-c-format
+msgid "Pointer assignment with vector subscript on rhs at %L"
+msgstr "Додела показивача Ñа векторÑким индекÑом на деÑној Ñтрани код %L"
+
+#: fortran/expr.c:2095
+#, no-c-format
+msgid "The upper bound in the last dimension of the assumed_size array on the rhs of the pointer assignment at %L must be set"
+msgstr "Горња граница поÑледње димензије низа претпоÑтављене величине, на деÑној Ñтрани доделе показивача код %L, мора бити поÑтављена"
+
+#: fortran/gfortranspec.c:232
+#, c-format
+msgid "overflowed output arg list for '%s'"
+msgstr "преливена лиÑта излазних аргумената за ‘%s’"
+
+#: fortran/gfortranspec.c:352
+#, c-format
+msgid ""
+"GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of GNU Fortran\n"
+"under the terms of the GNU General Public License.\n"
+"For more information about these matters, see the file named COPYING\n"
+"\n"
+msgstr ""
+"Гнуов фортран долази БЕЗ ГÐРÐÐЦИЈÐ, колико је допуштено законом.\n"
+"Можете делити копије Гнуовог фортрана\n"
+"под уÑловима Гнуове Опште јавне лиценце.\n"
+"За више информација о овоме, погледајте датотеку по имену COPYING\n"
+
+#: fortran/gfortranspec.c:374
+#, c-format
+msgid "argument to '%s' missing"
+msgstr "недоÑтаје аргумент за ‘%s’"
+
+#: fortran/gfortranspec.c:378
+#, c-format
+msgid "no input files; unwilling to write output files"
+msgstr "нема улазних датотека; безвољан да запишем излазне"
+
+#: fortran/gfortranspec.c:530
+#, c-format
+msgid "Driving:"
+msgstr "Погон:"
+
+#: fortran/interface.c:175
+#, no-c-format
+msgid "Syntax error in generic specification at %C"
+msgstr "СинтакÑна грешка у генеричкој одредници код %C"
+
+#: fortran/interface.c:204
+#, no-c-format
+msgid "Syntax error: Trailing garbage in INTERFACE statement at %C"
+msgstr "СинтакÑна грешка: Пратеће Ñмеће у наредби INTERFACE код %C"
+
+#: fortran/interface.c:262
+#, no-c-format
+msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C"
+msgstr "СинтакÑна грешка: Пратеће Ñмеће у наредби END INTERFACE код %C"
+
+#: fortran/interface.c:273
+#, no-c-format
+msgid "Expected a nameless interface at %C"
+msgstr "Очекивано је безимено Ñучеље код %C"
+
+#: fortran/interface.c:284
+#, no-c-format
+msgid "Expected 'END INTERFACE ASSIGNMENT (=)' at %C"
+msgstr "Очекивано је ‘END INTERFACE ASSIGNMENT (=)’ код %C"
+
+#: fortran/interface.c:286
+#, no-c-format
+msgid "Expecting 'END INTERFACE OPERATOR (%s)' at %C"
+msgstr "Очекивано је ‘END INTERFACE OPERATOR (%s)’ код %C"
+
+#: fortran/interface.c:300
+#, no-c-format
+msgid "Expecting 'END INTERFACE OPERATOR (.%s.)' at %C"
+msgstr "Очекивано је ‘END INTERFACE OPERATOR (.%s.)’ код %C"
+
+#: fortran/interface.c:311
+#, no-c-format
+msgid "Expecting 'END INTERFACE %s' at %C"
+msgstr "Очекивано је ‘END INTERFACE %s’ код %C"
+
+#: fortran/interface.c:523
+#, no-c-format
+msgid "Assignment operator interface at %L must be a SUBROUTINE"
+msgstr "Сучеље оператора доделе код %L мора бити потпрограм"
+
+#: fortran/interface.c:532
+#, no-c-format
+msgid "Intrinsic operator interface at %L must be a FUNCTION"
+msgstr "Сучеље ÑопÑтвеног оператора код %L мора бити функција"
+
+#: fortran/interface.c:619
+#, no-c-format
+msgid "First argument of defined assignment at %L must be INTENT(IN) or INTENT(INOUT)"
+msgstr "Први аргумент дефиниÑане доделе код %L мора бити намере-у или -у/из"
+
+#: fortran/interface.c:623
+#, no-c-format
+msgid "Second argument of defined assignment at %L must be INTENT(IN)"
+msgstr "Други аргумент дефиниÑане доделе код %L мора бити намере-у"
+
+#: fortran/interface.c:629 fortran/resolve.c:6021
+#, no-c-format
+msgid "First argument of operator interface at %L must be INTENT(IN)"
+msgstr "Први аргумент Ñучеља оператора код %L мора бити намере-у"
+
+#: fortran/interface.c:633 fortran/resolve.c:6033
+#, no-c-format
+msgid "Second argument of operator interface at %L must be INTENT(IN)"
+msgstr "Други аргумент Ñучеља оператора код %L мора бити намере-у"
+
+#: fortran/interface.c:640
+#, no-c-format
+msgid "Operator interface at %L conflicts with intrinsic interface"
+msgstr "Сучеље оператора код %L коÑи Ñе Ñа ÑопÑтвеним Ñучељем"
+
+#: fortran/interface.c:645
+#, no-c-format
+msgid "Operator interface at %L has the wrong number of arguments"
+msgstr "Сучеље оператора код %L има погрешан број аргумената"
+
+#: fortran/interface.c:894
+#, no-c-format
+msgid "Procedure '%s' in %s at %L is neither function nor subroutine"
+msgstr "Процедура ‘%s’ у %s код %L није ни функција ни потпрограм"
+
+#: fortran/interface.c:948
+#, no-c-format
+msgid "Ambiguous interfaces '%s' and '%s' in %s at %L"
+msgstr "ДвоÑмиÑлена Ñучеља ‘%s’ и ‘%s’ у %s код %L"
+
+#: fortran/interface.c:1198
+#, no-c-format
+msgid "Keyword argument '%s' at %L is not in the procedure"
+msgstr "Кључна реч ‘%s’ код %L није у процедури"
+
+#: fortran/interface.c:1207
+#, no-c-format
+msgid "Keyword argument '%s' at %L is already associated with another actual argument"
+msgstr "Кључна реч ‘%s’ код %L је већ придружена другом Ñтварном аргументу"
+
+#: fortran/interface.c:1217
+#, no-c-format
+msgid "More actual than formal arguments in procedure call at %L"
+msgstr "Више Ñтварних него формалних аргумената у позиву процедуре код %L"
+
+#: fortran/interface.c:1230
+#, no-c-format
+msgid "Missing alternate return spec in subroutine call at %L"
+msgstr "ÐедоÑтаје одредница алтернативног враћања у позиву потпрограма код %L"
+
+#: fortran/interface.c:1239
+#, no-c-format
+msgid "Unexpected alternate return spec in subroutine call at %L"
+msgstr "Ðеочекивана одредница алтернативног враћања у позиву потпрограма код %L"
+
+#: fortran/interface.c:1254
+#, no-c-format
+msgid "Type/rank mismatch in argument '%s' at %L"
+msgstr "ÐеÑлагање типа/ранга у аргументу ‘%s’ код %L"
+
+#: fortran/interface.c:1269
+#, no-c-format
+msgid "Actual argument for '%s' cannot be an assumed-size array at %L"
+msgstr "Стварни аргумент за ‘%s’ код %L не може бити низ претпоÑтављене величине"
+
+#: fortran/interface.c:1278
+#, no-c-format
+msgid "Actual argument for '%s' must be a pointer at %L"
+msgstr "Стварни аргумент за ‘%s’ код %L мора бити показивач"
+
+#: fortran/interface.c:1288
+#, no-c-format
+msgid "Actual argument at %L must be definable to match dummy INTENT = OUT/INOUT"
+msgstr "Стварни аргумент код %L мора бити могуће дефиниÑати да одговара лажном INTENT = OUT/INOUT"
+
+#: fortran/interface.c:1309
+#, no-c-format
+msgid "Missing actual argument for argument '%s' at %L"
+msgstr "ÐедоÑтаје Ñтварни аргумент за аргумент ‘%s’ код %L"
+
+#: fortran/interface.c:1494
+#, no-c-format
+msgid "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) argument '%s' at %L"
+msgstr "ИÑти Ñтварни аргумент придружен намере-%s аргументу ‘%s’ и намере-%s аргументу ‘%s’ код %L"
+
+#: fortran/interface.c:1535
+#, no-c-format
+msgid "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)"
+msgstr "Ðргумент процедуре код %L је намере-у док Ñучеље задаје намеру-%s"
+
+#: fortran/interface.c:1546
+#, no-c-format
+msgid "Procedure argument at %L is local to a PURE procedure and is passed to an INTENT(%s) argument"
+msgstr "Ðргумент процедуре код %L је локалан у чиÑтој процедури и проÑлеђује Ñе аргументу намере-%s"
+
+#: fortran/interface.c:1555
+#, no-c-format
+msgid "Procedure argument at %L is local to a PURE procedure and has the POINTER attribute"
+msgstr "Ðргумент процедуре код %L је локалан у чиÑтој процедури и има атрибут показивача"
+
+#: fortran/interface.c:1577
+#, no-c-format
+msgid "Procedure '%s' called with an implicit interface at %L"
+msgstr "Процедура ‘%s’ позвана Ñа имплицитним Ñучељем код %L"
+
+#: fortran/interface.c:1744
+#, no-c-format
+msgid "Function '%s' called in lieu of an operator at %L must be PURE"
+msgstr "Функција ‘%s’ позвана умеÑто оператора код %L мора бити чиÑта"
+
+#: fortran/interface.c:1824
+#, no-c-format
+msgid "Entity '%s' at %C is already present in the interface"
+msgstr "Ентитет ‘%s’ код %C је већ приÑутан у Ñучељу"
+
+#: fortran/intrinsic.c:2720
+#, no-c-format
+msgid "Too many arguments in call to '%s' at %L"
+msgstr "Превише аргумената у позиву ‘%s’ код %L"
+
+#: fortran/intrinsic.c:2734
+#, no-c-format
+msgid "Can't find keyword named '%s' in call to '%s' at %L"
+msgstr "Ðе могу да нађем кључну реч по имену ‘%s’ у позиву ‘%s’ код %L"
+
+#: fortran/intrinsic.c:2741
+#, no-c-format
+msgid "Argument '%s' is appears twice in call to '%s' at %L"
+msgstr "Ðргумент ‘%s’ Ñе појављује двапут у позиву ‘%s’ код %L"
+
+#: fortran/intrinsic.c:2755
+#, no-c-format
+msgid "Missing actual argument '%s' in call to '%s' at %L"
+msgstr "ÐедоÑтаје Ñтварни аргумент ‘%s’ у позиву ‘%s’ код %L"
+
+#: fortran/intrinsic.c:2814
+#, no-c-format
+msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s"
+msgstr "Тип аргумента ‘%s’ у позиву ‘%s’ код %L треба да је %s, не %s"
+
+#: fortran/intrinsic.c:3118
+#, no-c-format
+msgid "Ranks of arguments to elemental intrinsic '%s' differ at %L"
+msgstr "Ðе Ñлажу Ñе рангови аргумената за елементално ÑопÑтвено ‘%s’ код %L"
+
+#: fortran/intrinsic.c:3164
+#, no-c-format
+msgid "Intrinsic '%s' at %L is not included in the selected standard"
+msgstr "СопÑтвено ‘%s’ код %L није укључено у изабрани Ñтандард"
+
+#: fortran/intrinsic.c:3267
+#, no-c-format
+msgid "Extension: Evaluation of nonstandard initialization expression at %L"
+msgstr "Проширење: Израчунавање неÑтандардног уÑпоÑтављачког израза код %L"
+
+#: fortran/intrinsic.c:3327
+#, no-c-format
+msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
+msgstr "Позив потпрограма ÑопÑтвеног ‘%s’ код %L није чиÑÑ‚"
+
+#: fortran/intrinsic.c:3402
+#, no-c-format
+msgid "Extension: Conversion from %s to %s at %L"
+msgstr "Проширење: Претварање из %s у %s код %L"
+
+#: fortran/intrinsic.c:3405
+#, no-c-format
+msgid "Conversion from %s to %s at %L"
+msgstr "Претварање из %s у %s код %L"
+
+#: fortran/intrinsic.c:3453
+#, no-c-format
+msgid "Can't convert %s to %s at %L"
+msgstr "Ðе могу да претворим %s у %s код %L"
+
+#: fortran/io.c:415
+msgid "Positive width required"
+msgstr "Потребна је позитивна ширина"
+
+#: fortran/io.c:416
+msgid "Period required"
+msgstr "Потребан је период"
+
+#: fortran/io.c:417
+msgid "Nonnegative width required"
+msgstr "Потребна је ненегативна ширина"
+
+#: fortran/io.c:418
+msgid "Unexpected element"
+msgstr "Ðеочекивани елемент"
+
+#: fortran/io.c:419
+msgid "Unexpected end of format string"
+msgstr "Ðеочекивани крај форматирајуће ниÑке"
+
+#: fortran/io.c:436
+msgid "Missing leading left parenthesis"
+msgstr "ÐедоÑтаје водећа лева заграда"
+
+#: fortran/io.c:474
+msgid "Expected P edit descriptor"
+msgstr "Очекиван је опиÑник уређивања P"
+
+#. P requires a prior number.
+#: fortran/io.c:482
+msgid "P descriptor requires leading scale factor"
+msgstr "ОпиÑник P захтева водећи фактор размере"
+
+#. X requires a prior number if we're being pedantic.
+#: fortran/io.c:487
+#, no-c-format
+msgid "Extension: X descriptor requires leading space count at %C"
+msgstr "Проширење: ОпиÑник X захтева водећи број размака код %C"
+
+#: fortran/io.c:507
+#, no-c-format
+msgid "Extension: $ descriptor at %C"
+msgstr "Проширење: опиÑник $ код %C"
+
+#: fortran/io.c:512
+msgid "$ must be the last specifier"
+msgstr "$ мора бити задњи наводилац"
+
+#: fortran/io.c:557
+msgid "Repeat count cannot follow P descriptor"
+msgstr "Број понављања не може пратити опиÑник P"
+
+#: fortran/io.c:576
+#, no-c-format
+msgid "Extension: Missing positive width after L descriptor at %C"
+msgstr "Проширење: ÐедоÑтаје позитивна ширина поÑле опиÑника L код %C"
+
+#: fortran/io.c:638
+msgid "Positive exponent width required"
+msgstr "Потребна је позитивна ширина изложиоца"
+
+#: fortran/io.c:739 fortran/io.c:791
+#, no-c-format
+msgid "Extension: Missing comma at %C"
+msgstr "Проширење: ÐедоÑтаје зарез код %C"
+
+#: fortran/io.c:806 fortran/io.c:809
+#, no-c-format
+msgid "%s in format string at %C"
+msgstr "%s у форматирајућој ниÑки код %C"
+
+#: fortran/io.c:850
+#, no-c-format
+msgid "Format statement in module main block at %C."
+msgstr "Ðаредба форматирања у главном блоку модула код %C."
+
+#: fortran/io.c:856
+#, no-c-format
+msgid "Missing format label at %C"
+msgstr "ÐедоÑтаје етикета формата код %C"
+
+#: fortran/io.c:914 fortran/io.c:938
+#, no-c-format
+msgid "Duplicate %s specification at %C"
+msgstr "ДвоÑтрука одредница %s код %C"
+
+#: fortran/io.c:945
+#, no-c-format
+msgid "Variable tag cannot be INTENT(IN) at %C"
+msgstr "Ознака променљиве не може бити намере-у код %C"
+
+#: fortran/io.c:952
+#, no-c-format
+msgid "Variable tag cannot be assigned in PURE procedure at %C"
+msgstr "Ознака променљиве не може бити додељена у чиÑтој процедури код %C"
+
+#: fortran/io.c:989
+#, no-c-format
+msgid "Duplicate %s label specification at %C"
+msgstr "ДвоÑтрука одредница етикете %s код %C"
+
+#: fortran/io.c:1015
+#, no-c-format
+msgid "%s tag at %L must be of type %s"
+msgstr "Ознака %s код %L мора бити типа %s"
+
+#: fortran/io.c:1026
+#, no-c-format
+msgid "Constant expression in FORMAT tag at %L must be of type default CHARACTER"
+msgstr "КонÑтантан израз у ознаци FORMAT код %L мора бити типа подразумеваног CHARACTER"
+
+#: fortran/io.c:1039
+#, no-c-format
+msgid "%s tag at %L must be of type %s or %s"
+msgstr "Ознака %s код %L мора бити типа %s или %s"
+
+#: fortran/io.c:1047
+#, no-c-format
+msgid "Obsolete: ASSIGNED variable in FORMAT tag at %L"
+msgstr "ЗаÑтарело: Додељена променљива у ознаци FORMAT код %L"
+
+#: fortran/io.c:1052
+#, no-c-format
+msgid "Variable '%s' at %L has not been assigned a format label"
+msgstr "Променљивој ‘%s’ код %L није додељена етикета формата"
+
+#: fortran/io.c:1067
+#, no-c-format
+msgid "Extension: Character array in FORMAT tag at %L"
+msgstr "Проширење: Знаковни низ у ознаци FORMAT код %L"
+
+#: fortran/io.c:1074
+#, no-c-format
+msgid "Extension: Non-character in FORMAT tag at %L"
+msgstr "Проширење: Ðе-знак у ознаци FORMAT код %L"
+
+#: fortran/io.c:1085
+#, no-c-format
+msgid "%s tag at %L must be scalar"
+msgstr "Ознака %s код %L мора бити Ñкалар"
+
+#: fortran/io.c:1091
+#, no-c-format
+msgid "Fortran 2003: IOMSG tag at %L"
+msgstr "Фортран 2003: Ознака IOMSG код %L"
+
+#: fortran/io.c:1098
+#, no-c-format
+msgid "Fortran 95 requires default INTEGER in IOSTAT tag at %L"
+msgstr "Фортран 95 захтева подразумевни цео број у ознаци IOSTAT код %L"
+
+#: fortran/io.c:1106
+#, no-c-format
+msgid "Fortran 95 requires default INTEGER in SIZE tag at %L"
+msgstr "Фортран 95 захтева подразумевни цео број у ознаци SIZE код %L"
+
+#: fortran/io.c:1114
+#, no-c-format
+msgid "Extension: CONVERT tag at %L"
+msgstr "Проширење: ознака CONVERT код %L"
+
+#: fortran/io.c:1283
+#, no-c-format
+msgid "OPEN statement not allowed in PURE procedure at %C"
+msgstr "Ðаредба OPEN није дозвољена у чиÑтој процедури код %C"
+
+#: fortran/io.c:1391
+#, no-c-format
+msgid "CLOSE statement not allowed in PURE procedure at %C"
+msgstr "Ðаредба CLOSE није дозвољена у чиÑтој процедури код %C"
+
+#: fortran/io.c:1517 fortran/match.c:1457
+#, no-c-format
+msgid "%s statement not allowed in PURE procedure at %C"
+msgstr "Ðаредба %s није дозвољена у чиÑтој процедури код %C"
+
+#: fortran/io.c:1577
+#, no-c-format
+msgid "Fortran 2003: FLUSH statement at %C"
+msgstr "Фортран 2003: Ðаредба FLUSH код %C"
+
+#: fortran/io.c:1637
+#, no-c-format
+msgid "Duplicate UNIT specification at %C"
+msgstr "ДвоÑтрука одредница UNIT код %C"
+
+#: fortran/io.c:1693
+#, no-c-format
+msgid "Duplicate format specification at %C"
+msgstr "ДвоÑтрука одредница формата код %C"
+
+#: fortran/io.c:1710
+#, no-c-format
+msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C"
+msgstr "Симбол ‘%s’ у лиÑти имена ‘%s’ је намере-у код %C"
+
+#: fortran/io.c:1746
+#, no-c-format
+msgid "Duplicate NML specification at %C"
+msgstr "ДвоÑтрука одредница NML код %C"
+
+#: fortran/io.c:1755
+#, no-c-format
+msgid "Symbol '%s' at %C must be a NAMELIST group name"
+msgstr "Симбол ‘%s’ код %C мора бити име групе лиÑте имена"
+
+#: fortran/io.c:1793
+#, no-c-format
+msgid "END tag at %C not allowed in output statement"
+msgstr "Ознака END код %C није дозвољена у излазној наредби"
+
+#: fortran/io.c:1853
+#, no-c-format
+msgid "UNIT specification at %L must be an INTEGER expression or a CHARACTER variable"
+msgstr "Одредница UNIT код %L мора бити целобројни израз или знаковна променљива"
+
+#: fortran/io.c:1862
+#, no-c-format
+msgid "Internal unit with vector subscript at %L"
+msgstr "Унутрашња јединица Ñа векторÑким индекÑом код %L"
+
+#: fortran/io.c:1870
+#, no-c-format
+msgid "External IO UNIT cannot be an array at %L"
+msgstr "Спољашња У/И јединица не може бити низ код %L"
+
+#: fortran/io.c:1880
+#, no-c-format
+msgid "ERR tag label %d at %L not defined"
+msgstr "Етикета %d за ERR код %L није дефиниÑана"
+
+#: fortran/io.c:1892
+#, no-c-format
+msgid "END tag label %d at %L not defined"
+msgstr "Етикета %d за END код %L није дефиниÑана"
+
+#: fortran/io.c:1904
+#, no-c-format
+msgid "EOR tag label %d at %L not defined"
+msgstr "Етикета %d за EOR код %L није дефиниÑана"
+
+#: fortran/io.c:1914
+#, no-c-format
+msgid "FORMAT label %d at %L not defined"
+msgstr "Етикета %d за FORMAT код %L није дефиниÑана"
+
+#: fortran/io.c:2035
+#, no-c-format
+msgid "Syntax error in I/O iterator at %C"
+msgstr "СинтакÑна грешка у У/И итератору код %C"
+
+#: fortran/io.c:2066
+#, no-c-format
+msgid "Expected variable in READ statement at %C"
+msgstr "Очекивана је променљива у наредби READ код %C"
+
+#: fortran/io.c:2072
+#, no-c-format
+msgid "Expected expression in %s statement at %C"
+msgstr "Очекиван је израз у наредби %s код %C"
+
+#: fortran/io.c:2083
+#, no-c-format
+msgid "Variable '%s' in input list at %C cannot be INTENT(IN)"
+msgstr "Променљива ‘%s’ у улазној лиÑти код %C не може бити намере-у"
+
+#: fortran/io.c:2092
+#, no-c-format
+msgid "Cannot read to variable '%s' in PURE procedure at %C"
+msgstr "Ðе могу да читам у променљиву ‘%s’ у чиÑтој процедури код %C"
+
+#: fortran/io.c:2109
+#, no-c-format
+msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure"
+msgstr "Ðе могу да пишем у унутрашњу датотеку ‘%s’ код %C унутар чиÑте процедуре"
+
+#. A general purpose syntax error.
+#: fortran/io.c:2169 fortran/io.c:2541 fortran/gfortran.h:1695
+#, no-c-format
+msgid "Syntax error in %s statement at %C"
+msgstr "СинтакÑна грешка у наредби %s код %C"
+
+#: fortran/io.c:2390
+#, no-c-format
+msgid "PRINT namelist at %C is an extension"
+msgstr "ЛиÑта имена PRINT код %C је проширење"
+
+#: fortran/io.c:2502
+#, no-c-format
+msgid "Extension: Comma before output item list at %C is an extension"
+msgstr "Проширење: Зарез пре Ñтавке излазне лиÑте код %C је проширење"
+
+#: fortran/io.c:2511
+#, no-c-format
+msgid "Expected comma in I/O list at %C"
+msgstr "Очекиван је зарез у У/И лиÑти код %C"
+
+#: fortran/io.c:2573
+#, no-c-format
+msgid "PRINT statement at %C not allowed within PURE procedure"
+msgstr "Ðаредба PRINT код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/io.c:2712 fortran/io.c:2763
+#, no-c-format
+msgid "INQUIRE statement not allowed in PURE procedure at %C"
+msgstr "Ðаредба INQUIRE код %C није дозвољена у чиÑтој процедури"
+
+#: fortran/io.c:2739
+#, no-c-format
+msgid "IOLENGTH tag invalid in INQUIRE statement at %C"
+msgstr "ÐеиÑправна ознака IOLENGTH у наредби INQUIRE код %C"
+
+#: fortran/io.c:2749
+#, no-c-format
+msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers"
+msgstr "Ðаредба INQUIRE код %L не може Ñадржати и наводилац FILE и UNIT"
+
+#: fortran/io.c:2756
+#, no-c-format
+msgid "INQUIRE statement at %L requires either FILE or UNIT specifier"
+msgstr "Ðаредба INQUIRE код %L захтева или наводилац FILE или UNIT"
+
+#: fortran/match.c:179
+#, no-c-format
+msgid "Integer too large at %C"
+msgstr "Цео број превелик код %C"
+
+#: fortran/match.c:239 fortran/parse.c:329
+#, no-c-format
+msgid "Too many digits in statement label at %C"
+msgstr "Превише цифара у етикети наредбе код %C"
+
+#: fortran/match.c:245 fortran/parse.c:332
+#, no-c-format
+msgid "Statement label at %C is zero"
+msgstr "Етикета наредбе код %C је нула"
+
+#: fortran/match.c:278
+#, no-c-format
+msgid "Label name '%s' at %C is ambiguous"
+msgstr "ДвоÑмиÑлено име етикете ‘%s’ код %C"
+
+#: fortran/match.c:284
+#, no-c-format
+msgid "Duplicate construct label '%s' at %C"
+msgstr "ДвоÑтрука етикета конÑтрукције ‘%s’ код %C"
+
+#: fortran/match.c:408
+#, no-c-format
+msgid "Name at %C is too long"
+msgstr "Предугачко име код %C"
+
+#: fortran/match.c:525
+#, no-c-format
+msgid "Loop variable at %C cannot be a sub-component"
+msgstr "Променљива петље код %C не може бити подкомпонента"
+
+#: fortran/match.c:531
+#, no-c-format
+msgid "Loop variable '%s' at %C cannot be INTENT(IN)"
+msgstr "Променљива петље ‘%s’ код %C не може бити намере-у"
+
+#: fortran/match.c:538
+#, no-c-format
+msgid "Loop variable at %C cannot have the POINTER attribute"
+msgstr "Променљива петље код %C не може имати атрибут показивача"
+
+#: fortran/match.c:568
+#, no-c-format
+msgid "Expected a step value in iterator at %C"
+msgstr "Очекивана је вредноÑÑ‚ корака у итератору код %C"
+
+#: fortran/match.c:580
+#, no-c-format
+msgid "Syntax error in iterator at %C"
+msgstr "СинтакÑна грешка у итератору код %C"
+
+#: fortran/match.c:816
+#, no-c-format
+msgid "Invalid form of PROGRAM statement at %C"
+msgstr "ÐеиÑправан облик наредбе PROGRAM код %C"
+
+#: fortran/match.c:850
+#, no-c-format
+msgid "Cannot assign to a PARAMETER variable at %C"
+msgstr "Ðе могу да доделим у параметарÑку променљиву код %C"
+
+#: fortran/match.c:939 fortran/match.c:1015
+#, no-c-format
+msgid "Obsolete: arithmetic IF statement at %C"
+msgstr "ЗаÑтарело: аритметичка наредба IF код %C"
+
+#: fortran/match.c:986
+#, no-c-format
+msgid "Syntax error in IF-expression at %C"
+msgstr "СинтакÑна грешка у IF-изразу код %C"
+
+#: fortran/match.c:998
+#, no-c-format
+msgid "Block label not appropriate for arithmetic IF statement at %C"
+msgstr "Етикета блока није подеÑна за аритметичку наредбу IF код %C"
+
+#: fortran/match.c:1040
+#, no-c-format
+msgid "Block label is not appropriate IF statement at %C"
+msgstr "Етикета блока није подеÑна за наредбу IF код %C"
+
+#: fortran/match.c:1111
+#, no-c-format
+msgid "Unclassifiable statement in IF-clause at %C"
+msgstr "ÐеразврÑтљива наредба у одредби IF код %C"
+
+#: fortran/match.c:1118
+#, no-c-format
+msgid "Syntax error in IF-clause at %C"
+msgstr "СинтакÑна грешка у одредби IF код %C"
+
+#: fortran/match.c:1162
+#, no-c-format
+msgid "Unexpected junk after ELSE statement at %C"
+msgstr "Ðеочекивано Ñмеће поÑле наредбе ELSE код %C"
+
+#: fortran/match.c:1168 fortran/match.c:1203
+#, no-c-format
+msgid "Label '%s' at %C doesn't match IF label '%s'"
+msgstr "Етикета ‘%s’ код %C не одговара етикети IF ‘%s’"
+
+#: fortran/match.c:1197
+#, no-c-format
+msgid "Unexpected junk after ELSE IF statement at %C"
+msgstr "Ðеочекивано Ñмеће поÑле наредбе ELSE IF код %C"
+
+#: fortran/match.c:1360
+#, no-c-format
+msgid "Name '%s' in %s statement at %C is not a loop name"
+msgstr "Име ‘%s’ у наредби %s код %C није име петље"
+
+#: fortran/match.c:1375
+#, no-c-format
+msgid "%s statement at %C is not within a loop"
+msgstr "Ðаредба %s код %C није унутар петље"
+
+#: fortran/match.c:1378
+#, no-c-format
+msgid "%s statement at %C is not within loop '%s'"
+msgstr "Ðаредба %s код %C није унутар петље ‘%s’"
+
+#: fortran/match.c:1435
+#, no-c-format
+msgid "Too many digits in STOP code at %C"
+msgstr "Превише цифара у коду за STOP код %L"
+
+#: fortran/match.c:1488
+#, no-c-format
+msgid "Obsolete: PAUSE statement at %C"
+msgstr "ЗаÑтарело: наредба PAUSE код %C"
+
+#: fortran/match.c:1537
+#, no-c-format
+msgid "Obsolete: ASSIGN statement at %C"
+msgstr "ЗаÑтарело: наредба ASSIGN код %C"
+
+#: fortran/match.c:1583
+#, no-c-format
+msgid "Obsolete: Assigned GOTO statement at %C"
+msgstr "ЗаÑтарело: Додељена наредба GOTO код %C"
+
+#: fortran/match.c:1630 fortran/match.c:1682
+#, no-c-format
+msgid "Statement label list in GOTO at %C cannot be empty"
+msgstr "ЛиÑта етикета наредби у GOTO код %C не може бити празна"
+
+#: fortran/match.c:1766
+#, no-c-format
+msgid "Bad allocate-object in ALLOCATE statement at %C for a PURE procedure"
+msgstr "Лоша објекат у наредби ALLOCATE код %C у чиÑтој процедури"
+
+#: fortran/match.c:1786
+#, no-c-format
+msgid "STAT variable '%s' of ALLOCATE statement at %C cannot be INTENT(IN)"
+msgstr "СтатуÑна променљива ‘%s’ у наредби ALLOCATE код %C не може бити намере-у"
+
+#: fortran/match.c:1794
+#, no-c-format
+msgid "Illegal STAT variable in ALLOCATE statement at %C for a PURE procedure"
+msgstr "Ðедозвољена ÑтатуÑна променљива у наредби ALLOCATE код %C за чиÑту процедуру"
+
+#: fortran/match.c:1801 fortran/match.c:1967
+#, no-c-format
+msgid "STAT expression at %C must be a variable"
+msgstr "СтатуÑни израз код %C мора бити променљива"
+
+#: fortran/match.c:1856
+#, no-c-format
+msgid "Illegal variable in NULLIFY at %C for a PURE procedure"
+msgstr "Ðедозвољена променљива у NULLIFY код %C за чиÑту процедуру"
+
+#: fortran/match.c:1934
+#, no-c-format
+msgid "Illegal deallocate-expression in DEALLOCATE at %C for a PURE procedure"
+msgstr "Ðедозвољени израз у DEALLOCATE код %C за чиÑту процедуру"
+
+#: fortran/match.c:1953
+#, no-c-format
+msgid "STAT variable '%s' of DEALLOCATE statement at %C cannot be INTENT(IN)"
+msgstr "СтатуÑна променљива ‘%s’ у наредби DEALLOCATE код %C не може бити намере-у"
+
+#: fortran/match.c:1960
+#, no-c-format
+msgid "Illegal STAT variable in DEALLOCATE statement at %C for a PURE procedure"
+msgstr "СтатуÑна променљива ‘%s’ у наредби DEALLOCATE код %C за чиÑту процедуру"
+
+#: fortran/match.c:2009
+#, no-c-format
+msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
+msgstr "Ðлтернативна наредба RETURN код %C дозвољена је Ñамо унутар потпрограма"
+
+#: fortran/match.c:2040
+#, no-c-format
+msgid "Extension: RETURN statement in main program at %C"
+msgstr "Проширење: Ðаредба RETURN у главном програму код %C"
+
+#: fortran/match.c:2235
+#, no-c-format
+msgid "Syntax error in common block name at %C"
+msgstr "СинтакÑна грешка у имену заједничког блока код %C"
+
+#: fortran/match.c:2271
+#, no-c-format
+msgid "Symbol '%s' at %C is already an external symbol that is not COMMON"
+msgstr "Симбол ‘%s’ код %C је већ Ñпољашњи Ñимбол који није заједнички"
+
+#: fortran/match.c:2318
+#, no-c-format
+msgid "Symbol '%s' at %C is already in a COMMON block"
+msgstr "Симбол ‘%s’ код %C је већ у заједничком блоку"
+
+#: fortran/match.c:2330
+#, no-c-format
+msgid "Previously initialized symbol '%s' in blank COMMON block at %C"
+msgstr "Претходно уÑпоÑтављен Ñимбол ‘%s’ у празном заједничком блоку код %C"
+
+#: fortran/match.c:2333
+#, no-c-format
+msgid "Previously initialized symbol '%s' in COMMON block '%s' at %C"
+msgstr "Претходно уÑпоÑтављен Ñимбол ‘%s’ у заједничком блоку ‘%s’ код %C"
+
+#: fortran/match.c:2345
+#, no-c-format
+msgid "Derived type variable in COMMON at %C does not have the SEQUENCE attribute"
+msgstr "Променљива изведеног типа у заједничком код %C нема атрибут SEQUENCE"
+
+#: fortran/match.c:2368
+#, no-c-format
+msgid "Array specification for symbol '%s' in COMMON at %C must be explicit"
+msgstr "Одредница низа за Ñимбол ‘%s’ у заједничком код %C мора бити екÑплицитна"
+
+#: fortran/match.c:2379
+#, no-c-format
+msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array"
+msgstr "Симбол ‘%s’ у заједничком код %C не може бити низ показивача"
+
+#: fortran/match.c:2411
+#, no-c-format
+msgid "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to another COMMON block '%s'"
+msgstr "Симбол ‘%s’ у заједничком блоку ‘%s’ код %C поÑредно Ñе еквивалентира Ñа другим заједничким блоком, ‘%s’"
+
+#: fortran/match.c:2521
+#, no-c-format
+msgid "Namelist group name '%s' at %C already has a basic type of %s"
+msgstr "Име групе лиÑте имена ‘%s’ код %C већ има оÑновни тип %s"
+
+#: fortran/match.c:2528
+#, no-c-format
+msgid "Namelist group name '%s' at %C already is USE associated and cannot be respecified."
+msgstr "Име групе лиÑте имена ‘%s’ код %C је већ употребно придружено и не може Ñе поново одредити."
+
+#: fortran/match.c:2555
+#, no-c-format
+msgid "Assumed size array '%s' in namelist '%s'at %C is not allowed."
+msgstr "Ðиз претпоÑтављене величине ‘%s’ у лиÑти имена ‘%s’ код %C није дозвољен."
+
+#: fortran/match.c:2561
+#, no-c-format
+msgid "Assumed shape array '%s' in namelist '%s' at %C is an extension."
+msgstr "Ðиз претпоÑтављене величине ‘%s’ у лиÑти имена ‘%s’ код %C јеÑте проширење."
+
+#: fortran/match.c:2690
+#, no-c-format
+msgid "Derived type component %C is not a permitted EQUIVALENCE member"
+msgstr "Компонента изведеног типа %C није дозвољен члан у еквиваленцији"
+
+#: fortran/match.c:2699
+#, no-c-format
+msgid "Array reference in EQUIVALENCE at %C cannot be an array section"
+msgstr "Упућивач низа у еквивалецији код %C не може бити одељак низа"
+
+#: fortran/match.c:2728
+#, no-c-format
+msgid "EQUIVALENCE at %C requires two or more objects"
+msgstr "Еквиваленција код %C захтева два или више објеката"
+
+#: fortran/match.c:2742
+#, no-c-format
+msgid "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C"
+msgstr "Покушај поÑредног преклапања заједничких блокова %s и %s помоћу еквиваленције код %C"
+
+#: fortran/match.c:2894
+#, no-c-format
+msgid "Statement function at %L is recursive"
+msgstr "Ðаредбена функција код %L је рекурзивна"
+
+#: fortran/match.c:2984
+#, no-c-format
+msgid "Expected initialization expression in CASE at %C"
+msgstr "Очекиван је уÑпоÑтављачки израз у CASE код %C"
+
+#: fortran/match.c:3011
+#, no-c-format
+msgid "Expected case name of '%s' at %C"
+msgstr "Очекивано је име Ñлучаја за ‘%s’ код %C"
+
+#: fortran/match.c:3055
+#, no-c-format
+msgid "Unexpected CASE statement at %C"
+msgstr "Ðеочекивана наредба CASE код %C"
+
+#: fortran/match.c:3107
+#, no-c-format
+msgid "Syntax error in CASE-specification at %C"
+msgstr "СинтакÑна грешка у одредници CASE код %C"
+
+#: fortran/match.c:3227
+#, no-c-format
+msgid "ELSEWHERE statement at %C not enclosed in WHERE block"
+msgstr "Ðаредба ELSEWHERE код %C није обухваћена блоком WHERE"
+
+#: fortran/match.c:3258
+#, no-c-format
+msgid "Label '%s' at %C doesn't match WHERE label '%s'"
+msgstr "Етикета ‘%s’ код %C не одговара етикети WHERE ‘%s’"
+
+#: fortran/match.c:3353
+#, no-c-format
+msgid "Syntax error in FORALL iterator at %C"
+msgstr "СинтакÑна грешка у итератору FORALL код %C"
+
+#: fortran/matchexp.c:29
+#, c-format
+msgid "Syntax error in expression at %C"
+msgstr "СинтакÑна грешка у изразу код %C"
+
+#: fortran/matchexp.c:73
+#, no-c-format
+msgid "Bad character '%c' in OPERATOR name at %C"
+msgstr "Лош знак ‘%c’ у имену оператора код %C"
+
+#: fortran/matchexp.c:81
+#, no-c-format
+msgid "The name '%s' cannot be used as a defined operator at %C"
+msgstr "Име ‘%s’ Ñе не може употребити као дефиниÑани оператор код %C"
+
+#: fortran/matchexp.c:160
+#, no-c-format
+msgid "Expected a right parenthesis in expression at %C"
+msgstr "Очекивана је деÑна заграда у изразу код %C"
+
+#: fortran/matchexp.c:302
+#, no-c-format
+msgid "Expected exponent in expression at %C"
+msgstr "Очекиван је изложилац у изразу код %C"
+
+#: fortran/matchexp.c:338 fortran/matchexp.c:442
+#, no-c-format
+msgid "Extension: Unary operator following arithmetic operator (use parentheses) at %C"
+msgstr "Проширење: Унарни оператор прати аритметички (кориÑтите заграде) код %C"
+
+#: fortran/misc.c:42
+#, no-c-format
+msgid "Out of memory-- malloc() failed"
+msgstr "Ðедовољно меморије — malloc() крахирао"
+
+#: fortran/module.c:532
+#, no-c-format
+msgid "Missing generic specification in USE statement at %C"
+msgstr "ÐедоÑтаје генеричка одредница у наредби USE код %C"
+
+#: fortran/module.c:840
+#, no-c-format
+msgid "Reading module %s at line %d column %d: %s"
+msgstr "Читање модула %s, линија %d колона %d: %s"
+
+#: fortran/module.c:844
+#, no-c-format
+msgid "Writing module %s at line %d column %d: %s"
+msgstr "ПиÑање модула %s, линија %d колона %d: %s"
+
+#: fortran/module.c:848
+#, no-c-format
+msgid "Module %s at line %d column %d: %s"
+msgstr "Модул %s, линија %d колона %d: %s"
+
+#: fortran/module.c:890
+msgid "Unexpected EOF"
+msgstr "Ðеочекивано EOF"
+
+#: fortran/module.c:922
+msgid "Unexpected end of module in string constant"
+msgstr "Ðеочекиван крај модула у конÑтантној ниÑки"
+
+#: fortran/module.c:976
+msgid "Integer overflow"
+msgstr "Целобројно преливање"
+
+#: fortran/module.c:1007
+msgid "Name too long"
+msgstr "Предугачко име"
+
+#: fortran/module.c:1114
+msgid "Bad name"
+msgstr "Лоше име"
+
+#: fortran/module.c:1158
+msgid "Expected name"
+msgstr "Очекивано је име"
+
+#: fortran/module.c:1161
+msgid "Expected left parenthesis"
+msgstr "Очекивана је лева заграда"
+
+#: fortran/module.c:1164
+msgid "Expected right parenthesis"
+msgstr "Очекивана је деÑна заграда"
+
+#: fortran/module.c:1167
+msgid "Expected integer"
+msgstr "Очекиван је цео број"
+
+#: fortran/module.c:1170
+msgid "Expected string"
+msgstr "Очекивана је ниÑка"
+
+#: fortran/module.c:1194
+msgid "find_enum(): Enum not found"
+msgstr "find_enum(): Енумерација није нађена"
+
+#: fortran/module.c:1209
+#, no-c-format
+msgid "Error writing modules file: %s"
+msgstr "Грешка при пиÑању датотеке модула: %s"
+
+#: fortran/module.c:1568
+msgid "Expected attribute bit name"
+msgstr "Очекивано је име атрибутÑког бита"
+
+#: fortran/module.c:2330
+msgid "Expected integer string"
+msgstr "Очекивана је целобројна ниÑка"
+
+#: fortran/module.c:2334
+msgid "Error converting integer"
+msgstr "Грешка при претварању целог броја"
+
+#: fortran/module.c:2357
+msgid "Expected real string"
+msgstr "Очекивана је реална ниÑка"
+
+#: fortran/module.c:2504
+msgid "Expected expression type"
+msgstr "Очекиван је тип израза"
+
+#: fortran/module.c:2550
+msgid "Bad operator"
+msgstr "Лош оператор"
+
+#: fortran/module.c:2636
+msgid "Bad type in constant expression"
+msgstr "Лош тип у конÑтантном изразу"
+
+#: fortran/module.c:2673
+#, no-c-format
+msgid "Namelist %s cannot be renamed by USE association to %s."
+msgstr "ЛиÑта имена %s не може Ñе преименовати у %s придружењем USE."
+
+#: fortran/module.c:3369
+#, no-c-format
+msgid "Symbol '%s' referenced at %L not found in module '%s'"
+msgstr "Симбол ‘%s’ поменут код %L није нађен у модулу ‘%s’"
+
+#: fortran/module.c:3377
+#, no-c-format
+msgid "User operator '%s' referenced at %L not found in module '%s'"
+msgstr "КориÑнички оператор ‘%s’ поменут код %L није нађен у модулу ‘%s’"
+
+#: fortran/module.c:3383
+#, no-c-format
+msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'"
+msgstr "СопÑтвени оператор ‘%s’ поменут код %L није нађен у модулу ‘%s’"
+
+#: fortran/module.c:3738
+#, no-c-format
+msgid "Can't open module file '%s' for writing at %C: %s"
+msgstr "Ðе могу да отворим датотеку модула ‘%s’ за пиÑање код %C: %s"
+
+#: fortran/module.c:3763
+#, no-c-format
+msgid "Error writing module file '%s' for writing: %s"
+msgstr "Грешка при отварању датотеке модула ‘%s’ за пиÑање: %s"
+
+#: fortran/module.c:3784
+#, no-c-format
+msgid "Can't open module file '%s' for reading at %C: %s"
+msgstr "Ðе могу да отворим датотеку модула ‘%s’ за читање код %C: %s"
+
+#: fortran/module.c:3798
+msgid "Unexpected end of module"
+msgstr "Ðеочекиван крај модула"
+
+#: fortran/module.c:3806
+#, no-c-format
+msgid "Can't USE the same module we're building!"
+msgstr "Ðе може USE за иÑти модул који градимо!"
+
+#: fortran/options.c:232
+#, no-c-format
+msgid "Reading file '%s' as free form."
+msgstr "Читам датотеку ‘%s’ као Ñлободан облик."
+
+#: fortran/options.c:242
+#, no-c-format
+msgid "'-fd-lines-as-comments' has no effect in free form."
+msgstr "‘-fd-lines-as-comments’ нема ефекта у Ñлободном облику."
+
+#: fortran/options.c:245
+#, no-c-format
+msgid "'-fd-lines-as-code' has no effect in free form."
+msgstr "‘-fd-lines-as-code’ нема ефекта у Ñлободном облику."
+
+#: fortran/options.c:314
+#, c-format
+msgid "gfortran: Only one -M option allowed\n"
+msgstr "gfortran: Дозвољена је Ñамо једна опција -M\n"
+
+#: fortran/options.c:320
+#, c-format
+msgid "gfortran: Directory required after -M\n"
+msgstr "gfortran: Потребан је директоријум поÑле -M\n"
+
+#: fortran/options.c:360
+#, no-c-format
+msgid "Argument to -ffpe-trap is not valid: %s"
+msgstr "Ðргумент за -ffpe-trap није иÑправан: %s"
+
+#: fortran/options.c:460
+#, no-c-format
+msgid "Fixed line length must be at least seven."
+msgstr "ФикÑна дужина линије мора бити барем Ñедам."
+
+#: fortran/options.c:514
+#, no-c-format
+msgid "Maximum supported idenitifier length is %d"
+msgstr "Ðајвећа подржана дужина идентификатора је %d"
+
+#: fortran/options.c:521
+#, no-c-format
+msgid "Argument to -fqkind isn't a valid real kind"
+msgstr "Ðргумент за -fqkind није иÑправна реална врÑта"
+
+#: fortran/parse.c:294
+#, no-c-format
+msgid "Unclassifiable statement at %C"
+msgstr "ÐеразврÑтљива наредба код %C"
+
+#: fortran/parse.c:339 fortran/parse.c:414
+#, no-c-format
+msgid "Non-numeric character in statement label at %C"
+msgstr "Ðебројевни знак у етикети наредбе код %C"
+
+#: fortran/parse.c:352
+#, no-c-format
+msgid "Ignoring statement label in empty statement at %C"
+msgstr "Игноришем етикету наредбе у празној наредби код %C"
+
+#: fortran/parse.c:422
+#, no-c-format
+msgid "Zero is not a valid statement label at %C"
+msgstr "Ðула није иÑправна етикета наредбе код %C"
+
+#: fortran/parse.c:441
+#, no-c-format
+msgid "Bad continuation line at %C"
+msgstr "Лоше наÑтављање линије код %C"
+
+#: fortran/parse.c:468
+#, no-c-format
+msgid "Statement label in blank line will be ignored at %C"
+msgstr "Етикета наредбе у празној линији код %C ће бити игнориÑана"
+
+#: fortran/parse.c:494
+#, no-c-format
+msgid "Line truncated at %C"
+msgstr "Линија одÑечена код %C"
+
+#: fortran/parse.c:667
+#, no-c-format
+msgid "FORMAT statement at %L does not have a statement label"
+msgstr "Ðаредба FORMAT код %L нема етикету наредбе"
+
+#: fortran/parse.c:739
+msgid "arithmetic IF"
+msgstr "аритметичко IF"
+
+#: fortran/parse.c:745
+msgid "attribute declaration"
+msgstr "декларација атрибута"
+
+#: fortran/parse.c:775
+msgid "data declaration"
+msgstr "декларација података"
+
+#: fortran/parse.c:784
+msgid "derived type declaration"
+msgstr "декларација изведеног типа"
+
+#: fortran/parse.c:863
+msgid "block IF"
+msgstr "блоковÑко IF"
+
+#: fortran/parse.c:872
+msgid "implied END DO"
+msgstr "имплицитно END DO"
+
+#: fortran/parse.c:939
+msgid "assignment"
+msgstr "додела"
+
+#: fortran/parse.c:942
+msgid "pointer assignment"
+msgstr "додела показивача"
+
+#: fortran/parse.c:951
+msgid "simple IF"
+msgstr "једноÑтавно IF"
+
+#: fortran/parse.c:1088
+#, no-c-format
+msgid "Unexpected %s statement at %C"
+msgstr "Ðеочекивана наредба %s код %C"
+
+#: fortran/parse.c:1220
+#, no-c-format
+msgid "%s statement at %C cannot follow %s statement at %L"
+msgstr "Ðаредба %s код %C не може пратити наредбу %s код %L"
+
+#: fortran/parse.c:1237
+#, no-c-format
+msgid "Unexpected end of file in '%s'"
+msgstr "Ðеочекиван крај датотеке у ‘%s’"
+
+#: fortran/parse.c:1290
+#, no-c-format
+msgid "Derived type definition at %C has no components"
+msgstr "Дефиниција изведеног типа код %C нема компонената"
+
+#: fortran/parse.c:1301
+#, no-c-format
+msgid "PRIVATE statement in TYPE at %C must be inside a MODULE"
+msgstr "Ðаредба PRIVATE у TYPE код %C мора бити унутар модула"
+
+#: fortran/parse.c:1308
+#, no-c-format
+msgid "PRIVATE statement at %C must precede structure components"
+msgstr "Ðаредба PRIVATE код %C мора претходити компонентама Ñтруктуре"
+
+#: fortran/parse.c:1316
+#, no-c-format
+msgid "Duplicate PRIVATE statement at %C"
+msgstr "ДвоÑтрука наредба PRIVATE код %C"
+
+#: fortran/parse.c:1328
+#, no-c-format
+msgid "SEQUENCE statement at %C must precede structure components"
+msgstr "Ðаредба SEQUENCE код %C мора претходити компонентама Ñтруктуре"
+
+#: fortran/parse.c:1335
+#, no-c-format
+msgid "SEQUENCE attribute at %C already specified in TYPE statement"
+msgstr "Ðтрибут SEQUENCE код %C је већ наведен у наредби TYPE"
+
+#: fortran/parse.c:1340
+#, no-c-format
+msgid "Duplicate SEQUENCE statement at %C"
+msgstr "ДвоÑтрука наредба SEQUENCE код %C"
+
+#: fortran/parse.c:1364
+#, no-c-format
+msgid "Component %s of SEQUENCE type declared at %C does not have the SEQUENCE attribute"
+msgstr "Компонента %s у типу SEQUENCE деклариÑаном код %C не Ñадржи атрибут SEQUENCE"
+
+#: fortran/parse.c:1409
+#, no-c-format
+msgid "ENUM declaration at %C has no ENUMERATORS"
+msgstr "Декларација ENUM код %C не Ñадржи набрајаче"
+
+#: fortran/parse.c:1483
+#, no-c-format
+msgid "Unexpected %s statement in INTERFACE block at %C"
+msgstr "Ðеочекивана наредба %s у блоку INTERFACE код %C"
+
+#: fortran/parse.c:1510
+#, no-c-format
+msgid "SUBROUTINE at %C does not belong in a generic function interface"
+msgstr "Потпрограм код %C не Ñпада у генеричко Ñучеље функције"
+
+#: fortran/parse.c:1515
+#, no-c-format
+msgid "FUNCTION at %C does not belong in a generic subroutine interface"
+msgstr "Функција код %C не Ñпада у генеричко Ñучеље функције"
+
+#: fortran/parse.c:1532
+#, no-c-format
+msgid "Unexpected %s statement at %C in INTERFACE body"
+msgstr "Ðеочекивана наредба %s код %C у телу Ñучеља"
+
+#: fortran/parse.c:1604
+#, no-c-format
+msgid "%s statement must appear in a MODULE"
+msgstr "Ðаредба %s Ñе мора појавити у модулу"
+
+#: fortran/parse.c:1611
+#, no-c-format
+msgid "%s statement at %C follows another accessibility specification"
+msgstr "Ðаредба %s код %C прати другачију одредницу приÑтупа"
+
+#: fortran/parse.c:1688
+#, no-c-format
+msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE"
+msgstr "Ðаредба ELSEWHERE код %C прати претходно демаÑкирано ELSEWHERE"
+
+#: fortran/parse.c:1709
+#, no-c-format
+msgid "Unexpected %s statement in WHERE block at %C"
+msgstr "Ðеочекивана наредба %s у блоку WHERE код %C"
+
+#: fortran/parse.c:1769
+#, no-c-format
+msgid "Unexpected %s statement in FORALL block at %C"
+msgstr "Ðеочекивана наредба %s у блоку FORALL код %C"
+
+#: fortran/parse.c:1821
+#, no-c-format
+msgid "ELSE IF statement at %C cannot follow ELSE statement at %L"
+msgstr "Ðаредба ELSE IF код %C не може пратити наредбу ELSE код %L"
+
+#: fortran/parse.c:1839
+#, no-c-format
+msgid "Duplicate ELSE statements at %L and %C"
+msgstr "ДвоÑтруке наредбе ELSE код %L и %C"
+
+#: fortran/parse.c:1901
+#, no-c-format
+msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C"
+msgstr "Очекивана је наредба CASE или END SELECT поÑле SELECT CASE код %C"
+
+#: fortran/parse.c:1959
+#, no-c-format
+msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
+msgstr "Променљива ‘%s’ код %C не може Ñе редефиниÑати унутар петље која почиње код %L"
+
+#: fortran/parse.c:1994
+#, no-c-format
+msgid "End of nonblock DO statement at %C is within another block"
+msgstr "Крај неблоковÑке наредбе DO код %C је унутар другог блока"
+
+#: fortran/parse.c:2003
+#, no-c-format
+msgid "End of nonblock DO statement at %C is interwoven with another DO loop"
+msgstr "Крај неблоковÑке наредбе DO код %C је уплетена Ñа другом DO петљом"
+
+#: fortran/parse.c:2053
+#, no-c-format
+msgid "Statement label in ENDDO at %C doesn't match DO label"
+msgstr "Етикета наредбе у ENDDO код %C не одговара етикети DO"
+
+#: fortran/parse.c:2110
+#, no-c-format
+msgid "%s statement at %C cannot terminate a non-block DO loop"
+msgstr "Ðаредба %s код %C не може окончати неблоковÑку петљу DO"
+
+#: fortran/parse.c:2249
+#, no-c-format
+msgid "Contained procedure '%s' at %C is already ambiguous"
+msgstr "Садржана процедура ‘%s’ код %C је већ двоÑмиÑлена"
+
+#: fortran/parse.c:2300
+#, no-c-format
+msgid "Unexpected %s statement in CONTAINS section at %C"
+msgstr "Ðеочекивана наредба %s у одељку CONTAINS код %C"
+
+#: fortran/parse.c:2385
+#, no-c-format
+msgid "CONTAINS statement at %C is already in a contained program unit"
+msgstr "Ðаредба CONTAINS код %C је већ у Ñадржаној програмÑкој јединици"
+
+#: fortran/parse.c:2434
+#, no-c-format
+msgid "Global name '%s' at %L is already being used as a %s at %L"
+msgstr "Глобално име ‘%s’ код %L Ñе већ кориÑти као %s код %L"
+
+#: fortran/parse.c:2455
+#, no-c-format
+msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L"
+msgstr "Празно BLOCK DATA код %C коÑи Ñе Ñа претходним BLOCK DATA код %L"
+
+#: fortran/parse.c:2480
+#, no-c-format
+msgid "Unexpected %s statement in BLOCK DATA at %C"
+msgstr "Ðеочекивана наредба %s у BLOCK DATA код %C"
+
+#: fortran/parse.c:2523
+#, no-c-format
+msgid "Unexpected %s statement in MODULE at %C"
+msgstr "Ðеочекивана наредба %s у модулу код %C"
+
+#. If we see a duplicate main program, shut down. If the second
+#. instance is an implied main program, ie data decls or executable
+#. statements, we're in for lots of errors.
+#: fortran/parse.c:2702
+#, no-c-format
+msgid "Two main PROGRAMs at %L and %C"
+msgstr "Два главна програма, код %L и %C"
+
+#: fortran/primary.c:91
+#, no-c-format
+msgid "Missing kind-parameter at %C"
+msgstr "ÐедоÑтаје параметар врÑте код %C"
+
+#: fortran/primary.c:214
+#, no-c-format
+msgid "Integer kind %d at %C not available"
+msgstr "Целобројна врÑта %d код %C није доÑтупна"
+
+#: fortran/primary.c:222
+#, no-c-format
+msgid "Integer too big for its kind at %C"
+msgstr "Цео број превелик за Ñвоју врÑту код %C"
+
+#: fortran/primary.c:252
+#, no-c-format
+msgid "Extension: Hollerith constant at %C"
+msgstr "Проширење: Холеритова конÑтанта код %C"
+
+#: fortran/primary.c:264
+#, no-c-format
+msgid "Invalid Hollerith constant: %L must contain at least one character"
+msgstr "ÐеиÑправна Холеритова конÑтанта: %L мора Ñадржати бар један знак"
+
+#: fortran/primary.c:270
+#, no-c-format
+msgid "Invalid Hollerith constant: Interger kind at %L should be default"
+msgstr "ÐеиÑправна Холеритова конÑтанта: Целобројна врÑта код %L треба да је подразумевана"
+
+#: fortran/primary.c:357
+#, no-c-format
+msgid "Extension: Hexadecimal constant at %C uses non-standard syntax."
+msgstr "Проширење: ХекÑадекадна конÑтанта код %C кориÑти неÑтандардну ÑинтакÑу."
+
+#: fortran/primary.c:367
+#, no-c-format
+msgid "Empty set of digits in BOZ constant at %C"
+msgstr "Празан Ñкуп цифара у БОЗ конÑтанти код %C"
+
+#: fortran/primary.c:373
+#, no-c-format
+msgid "Illegal character in BOZ constant at %C"
+msgstr "Ðедозвољени знак у БОЗ конÑтанти код %C"
+
+#: fortran/primary.c:395
+#, no-c-format
+msgid "Extension: BOZ constant at %C uses non-standard postfix syntax."
+msgstr "Проширење: БОЗ конÑтанта код %C кориÑти неÑтандардну поÑтфикÑну ÑинтакÑу."
+
+#: fortran/primary.c:421
+#, no-c-format
+msgid "Integer too big for integer kind %i at %C"
+msgstr "Превелики цео број за целобројну врÑту %i код %C"
+
+#: fortran/primary.c:521
+#, no-c-format
+msgid "Missing exponent in real number at %C"
+msgstr "ÐедоÑтаје изложилац у реалном броју код %C"
+
+#: fortran/primary.c:578
+#, no-c-format
+msgid "Real number at %C has a 'd' exponent and an explicit kind"
+msgstr "Реални број код %C има изложилац ‘d’ и екÑплицитну врÑту"
+
+#: fortran/primary.c:588
+#, no-c-format
+msgid "Real number at %C has a 'q' exponent and an explicit kind"
+msgstr "Реални број код %C има изложилац ‘q’ и екÑплицитну врÑту"
+
+#: fortran/primary.c:600
+#, no-c-format
+msgid "Invalid real kind %d at %C"
+msgstr "ÐеиÑправна реална врÑта %d код %C"
+
+#: fortran/primary.c:614
+#, no-c-format
+msgid "Real constant overflows its kind at %C"
+msgstr "Реална конÑтанта прелива Ñвоју врÑту код %C"
+
+#: fortran/primary.c:619
+#, no-c-format
+msgid "Real constant underflows its kind at %C"
+msgstr "Реална конÑтанта подлива Ñвоју врÑту код %C"
+
+#: fortran/primary.c:711
+#, no-c-format
+msgid "Syntax error in SUBSTRING specification at %C"
+msgstr "СинтакÑна грешка у одредници SUBSTRING код %C"
+
+#: fortran/primary.c:943
+#, no-c-format
+msgid "Invalid kind %d for CHARACTER constant at %C"
+msgstr "ÐеиÑправна врÑта %d за знаковну конÑтанту код %C"
+
+#: fortran/primary.c:964
+#, no-c-format
+msgid "Unterminated character constant beginning at %C"
+msgstr "Ðеокончана знаковна конÑтанта Ñ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ¾Ð¼ код %C"
+
+#: fortran/primary.c:1038
+#, no-c-format
+msgid "Bad kind for logical constant at %C"
+msgstr "Лоша врÑта за логичку конÑтанту код %C"
+
+#: fortran/primary.c:1073
+#, no-c-format
+msgid "Expected PARAMETER symbol in complex constant at %C"
+msgstr "Очекиван је параметарÑки Ñимбол у комплекÑној конÑтанти код %C"
+
+#: fortran/primary.c:1079
+#, no-c-format
+msgid "Numeric PARAMETER required in complex constant at %C"
+msgstr "Потребан је бројевни параметар у комплекÑној конÑтанти код %C"
+
+#: fortran/primary.c:1085
+#, no-c-format
+msgid "Scalar PARAMETER required in complex constant at %C"
+msgstr "Потребан је Ñкаларни параметар у комплекÑној конÑтанти код %C"
+
+#: fortran/primary.c:1115
+#, no-c-format
+msgid "Error converting PARAMETER constant in complex constant at %C"
+msgstr "Грешка при претварању параметарÑке конÑтанте у комплекÑну код %C"
+
+#: fortran/primary.c:1242
+#, no-c-format
+msgid "Syntax error in COMPLEX constant at %C"
+msgstr "СинтакÑна грешка у комплекÑној конÑтанти код %C"
+
+#: fortran/primary.c:1424
+#, no-c-format
+msgid "Keyword '%s' at %C has already appeared in the current argument list"
+msgstr "Кључна реч ‘%s’ код %C Ñе већ јавила у текућој лиÑти аргумената"
+
+#: fortran/primary.c:1481
+#, no-c-format
+msgid "Expected alternate return label at %C"
+msgstr "Очекивана је етикета алтернативног повратка код %C"
+
+#: fortran/primary.c:1500
+#, no-c-format
+msgid "Missing keyword name in actual argument list at %C"
+msgstr "ÐедоÑтаје име кључне речи у лиÑти Ñтварних аргумената код %C"
+
+#: fortran/primary.c:1536
+#, no-c-format
+msgid "Syntax error in argument list at %C"
+msgstr "СинтакÑна грешка у лиÑти аргумената код %C"
+
+#: fortran/primary.c:1623
+#, no-c-format
+msgid "Expected structure component name at %C"
+msgstr "Очекивано је име компоненте Ñтруктуре код %C"
+
+#: fortran/primary.c:1861
+#, no-c-format
+msgid "Too many components in structure constructor at %C"
+msgstr "Превише компонената у конÑтруктору Ñтруктуре код %C"
+
+#: fortran/primary.c:1876
+#, no-c-format
+msgid "Too few components in structure constructor at %C"
+msgstr "Премало компонената у конÑтруктору Ñтруктуре код %C"
+
+#: fortran/primary.c:1894
+#, no-c-format
+msgid "Syntax error in structure constructor at %C"
+msgstr "СинтакÑна грешка у конÑтруктору Ñтруктуре код %C"
+
+#: fortran/primary.c:2007
+#, no-c-format
+msgid "Unexpected use of subroutine name '%s' at %C"
+msgstr "Ðеочекивана употреба имена потпрограма ‘%s’ код %C"
+
+#: fortran/primary.c:2038
+#, no-c-format
+msgid "Statement function '%s' requires argument list at %C"
+msgstr "Ðаредбена функција ‘%s’ захтева лиÑту аргумената код %C"
+
+#: fortran/primary.c:2041
+#, no-c-format
+msgid "Function '%s' requires an argument list at %C"
+msgstr "Функција ‘%s’ захтева лиÑту аргумената код %C"
+
+#: fortran/primary.c:2195
+#, no-c-format
+msgid "Missing argument list in function '%s' at %C"
+msgstr "ÐедоÑтаје лиÑта аргумената у функцији ‘%s’ код %C"
+
+#: fortran/primary.c:2223
+#, no-c-format
+msgid "Symbol at %C is not appropriate for an expression"
+msgstr "Симбол код %C није подеÑан за израз"
+
+#: fortran/primary.c:2293
+#, no-c-format
+msgid "Expected VARIABLE at %C"
+msgstr "Очекивано је VARIABLE код %C"
+
+#: fortran/resolve.c:102
+#, no-c-format
+msgid "Alternate return specifier in elemental subroutine '%s' at %L is not allowed"
+msgstr "Ðаводилац алтернативног повратка није дозвољен у елементалном потпрограму ‘%s’ код %L"
+
+#: fortran/resolve.c:106
+#, no-c-format
+msgid "Alternate return specifier in function '%s' at %L is not allowed"
+msgstr "Ðаводилац алтернативног повратка није дозвољен у функцији ‘%s’ код %L"
+
+#: fortran/resolve.c:120
+#, no-c-format
+msgid "Dummy procedure '%s' of PURE procedure at %L must also be PURE"
+msgstr "Лажна процедура ‘%s’ чиÑте процедуре код %L мора такође бити чиÑта"
+
+#: fortran/resolve.c:128
+#, no-c-format
+msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure"
+msgstr "Лажна процедура код %L није дозвољена у елементалној процедури"
+
+#: fortran/resolve.c:172
+#, no-c-format
+msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN)"
+msgstr "Ðргумент ‘%s’ чиÑте функције ‘%s’ код %L мора бити намере-у"
+
+#: fortran/resolve.c:180
+#, no-c-format
+msgid "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified"
+msgstr "Ðргумент ‘%s’ чиÑтог потпрограма ‘%s’ код %L мора имати наведену намеру"
+
+#: fortran/resolve.c:191
+#, no-c-format
+msgid "Argument '%s' of elemental procedure at %L must be scalar"
+msgstr "Ðргумент ‘%s’ елементалне процедуре код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:199
+#, no-c-format
+msgid "Argument '%s' of elemental procedure at %L cannot have the POINTER attribute"
+msgstr "Ðргумент ‘%s’ елементалне процедуре код %L не може имати атрибут показивача"
+
+#: fortran/resolve.c:211
+#, no-c-format
+msgid "Argument '%s' of statement function at %L must be scalar"
+msgstr "Ðргумент ‘%s’ наредбене функције код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:222
+#, no-c-format
+msgid "Character-valued argument '%s' of statement function at %L must has constant length"
+msgstr "Ðргумент знаковне вредноÑти ‘%s’ наредбене функције код %L мора имати конÑтантну дужину"
+
+#: fortran/resolve.c:283
+#, no-c-format
+msgid "Contained function '%s' at %L has no IMPLICIT type"
+msgstr "Садржана функција ‘%s’ код %L нема имплицитан тип"
+
+#: fortran/resolve.c:293
+#, no-c-format
+msgid "Character-valued internal function '%s' at %L must not be assumed length"
+msgstr "Унутрашња функција знаковне вредноÑти ‘%s’ код %L не може бити претпоÑтављене дужине"
+
+#: fortran/resolve.c:436
+#, no-c-format
+msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L"
+msgstr "Резултат функције %s не може бити низ у функцији %s код %L"
+
+#: fortran/resolve.c:440
+#, no-c-format
+msgid "ENTRY result %s can't be an array in FUNCTION %s at %L"
+msgstr "Улазни резултат %s не може бити низ у функцији %s код %L"
+
+#: fortran/resolve.c:447
+#, no-c-format
+msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L"
+msgstr "Резултат функције %s не може бити показивач у функцији %s код %L"
+
+#: fortran/resolve.c:451
+#, no-c-format
+msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L"
+msgstr "Улазни резултат %s не може бити показивач у функцији %s код %L"
+
+#: fortran/resolve.c:489
+#, no-c-format
+msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L"
+msgstr "Резултат функције %s не може бити типа %s у функцији %s код %L"
+
+#: fortran/resolve.c:494
+#, no-c-format
+msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L"
+msgstr "Улазни резултат %s не може бити типа %s у функцији %s код %L"
+
+#: fortran/resolve.c:590
+#, no-c-format
+msgid "The element in the derived type constructor at %L, for pointer component '%s', is %s but should be %s"
+msgstr "Елемент у конÑтруктору изведеног типа код %L, за показивачку компоненте ‘%s’, јеÑте %s а треба да буде %s"
+
+#: fortran/resolve.c:716
+#, no-c-format
+msgid "The upper bound in the last dimension must appear in the reference to the assumed size array '%s' at %L."
+msgstr "Горња граница у поÑледњој димензији мора Ñе појавити у упућивачу на низ претпоÑтављене величине ‘%s’ код %L."
+
+#: fortran/resolve.c:781 fortran/resolve.c:3633 fortran/resolve.c:4299
+#, no-c-format
+msgid "Label %d referenced at %L is never defined"
+msgstr "Етикета %d поменута код %L није дефиниÑана"
+
+#: fortran/resolve.c:808
+#, no-c-format
+msgid "Statement function '%s' at %L is not allowed as an actual argument"
+msgstr "Ðаредбена функција ‘%s’ код %L није дозвољена као Ñтварни аргумент"
+
+#: fortran/resolve.c:815
+#, no-c-format
+msgid "Internal procedure '%s' is not allowed as an actual argument at %L"
+msgstr "Унутрашња процедура ‘%s’ код %L није дозвољена као Ñтварни аргумент"
+
+#: fortran/resolve.c:821
+#, no-c-format
+msgid "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument at %L"
+msgstr "Елементална неÑопÑтвена процедура ‘%s’ код %L није дозвољена као Ñтварни аргумент"
+
+#: fortran/resolve.c:845
+#, no-c-format
+msgid "Symbol '%s' at %L is ambiguous"
+msgstr "ДвоÑмиÑлен Ñимбол ‘%s’ код %L"
+
+#: fortran/resolve.c:982
+#, no-c-format
+msgid "Generic function '%s' at %L is not an intrinsic function"
+msgstr "Генеричка функција ‘%s’ код %L није ÑопÑтвена функција"
+
+#: fortran/resolve.c:992
+#, no-c-format
+msgid "Generic function '%s' at %L is not consistent with a specific intrinsic interface"
+msgstr "Генеричка функција ‘%s’ код %L није у Ñкладу Ñа одређеним ÑопÑтвеним Ñучељем"
+
+#: fortran/resolve.c:1030
+#, no-c-format
+msgid "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
+msgstr "Функција ‘%s’ код %L је ÑопÑтвена али није ÑаглаÑна Ñа ÑопÑтвеном"
+
+#: fortran/resolve.c:1076
+#, no-c-format
+msgid "Unable to resolve the specific function '%s' at %L"
+msgstr "Ðе могу да разрешим одређену функцију ‘%s’ код %L"
+
+#: fortran/resolve.c:1132 fortran/resolve.c:5955
+#, no-c-format
+msgid "Function '%s' at %L has no IMPLICIT type"
+msgstr "Функција ‘%s’ код %L нема имплицитан тип"
+
+#. Internal procedures are taken care of in resolve_contained_fntype.
+#: fortran/resolve.c:1218
+#, no-c-format
+msgid "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is not a dummy argument"
+msgstr "Функција ‘%s’ деклариÑана је као CHARACTER(*) и не може бити употребљена код %L пошто није лажни аргумент"
+
+#: fortran/resolve.c:1332
+#, no-c-format
+msgid "Function reference to '%s' at %L is inside a FORALL block"
+msgstr "Упућивач функције на ‘%s’ код %L унутар блока FORALL"
+
+#: fortran/resolve.c:1338
+#, no-c-format
+msgid "Function reference to '%s' at %L is to a non-PURE procedure within a PURE procedure"
+msgstr "Упућивач функције на ‘%s’ код %L је за нечиÑту процедуру унутар чиÑте процедуре"
+
+#: fortran/resolve.c:1368
+#, no-c-format
+msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
+msgstr "Позив потпрограма за ‘%s’ у блоку FORALL код %L није чиÑÑ‚"
+
+#: fortran/resolve.c:1371
+#, no-c-format
+msgid "Subroutine call to '%s' at %L is not PURE"
+msgstr "Позив потпрограма за ‘%s’ код %L није чиÑÑ‚"
+
+#: fortran/resolve.c:1433
+#, no-c-format
+msgid "Generic subroutine '%s' at %L is not an intrinsic subroutine"
+msgstr "Генерички потпрограм ‘%s’ код %L није ÑопÑтвени потпрограм"
+
+#: fortran/resolve.c:1442
+#, no-c-format
+msgid "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine interface"
+msgstr "Генерички потпрограм ‘%s’ код %L није у Ñкладу Ñа Ñучељем ÑопÑтвеног потпрограма"
+
+#: fortran/resolve.c:1477
+#, no-c-format
+msgid "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic"
+msgstr "Потпрограм ‘%s’ код %L је ÑопÑтвени али није ÑаглаÑан Ñа ÑопÑтвеним"
+
+#: fortran/resolve.c:1520
+#, no-c-format
+msgid "Unable to resolve the specific subroutine '%s' at %L"
+msgstr "Ðе могу да разрешим одређени потпрограм ‘%s’ код %L"
+
+#: fortran/resolve.c:1576
+#, no-c-format
+msgid "'%s' at %L has a type, which is not consistent with the CALL at %L"
+msgstr "„%s“ код %L има тип који није у Ñкладу Ñа позивом код %L"
+
+#: fortran/resolve.c:1642
+msgid "elemental subroutine"
+msgstr "елементални потпрограм"
+
+#: fortran/resolve.c:1674
+#, no-c-format
+msgid "Shapes for operands at %L and %L are not conformable"
+msgstr "Облици операнада код %L и %L ниÑу уÑаглаÑиви"
+
+#: fortran/resolve.c:1731
+#, c-format
+msgid "Operand of unary numeric operator '%s' at %%L is %s"
+msgstr "Операнд унарног бројевног оператора ‘%s’ код %%L је %s"
+
+#: fortran/resolve.c:1747
+#, c-format
+msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
+msgstr "Операнди бинарног бројевног оператора ‘%s’ код %%L Ñу %s/%s"
+
+#: fortran/resolve.c:1761
+#, c-format
+msgid "Operands of string concatenation operator at %%L are %s/%s"
+msgstr "Операнди оператора надовезивања ниÑки код %%L Ñу %s/%s"
+
+#: fortran/resolve.c:1780
+#, c-format
+msgid "Operands of logical operator '%s' at %%L are %s/%s"
+msgstr "Операнди логичког оператора ‘%s’ код %%L Ñу %s/%s"
+
+#: fortran/resolve.c:1794
+#, c-format
+msgid "Operand of .NOT. operator at %%L is %s"
+msgstr "Операнд оператора .NOT. код %%L је %s"
+
+#: fortran/resolve.c:1804
+msgid "COMPLEX quantities cannot be compared at %L"
+msgstr "КомплекÑне величине Ñе не могу поредити код %L"
+
+#: fortran/resolve.c:1830
+#, c-format
+msgid "Logicals at %%L must be compared with %s instead of %s"
+msgstr "Логичке код %%L морају бити поређене Ñа %s умеÑто %s"
+
+#: fortran/resolve.c:1835
+#, c-format
+msgid "Operands of comparison operator '%s' at %%L are %s/%s"
+msgstr "Операнди оператора поређења ‘%s’ код %%L Ñу %s/%s"
+
+#: fortran/resolve.c:1843
+#, c-format
+msgid "Operand of user operator '%s' at %%L is %s"
+msgstr "Операнд кориÑничког оператора ‘%s’ код %%L је %s"
+
+#: fortran/resolve.c:1846
+#, c-format
+msgid "Operands of user operator '%s' at %%L are %s/%s"
+msgstr "Операнди кориÑничког оператора ‘%s’ код %%L Ñу %s/%s"
+
+#: fortran/resolve.c:1917
+#, no-c-format
+msgid "Inconsistent ranks for operator at %L and %L"
+msgstr "ÐеуÑаглашени рангови за оператор код %L и %L"
+
+#: fortran/resolve.c:2040
+#, no-c-format
+msgid "Illegal stride of zero at %L"
+msgstr "Ðедозвољен нулти корак код %L"
+
+#: fortran/resolve.c:2061
+#, no-c-format
+msgid "Array reference at %L is out of bounds"
+msgstr "Упућивач низа код %L је изван граница"
+
+#: fortran/resolve.c:2082
+#, no-c-format
+msgid "Rightmost upper bound of assumed size array section not specified at %L"
+msgstr "Ðије наведена деÑна горња граница низа претпоÑтављене величине код %L"
+
+#: fortran/resolve.c:2092
+#, no-c-format
+msgid "Rank mismatch in array reference at %L (%d/%d)"
+msgstr "ÐеÑлагање рангова у упућивачу низа код %L (%d/%d)"
+
+#: fortran/resolve.c:2120
+#, no-c-format
+msgid "Array index at %L must be scalar"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:2126
+#, no-c-format
+msgid "Array index at %L must be of INTEGER type"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° код %L мора бити целобројни"
+
+#: fortran/resolve.c:2132
+#, no-c-format
+msgid "Extension: REAL array index at %L"
+msgstr "Проширење: реални Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° код %L"
+
+#: fortran/resolve.c:2162
+#, no-c-format
+msgid "Argument dim at %L must be scalar"
+msgstr "Ðргумент димензије код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:2168
+#, no-c-format
+msgid "Argument dim at %L must be of INTEGER type"
+msgstr "Ðргумент димензије код %L мора целобројни"
+
+#: fortran/resolve.c:2270
+#, no-c-format
+msgid "Array index at %L is an array of rank %d"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° код %L је низ ранга %d"
+
+#: fortran/resolve.c:2308
+#, no-c-format
+msgid "Substring start index at %L must be of type INTEGER"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° подниÑке код %L мора бити целобројни"
+
+#: fortran/resolve.c:2315
+#, no-c-format
+msgid "Substring start index at %L must be scalar"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° подниÑке код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:2322
+#, no-c-format
+msgid "Substring start index at %L is less than one"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ñ‡ÐµÑ‚ÐºÐ° подниÑке код %L је мањи од један"
+
+#: fortran/resolve.c:2335
+#, no-c-format
+msgid "Substring end index at %L must be of type INTEGER"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÑ€Ð°Ñ˜Ð° подниÑке код %L мора бити целобројни"
+
+#: fortran/resolve.c:2342
+#, no-c-format
+msgid "Substring end index at %L must be scalar"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÑ€Ð°Ñ˜Ð° подниÑке код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:2350
+#, no-c-format
+msgid "Substring end index at %L is out of bounds"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÑ€Ð°Ñ˜Ð° подниÑке код %L је ван граница"
+
+#: fortran/resolve.c:2424
+#, no-c-format
+msgid "Component to the right of a part reference with nonzero rank must not have the POINTER attribute at %L"
+msgstr "Компонента деÑно од делимичног упућивача Ñа ненултим рангом не Ñме имати атрибут показивача код %L"
+
+#: fortran/resolve.c:2443
+#, no-c-format
+msgid "Two or more part references with nonzero rank must not be specified at %L"
+msgstr "Два или више делимична упућивача Ñа ненултим рангом не Ñмеју бити наведени код %L"
+
+#: fortran/resolve.c:2672
+#, no-c-format
+msgid "%s at %L must be a scalar"
+msgstr "%s код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:2680
+#, no-c-format
+msgid "%s at %L must be INTEGER or REAL"
+msgstr "%s код %L мора бити целобројно или реално"
+
+#: fortran/resolve.c:2683
+#, no-c-format
+msgid "%s at %L must be INTEGER"
+msgstr "%s код %L мора бити целобројно"
+
+#: fortran/resolve.c:2699
+#, no-c-format
+msgid "Obsolete: REAL DO loop iterator at %L"
+msgstr "ЗаÑтарело: Реални итератор у петљи DO код %L"
+
+#: fortran/resolve.c:2708
+#, no-c-format
+msgid "Cannot assign to loop variable in PURE procedure at %L"
+msgstr "Ðе може Ñе додељивати променљивој петље у чиÑтој процедури код %L"
+
+#: fortran/resolve.c:2732
+#, no-c-format
+msgid "Step expression in DO loop at %L cannot be zero"
+msgstr "Израз за корак у петљи DO код %L не може бити нула"
+
+#: fortran/resolve.c:2767
+#, no-c-format
+msgid "FORALL index-name at %L must be a scalar INTEGER"
+msgstr "ИндекÑ-име у FORALL код %L мора бити Ñкларни целобројан"
+
+#: fortran/resolve.c:2772
+#, no-c-format
+msgid "FORALL start expression at %L must be a scalar INTEGER"
+msgstr "Израз за почетак у FORALL код %L мора бити Ñкаларни целобројан"
+
+#: fortran/resolve.c:2779
+#, no-c-format
+msgid "FORALL end expression at %L must be a scalar INTEGER"
+msgstr "Израз за крај у FORALL код %L мора бити Ñкаларни целобројан"
+
+#: fortran/resolve.c:2787
+#, no-c-format
+msgid "FORALL stride expression at %L must be a scalar %s"
+msgstr "Израз за корак у FORALL код %L мора бити Ñкаларни %s"
+
+#: fortran/resolve.c:2792
+#, no-c-format
+msgid "FORALL stride expression at %L cannot be zero"
+msgstr "Израз за корак у FORALL код %L не може бити нула"
+
+#: fortran/resolve.c:2890
+#, no-c-format
+msgid "Expression in DEALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
+msgstr "Израз у наредби DEALLOCATE код %L мора бити резервљив или показивач"
+
+#: fortran/resolve.c:2990
+#, no-c-format
+msgid "Expression in ALLOCATE statement at %L must be ALLOCATABLE or a POINTER"
+msgstr "Израз у наредби ALLOCATE код %L мора бити резервљив или показивач"
+
+#: fortran/resolve.c:3015
+#, no-c-format
+msgid "Array specification required in ALLOCATE statement at %L"
+msgstr "Потребна је одредница низа у наредби ALLOCATE код %L"
+
+#: fortran/resolve.c:3044
+#, no-c-format
+msgid "Bad array specification in ALLOCATE statement at %L"
+msgstr "Лоша одредница низа у наредби ALLOCATE код %L"
+
+#. The cases overlap, or they are the same
+#. element in the list. Either way, we must
+#. issue an error and get the next case from P.
+#. FIXME: Sort P and Q by line number.
+#: fortran/resolve.c:3200
+#, no-c-format
+msgid "CASE label at %L overlaps with CASE label at %L"
+msgstr "Етикета CASE код %L преклапа етикету CASE код %L"
+
+#: fortran/resolve.c:3251
+#, no-c-format
+msgid "Expression in CASE statement at %L must be of type %s"
+msgstr "Израз у наредби CASE код %L мора бити типа %s"
+
+#: fortran/resolve.c:3262
+#, no-c-format
+msgid "Expression in CASE statement at %L must be kind %d"
+msgstr "Израз у наредби CASE код %L мора бити врÑта %d"
+
+#: fortran/resolve.c:3274
+#, no-c-format
+msgid "Expression in CASE statement at %L must be scalar"
+msgstr "Израз у наредби CASE код %L мора бити Ñкалар"
+
+#: fortran/resolve.c:3320
+#, no-c-format
+msgid "Selection expression in computed GOTO statement at %L must be a scalar integer expression"
+msgstr "Изборни израз у рачунÑком GOTO код %L мора бити Ñкаларни целобројан израз"
+
+#: fortran/resolve.c:3338
+#, no-c-format
+msgid "Argument of SELECT statement at %L cannot be %s"
+msgstr "Ðргумент наредбе SELECT код %L не може бити %s"
+
+#: fortran/resolve.c:3347
+#, no-c-format
+msgid "Argument of SELECT statement at %L must be a scalar expression"
+msgstr "Ðргумент наредбе SELECT код %L мора бити Ñкаларни израз"
+
+#: fortran/resolve.c:3411
+#, no-c-format
+msgid "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L"
+msgstr "DEFAULT CASE код %L не може бити праћен другим DEFAULT CASE код %L"
+
+#: fortran/resolve.c:3438
+#, no-c-format
+msgid "Logical range in CASE statement at %L is not allowed"
+msgstr "Логички опÑег у наредби CASE код %L није дозвољен"
+
+#: fortran/resolve.c:3449
+#, no-c-format
+msgid "Range specification at %L can never be matched"
+msgstr "Одредница опÑега код %L не може никако бити поклопљена"
+
+#: fortran/resolve.c:3552
+#, no-c-format
+msgid "Logical SELECT CASE block at %L has more that two cases"
+msgstr "Блок логичког SELECT CASE код %L има више од два Ñлучаја"
+
+#: fortran/resolve.c:3590
+#, no-c-format
+msgid "Data transfer element at %L cannot have POINTER components"
+msgstr "Елемент преноÑа података код %L не може имати показивачке компоненте"
+
+#: fortran/resolve.c:3597
+#, no-c-format
+msgid "Data transfer element at %L cannot have PRIVATE components"
+msgstr "Елемент преноÑа података код %L не може имати приватне компоненте"
+
+#: fortran/resolve.c:3606
+#, no-c-format
+msgid "Data transfer element at %L cannot be a full reference to an assumed-size array"
+msgstr "Елемент преноÑа података код %L не може бити пун упућивач на низ претпоÑтављене величине"
+
+#: fortran/resolve.c:3640
+#, no-c-format
+msgid "Statement at %L is not a valid branch target statement for the branch statement at %L"
+msgstr "Ðаредба код %L није иÑправна наредба циља гранања за наредбу гранања код %L"
+
+#: fortran/resolve.c:3649
+#, no-c-format
+msgid "Branch at %L causes an infinite loop"
+msgstr "Гранање код %L води у беÑконачну петљу"
+
+#: fortran/resolve.c:3682
+#, no-c-format
+msgid "Label at %L is not in the same block as the GOTO statement at %L"
+msgstr "Етикета код %L није у иÑтом блоку као наредба GOTO код %L"
+
+#: fortran/resolve.c:3698
+#, no-c-format
+msgid "Obsolete: GOTO at %L jumps to END of construct at %L"
+msgstr "ЗаÑтарело: GOTO код %L Ñкаче на END конÑтрукције код %L"
+
+#: fortran/resolve.c:3772
+#, no-c-format
+msgid "WHERE mask at %L has inconsistent shape"
+msgstr "МаÑка у WHERE код %L има неуÑаглашен облик"
+
+#: fortran/resolve.c:3788
+#, no-c-format
+msgid "WHERE assignment target at %L has inconsistent shape"
+msgstr "Циљ доделе у WHERE код %L има неуÑаглашен облик"
+
+#: fortran/resolve.c:3798 fortran/resolve.c:3997
+#, no-c-format
+msgid "Unsupported statement inside WHERE at %L"
+msgstr "Ðеподржана наредба унутар WHERE код %L"
+
+#: fortran/resolve.c:3874
+#, no-c-format
+msgid "expresion reference type error at %L"
+msgstr "грешка типа упућивача израза код %L"
+
+#: fortran/resolve.c:3906
+#, no-c-format
+msgid "Unsupported statement while finding forall index in expression"
+msgstr "Ðеподржана наредба током тражења индекÑа за FORALL у изразу"
+
+#: fortran/resolve.c:3953
+#, no-c-format
+msgid "Assignment to a FORALL index variable at %L"
+msgstr "Додела у индекÑну променљиву за FORALL код %L"
+
+#: fortran/resolve.c:3961
+#, no-c-format
+msgid "The FORALL with index '%s' cause more than one assignment to this object at %L"
+msgstr "FORALL Ñа индекÑом ‘%s’ изазива више од једне доделе овом објекту код %L"
+
+#: fortran/resolve.c:4088
+#, no-c-format
+msgid "An outer FORALL construct already has an index with this name %L"
+msgstr "Спољашња конÑтрукција FORALL већ има Ð¸Ð½Ð´ÐµÐºÑ Ñа овим именом %L"
+
+#: fortran/resolve.c:4100 fortran/resolve.c:4103 fortran/resolve.c:4106
+#, no-c-format
+msgid "A FORALL index must not appear in a limit or stride expression in the same FORALL at %L"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ñƒ FORALL не Ñме Ñе наћи у изразу за ограничење или корак за иÑто FORALL код %L"
+
+#: fortran/resolve.c:4149
+#, no-c-format
+msgid "ELSE IF clause at %L requires a scalar LOGICAL expression"
+msgstr "Одредба ELSE-IF код %L захтева Ñкаларни логички израз"
+
+#: fortran/resolve.c:4159
+#, no-c-format
+msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array"
+msgstr "Одредба WHERE/ELSEWHERE код %L захтева логички низ"
+
+#: fortran/resolve.c:4240
+#, no-c-format
+msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
+msgstr "Ðаредба ASSIGNED GOTO код %L захтева целобројну променљиву"
+
+#: fortran/resolve.c:4243
+#, no-c-format
+msgid "Variable '%s' has not been assigned a target label at %L"
+msgstr "Променљивој ‘%s’ није додељена циљна етикета код %L"
+
+#: fortran/resolve.c:4253
+#, no-c-format
+msgid "Alternate RETURN statement at %L requires an INTEGER return specifier"
+msgstr "Ðлтернативна наредба повратка код %L захтева целобројни наводилац повратка"
+
+#: fortran/resolve.c:4265
+#, no-c-format
+msgid "Subroutine '%s' called instead of assignment at %L must be PURE"
+msgstr "Потпрограм ‘%s’ позван умеÑто доделе код %L мора бити чиÑÑ‚"
+
+#: fortran/resolve.c:4278
+#, no-c-format
+msgid "Cannot assign to variable '%s' in PURE procedure at %L"
+msgstr "Ðе може Ñе доделити променљивој ‘%s’ у чиÑтој процедури код %L"
+
+#: fortran/resolve.c:4287
+#, no-c-format
+msgid "Right side of assignment at %L is a derived type containing a POINTER in a PURE procedure"
+msgstr "ДеÑна Ñтрана доделе код %L је изведени тип који Ñадржи показивач у чиÑтој процедури"
+
+#: fortran/resolve.c:4307
+#, no-c-format
+msgid "ASSIGN statement at %L requires a scalar default INTEGER variable"
+msgstr "ASSIGN код %L захтева Ñкаларну подразумевану целобројну променљиву"
+
+#: fortran/resolve.c:4322
+#, no-c-format
+msgid "Arithmetic IF statement at %L requires a numeric expression"
+msgstr "Ðритметичко IF код %L захтева бројевни израз"
+
+#: fortran/resolve.c:4334
+#, no-c-format
+msgid "IF clause at %L requires a scalar LOGICAL expression"
+msgstr "Одредба IF код %L захтева Ñкаларни логички израз"
+
+#: fortran/resolve.c:4360
+#, no-c-format
+msgid "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression"
+msgstr "Излазни уÑлов из петље DO WHILE код %L мора бити Ñкаларни логички израз"
+
+#: fortran/resolve.c:4367
+#, no-c-format
+msgid "STAT tag in ALLOCATE statement at %L must be of type INTEGER"
+msgstr "Ознака STAT у наредби ALLOCATE код %L мора бити целобројна"
+
+#: fortran/resolve.c:4379
+#, no-c-format
+msgid "STAT tag in DEALLOCATE statement at %L must be of type INTEGER"
+msgstr "Ознака STAT у наредби DEALLOCATE код %L мора бити целобројна"
+
+#: fortran/resolve.c:4445
+#, no-c-format
+msgid "FORALL mask clause at %L requires a LOGICAL expression"
+msgstr "Одредба маÑке у FORALL код %L захтева логички израз"
+
+#: fortran/resolve.c:4550
+#, no-c-format
+msgid "Allocatable array '%s' at %L must have a deferred shape"
+msgstr "Резервациони низ ‘%s’ код %L мора имати одложени облик"
+
+#: fortran/resolve.c:4553
+#, no-c-format
+msgid "Scalar object '%s' at %L may not be ALLOCATABLE"
+msgstr "Скаларни објекат ‘%s’ код %L не може бити резервациони"
+
+#: fortran/resolve.c:4560
+#, no-c-format
+msgid "Array pointer '%s' at %L must have a deferred shape"
+msgstr "Ðизовни показивач ‘%s’ код %L мора имати одложен облик"
+
+#: fortran/resolve.c:4571
+#, no-c-format
+msgid "Array '%s' at %L cannot have a deferred shape"
+msgstr "Ðиз ‘%s’ код %L не може имати одложен облик"
+
+#: fortran/resolve.c:4601
+#, no-c-format
+msgid "The module or main program array '%s' at %L must have constant shape"
+msgstr "Ðиз модула или главног програма ‘%s’ код %L мора имати конÑтантан облик"
+
+#: fortran/resolve.c:4613
+#, no-c-format
+msgid "Entity with assumed character length at %L must be a dummy argument or a PARAMETER"
+msgstr "Ентитет Ñа претпоÑтављеном знаковном дужином код %L мора бити лажни аргумент или параметар"
+
+#: fortran/resolve.c:4626
+#, no-c-format
+msgid "'%s' at %L must have constant character length in this context"
+msgstr "‘%s’ код %L мора имати конÑтантну знаковну дужину у овом контекÑту"
+
+#: fortran/resolve.c:4657
+#, no-c-format
+msgid "Allocatable '%s' at %L cannot have an initializer"
+msgstr "Резервационо ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4660
+#, no-c-format
+msgid "External '%s' at %L cannot have an initializer"
+msgstr "Спољашње ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4663
+#, no-c-format
+msgid "Dummy '%s' at %L cannot have an initializer"
+msgstr "Лажно ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4666
+#, no-c-format
+msgid "Intrinsic '%s' at %L cannot have an initializer"
+msgstr "СопÑтвено ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4669
+#, no-c-format
+msgid "Function result '%s' at %L cannot have an initializer"
+msgstr "Резултат функцији ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4672
+#, no-c-format
+msgid "Automatic array '%s' at %L cannot have an initializer"
+msgstr "ÐутоматÑки низ ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4692
+#, no-c-format
+msgid "Object '%s' at %L must have the SAVE attribute %s"
+msgstr "Објекат ‘%s’ код %L мора имати атрибут %s за SAVE"
+
+#: fortran/resolve.c:4725
+#, no-c-format
+msgid "Character-valued statement function '%s' at %L must have constant length"
+msgstr "Ðаредбена функција знаковне вредноÑти ‘%s’ код %L мора имати конÑтантну дужину"
+
+#: fortran/resolve.c:4748
+#, no-c-format
+msgid "'%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
+msgstr "‘%s’ је приватног типа и не може бити лажни аргумент у ‘%s’, који је јаван код %L"
+
+#: fortran/resolve.c:4763
+#, no-c-format
+msgid "External object '%s' at %L may not have an initializer"
+msgstr "Спољашњи објекат ‘%s’ код %L не може имати уÑпоÑтављач"
+
+#: fortran/resolve.c:4782
+#, no-c-format
+msgid "CHARACTER(*) function '%s' at %L cannot be array-valued"
+msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може имати низовну вредноÑÑ‚"
+
+#: fortran/resolve.c:4786
+#, no-c-format
+msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued"
+msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може имати показивачку вредноÑÑ‚"
+
+# no-c-format
+#: fortran/resolve.c:4790
+#, no-c-format
+msgid "CHARACTER(*) function '%s' at %L cannot be pure"
+msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може бити чиÑта"
+
+#: fortran/resolve.c:4794
+#, no-c-format
+msgid "CHARACTER(*) function '%s' at %L cannot be recursive"
+msgstr "Функција типа CHARACTER(*) ‘%s’ код %L не може бити рекурзивна"
+
+#: fortran/resolve.c:4803
+#, no-c-format
+msgid "CHARACTER(*) function '%s' at %L is obsolescent in fortran 95"
+msgstr "Функција типа CHARACTER(*) ‘%s’ код %L, заÑтарела је у фортрану 95"
+
+#: fortran/resolve.c:4828
+#, no-c-format
+msgid "Character length of component '%s' needs to be a constant specification expression at %L."
+msgstr "Знаковна дужина компоненте ‘%s’ мора бити конÑтантан одреднички израз код %L."
+
+#: fortran/resolve.c:4843
+#, no-c-format
+msgid "The component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
+msgstr "Компонента ‘%s’ је приватни тип и не може бити компонента у ‘%s’, која је јавна код %L"
+
+#: fortran/resolve.c:4861
+#, no-c-format
+msgid "Component '%s' of '%s' at %L must have constant array bounds."
+msgstr "Компонента ‘%s’ у ‘%s’ код %L мора имати конÑтантне границе низа."
+
+#: fortran/resolve.c:4895
+#, no-c-format
+msgid "PRIVATE symbol '%s' cannot be member of PUBLIC namelist at %L"
+msgstr "Приватни Ñимбол ‘%s’ не може бити члан јавне лиÑте имена код %L"
+
+#: fortran/resolve.c:4908
+#, no-c-format
+msgid "The array '%s' must have constant shape to be a NAMELIST object at %L"
+msgstr "Ðиз ‘%s’ мора имати конÑтантан облик да би био објекат лиÑте имена код %L"
+
+#: fortran/resolve.c:4926
+#, no-c-format
+msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L"
+msgstr "Ðтрибут процедуре коÑи Ñе Ñа атрибутом лиÑте имена у ‘%s’ код %L"
+
+#: fortran/resolve.c:4943
+#, no-c-format
+msgid "Parameter array '%s' at %L cannot be automatic or assumed shape"
+msgstr "ПараметарÑки низ ‘%s’ код %L не може бити аутоматÑког или претпоÑтављеног облика"
+
+#: fortran/resolve.c:4955
+#, no-c-format
+msgid "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type"
+msgstr "Имплицитно типÑки параметар ‘%s’ код %L не одговара каÑнијем имплицитном типу"
+
+#: fortran/resolve.c:4966
+#, no-c-format
+msgid "Incompatible derived type in PARAMETER at %L"
+msgstr "ÐеÑаглаÑан изведени тип у параметру код %L"
+
+#: fortran/resolve.c:5067
+#, no-c-format
+msgid "Assumed size array at %L must be a dummy argument"
+msgstr "Ðиз претпоÑтављене величине код %L мора бити лажни аргумент"
+
+#: fortran/resolve.c:5070
+#, no-c-format
+msgid "Assumed shape array at %L must be a dummy argument"
+msgstr "Ðиз претпоÑтављеног облика код %L мора бити лажни аргумент"
+
+#: fortran/resolve.c:5083
+#, no-c-format
+msgid "Symbol at %L is not a DUMMY variable"
+msgstr "Симбол код %L није лажна променљива"
+
+#: fortran/resolve.c:5098
+#, no-c-format
+msgid "The derived type '%s' at %L is of type '%s', which has not been defined."
+msgstr "Изведени тип ‘%s’ код %L је типа ‘%s’, који није дефиниÑан."
+
+#: fortran/resolve.c:5117
+#, no-c-format
+msgid "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have a default initializer"
+msgstr "Лажни аргумент намере-из ‘%s’ код %L је претпоÑтављене величине и зато не може имати подразумевани уÑпоÑтављач"
+
+#: fortran/resolve.c:5157
+#, no-c-format
+msgid "Intrinsic at %L does not exist"
+msgstr "СопÑтвено код %L не поÑтоји"
+
+#: fortran/resolve.c:5232
+#, no-c-format
+msgid "BLOCK DATA element '%s' at %L must be in COMMON"
+msgstr "BLOCK DATA елемент ‘%s’ код %L мора бити у заједничком"
+
+#: fortran/resolve.c:5276
+#, no-c-format
+msgid "Nonconstant array section at %L in DATA statement"
+msgstr "ÐеконÑтантан одељак низа код %L у наредби DATA"
+
+#: fortran/resolve.c:5289
+#, no-c-format
+msgid "DATA statement at %L has more variables than values"
+msgstr "Ðаредба DATA код %L има више променљивих него вредноÑти"
+
+#: fortran/resolve.c:5487
+#, no-c-format
+msgid "DATA statement at %L has more values than variables"
+msgstr "Ðаредба DATA код %L има више вредноÑти него променљивих"
+
+#: fortran/resolve.c:5569
+#, no-c-format
+msgid "Label %d at %L defined but not used"
+msgstr "Ознака %d код %L дефиниÑана али неупотребљена"
+
+#: fortran/resolve.c:5574
+#, no-c-format
+msgid "Label %d at %L defined but cannot be used"
+msgstr "Ознака %d код %L дефиниÑана али не може бити употребљена"
+
+#: fortran/resolve.c:5658
+#, no-c-format
+msgid "Derived type variable '%s' at %L must have SEQUENCE attribute to be an EQUIVALENCE object"
+msgstr "Променљива изведеног типа ‘%s’ код %L мора имати атрибут SEQUENCE да би била објекат еквиваленције"
+
+#: fortran/resolve.c:5673
+#, no-c-format
+msgid "Derived type variable '%s' at %L with pointer component(s) cannot be an EQUIVALENCE object"
+msgstr "Променљива изведеног типа ‘%s’ код %L Ñа показивачким компонентама не може бити објекат еквиваленције"
+
+#: fortran/resolve.c:5680
+#, no-c-format
+msgid "Derived type variable '%s' at %L with default initializer cannot be an EQUIVALENCE object"
+msgstr "Променљива изведеног типа ‘%s’ код %L Ñа подразумеваним уÑпоÑтављачем не може бити објекат еквиваленције"
+
+#: fortran/resolve.c:5781
+#, no-c-format
+msgid "Syntax error in EQUIVALENCE statement at %L"
+msgstr "СинтакÑна грешка у наредби EQUIVALENCE код %L"
+
+#: fortran/resolve.c:5798
+#, no-c-format
+msgid "Initialized objects '%s' and '%s' cannot both be in the EQUIVALENCE statement at %L"
+msgstr "Иницијализовани објекти ‘%s’ и ‘%s’ не могу оба бити у еквиваленцији код %L"
+
+#: fortran/resolve.c:5812
+#, no-c-format
+msgid "Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure procedure '%s'"
+msgstr "Члан заједничког блока ‘%s’ код %L не може бити објекат еквиваленције у чиÑтој процедури ‘%s’"
+
+#: fortran/resolve.c:5821
+#, no-c-format
+msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object"
+msgstr "Именована конÑтанта ‘%s’ код %L не може бити објекат еквиваленције"
+
+#: fortran/resolve.c:5900
+#, no-c-format
+msgid "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object"
+msgstr "Ðиз ‘%s’ код %L Ñа неконÑтантним границама не може бити објекат еквиваленције"
+
+#: fortran/resolve.c:5911
+#, no-c-format
+msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object"
+msgstr "Компонената Ñтруктуре ‘%s’ код %L не може бити објекат еквиваленције"
+
+#: fortran/resolve.c:5922
+#, no-c-format
+msgid "Substring at %L has length zero"
+msgstr "ПодниÑка код %L има нулту дужину"
+
+#: fortran/resolve.c:5965
+#, no-c-format
+msgid "PUBLIC function '%s' at %L cannot be of PRIVATE type '%s'"
+msgstr "Јавна функција ‘%s’ код %L не може бити приватног типа ‘%s’"
+
+#: fortran/resolve.c:5977
+#, no-c-format
+msgid "ENTRY '%s' at %L has no IMPLICIT type"
+msgstr "Ð£Ð½Ð¾Ñ â€˜%s’ код %L нема имплицитан тип"
+
+#: fortran/resolve.c:6003
+#, no-c-format
+msgid "User operator procedure '%s' at %L must be a FUNCTION"
+msgstr "Процедура кориÑничког оператора ‘%s’ код %L мора бити функција"
+
+#: fortran/resolve.c:6009
+#, no-c-format
+msgid "User operator procedure '%s' at %L cannot be assumed character length"
+msgstr "Процедура кориÑничког оператора ‘%s’ код %L не може бити претпоÑтављене знаковне дужине"
+
+#: fortran/resolve.c:6015
+#, no-c-format
+msgid "User operator procedure '%s' at %L must have at least one argument"
+msgstr "Процедура кориÑничког оператора ‘%s’ код %L мора имати бар један аргумент"
+
+#: fortran/resolve.c:6025
+#, no-c-format
+msgid "First argument of operator interface at %L cannot be optional"
+msgstr "Први аргумент Ñучеља оператора код %L не може бити опциони"
+
+#: fortran/resolve.c:6037
+#, no-c-format
+msgid "Second argument of operator interface at %L cannot be optional"
+msgstr "Други аргумент Ñучеља оператора код %L не може бити опциони"
+
+#: fortran/resolve.c:6041
+#, no-c-format
+msgid "Operator interface at %L must have, at most, two arguments"
+msgstr "Сучеље оператора код %L мора имати, највише, два аргумента"
+
+#: fortran/resolve.c:6074
+#, no-c-format
+msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE"
+msgstr "Садржана процедура ‘%s’ код %L у чиÑтој процедури мора такође бити чиÑта"
+
+#: fortran/scanner.c:536
+#, no-c-format
+msgid "Missing '&' in continued character constant at %C"
+msgstr "ÐедоÑтаје ‘&’ у наÑтављеној знаковној конÑтанти код %C"
+
+#: fortran/scanner.c:971
+#, no-c-format
+msgid "%s:%d: file %s left but not entered"
+msgstr "%s:%d: датотека %s је напуштена, али у њу није уђено"
+
+#: fortran/scanner.c:998
+#, no-c-format
+msgid "%s:%d: Illegal preprocessor directive"
+msgstr "%s:%d: Ðедозвољена предобрађивачка директива"
+
+#: fortran/scanner.c:1073
+#, no-c-format
+msgid "File '%s' is being included recursively"
+msgstr "Датотека ‘%s’ Ñе укључује рекурзивно"
+
+#: fortran/scanner.c:1088
+#, no-c-format
+msgid "Can't open file '%s'"
+msgstr "Ðе могу да отворим датотеку ‘%s’"
+
+#: fortran/scanner.c:1097
+#, no-c-format
+msgid "Can't open included file '%s'"
+msgstr "Ðе могу да отворим укључену датотеку ‘%s’"
+
+#: fortran/scanner.c:1199
+#, c-format
+msgid "%s:%3d %s\n"
+msgstr "%s:%3d %s\n"
+
+#: fortran/simplify.c:101
+#, no-c-format
+msgid "Result of %s overflows its kind at %L"
+msgstr "Резултат %s прелива Ñвоју врÑту код %L"
+
+#: fortran/simplify.c:120
+#, no-c-format
+msgid "KIND parameter of %s at %L must be an initialization expression"
+msgstr "Параметар врÑте за %s код %L мора бити инцијализовани израз"
+
+#: fortran/simplify.c:130
+#, no-c-format
+msgid "Invalid KIND parameter of %s at %L"
+msgstr "ÐеиÑправан параметар врÑте за %s код %L"
+
+#: fortran/simplify.c:227
+#, no-c-format
+msgid "Extended ASCII not implemented: argument of ACHAR at %L must be between 0 and 127"
+msgstr "Проширени аÑки није имплементиран: аргумент за ACHAR код %L мора бити између 0 и 127"
+
+#: fortran/simplify.c:254
+#, no-c-format
+msgid "Argument of ACOS at %L must be between -1 and 1"
+msgstr "Ðргумент у ACOS код %L мора бити између -1 и 1"
+
+#: fortran/simplify.c:276
+#, no-c-format
+msgid "Argument of ACOSH at %L must not be less than 1"
+msgstr "Ðргумент у ACOSH код %L не Ñме бити мањи од 1"
+
+#: fortran/simplify.c:503
+#, no-c-format
+msgid "Argument of ASIN at %L must be between -1 and 1"
+msgstr "Ðргумент у ASIN код %L мора бити између -1 и 1"
+
+#: fortran/simplify.c:559
+#, no-c-format
+msgid "Argument of ATANH at %L must be inside the range -1 to 1"
+msgstr "Ðргумент у ATANH код %L мора бити у опÑегу -1 до 1"
+
+#: fortran/simplify.c:585
+#, no-c-format
+msgid "If first argument of ATAN2 %L is zero, then the second argument must not be zero"
+msgstr "Ðко је први аргумент у ATAN2 код %L нула, други не Ñме бити нула"
+
+#: fortran/simplify.c:667
+#, no-c-format
+msgid "Bad character in CHAR function at %L"
+msgstr "Лош знак у функцији CHAR код %L"
+
+#: fortran/simplify.c:1195
+#, no-c-format
+msgid "Argument of IACHAR at %L must be of length one"
+msgstr "Ðргумент у IACHAR код %L мора бити дужине један"
+
+#: fortran/simplify.c:1235
+#, no-c-format
+msgid "Invalid second argument of IBCLR at %L"
+msgstr "ÐеиÑправан други аргумент у IBCLR код %L"
+
+#: fortran/simplify.c:1243
+#, no-c-format
+msgid "Second argument of IBCLR exceeds bit size at %L"
+msgstr "Други аргумент у IBCLR премашује битÑку величину код %L"
+
+#: fortran/simplify.c:1270
+#, no-c-format
+msgid "Invalid second argument of IBITS at %L"
+msgstr "ÐеиÑправан други аргумент у IBITS код %L"
+
+#: fortran/simplify.c:1276
+#, no-c-format
+msgid "Invalid third argument of IBITS at %L"
+msgstr "ÐеиÑправан трећи аргумент у IBITS код %L"
+
+#: fortran/simplify.c:1287
+#, no-c-format
+msgid "Sum of second and third arguments of IBITS exceeds bit size at %L"
+msgstr "Збир другог и трећег аргумента у IBITS премашује битÑку величину код %L"
+
+#: fortran/simplify.c:1335
+#, no-c-format
+msgid "Invalid second argument of IBSET at %L"
+msgstr "ÐеиÑправан други аргумент у IBSET код %L"
+
+#: fortran/simplify.c:1343
+#, no-c-format
+msgid "Second argument of IBSET exceeds bit size at %L"
+msgstr "Други аргумент у IBSET премашује битÑку величину код %L"
+
+#: fortran/simplify.c:1369
+#, no-c-format
+msgid "Argument of ICHAR at %L must be of length one"
+msgstr "Ðргумент у ICHAR код %L мора бити дужине један"
+
+#: fortran/simplify.c:1377
+#, no-c-format
+msgid "Argument of ICHAR at %L out of range of this processor"
+msgstr "Ðргумент у ICHAR код %L ван опÑега овог процеÑора"
+
+#: fortran/simplify.c:1585
+#, no-c-format
+msgid "Argument of INT at %L is not a valid type"
+msgstr "Ðргумент у INT код %L није иÑправног типа"
+
+#: fortran/simplify.c:1662
+#, no-c-format
+msgid "Invalid second argument of ISHFT at %L"
+msgstr "ÐеиÑправан други аргумент у ISHFT код %L"
+
+#: fortran/simplify.c:1678
+#, no-c-format
+msgid "Magnitude of second argument of ISHFT exceeds bit size at %L"
+msgstr "Магнитуда другог аргумента у ISHFT премашује битÑку величину код %L"
+
+#: fortran/simplify.c:1742
+#, no-c-format
+msgid "Invalid second argument of ISHFTC at %L"
+msgstr "ÐеиÑправан други аргумент у ISHFTC код %L"
+
+#: fortran/simplify.c:1752
+#, no-c-format
+msgid "Invalid third argument of ISHFTC at %L"
+msgstr "ÐеиÑправан трећи аргумент у ISHFTC код %L"
+
+#: fortran/simplify.c:1767
+#, no-c-format
+msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L"
+msgstr "Магнитуда другог аргумента у ISHFT премашује трећи аргумент код %L"
+
+#: fortran/simplify.c:1837
+#, no-c-format
+msgid "Argument of KIND at %L is a DERIVED type"
+msgstr "Ðргумент у KIND код %L је изведеног типа"
+
+#: fortran/simplify.c:1908
+#, no-c-format
+msgid "DIM argument at %L is out of bounds"
+msgstr "Ðргумент димензије код %L је ван граница"
+
+#: fortran/simplify.c:2048
+#, no-c-format
+msgid "Argument of LOG at %L cannot be less than or equal to zero"
+msgstr "Ðргумент у LOG код %L не може бити мањи или једнак нули"
+
+#: fortran/simplify.c:2061
+#, no-c-format
+msgid "Complex argument of LOG at %L cannot be zero"
+msgstr "КомплекÑни аргумент у LOG код %L не може бити нула"
+
+#: fortran/simplify.c:2105
+#, no-c-format
+msgid "Argument of LOG10 at %L cannot be less than or equal to zero"
+msgstr "Ðргумент у LOG10 код %L не може бити мањи или једнак нули"
+
+#. Result is processor-dependent.
+#: fortran/simplify.c:2282
+#, no-c-format
+msgid "Second argument MOD at %L is zero"
+msgstr "Други аргумент у MOD код %L је нула"
+
+#. Result is processor-dependent.
+#: fortran/simplify.c:2293
+#, no-c-format
+msgid "Second argument of MOD at %L is zero"
+msgstr "Други аргумент у MOD код %L је нула"
+
+#. Result is processor-dependent. This processor just opts
+#. to not handle it at all.
+#. Result is processor-dependent.
+#: fortran/simplify.c:2341 fortran/simplify.c:2353
+#, no-c-format
+msgid "Second argument of MODULO at %L is zero"
+msgstr "Други аргумент у MODULO код %L је нула"
+
+#: fortran/simplify.c:2410
+#, no-c-format
+msgid "Second argument of NEAREST at %L may not be zero"
+msgstr "Други аргумент у NEAREST код %L не може бити нула"
+
+#: fortran/simplify.c:2718
+#, no-c-format
+msgid "Invalid second argument of REPEAT at %L"
+msgstr "ÐеиÑправан други аргумент у REPEAT код %L"
+
+#: fortran/simplify.c:2792
+#, no-c-format
+msgid "Integer too large in shape specification at %L"
+msgstr "Цео број превелик у одредници облика код %L"
+
+#: fortran/simplify.c:2802
+#, no-c-format
+msgid "Too many dimensions in shape specification for RESHAPE at %L"
+msgstr "Превише димензија у одредници облика за RESHAPE код %L"
+
+#: fortran/simplify.c:2810
+#, no-c-format
+msgid "Shape specification at %L cannot be negative"
+msgstr "Одредница облика код %L не може бити негативна"
+
+#: fortran/simplify.c:2820
+#, no-c-format
+msgid "Shape specification at %L cannot be the null array"
+msgstr "Одредница облика код %L не може бити нулти низ"
+
+#: fortran/simplify.c:2844
+#, no-c-format
+msgid "ORDER parameter of RESHAPE at %L is not the same size as SHAPE parameter"
+msgstr "Параметар ORDER у RESHAPE код %L није иÑте величине као параметар SHAPE"
+
+#: fortran/simplify.c:2851
+#, no-c-format
+msgid "Error in ORDER parameter of RESHAPE at %L"
+msgstr "Грешка у параметру ORDER у RESHAPE код %L"
+
+#: fortran/simplify.c:2861
+#, no-c-format
+msgid "ORDER parameter of RESHAPE at %L is out of range"
+msgstr "Параметар ORDER у RESHAPE код %L је ван опÑега"
+
+#: fortran/simplify.c:2870
+#, no-c-format
+msgid "Invalid permutation in ORDER parameter at %L"
+msgstr "ÐеиÑправна пермутација у параметру ORDER код %L"
+
+#: fortran/simplify.c:2927
+#, no-c-format
+msgid "PAD parameter required for short SOURCE parameter at %L"
+msgstr "Ðеопходан је параметар PAD за кратки параметар SOURCE код %L"
+
+#: fortran/simplify.c:3061
+#, no-c-format
+msgid "Result of SCALE overflows its kind at %L"
+msgstr "Резултат SCALE прелива Ñвоју врÑту код %L"
+
+#: fortran/simplify.c:3642
+#, no-c-format
+msgid "Argument of SQRT at %L has a negative value"
+msgstr "Ðргумент у SQRT код %L има негативну вредноÑÑ‚"
+
+#: fortran/symbol.c:111
+#, no-c-format
+msgid "Duplicate IMPLICIT NONE statement at %C"
+msgstr "ДвоÑтрука наредба IMPLICIT NONE код %C"
+
+#: fortran/symbol.c:151
+#, no-c-format
+msgid "Letter '%c' already set in IMPLICIT statement at %C"
+msgstr "Слово ‘%c’ већ поÑтављено у наредби IMPLICIT код %C"
+
+#: fortran/symbol.c:173
+#, no-c-format
+msgid "Cannot specify IMPLICIT at %C after IMPLICIT NONE"
+msgstr "Ðе може Ñе навеÑти IMPLICIT код %C поÑле IMPLICIT NONE"
+
+#: fortran/symbol.c:184
+#, no-c-format
+msgid "Letter %c already has an IMPLICIT type at %C"
+msgstr "Слово %c већ има имплицитан тип код %C"
+
+#: fortran/symbol.c:232
+#, no-c-format
+msgid "Symbol '%s' at %L has no IMPLICIT type"
+msgstr "Симбол ‘%s’ код %L нема имплицитан тип"
+
+#: fortran/symbol.c:304
+#, no-c-format
+msgid "%s attribute not allowed in BLOCK DATA program unit at %L"
+msgstr "Ðтрибут %s није дозвољен у јединици програма BLOCK DATA код %L"
+
+#: fortran/symbol.c:506 fortran/symbol.c:997
+#, no-c-format
+msgid "%s attribute conflicts with %s attribute at %L"
+msgstr "Ðтрибут %s коÑи Ñе Ñа атрибутом %s код %L"
+
+#: fortran/symbol.c:509
+#, no-c-format
+msgid "%s attribute conflicts with %s attribute in '%s' at %L"
+msgstr "Ðтрибут %s коÑи Ñе Ñа атрибутом %s у ‘%s’ код %L"
+
+#: fortran/symbol.c:551
+#, no-c-format
+msgid "Cannot change attributes of USE-associated symbol at %L"
+msgstr "Ðе могу Ñе променити атрибути USE-придруженог Ñимбола код %L"
+
+#: fortran/symbol.c:554
+#, no-c-format
+msgid "Cannot change attributes of USE-associated symbol %s at %L"
+msgstr "Ðе могу Ñе променити атрибути USE-придруженог Ñимбола %s код %L"
+
+#: fortran/symbol.c:576
+#, no-c-format
+msgid "Cannot change attributes of symbol at %L after it has been used"
+msgstr "Ðе могу Ñе променити атрибути Ñимбола код %L пошто је употребљен"
+
+#: fortran/symbol.c:592
+#, no-c-format
+msgid "Duplicate %s attribute specified at %L"
+msgstr "ДвоÑтруки атрибут %S наведен код %L"
+
+#: fortran/symbol.c:733
+#, no-c-format
+msgid "Cray Pointee at %L appears in multiple pointer() statements."
+msgstr "Крејов показивани код %L појављује Ñе у више наредби pointer()"
+
+#: fortran/symbol.c:765
+#, no-c-format
+msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
+msgstr "Ðтрибут SAVE код %L не може бити наведен у чиÑтој процедури"
+
+#: fortran/symbol.c:773
+#, no-c-format
+msgid "Duplicate SAVE attribute specified at %L"
+msgstr "ДвоÑтруки атрибут SAVE наведен код %L"
+
+#: fortran/symbol.c:1027
+#, no-c-format
+msgid "%s procedure at %L is already declared as %s procedure"
+msgstr "Процедура %s код %L је већ деклариÑана као процедура %s"
+
+#: fortran/symbol.c:1062
+#, no-c-format
+msgid "INTENT (%s) conflicts with INTENT(%s) at %L"
+msgstr "Ðамера-%s коÑи Ñе Ñа намером-%s код %L"
+
+#: fortran/symbol.c:1085
+#, no-c-format
+msgid "ACCESS specification at %L was already specified"
+msgstr "Одредница ACCESS код %L је већ наведена "
+
+#: fortran/symbol.c:1105
+#, no-c-format
+msgid "Symbol '%s' at %L already has an explicit interface"
+msgstr "Симбол ‘%s’ код %L већ има екÑплицитно Ñучеље"
+
+#: fortran/symbol.c:1133
+#, no-c-format
+msgid "Symbol '%s' at %L already has basic type of %s"
+msgstr "Симбол ‘%s’ код %L већ има оÑновни тип %s"
+
+#: fortran/symbol.c:1145
+#, no-c-format
+msgid "Symbol '%s' at %L cannot have a type"
+msgstr "Симбол ‘%s’ код %L не може имати тип"
+
+#: fortran/symbol.c:1283
+#, no-c-format
+msgid "Component '%s' at %C already declared at %L"
+msgstr "Компонента ‘%s’ код %C већ је деклариÑана код %L"
+
+#: fortran/symbol.c:1361
+#, no-c-format
+msgid "Symbol '%s' at %C is ambiguous"
+msgstr "ДвоÑмиÑлен Ñимбол ‘%s’ код %C"
+
+#: fortran/symbol.c:1393
+#, no-c-format
+msgid "Derived type '%s' at %C is being used before it is defined"
+msgstr "Изведени тип ‘%s’ код %C кориÑти Ñе пре него што је дефиниÑан"
+
+#: fortran/symbol.c:1421
+#, no-c-format
+msgid "'%s' at %C is not a member of the '%s' structure"
+msgstr "‘%s’ код %C није члан Ñтруктуре ‘%s’"
+
+#: fortran/symbol.c:1427
+#, no-c-format
+msgid "Component '%s' at %C is a PRIVATE component of '%s'"
+msgstr "Компонента ‘%s’ код %C је приватна компонента у ‘%s’"
+
+#: fortran/symbol.c:1571
+#, no-c-format
+msgid "Duplicate statement label %d at %L and %L"
+msgstr "ДвоÑтрука етикета наредбе %d код %L и %L"
+
+#: fortran/symbol.c:1581
+#, no-c-format
+msgid "Label %d at %C already referenced as branch target"
+msgstr "Етикета %d код %C је већ поменута као циљ гранања"
+
+#: fortran/symbol.c:1590
+#, no-c-format
+msgid "Label %d at %C already referenced as a format label"
+msgstr "Етикета %d код %C је већ поменута код етикета формата"
+
+#: fortran/symbol.c:1632
+#, no-c-format
+msgid "Label %d at %C previously used as a FORMAT label"
+msgstr "Етикета %d код %C је претходно употребљена као етикета формата"
+
+#: fortran/symbol.c:1640
+#, no-c-format
+msgid "Label %d at %C previously used as branch target"
+msgstr "Етикета %d код %C је претходно употребљена као циљ гранања"
+
+#: fortran/symbol.c:1893
+#, no-c-format
+msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'"
+msgstr "Име ‘%s’ код %C је двоÑмиÑлен упућивач на ‘%s’ из модула ‘%s’"
+
+#: fortran/symbol.c:1896
+#, no-c-format
+msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit"
+msgstr "Име ‘%s’ код %C је двоÑмиÑлен упућивач на ‘%s’ из текуће програмÑке јединице"
+
+#. Symbol is from another namespace.
+#: fortran/symbol.c:2033
+#, no-c-format
+msgid "Symbol '%s' at %C has already been host associated"
+msgstr "Симбол ‘%s’ код %C је већ придружен домаћину"
+
+#: fortran/trans-common.c:360
+#, no-c-format
+msgid "Named COMMON block '%s' at %L shall be of the same size"
+msgstr "Именовани заједнички блок ‘%s’ код %L ће бити иÑте величине"
+
+#: fortran/trans-common.c:658
+#, no-c-format
+msgid "Bad array reference at %L"
+msgstr "Лош упућивач низа код %L"
+
+#: fortran/trans-common.c:666
+#, no-c-format
+msgid "Illegal reference type at %L as EQUIVALENCE object"
+msgstr "Ðедозвољен тип упућивача код %L као објекат еквиваленције"
+
+#: fortran/trans-common.c:706
+#, no-c-format
+msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L"
+msgstr "ÐеуÑаглашена правила еквиваленције у вези Ñа ‘%s’ код %L и ‘%s’ код %L"
+
+#. Aligning this field would misalign a previous field.
+#: fortran/trans-common.c:839
+#, no-c-format
+msgid "The equivalence set for variable '%s' declared at %L violates alignment requirents"
+msgstr "Скуп еквиваленције за променљиву ‘%s’ деклариÑан код %L крши захтеве равнања"
+
+#: fortran/trans-common.c:904
+#, no-c-format
+msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L"
+msgstr "Еквиваленција за ‘%s’ не одговара поретку заједничког ‘%s’ код %L"
+
+#: fortran/trans-common.c:919
+#, no-c-format
+msgid "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L"
+msgstr "Скуп еквиваленције за ‘%s’ изазива неиÑправно проширење до заједничког ‘%s’ код %L"
+
+#. The required offset conflicts with previous alignment
+#. requirements. Insert padding immediately before this
+#. segment.
+#: fortran/trans-common.c:930
+#, no-c-format
+msgid "Padding of %d bytes required before '%s' in COMMON '%s' at %L"
+msgstr "Ðеопходно уметање %d бајтова пре ‘%s’ у заједничком ‘%s’ код %L"
+
+#: fortran/trans-common.c:956
+#, no-c-format
+msgid "COMMON '%s' at %L requires %d bytes of padding at start"
+msgstr "Заједничко ‘%s’ код %L затева %d уметнутих бајтова на почетку"
+
+#: fortran/trans-const.c:158
+msgid "Array bound mismatch"
+msgstr "ÐеÑлагање граница низа"
+
+#: fortran/trans-const.c:161
+msgid "Array reference out of bounds"
+msgstr "Упућивач низа ван граница"
+
+#: fortran/trans-const.c:164
+msgid "Incorrect function return value"
+msgstr "Ðетачна вредноÑÑ‚ повратка из функције"
+
+#: fortran/trans-decl.c:441
+#, no-c-format
+msgid "storage size not known"
+msgstr "величина Ñкладишта није позната"
+
+#: fortran/trans-decl.c:448
+#, no-c-format
+msgid "storage size not constant"
+msgstr "величина Ñкладишта није конÑтантна"
+
+#: fortran/trans-io.c:541
+msgid "Assigned label is not a format label"
+msgstr "Додељена етикета није етикета формата"
+
+#: fortran/trans-io.c:982
+#, no-c-format
+msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers."
+msgstr "Ðаредба INQUIRE код %L не може Ñадржати и наводиоце FILE и UNIT"
+
+#: fortran/trans-stmt.c:163
+msgid "Assigned label is not a target label"
+msgstr "Додељена етикета није етикета циља"
+
+#. Check the label list.
+#: fortran/trans-stmt.c:179
+msgid "Assigned label is not in the list"
+msgstr "Додељена етикета није у лиÑти"
+
+#: fortran/trans-stmt.c:319
+#, no-c-format
+msgid "An alternate return at %L without a * dummy argument"
+msgstr "Ðлтернативан повратак код %L без лажног аргумента *"
+
+#. FIXME: i18n bug here. Order of prints should not be
+#. fixed.
+#: java/gjavah.c:916
+#, c-format
+msgid "ignored method '"
+msgstr "игнориÑан метод ‘"
+
+#: java/gjavah.c:918
+#, c-format
+msgid "' marked virtual\n"
+msgstr "’ означен виртуелним\n"
+
+#: java/gjavah.c:2356
+#, c-format
+msgid "Try '"
+msgstr "Покушајте ‘"
+
+#: java/gjavah.c:2356
+#, c-format
+msgid " --help' for more information.\n"
+msgstr " --help’ за више информација.\n"
+
+#: java/gjavah.c:2363
+#, c-format
+msgid "Usage: "
+msgstr "Употреба: "
+
+#: java/gjavah.c:2363
+#, c-format
+msgid ""
+" [OPTION]... CLASS...\n"
+"\n"
+msgstr ""
+" [ОПЦИЈЕ]... КЛÐСÐ...\n"
+"\n"
+
+#: java/gjavah.c:2364
+#, c-format
+msgid ""
+"Generate C or C++ header files from .class files\n"
+"\n"
+msgstr ""
+"Стварај Ц или Ц++ заглавља према клаÑним датотекама\n"
+"\n"
+
+#: java/gjavah.c:2365
+#, c-format
+msgid " -stubs Generate an implementation stub file\n"
+msgstr " -stubs Створи датотеку клице имплементације\n"
+
+#: java/gjavah.c:2366
+#, c-format
+msgid " -jni Generate a JNI header or stub\n"
+msgstr " -jni Створи ЈÐИ заглавље или клицу\n"
+
+#: java/gjavah.c:2367
+#, c-format
+msgid " -force Always overwrite output files\n"
+msgstr " -force Увек пребриÑуј излазне датотеке\n"
+
+#: java/gjavah.c:2368
+#, c-format
+msgid " -old Unused compatibility option\n"
+msgstr " -old Ðеупотребљена опција ÑаглаÑноÑти\n"
+
+#: java/gjavah.c:2369
+#, c-format
+msgid " -trace Unused compatibility option\n"
+msgstr " -trace Ðеупотребљена опција ÑаглаÑноÑти\n"
+
+#: java/gjavah.c:2370
+#, c-format
+msgid " -J OPTION Unused compatibility option\n"
+msgstr " -J ОПЦИЈРÐеупотребљена опција ÑаглаÑноÑти\n"
+
+#: java/gjavah.c:2372
+#, c-format
+msgid " -add TEXT Insert TEXT into class body\n"
+msgstr " -add ТЕКСТ Уметни ТЕКСТ у тело клаÑе\n"
+
+#: java/gjavah.c:2373
+#, c-format
+msgid " -append TEXT Insert TEXT after class declaration\n"
+msgstr " -append ТЕКСТ Уметни ТЕКСТ поÑле декларације клаÑе\n"
+
+#: java/gjavah.c:2374
+#, c-format
+msgid " -friend TEXT Insert TEXT as 'friend' declaration\n"
+msgstr " -friend ТЕКСТ Уметни текÑÑ‚ као декларацију пријатеља\n"
+
+#: java/gjavah.c:2375
+#, c-format
+msgid " -prepend TEXT Insert TEXT before start of class\n"
+msgstr " -prepend ТЕКСТ Уметни ТЕКСТ пре почетка клаÑе\n"
+
+#: java/gjavah.c:2377 java/jcf-dump.c:912
+#, c-format
+msgid " --classpath PATH Set path to find .class files\n"
+msgstr " --classpath ПУТÐЊРПоÑтави путању за тражење клаÑних датотека\n"
+
+#: java/gjavah.c:2378 java/jcf-dump.c:913
+#, c-format
+msgid " -IDIR Append directory to class path\n"
+msgstr " -IДИР Прикачи директоријум клаÑној путањи\n"
+
+#: java/gjavah.c:2379 java/jcf-dump.c:914
+#, c-format
+msgid " --bootclasspath PATH Override built-in class path\n"
+msgstr " --bootclasspath ПУТÐЊРПотиÑни уграђену клаÑну путању\n"
+
+#: java/gjavah.c:2380 java/jcf-dump.c:915
+#, c-format
+msgid " --extdirs PATH Set extensions directory path\n"
+msgstr " --extdirs ПУТÐЊРПоÑтави путању директоријума проширења\n"
+
+#: java/gjavah.c:2381
+#, c-format
+msgid " -d DIRECTORY Set output directory name\n"
+msgstr " -d ДИРЕКТОРИЈУМ ПоÑтави име излазног директоријума\n"
+
+#: java/gjavah.c:2382 java/jcf-dump.c:916 java/jv-scan.c:115
+#, c-format
+msgid " -o FILE Set output file name\n"
+msgstr " -o ДÐТОТЕКРПоÑтави име излазне датотеке\n"
+
+#: java/gjavah.c:2383
+#, c-format
+msgid " -td DIRECTORY Set temporary directory name\n"
+msgstr " -td ДИРЕКТОРИЈУМ ПоÑтави име привременог директоријума\n"
+
+#: java/gjavah.c:2385 java/jcf-dump.c:918 java/jv-scan.c:117
+#, c-format
+msgid " --help Print this help, then exit\n"
+msgstr " --help ИÑпиши ову помоћ, затим изађи\n"
+
+#: java/gjavah.c:2386 java/jcf-dump.c:919 java/jv-scan.c:118
+#, c-format
+msgid " --version Print version number, then exit\n"
+msgstr " --version ИÑпиши број верзије, затим изађи\n"
+
+#: java/gjavah.c:2387 java/jcf-dump.c:920
+#, c-format
+msgid " -v, --verbose Print extra information while running\n"
+msgstr " -v, --verbose ИÑпиÑуј додатне податке у току рада\n"
+
+#: java/gjavah.c:2389
+#, c-format
+msgid ""
+" -M Print all dependencies to stdout;\n"
+" suppress ordinary output\n"
+msgstr ""
+" -M ИÑпиÑуј Ñве завиÑноÑти на Ñтдиз;\n"
+" Ñузбиј уобичајен излаз\n"
+
+#: java/gjavah.c:2391
+#, c-format
+msgid ""
+" -MM Print non-system dependencies to stdout;\n"
+" suppress ordinary output\n"
+msgstr ""
+" -MM ИÑпиÑуј неÑиÑтемÑке завиÑноÑти на Ñтдиз;\n"
+" Ñузбиј уобичајен излаз\n"
+
+#: java/gjavah.c:2393
+#, c-format
+msgid " -MD Print all dependencies to stdout\n"
+msgstr " -MD ИÑпиÑуј Ñве завиÑноÑти на Ñтдиз\n"
+
+#: java/gjavah.c:2394
+#, c-format
+msgid " -MMD Print non-system dependencies to stdout\n"
+msgstr " -MMD ИÑпиÑуј Ñве неÑиÑтемÑке завиÑноÑти на Ñтдиз\n"
+
+#: java/gjavah.c:2397 java/jcf-dump.c:922 java/jv-scan.c:120
+#, c-format
+msgid ""
+"For bug reporting instructions, please see:\n"
+"%s.\n"
+msgstr ""
+"За упутÑтва о пријављивању грешака, погледајте:\n"
+"%s.\n"
+
+#: java/gjavah.c:2581
+#, c-format
+msgid "Processing %s\n"
+msgstr "Обрађујем %s\n"
+
+#: java/gjavah.c:2591
+#, c-format
+msgid "Found in %s\n"
+msgstr "Ðађено у %s\n"
+
+#: java/jcf-dump.c:829
+#, c-format
+msgid "Not a valid Java .class file.\n"
+msgstr "Ðије иÑправна јаванÑка клаÑна датотека.\n"
+
+#: java/jcf-dump.c:835
+#, c-format
+msgid "error while parsing constant pool\n"
+msgstr "грешка при рашчлањивању депоа конÑтанти\n"
+
+#: java/jcf-dump.c:841 java/jcf-parse.c:759
+#, gcc-internal-format
+msgid "error in constant pool entry #%d\n"
+msgstr "грешка у депоу конÑтанти, ÑƒÐ½Ð¾Ñ #%d\n"
+
+#: java/jcf-dump.c:851
+#, c-format
+msgid "error while parsing fields\n"
+msgstr "грешка при рашчлањивању поља\n"
+
+#: java/jcf-dump.c:857
+#, c-format
+msgid "error while parsing methods\n"
+msgstr "грешка при рашчлањивању метода\n"
+
+#: java/jcf-dump.c:863
+#, c-format
+msgid "error while parsing final attributes\n"
+msgstr "грешка при рашчлањивању коначних атрибута\n"
+
+#: java/jcf-dump.c:900
+#, c-format
+msgid "Try 'jcf-dump --help' for more information.\n"
+msgstr "Покушајте ‘jcf-dump --help’ за више података.\n"
+
+#: java/jcf-dump.c:907
+#, c-format
+msgid ""
+"Usage: jcf-dump [OPTION]... CLASS...\n"
+"\n"
+msgstr ""
+"Употреба: jcf-dump [ОПЦИЈÐ]... КЛÐСÐ...\n"
+"\n"
+
+#: java/jcf-dump.c:908
+#, c-format
+msgid ""
+"Display contents of a class file in readable form.\n"
+"\n"
+msgstr ""
+"Приказује Ñадржај клаÑне датотеке у читљивом облику.\n"
+"\n"
+
+#: java/jcf-dump.c:909
+#, c-format
+msgid " -c Disassemble method bodies\n"
+msgstr " -c РаÑтави тела метода\n"
+
+#: java/jcf-dump.c:910
+#, c-format
+msgid " --javap Generate output in 'javap' format\n"
+msgstr " --javap Стварај излаз као из javap\n"
+
+#: java/jcf-dump.c:950 java/jcf-dump.c:1018
+#, c-format
+msgid "jcf-dump: no classes specified\n"
+msgstr "jcf-dump: није наведена ниједна клаÑа\n"
+
+#: java/jcf-dump.c:1038
+#, c-format
+msgid "Cannot open '%s' for output.\n"
+msgstr "Ðе могу да отворим ‘%s’ за излаз.\n"
+
+#: java/jcf-dump.c:1084
+#, c-format
+msgid "bad format of .zip/.jar archive\n"
+msgstr "лош формат ЗИП/ЈÐР архиве\n"
+
+#: java/jcf-dump.c:1202
+#, c-format
+msgid "Bad byte codes.\n"
+msgstr "Лоши бајткодови.\n"
+
+#: java/jv-scan.c:100
+#, c-format
+msgid "Try 'jv-scan --help' for more information.\n"
+msgstr "Покушајте ‘jv-scan --help’ за више података.\n"
+
+#: java/jv-scan.c:107
+#, c-format
+msgid ""
+"Usage: jv-scan [OPTION]... FILE...\n"
+"\n"
+msgstr ""
+"Употреба: jv-scan [ОПЦИЈÐ]... ДÐТОТЕКÐ...\n"
+"\n"
+
+#: java/jv-scan.c:108
+#, c-format
+msgid ""
+"Print useful information read from Java source files.\n"
+"\n"
+msgstr ""
+"ИÑпиÑује кориÑне податке иÑчитане из јаванÑких изворних датотека.\n"
+"\n"
+
+#: java/jv-scan.c:109
+#, c-format
+msgid " --no-assert Don't recognize the assert keyword\n"
+msgstr " --no-assert Ðе узимај у обзир кључну реч assert\n"
+
+#: java/jv-scan.c:110
+#, c-format
+msgid " --complexity Print cyclomatic complexity of input file\n"
+msgstr " --complexity ИÑпиши цикломатичну ÑложеноÑÑ‚ улазне датотеке\n"
+
+#: java/jv-scan.c:111
+#, c-format
+msgid " --encoding NAME Specify encoding of input file\n"
+msgstr " --encoding ИМЕ Задај кодирање улазне датотеке\n"
+
+#: java/jv-scan.c:112
+#, c-format
+msgid " --print-main Print name of class containing 'main'\n"
+msgstr " --print-main ИÑпиши име клаÑе која Ñадржи main\n"
+
+#: java/jv-scan.c:113
+#, c-format
+msgid " --list-class List all classes defined in file\n"
+msgstr " --list-class ИзлиÑтај Ñве клаÑе дефиниÑане у датотеци\n"
+
+#: java/jv-scan.c:114
+#, c-format
+msgid " --list-filename Print input filename when listing class names\n"
+msgstr " --list-filename ИÑпиши име улазне датотеке при иÑпиÑу имена клаÑа\n"
+
+#: java/jv-scan.c:257
+#, c-format
+msgid "%s: error: "
+msgstr "%s: грешка: "
+
+#: java/jv-scan.c:269 java/jv-scan.c:280
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: упозорење: "
+
+#: java/jvgenmain.c:48
+#, c-format
+msgid "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n"
+msgstr "Употреба: %s [ОПЦИЈЕ]... ИМЕКЛÐСЕmain [ИЗЛÐЗÐÐ_ДÐТОТЕКÐ]\n"
+
+#: java/jvgenmain.c:101
+#, c-format
+msgid "%s: Cannot open output file: %s\n"
+msgstr "%s: Ðе могу да отворим излазну датотеку: %s\n"
+
+#: java/jvgenmain.c:138
+#, c-format
+msgid "%s: Failed to close output file %s\n"
+msgstr "%s: ÐиÑам уÑпео да затворим излазну датотеку %s\n"
+
+#: java/jvspec.c:420
+#, c-format
+msgid "can't specify '-D' without '--main'\n"
+msgstr "не може Ñе задати ‘-D’ без ‘--main’\n"
+
+#: java/jvspec.c:423
+#, c-format
+msgid "'%s' is not a valid class name"
+msgstr "‘%s’ није иÑправно име клаÑе"
+
+#: java/jvspec.c:429
+#, c-format
+msgid "--resource requires -o"
+msgstr "--resource захтева -o"
+
+#: java/jvspec.c:443
+#, c-format
+msgid "cannot specify both -C and -o"
+msgstr "не могу Ñе задати и -C и -o"
+
+#: java/jvspec.c:455
+#, c-format
+msgid "cannot create temporary file"
+msgstr "не могу да направим привремену датотеку"
+
+#: java/jvspec.c:483
+#, c-format
+msgid "using both @FILE with multiple files not implemented"
+msgstr "коришћење и @FILE и вишеÑтруких датотека није имплементирано"
+
+#: java/jvspec.c:546
+#, c-format
+msgid "cannot specify 'main' class when not linking"
+msgstr "не може Ñе задати главна клаÑа када Ñе не повезује"
+
+#: config/mcore/mcore.h:57
+msgid "the m210 does not have little endian support"
+msgstr "Ðœ210 нема подршку мале крајноÑти"
+
+#: config/lynx.h:71
+msgid "cannot use mthreads and mlegacy-threads together"
+msgstr "не могу Ñе заједно кориÑтити mthreads и mlegacy-threads"
+
+#: config/lynx.h:96
+msgid "cannot use mshared and static together"
+msgstr "не могу Ñе заједно кориÑтити mshared и static"
+
+#: config/sparc/sol2-gld-bi.h:17 config/sparc/sol2-gld-bi.h:22
+#: config/sparc/sol2-bi.h:169 config/sparc/sol2-bi.h:174
+msgid "does not support multilib"
+msgstr "не подржава вишебиб"
+
+#: config/mips/r3900.h:35
+msgid "-mhard-float not supported"
+msgstr "-mhard-float није подржано"
+
+#: config/mips/r3900.h:37
+msgid "-msingle-float and -msoft-float cannot both be specified"
+msgstr "не могу Ñе задати и -msingle-float и -msoft-float"
+
+#: config/i386/cygwin.h:29
+msgid "mno-cygwin and mno-win32 are not compatible"
+msgstr "mno-cygwin и mno-win32 ниÑу ÑаглаÑни"
+
+#: config/i386/cygwin.h:70 config/i386/mingw32.h:58
+msgid "shared and mdll are not compatible"
+msgstr "shared и mdll ниÑу ÑаглаÑни"
+
+#: config/vax/netbsd-elf.h:42
+msgid "the -shared option is not currently supported for VAX ELF"
+msgstr "опција -shared тренутно није подржана за Ð’ÐКСов ЕЛФ"
+
+#: config/arm/arm.h:141
+msgid "-msoft-float and -mhard_float may not be used together"
+msgstr "-msoft-float и -mhard_float не могу Ñе кориÑтити заједно"
+
+#: config/arm/arm.h:143
+msgid "-mbig-endian and -mlittle-endian may not be used together"
+msgstr "-mbig-endian и -mlittle-endian не могу Ñе кориÑтити заједно"
+
+#: config/arc/arc.h:62 config/mips/mips.h:849
+msgid "may not use both -EB and -EL"
+msgstr "не могу Ñе навеÑти и -EB и -EL"
+
+#: config/i386/sco5.h:189
+msgid "-pg not supported on this platform"
+msgstr "-pg није подржано на овој платформи"
+
+#: config/i386/sco5.h:190
+msgid "-p and -pp specified - pick one"
+msgstr "задато је -p и -pp — изаберите једно"
+
+#: config/i386/sco5.h:264
+msgid "-G and -static are mutually exclusive"
+msgstr "-G и -static Ñу међуÑобно иÑкључиви"
+
+#: config/rs6000/darwin.h:105
+msgid " conflicting code gen style switches are used"
+msgstr " употребљени Ñу Ñукобљени прекидачи Ñтила генериÑања кôда"
+
+#: ada/lang-specs.h:34 gcc.c:794 java/jvspec.c:80
+msgid "-pg and -fomit-frame-pointer are incompatible"
+msgstr "-pg и -fomit-frame-pointer ниÑу ÑаглаÑни"
+
+#: ada/lang-specs.h:35
+msgid "-c or -S required for Ada"
+msgstr "потребно је -c или -S за аду"
+
+#: gcc.c:767
+msgid "GCC does not support -C or -CC without -E"
+msgstr "ГЦЦ не подржава -C или -CC без -E"
+
+#: gcc.c:961
+msgid "-E or -x required when input is from standard input"
+msgstr "потребно је -E или -x када је улаз Ñа Ñтандардног улаза"
+
+#: config/s390/tpf.h:125
+msgid "static is not supported on TPF-OS"
+msgstr "static није подржано на ТПФ-ОСу"
+
+#: config/sh/sh.h:460
+msgid "SH2a does not support little-endian"
+msgstr "СХ2а не подржава малу крајноÑÑ‚"
+
+#: config/sparc/linux64.h:206 config/sparc/linux64.h:217
+#: config/sparc/netbsd-elf.h:126 config/sparc/netbsd-elf.h:145
+#: config/sparc/sol2-bi.h:197 config/sparc/sol2-bi.h:207
+msgid "may not use both -m32 and -m64"
+msgstr "не могу Ñе навеÑти и -m32 и -m64"
+
+#: config/vxworks.h:66
+msgid "-Xbind-now and -Xbind-lazy are incompatible"
+msgstr "-Xbind-now и -Xbind-lazy ниÑу ÑаглаÑни"
+
+#: config/vax/vax.h:50 config/vax/vax.h:51
+msgid "profiling not supported with -mg\n"
+msgstr "профилиÑање није подржано уз -mg\n"
+
+#: config/i386/nwld.h:35
+msgid "Static linking is not supported.\n"
+msgstr "Статичко повезивање није подржано.\n"
+
+#: java/lang-specs.h:34
+msgid "-fjni and -femit-class-files are incompatible"
+msgstr "-fjni и -femit-class-files ниÑу ÑаглаÑни"
+
+#: java/lang-specs.h:35
+msgid "-fjni and -femit-class-file are incompatible"
+msgstr "-fjni и -femit-class-file ниÑу ÑаглаÑни"
+
+#: java/lang-specs.h:36 java/lang-specs.h:37
+msgid "-femit-class-file should used along with -fsyntax-only"
+msgstr "-femit-class-file треба кориÑтити Ñамо уз -fsyntax-only"
+
+#: config/darwin.h:239
+msgid "-current_version only allowed with -dynamiclib"
+msgstr "-current_version дозвољено Ñамо Ñа -dynamiclib"
+
+#: config/darwin.h:241
+msgid "-install_name only allowed with -dynamiclib"
+msgstr "-install_name дозвољено Ñамо Ñа -dynamiclib"
+
+#: config/darwin.h:246
+msgid "-bundle not allowed with -dynamiclib"
+msgstr "-bundle није дозвољено Ñа -dynamiclib"
+
+#: config/darwin.h:247
+msgid "-bundle_loader not allowed with -dynamiclib"
+msgstr "-bundle_loader није дозвољено Ñа -dynamiclib"
+
+#: config/darwin.h:248
+msgid "-client_name not allowed with -dynamiclib"
+msgstr "-client_name није дозвољено Ñа -dynamiclib"
+
+#: config/darwin.h:253
+msgid "-force_flat_namespace not allowed with -dynamiclib"
+msgstr "-force_flat_namespace није дозвољено Ñа -dynamiclib"
+
+#: config/darwin.h:255
+msgid "-keep_private_externs not allowed with -dynamiclib"
+msgstr "-keep_private_externs није дозвољено Ñа -dynamiclib"
+
+#: config/darwin.h:256
+msgid "-private_bundle not allowed with -dynamiclib"
+msgstr "-private_bundle није дозвољено Ñа -dynamiclib"
+
+#: java/lang.opt:66
+msgid "Warn if a deprecated compiler feature, class, method, or field is used"
+msgstr "Упозори ако Ñе употреби превазиђена могућноÑÑ‚ компилатора, клаÑа, метод или поље"
+
+#: java/lang.opt:70
+msgid "Warn if deprecated empty statements are found"
+msgstr "Упозори ако Ñе нађе превазиђена празна наредба"
+
+#: java/lang.opt:74
+msgid "Warn if .class files are out of date"
+msgstr "Упозори ако Ñу клаÑне датотеке заÑтареле"
+
+#: java/lang.opt:78
+msgid "Warn if modifiers are specified when not necessary"
+msgstr "Упозори ако Ñу модификатори задати када није неопходно"
+
+#: java/lang.opt:82
+msgid "Deprecated; use --classpath instead"
+msgstr "Ðепрепоручљиво; кориÑтите --classpath"
+
+#: java/lang.opt:86
+msgid "Permit the use of the assert keyword"
+msgstr "Дозволи употребу кључне речи assert"
+
+#: java/lang.opt:108
+msgid "Replace system path"
+msgstr "Замени ÑиÑтемÑку путању"
+
+#: java/lang.opt:112
+msgid "Generate checks for references to NULL"
+msgstr "Стварај провере за упућиваче на NULL"
+
+#: java/lang.opt:116
+msgid "Set class path"
+msgstr "ПоÑтави клаÑну путању"
+
+#: java/lang.opt:123
+msgid "Output a class file"
+msgstr "ИÑпиши клаÑну датотеку"
+
+#: java/lang.opt:127
+msgid "Alias for -femit-class-file"
+msgstr "Други назив за -femit-class-file"
+
+#: java/lang.opt:131
+msgid "Choose input encoding (defaults from your locale)"
+msgstr "Изаберите улазно кодирање (подразумевано из локалитета)"
+
+#: java/lang.opt:135
+msgid "Set the extension directory path"
+msgstr "ПоÑтави путању директоријума проширења"
+
+#: java/lang.opt:139
+msgid "Input file is a file with a list of filenames to compile"
+msgstr "Улазна датотека је датотека Ñа лиÑтом имена за компиловање"
+
+#: java/lang.opt:143
+msgid "Always check for non gcj generated classes archives"
+msgstr "Увек проверавај да ли Ñу архиве клаÑа Ñтворене ГЦЈом"
+
+#: java/lang.opt:147
+msgid "Assume the runtime uses a hash table to map an object to its synchronization structure"
+msgstr "ПретпоÑтави да машина кориÑти хрпу да мапира објекат у Ñвоју Ñинхронизациону Ñтруктуру"
+
+#: java/lang.opt:151
+msgid "Use offset tables for virtual method calls"
+msgstr "КориÑти табеле помака за позиве виртуелних метода"
+
+#: java/lang.opt:158
+msgid "Assume native functions are implemented using JNI"
+msgstr "ПретпоÑтави да Ñу урођене функције имплементиране ЈÐИјем"
+
+#: java/lang.opt:162
+msgid "Enable optimization of static class initialization code"
+msgstr "Укључи оптимизацију Ñтатичког кода за уÑпоÑтављање клаÑе"
+
+#: java/lang.opt:169
+msgid "Enable assignability checks for stores into object arrays"
+msgstr "Укључи провере додељивоÑти за Ñладиштења у објектне низове"
+
+#: java/lang.opt:173
+msgid "Generate code for the Boehm GC"
+msgstr "Створи кôд за ГЦ Боем"
+
+#: java/lang.opt:177
+msgid "Call a library routine to do integer divisions"
+msgstr "Зови библиотечку рутину за целобројна дељења"
+
+#: java/lang.opt:181
+msgid "Generated should be loaded by bootstrap loader"
+msgstr "Створено треба учитавати Ñамоуздижућим учитавачем"
+
+#: ada/lang.opt:74
+msgid "Specify options to GNAT"
+msgstr "Ðаведите опције ГÐÐТу"
+
+#: fortran/lang.opt:30
+msgid "Add a directory for INCLUDE and MODULE searching"
+msgstr "Додај директоријум за претрагу укључивања и модула"
+
+#: fortran/lang.opt:34
+msgid "Put MODULE files in 'directory'"
+msgstr "Стави датотеке модула у дати директоријум"
+
+#: fortran/lang.opt:42
+msgid "Warn about possible aliasing of dummy arguments"
+msgstr "Упозори на могућу дволичноÑÑ‚ лажних аргумената"
+
+#: fortran/lang.opt:46
+msgid "Warn about missing ampersand in continued character literals"
+msgstr "Упозори на недоÑтајуће & у наÑтављеним доÑловним ниÑкама"
+
+#: fortran/lang.opt:50
+msgid "Warn about implicit conversion"
+msgstr "Упозори на имплицитно претварање"
+
+#: fortran/lang.opt:54
+msgid "Warn about calls with implicit interface"
+msgstr "Упозори на позиве Ñа имплицитним Ñучељима"
+
+#: fortran/lang.opt:58
+msgid "Warn about truncated source lines"
+msgstr "Упозори на одÑечене изворне линије"
+
+#: fortran/lang.opt:62
+msgid "Warn about usage of non-standard intrinsics"
+msgstr "Упозори на употребу неÑтандардних ÑопÑтвених"
+
+#: fortran/lang.opt:66
+msgid "Warn about \"suspicious\" constructs"
+msgstr "Упозори на „Ñумњиве“ конÑтрукције"
+
+#: fortran/lang.opt:70
+msgid "Warn about underflow of numerical constant expressions"
+msgstr "Упозори на подливање бројевних конÑтантних израза"
+
+#: fortran/lang.opt:74 common.opt:162
+msgid "Warn when a label is unused"
+msgstr "Упозори када Ñе етикета не кориÑти"
+
+#: fortran/lang.opt:78
+msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
+msgstr "Ðе Ñматрај да Ñу локалне променљиве и заједнички блокови именовани у наредбама SAVE"
+
+#: fortran/lang.opt:82
+msgid "Specify that backslash in string introduces an escape character"
+msgstr "Ðаведите да контракроз у ниÑки уводи избегавајући знак"
+
+#: fortran/lang.opt:86
+msgid "Set the default double precision kind to an 8 byte wide type"
+msgstr "ПоÑтави подразумевану врÑту двоÑтруке тачноÑти на 8-битни тип"
+
+#: fortran/lang.opt:90
+msgid "Set the default integer kind to an 8 byte wide type"
+msgstr "ПоÑтави подразумевану врÑту целог броја на 8-битни тип"
+
+#: fortran/lang.opt:94
+msgid "Set the default real kind to an 8 byte wide type"
+msgstr "ПоÑтави подразумевану врÑту реалног броја на 8-битни тип"
+
+#: fortran/lang.opt:98
+msgid "Ignore 'D' in column one in fixed form"
+msgstr "Игнориши ‘D’ у првој колони у фикÑном облику"
+
+#: fortran/lang.opt:102
+msgid "Treat lines with 'D' in column one as comments"
+msgstr "Сматрај линије Ñа ‘D’ у првој колони за коментаре"
+
+#: fortran/lang.opt:106
+msgid "Allow dollar signs in entity names"
+msgstr "Дозволи долар у именима ентитета"
+
+#: fortran/lang.opt:110
+msgid "Display the code tree after parsing"
+msgstr "Прикажи Ñтабло кôда поÑле рашчлањивања"
+
+#: fortran/lang.opt:114
+msgid "Use f2c calling convention"
+msgstr "КориÑти конвенцију позивања f2c"
+
+#: fortran/lang.opt:118
+msgid "Assume that the source file is fixed form"
+msgstr "ПретпоÑтави да је извор у фикÑном облику"
+
+#: fortran/lang.opt:122
+msgid "Assume that the source file is free form"
+msgstr "ПретпоÑтави да је извор у Ñлободном облику"
+
+#: fortran/lang.opt:126
+msgid "Append underscores to externally visible names"
+msgstr "Додај подвлаке Ñпоља видљивим именима"
+
+#: fortran/lang.opt:130
+msgid "Use the Cray Pointer extension"
+msgstr "КориÑти проширење Крејовог показивача"
+
+#: fortran/lang.opt:134
+msgid "Append a second underscore if the name already contains an underscore"
+msgstr "Додај другу подвлаку ако име већ Ñадржи подвлаку"
+
+#: fortran/lang.opt:138
+msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements"
+msgstr "Ðаведите да имплицитни типови ниÑу дозвољени, оÑим ако Ñе не потиÑне екÑплицитном наредбом IMPLICIT"
+
+#: fortran/lang.opt:142
+msgid "Allow arbitrary character line width in fixed mode"
+msgstr "Дозволи произвољну дужину линије у фикÑном режиму"
+
+#: fortran/lang.opt:146
+msgid "Use n as character line width in fixed mode"
+msgstr "КориÑти n као дужину линије у фикÑном режиму"
+
+#: fortran/lang.opt:150
+msgid "Allow arbitrary character line width in free mode"
+msgstr "Дозволи произвољну дужину линије у Ñлободном режиму"
+
+#: fortran/lang.opt:154
+msgid "Use n as character line width in free mode"
+msgstr "КориÑти n као дужину линије у Ñлободном режиму"
+
+#: fortran/lang.opt:158
+msgid "Maximum identifier length"
+msgstr "Ðајвећа дужина идентификатора"
+
+#: fortran/lang.opt:162
+msgid "Size in bytes of the largest array that will be put on the stack"
+msgstr "Величина у бајтовима највећег низа који ће бити Ñтављен на Ñтек"
+
+#: fortran/lang.opt:166
+msgid "Set default accessibility of module entities to PRIVATE"
+msgstr "ПоÑтави подразумевани приÑтуп модулÑким ентитетима на приватан"
+
+#: fortran/lang.opt:170
+msgid "Don't generate code, just do syntax and semantics checking"
+msgstr "Ðе Ñтварај кôд, Ñамо провери ÑинтакÑу и Ñемантику"
+
+#: fortran/lang.opt:174
+msgid "Try to layout derived types as compact as possible"
+msgstr "Покушај да раÑпоредиш изведене типове што збијеније"
+
+#: fortran/lang.opt:178
+msgid "Copy array sections into a contiguous block on procedure entry"
+msgstr "Копирај одељке низа у непрекидан блок при улазу у процедуру"
+
+#: fortran/lang.opt:182
+msgid "Treat the input file as preprocessed"
+msgstr "Сматрај улазну датотеку предобрађеном"
+
+#: fortran/lang.opt:186
+msgid "Set the kind for a real with the 'q' exponent to 'n'"
+msgstr "ПоÑтави врÑту за реалне бројеве Ñа изложиоцем ‘q’ на ‘n’"
+
+#: fortran/lang.opt:190
+msgid "Stop on following floating point exceptions"
+msgstr "Стани код Ñледећих изузетака покретног зареза"
+
+#: fortran/lang.opt:194
+msgid "Conform to the ISO Fortran 95 standard"
+msgstr "Поштуј ИСО Ñтандард фортрана 95"
+
+#: fortran/lang.opt:198
+msgid "Conform to the ISO Fortran 2003 standard"
+msgstr "Поштуј ИСО Ñтандард фортрана 2003"
+
+#: fortran/lang.opt:202
+msgid "Conform nothing in particular"
+msgstr "Ðе поштуј ништа поÑебно"
+
+#: fortran/lang.opt:206
+msgid "Accept extensions to support legacy code"
+msgstr "Прихвати проширења за подршку Ñтарог кода"
+
+#: fortran/lang.opt:210 c.opt:661
+msgid "Use the narrowest integer type possible for enumeration types"
+msgstr "За набројиве типове кориÑти најужи целобројни тип могућ"
+
+#: fortran/lang.opt:214
+msgid "Use little-endian format for unformatted files"
+msgstr "КориÑти формат мале крајноÑти за неформатиране датотеке"
+
+#: fortran/lang.opt:218
+msgid "Use big-endian format for unformatted files"
+msgstr "КориÑти формат мале крајноÑти за неформатиране датотеке"
+
+#: fortran/lang.opt:222
+msgid "Use native format for unformatted files"
+msgstr "КориÑти урођени формат за неформатиране датотеке"
+
+#: fortran/lang.opt:226
+msgid "Swap endianness for unformatted files"
+msgstr "Размени крајноÑÑ‚ за неформатиране датотеке"
+
+#: fortran/lang.opt:230
+msgid "Use a 4-byte record marker for unformatted files"
+msgstr "КориÑти 4-бајтни обележивач Ñлога за неформатиране датотеке"
+
+#: fortran/lang.opt:234
+msgid "Use an 8-byte record marker for unformatted files"
+msgstr "КориÑти 8-бајтни обележивач Ñлога за неформатиране датотеке"
+
+#: treelang/lang.opt:30
+msgid "Trace lexical analysis"
+msgstr "Прати лекÑичку анализу"
+
+#: treelang/lang.opt:34
+msgid "Trace the parsing process"
+msgstr "Прати поÑтупак рашчлањивања"
+
+#: config/alpha/alpha.opt:24 config/i386/i386.opt:186
+msgid "Do not use hardware fp"
+msgstr "Ðе кориÑти хардверÑки ФП"
+
+#: config/alpha/alpha.opt:28
+msgid "Use fp registers"
+msgstr "КориÑти ФП региÑтре"
+
+#: config/alpha/alpha.opt:32
+msgid "Assume GAS"
+msgstr "ПретпоÑтави ГÐС"
+
+#: config/alpha/alpha.opt:36
+msgid "Do not assume GAS"
+msgstr "Ðе претпоÑтављај ГÐС"
+
+#: config/alpha/alpha.opt:40
+msgid "Request IEEE-conformant math library routines (OSF/1)"
+msgstr "Захтевај рутине математичке библиотеке које поштују ИЕЕЕ (OSF/1)"
+
+#: config/alpha/alpha.opt:44
+msgid "Emit IEEE-conformant code, without inexact exceptions"
+msgstr "Емитуј кôд који поштује ИЕЕЕ, без нетачних изузетака"
+
+#: config/alpha/alpha.opt:51
+msgid "Do not emit complex integer constants to read-only memory"
+msgstr "Ðе емитуј комплекÑне целобројне конÑтанте у Ñамо-за-читање меморију"
+
+#: config/alpha/alpha.opt:55
+msgid "Use VAX fp"
+msgstr "КориÑти Ð’ÐКСов ФП"
+
+#: config/alpha/alpha.opt:59
+msgid "Do not use VAX fp"
+msgstr "Ðе кориÑти Ð’ÐКСов ФП"
+
+#: config/alpha/alpha.opt:63
+msgid "Emit code for the byte/word ISA extension"
+msgstr "Емитуј кôд за бајт/реч ИСРпроширење"
+
+#: config/alpha/alpha.opt:67
+msgid "Emit code for the motion video ISA extension"
+msgstr "Емитуј кôд за видео ИСРпроширење"
+
+#: config/alpha/alpha.opt:71
+msgid "Emit code for the fp move and sqrt ISA extension"
+msgstr "Емитуј кôд за fp move и sqrt ИСРпроширење"
+
+#: config/alpha/alpha.opt:75
+msgid "Emit code for the counting ISA extension"
+msgstr "Емитуј кôд за бројачко ИСРпроширење"
+
+#: config/alpha/alpha.opt:79
+msgid "Emit code using explicit relocation directives"
+msgstr "Емитуј кôд кориÑтећи екплицитне релокационе директиве"
+
+#: config/alpha/alpha.opt:83
+msgid "Emit 16-bit relocations to the small data areas"
+msgstr "Емитуј 16-битне релокације у мале облаÑти података"
+
+#: config/alpha/alpha.opt:87
+msgid "Emit 32-bit relocations to the small data areas"
+msgstr "Емитуј 32-битне релокације у мале облаÑти података"
+
+#: config/alpha/alpha.opt:91
+msgid "Emit direct branches to local functions"
+msgstr "Емитуј непоÑредна гранања у локалне функције"
+
+#: config/alpha/alpha.opt:95
+msgid "Emit indirect branches to local functions"
+msgstr "Емитуј поÑредна гранања у локалне функције"
+
+#: config/alpha/alpha.opt:99
+msgid "Emit rdval instead of rduniq for thread pointer"
+msgstr "Емитуј rdval умеÑто rduniq за показивач нити"
+
+#: config/alpha/alpha.opt:103 config/s390/s390.opt:56
+#: config/sparc/long-double-switch.opt:24
+msgid "Use 128-bit long double"
+msgstr "КориÑти 128-битни long double"
+
+#: config/alpha/alpha.opt:107 config/s390/s390.opt:60
+#: config/sparc/long-double-switch.opt:28
+msgid "Use 64-bit long double"
+msgstr "КориÑти 64-битни long double"
+
+#: config/alpha/alpha.opt:111
+msgid "Use features of and schedule given CPU"
+msgstr "КориÑти могућноÑти и раÑпоређуј за дати ЦПУ"
+
+#: config/alpha/alpha.opt:115
+msgid "Schedule given CPU"
+msgstr "RаÑпоређуј дати ЦПУ"
+
+#: config/alpha/alpha.opt:119
+msgid "Control the generated fp rounding mode"
+msgstr "Контролиши Ñтворени ФП режим заокруживања"
+
+#: config/alpha/alpha.opt:123
+msgid "Control the IEEE trap mode"
+msgstr "Контролиши ИЕЕЕ режим клопки"
+
+#: config/alpha/alpha.opt:127
+msgid "Control the precision given to fp exceptions"
+msgstr "Контролиши тачноÑÑ‚ дату ФП изузецима"
+
+#: config/alpha/alpha.opt:131
+msgid "Tune expected memory latency"
+msgstr "Ðаштелуј очекивано кашњење меморије"
+
+#: config/alpha/alpha.opt:135 config/ia64/ia64.opt:93
+#: config/rs6000/sysv4.opt:33
+msgid "Specify bit size of immediate TLS offsets"
+msgstr "Ðаведите битÑку величину непоÑредних ТЛС помака"
+
+#: config/frv/frv.opt:24
+msgid "Use 4 media accumulators"
+msgstr "КориÑти 4 медија-акумулатора"
+
+#: config/frv/frv.opt:28
+msgid "Use 8 media accumulators"
+msgstr "КориÑти 8 медија-акумулатора"
+
+#: config/frv/frv.opt:32
+msgid "Enable label alignment optimizations"
+msgstr "Укључи оптимизацију равнања етикета"
+
+#: config/frv/frv.opt:36
+msgid "Dynamically allocate cc registers"
+msgstr "Динамички резервиши цц региÑтре"
+
+#: config/frv/frv.opt:43
+msgid "Set the cost of branches"
+msgstr "ПоÑтави цену гранањâ"
+
+#: config/frv/frv.opt:47
+msgid "Enable conditional execution other than moves/scc"
+msgstr "Укључи уÑловно извршавања оÑим померања/Ñцц"
+
+#: config/frv/frv.opt:51
+msgid "Change the maximum length of conditionally-executed sequences"
+msgstr "Промени највећу дужину уÑловно извршаваних Ñеквенци"
+
+#: config/frv/frv.opt:55
+msgid "Change the number of temporary registers that are available to conditionally-executed sequences"
+msgstr "Промени број привремених региÑтара доÑтупних уÑловно извршаваним Ñеквенцама"
+
+#: config/frv/frv.opt:59
+msgid "Enable conditional moves"
+msgstr "Укључи уÑловна померања"
+
+#: config/frv/frv.opt:63
+msgid "Set the target CPU type"
+msgstr "ПоÑтави циљни тип ЦПУа"
+
+#: config/frv/frv.opt:85
+msgid "Use fp double instructions"
+msgstr "КориÑти ФП двоÑтруке тачноÑти"
+
+#: config/frv/frv.opt:89
+msgid "Change the ABI to allow double word insns"
+msgstr "Промени ÐБИ да дозволи дворечне ије"
+
+#: config/frv/frv.opt:93
+msgid "Enable Function Descriptor PIC mode"
+msgstr "Укључи ПИЦ режим опиÑника функција"
+
+#: config/frv/frv.opt:97
+msgid "Just use icc0/fcc0"
+msgstr "Само кориÑти icc0/fcc0"
+
+#: config/frv/frv.opt:101
+msgid "Only use 32 FPRs"
+msgstr "КориÑти Ñамо 32 ФПРа"
+
+#: config/frv/frv.opt:105
+msgid "Use 64 FPRs"
+msgstr "КориÑти 64 ФПРа"
+
+#: config/frv/frv.opt:109
+msgid "Only use 32 GPRs"
+msgstr "КориÑти Ñамо 32 ГПРа"
+
+#: config/frv/frv.opt:113
+msgid "Use 64 GPRs"
+msgstr "КориÑти 64 ГПРа"
+
+#: config/frv/frv.opt:117
+msgid "Enable use of GPREL for read-only data in FDPIC"
+msgstr "Укључи употребу ГПРЕЛа за Ñамо-за-читање податке у ФДПИЦу"
+
+#: config/frv/frv.opt:121 config/rs6000/rs6000.opt:93
+#: config/pdp11/pdp11.opt:72
+msgid "Use hardware floating point"
+msgstr "КориÑти хардверÑки покретан зарез"
+
+#: config/frv/frv.opt:125
+msgid "Enable inlining of PLT in function calls"
+msgstr "Укључи уткивање ПЛТа у позивима функција"
+
+#: config/frv/frv.opt:129
+msgid "Enable PIC support for building libraries"
+msgstr "Укључи ПИЦ подршку за грађење библиотека"
+
+#: config/frv/frv.opt:133
+msgid "Follow the EABI linkage requirements"
+msgstr "Прати ЕÐБИ захтеве повезивоÑти"
+
+#: config/frv/frv.opt:137
+msgid "Disallow direct calls to global functions"
+msgstr "Забрани непоÑредне позиве глобалних функција"
+
+#: config/frv/frv.opt:141
+msgid "Use media instructions"
+msgstr "КориÑти медија-инÑтрукције"
+
+#: config/frv/frv.opt:145
+msgid "Use multiply add/subtract instructions"
+msgstr "КориÑти инÑтрукције множење-додавање/одузимање"
+
+#: config/frv/frv.opt:149
+msgid "Enable optimizing &&/|| in conditional execution"
+msgstr "Укључи оптимизацију &&/|| у уÑловном извршавању"
+
+#: config/frv/frv.opt:153
+msgid "Enable nested conditional execution optimizations"
+msgstr "Укључи оптимизацију угњежденог уÑловног извршавања"
+
+#: config/frv/frv.opt:158
+msgid "Do not mark ABI switches in e_flags"
+msgstr "Ðе означавај промене ÐБИја у e_flags"
+
+#: config/frv/frv.opt:162
+msgid "Remove redundant membars"
+msgstr "Уклони Ñувишне мембарове"
+
+#: config/frv/frv.opt:166
+msgid "Pack VLIW instructions"
+msgstr "Пакуј ВЛИВ инÑтрукције"
+
+#: config/frv/frv.opt:170
+msgid "Enable setting GPRs to the result of comparisons"
+msgstr "Укључи поÑтављање ГПРова на резултате поређења"
+
+#: config/frv/frv.opt:174
+msgid "Change the amount of scheduler lookahead"
+msgstr "Промени раÑпон гледања унапред раÑпоређивача"
+
+#: config/frv/frv.opt:178 config/pa/pa.opt:105
+msgid "Use software floating point"
+msgstr "КориÑти ÑофтверÑки покретан зарез"
+
+#: config/frv/frv.opt:182
+msgid "Assume a large TLS segment"
+msgstr "ПретпоÑтави велики ТЛС Ñегмент"
+
+#: config/frv/frv.opt:186
+msgid "Do not assume a large TLS segment"
+msgstr "Ðе претпоÑтављај велики ТЛС Ñегмент"
+
+#: config/frv/frv.opt:191
+msgid "Cause gas to print tomcat statistics"
+msgstr "Ðека ГÐС иÑпиÑује томкет ÑтатиÑтику"
+
+#: config/frv/frv.opt:196
+msgid "Link with the library-pic libraries"
+msgstr "Повезуј Ñа ПИЦ библиотекама"
+
+#: config/frv/frv.opt:200
+msgid "Allow branches to be packed with other instructions"
+msgstr "Дозволи да гранања буду упакована Ñа другим инÑтрукцијама"
+
+#: config/mn10300/mn10300.opt:24
+msgid "Target the AM33 processor"
+msgstr "Циљај процеÑор ÐÐœ33"
+
+#: config/mn10300/mn10300.opt:28
+msgid "Target the AM33/2.0 processor"
+msgstr "Циљај процеÑор ÐÐœ33/2.0"
+
+#: config/mn10300/mn10300.opt:32
+msgid "Work around hardware multiply bug"
+msgstr "Заобиђи хардверÑку грешку у множењу"
+
+#: config/mn10300/mn10300.opt:37
+msgid "Enable linker relaxations"
+msgstr "Укључи релакÑације повезивача"
+
+#: config/mn10300/mn10300.opt:41
+msgid "Return pointers in both a0 and d0"
+msgstr "Враћај показиваче и у a0 и у d0"
+
+#: config/s390/tpf.opt:24
+msgid "Enable TPF-OS tracing code"
+msgstr "Укључи кôд за праћење ТПФ-ОСа"
+
+#: config/s390/tpf.opt:28
+msgid "Specify main object for TPF-OS"
+msgstr "Ðаведите главни објекат за ТПФ-ОС"
+
+#: config/s390/s390.opt:24
+msgid "31 bit ABI"
+msgstr "31-битни ÐБИ"
+
+#: config/s390/s390.opt:28
+msgid "64 bit ABI"
+msgstr "64-битни ÐБИ"
+
+#: config/s390/s390.opt:32 config/i386/i386.opt:80
+msgid "Generate code for given CPU"
+msgstr "Створи кôд за дати ЦПУ"
+
+#: config/s390/s390.opt:36
+msgid "Maintain backchain pointer"
+msgstr "Одржавај показивач контраланца"
+
+#: config/s390/s390.opt:40
+msgid "Additional debug prints"
+msgstr "Додатно иÑправљачко иÑпиÑивање"
+
+#: config/s390/s390.opt:44
+msgid "ESA/390 architecture"
+msgstr "Ðрхитектура ЕСÐ/390"
+
+#: config/s390/s390.opt:48
+msgid "Enable fused multiply/add instructions"
+msgstr "Укључи инÑтрукције Ñтопљеног множења-додавања"
+
+#: config/s390/s390.opt:52 config/i386/i386.opt:48 config/i386/i386.opt:118
+msgid "Use hardware fp"
+msgstr "КориÑти хардверÑки ФП"
+
+#: config/s390/s390.opt:64
+msgid "Use packed stack layout"
+msgstr "КориÑти раÑпоред пакованог Ñтека"
+
+#: config/s390/s390.opt:68
+msgid "Use bras for executable < 64k"
+msgstr "КориÑти bras за извршне датотеке < 64k"
+
+#: config/s390/s390.opt:72
+msgid "Don't use hardware fp"
+msgstr "Ðе кориÑти хардверÑки ФП"
+
+#: config/s390/s390.opt:76
+msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered"
+msgstr "ПоÑтави највећи број бајтова који Ñе мора одложити на Ñтек пре него што Ñе окине инÑтрукција клопке"
+
+#: config/s390/s390.opt:80
+msgid "Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit"
+msgstr "Емитуј додатни кôд у прологу функције ради клопке кад величина Ñтека премашује дато ограничење"
+
+#: config/s390/s390.opt:84 config/ia64/ia64.opt:97 config/sparc/sparc.opt:96
+#: config/i386/i386.opt:222 config/rs6000/rs6000.opt:203
+msgid "Schedule code for given CPU"
+msgstr "РаÑпореди кôд за дати ЦПУ"
+
+#: config/s390/s390.opt:88
+msgid "mvcle use"
+msgstr "Употреба mvcle"
+
+#: config/s390/s390.opt:92
+msgid "Warn if a function uses alloca or creates an array with dynamic size"
+msgstr "Упозори ако функција кориÑти alloca или прави низ динамичке величине"
+
+#: config/s390/s390.opt:96
+msgid "Warn if a single function's framesize exceeds the given framesize"
+msgstr "Упозори ако величина оквира једне функције премашује дату величину"
+
+#: config/s390/s390.opt:100
+msgid "z/Architecture"
+msgstr "Ðрхитектура z/"
+
+#: config/ia64/ilp32.opt:3
+msgid "Generate ILP32 code"
+msgstr "Створи ИЛП32 кôд"
+
+#: config/ia64/ilp32.opt:7
+msgid "Generate LP64 code"
+msgstr "Створи ЛП64 кôд"
+
+#: config/ia64/ia64.opt:3
+msgid "Generate big endian code"
+msgstr "Створи кôд велике крајноÑти"
+
+#: config/ia64/ia64.opt:7
+msgid "Generate little endian code"
+msgstr "Створи кôд мале крајноÑти"
+
+#: config/ia64/ia64.opt:11
+msgid "Generate code for GNU as"
+msgstr "Створи кôд за Гнуов as"
+
+#: config/ia64/ia64.opt:15
+msgid "Generate code for GNU ld"
+msgstr "Створи кôд за Гнуов ld"
+
+#: config/ia64/ia64.opt:19
+msgid "Emit stop bits before and after volatile extended asms"
+msgstr "Емитуј битове зауÑтављања пре и поÑле непоÑтојаних проширених аÑмова"
+
+#: config/ia64/ia64.opt:23
+msgid "Use in/loc/out register names"
+msgstr "КориÑти имена региÑтара in/loc/out"
+
+#: config/ia64/ia64.opt:30
+msgid "Enable use of sdata/scommon/sbss"
+msgstr "Укључи употребу sdata/scommon/sbss"
+
+#: config/ia64/ia64.opt:34
+msgid "Generate code without GP reg"
+msgstr "Створи кôд без ГП региÑтра"
+
+#: config/ia64/ia64.opt:38
+msgid "gp is constant (but save/restore gp on indirect calls)"
+msgstr "ГП је конÑтантан (али чувај/враћај ГП при поÑредним позивима)"
+
+#: config/ia64/ia64.opt:42
+msgid "Generate self-relocatable code"
+msgstr "Створи Ñаморелокациони кôд"
+
+#: config/ia64/ia64.opt:46
+msgid "Generate inline floating point division, optimize for latency"
+msgstr "Стварај уткано дељење у покретном зарезу, оптимизуј за кашњење"
+
+#: config/ia64/ia64.opt:50
+msgid "Generate inline floating point division, optimize for throughput"
+msgstr "Стварај уткано дељење у покретном зарезу, оптимизуј за пропуÑноÑÑ‚"
+
+#: config/ia64/ia64.opt:57
+msgid "Generate inline integer division, optimize for latency"
+msgstr "Стварај уткано целобројно дељење, оптимизуј за кашњење"
+
+#: config/ia64/ia64.opt:61
+msgid "Generate inline integer division, optimize for throughput"
+msgstr "Стварај уткано целобројно дељење, оптимизуј за пропуÑноÑÑ‚"
+
+#: config/ia64/ia64.opt:65
+msgid "Do not inline integer division"
+msgstr "Ðе уткивај целобројно дељење"
+
+#: config/ia64/ia64.opt:69
+msgid "Generate inline square root, optimize for latency"
+msgstr "Стварај уткани квадратни корен, оптимизуј за кашњење"
+
+#: config/ia64/ia64.opt:73
+msgid "Generate inline square root, optimize for throughput"
+msgstr "Стварај уткани квадратни корен, оптимизуј за пропуÑноÑÑ‚"
+
+#: config/ia64/ia64.opt:77
+msgid "Do not inline square root"
+msgstr "Ðе уткивај квадратни корен"
+
+#: config/ia64/ia64.opt:81
+msgid "Enable Dwarf 2 line debug info via GNU as"
+msgstr "Укључи иÑправљачке податке ДВÐРФ 2 преко Гнуовог as"
+
+#: config/ia64/ia64.opt:85
+msgid "Enable earlier placing stop bits for better scheduling"
+msgstr "Укључи раније поÑтављање битова зауÑтављања ради бољег раÑпоређивања"
+
+#: config/ia64/ia64.opt:89 config/pa/pa.opt:52
+msgid "Specify range of registers to make fixed"
+msgstr "Ðаведите опÑег региÑтара које треба фикÑирати"
+
+#: config/m32c/m32c.opt:25 config/mt/mt.opt:28
+msgid "Use simulator runtime"
+msgstr "КориÑти ÑимулаторÑко извршавање"
+
+#: config/m32c/m32c.opt:29
+msgid "Compile code for R8C variants"
+msgstr "Компилуј кôд за варијанте Р8Ц"
+
+#: config/m32c/m32c.opt:33
+msgid "Compile code for M16C variants"
+msgstr "Компилуј кôд за варијанте М16Ц"
+
+#: config/m32c/m32c.opt:37
+msgid "Compile code for M32CM variants"
+msgstr "Компилуј кôд за варијанте М32ЦМ"
+
+#: config/m32c/m32c.opt:41
+msgid "Compile code for M32C variants"
+msgstr "Компилуј кôд за варијанте М32Ц"
+
+#: config/m32c/m32c.opt:45
+msgid "Number of memreg bytes (default: 16, range: 0..16)"
+msgstr "Број бајтова мемрегова (подразумевано: 16, опÑег: 0..16)"
+
+#: config/sparc/little-endian.opt:24
+msgid "Generate code for little-endian"
+msgstr "Створи кôд за малу крајноÑÑ‚"
+
+#: config/sparc/little-endian.opt:28
+msgid "Generate code for big-endian"
+msgstr "Створи кôд за велику крајноÑÑ‚"
+
+#: config/sparc/sparc.opt:24 config/sparc/sparc.opt:28
+msgid "Use hardware FP"
+msgstr "КориÑти хардверÑки ФП"
+
+#: config/sparc/sparc.opt:32
+msgid "Do not use hardware FP"
+msgstr "Ðе кориÑти хардверÑки ФП"
+
+#: config/sparc/sparc.opt:36
+msgid "Assume possible double misalignment"
+msgstr "ПретпоÑтави могуће двоÑтруко неравнање"
+
+#: config/sparc/sparc.opt:40
+msgid "Pass -assert pure-text to linker"
+msgstr "ПроÑледи -assert pure-text повезивачу"
+
+#: config/sparc/sparc.opt:44
+msgid "Use ABI reserved registers"
+msgstr "КориÑти региÑтре резервиÑане ÐБИјем"
+
+#: config/sparc/sparc.opt:48
+msgid "Use hardware quad FP instructions"
+msgstr "КориÑти хардверÑке четворне ФП инÑтрукције"
+
+#: config/sparc/sparc.opt:52
+msgid "Do not use hardware quad fp instructions"
+msgstr "Ðе кориÑти хардверÑке четворне ФП инÑтрукције"
+
+#: config/sparc/sparc.opt:56
+msgid "Compile for V8+ ABI"
+msgstr "Компилуј за ÐБИ Ð’8+"
+
+#: config/sparc/sparc.opt:60
+msgid "Use UltraSPARC Visual Instruction Set extensions"
+msgstr "КориÑти Ñкуп визуелних инÑтрукција (ВИС) УлтраСПÐРКа"
+
+#: config/sparc/sparc.opt:64
+msgid "Pointers are 64-bit"
+msgstr "Показивачи Ñу 64-битни"
+
+#: config/sparc/sparc.opt:68
+msgid "Pointers are 32-bit"
+msgstr "Показивачи Ñу 32-битни"
+
+#: config/sparc/sparc.opt:72
+msgid "Use 64-bit ABI"
+msgstr "КориÑти 64-битни ÐБИ"
+
+#: config/sparc/sparc.opt:76
+msgid "Use 32-bit ABI"
+msgstr "КориÑти 32-битни ÐБИ"
+
+#: config/sparc/sparc.opt:80
+msgid "Use stack bias"
+msgstr "КориÑти нагињање Ñтека"
+
+#: config/sparc/sparc.opt:84
+msgid "Use structs on stronger alignment for double-word copies"
+msgstr "КориÑти Ñтруктуре на јачем равнању за дворечне копије"
+
+#: config/sparc/sparc.opt:88
+msgid "Optimize tail call instructions in assembler and linker"
+msgstr "Оптимизуј инÑтрукције репних позива у аÑемблеру и повезивачу"
+
+#: config/sparc/sparc.opt:92 config/rs6000/rs6000.opt:199
+msgid "Use features of and schedule code for given CPU"
+msgstr "КориÑти могућноÑти и раÑпоређуј кôд за дати ЦПУ"
+
+#: config/sparc/sparc.opt:100
+msgid "Use given SPARC-V9 code model"
+msgstr "КориÑти дати модел кôда СПÐРКа Ð’9"
+
+#: config/m32r/m32r.opt:24
+msgid "Compile for the m32rx"
+msgstr "Компилуј за m32rx"
+
+#: config/m32r/m32r.opt:28
+msgid "Compile for the m32r2"
+msgstr "Компилуј за m32r2"
+
+#: config/m32r/m32r.opt:32
+msgid "Compile for the m32r"
+msgstr "Компилуј за m32r"
+
+#: config/m32r/m32r.opt:36
+msgid "Align all loops to 32 byte boundary"
+msgstr "Поравнај Ñве петље на 32-бајтну границу"
+
+#: config/m32r/m32r.opt:40
+msgid "Prefer branches over conditional execution"
+msgstr "Боље гранања него уÑловно извршавање"
+
+#: config/m32r/m32r.opt:44
+msgid "Give branches their default cost"
+msgstr "Дај гранањима њихову подразумевану цену"
+
+#: config/m32r/m32r.opt:48
+msgid "Display compile time statistics"
+msgstr "Прикажи ÑтатиÑтике за време компиловања"
+
+#: config/m32r/m32r.opt:52
+msgid "Specify cache flush function"
+msgstr "Ðаведите функцију за Ñпирање оÑтаве"
+
+#: config/m32r/m32r.opt:56
+msgid "Specify cache flush trap number"
+msgstr "Ðаведите број клопке за Ñпирање оÑтаве"
+
+#: config/m32r/m32r.opt:60
+msgid "Only issue one instruction per cycle"
+msgstr "Издај Ñамо једну инÑтрукцију по циклуÑу"
+
+#: config/m32r/m32r.opt:64
+msgid "Allow two instructions to be issued per cycle"
+msgstr "Дозволи издавање две инÑтрукције по циклуÑу"
+
+#: config/m32r/m32r.opt:68
+msgid "Code size: small, medium or large"
+msgstr "Величина кôда: small, medium или large"
+
+#: config/m32r/m32r.opt:72
+msgid "Don't call any cache flush functions"
+msgstr "Ðе позивај функције за Ñпирање оÑтаве"
+
+#: config/m32r/m32r.opt:76
+msgid "Don't call any cache flush trap"
+msgstr "Ðе позивај клопке за Ñпирање оÑтаве"
+
+#: config/m32r/m32r.opt:83
+msgid "Small data area: none, sdata, use"
+msgstr "Мала облаÑÑ‚ података: none, sdata, use"
+
+#: config/m68k/m68k.opt:24
+msgid "Generate code for a 520X"
+msgstr "Створи кôд за 520X"
+
+#: config/m68k/m68k.opt:28
+msgid "Generate code for a 5206e"
+msgstr "Створи кôд за 5206e"
+
+#: config/m68k/m68k.opt:32
+msgid "Generate code for a 528x"
+msgstr "Створи кôд за 528x"
+
+#: config/m68k/m68k.opt:36
+msgid "Generate code for a 5307"
+msgstr "Створи кôд за 5307"
+
+#: config/m68k/m68k.opt:40
+msgid "Generate code for a 5407"
+msgstr "Створи кôд за 5407"
+
+#: config/m68k/m68k.opt:44 config/m68k/m68k.opt:97
+msgid "Generate code for a 68000"
+msgstr "Створи кôд за 68000"
+
+#: config/m68k/m68k.opt:48 config/m68k/m68k.opt:101
+msgid "Generate code for a 68020"
+msgstr "Створи кôд за 68020"
+
+#: config/m68k/m68k.opt:52
+msgid "Generate code for a 68040, without any new instructions"
+msgstr "Створи кôд за 68040, без икаквих нових инÑтрукција"
+
+#: config/m68k/m68k.opt:56
+msgid "Generate code for a 68060, without any new instructions"
+msgstr "Створи кôд за 68060, без икаквих нових инÑтрукција"
+
+#: config/m68k/m68k.opt:60
+msgid "Generate code for a 68030"
+msgstr "Створи кôд за 68030"
+
+#: config/m68k/m68k.opt:64
+msgid "Generate code for a 68040"
+msgstr "Створи кôд за 68040"
+
+#: config/m68k/m68k.opt:68
+msgid "Generate code for a 68060"
+msgstr "Створи кôд за 68060"
+
+#: config/m68k/m68k.opt:72
+msgid "Generate code for a 68302"
+msgstr "Створи кôд за 68302"
+
+#: config/m68k/m68k.opt:76
+msgid "Generate code for a 68332"
+msgstr "Створи кôд за 68332"
+
+#: config/m68k/m68k.opt:81
+msgid "Generate code for a 68851"
+msgstr "Створи кôд за 68851"
+
+#: config/m68k/m68k.opt:85
+msgid "Generate code that uses 68881 floating-point instructions"
+msgstr "Створи кôд који кориÑти инÑтрукције од 68881 за рачунање у покретном зарезу"
+
+#: config/m68k/m68k.opt:89
+msgid "Align variables on a 32-bit boundary"
+msgstr "Поравнај променљиве на 32-бајтну границу"
+
+#: config/m68k/m68k.opt:93
+msgid "Use the bit-field instructions"
+msgstr "КориÑти инÑтрукције битÑког нивоа"
+
+#: config/m68k/m68k.opt:105
+msgid "Generate code for a cpu32"
+msgstr "Створи кôд за cpu32"
+
+#: config/m68k/m68k.opt:109
+msgid "Enable ID based shared library"
+msgstr "Укључи дељене библиотеке на оÑнову ИДа"
+
+#: config/m68k/m68k.opt:113
+msgid "Do not use the bit-field instructions"
+msgstr "Ðе кориÑти инÑтрукције битÑког нивоа"
+
+#: config/m68k/m68k.opt:117
+msgid "Use normal calling convention"
+msgstr "КориÑти нормалну конвенцију позивања"
+
+#: config/m68k/m68k.opt:121
+msgid "Consider type 'int' to be 32 bits wide"
+msgstr "Сматрај да тип ‘int’ има 32 бита"
+
+#: config/m68k/m68k.opt:125
+msgid "Generate pc-relative code"
+msgstr "Прави ПЦ-релативан кôд"
+
+#: config/m68k/m68k.opt:129
+msgid "Use different calling convention using 'rtd'"
+msgstr "КориÑти различиту конвенцију позивања кориÑтећи ‘rtd’"
+
+#: config/m68k/m68k.opt:133
+msgid "Enable separate data segment"
+msgstr "Укључи раздвојени Ñегмент података"
+
+#: config/m68k/m68k.opt:137 config/bfin/bfin.opt:45
+msgid "ID of shared library to build"
+msgstr "ИД дељене библиотеке за градњу"
+
+#: config/m68k/m68k.opt:141
+msgid "Consider type 'int' to be 16 bits wide"
+msgstr "Сматрај да тип ‘int’ има 16 битова"
+
+#: config/m68k/m68k.opt:145
+msgid "Generate code with library calls for floating point"
+msgstr "Створи кôд Ñа библиотечким позивима за покретни зарез"
+
+#: config/m68k/m68k.opt:149
+msgid "Do not use unaligned memory references"
+msgstr "Ðе кориÑти непоравнате меморијÑке упућиваче"
+
+#: config/m68k/ieee.opt:25 config/i386/i386.opt:122
+msgid "Use IEEE math for fp comparisons"
+msgstr "КориÑти ИЕЕЕ математику за ФП поређења"
+
+#: config/i386/djgpp.opt:26
+msgid "Ignored (obsolete)"
+msgstr "ИгнориÑано (заÑтарело)"
+
+#: config/i386/i386.opt:24
+msgid "sizeof(long double) is 16"
+msgstr "sizeof(long double) је 16"
+
+#: config/i386/i386.opt:28
+msgid "Generate 32bit i386 code"
+msgstr "Створи 32-битни кôд за и386"
+
+#: config/i386/i386.opt:36
+msgid "Support 3DNow! built-in functions"
+msgstr "Подржи уграђене 3DNow! функције"
+
+#: config/i386/i386.opt:44
+msgid "Generate 64bit x86-64 code"
+msgstr "Створи 64-битни кôд за икÑ86-64"
+
+#: config/i386/i386.opt:52
+msgid "sizeof(long double) is 12"
+msgstr "sizeof(long double) је 12"
+
+#: config/i386/i386.opt:56
+msgid "Reserve space for outgoing arguments in the function prologue"
+msgstr "Резервиши проÑтор за одлазеће аргументе у прологу функције"
+
+#: config/i386/i386.opt:60
+msgid "Align some doubles on dword boundary"
+msgstr "Поравнај неке двоÑтруке на граници д-речи"
+
+#: config/i386/i386.opt:64
+msgid "Function starts are aligned to this power of 2"
+msgstr "Почеци функција Ñу поравнати на овај Ñтепен двојке"
+
+#: config/i386/i386.opt:68
+msgid "Jump targets are aligned to this power of 2"
+msgstr "Циљеви Ñкокова Ñу поравнати на овај Ñтепен двојке"
+
+#: config/i386/i386.opt:72
+msgid "Loop code aligned to this power of 2"
+msgstr "Кôд петље је поравнат на овај Ñтепен двојке"
+
+#: config/i386/i386.opt:76
+msgid "Align destination of the string operations"
+msgstr "Поравнај одредиште операција над ниÑкама"
+
+#: config/i386/i386.opt:84
+msgid "Use given assembler dialect"
+msgstr "КориÑти дати дијалект аÑемблера"
+
+#: config/i386/i386.opt:88
+msgid "Branches are this expensive (1-5, arbitrary units)"
+msgstr "Гранања оволико коштају (1-5, произвољне јединице)"
+
+#: config/i386/i386.opt:92
+msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
+msgstr "Подаци већи од датог прага ће отићи у одељак .ldata у Ñредњем моделу икÑ86-64"
+
+#: config/i386/i386.opt:96
+msgid "Use given x86-64 code model"
+msgstr "КориÑти дати модел кôда икÑ86-64"
+
+#: config/i386/i386.opt:106
+msgid "Generate sin, cos, sqrt for FPU"
+msgstr "Створи sin, cos, sqrt за ФПУ"
+
+#: config/i386/i386.opt:110
+msgid "Return values of functions in FPU registers"
+msgstr "Враћај вредноÑти функција у региÑтрима ФПУа"
+
+#: config/i386/i386.opt:114
+msgid "Generate floating point mathematics using given instruction set"
+msgstr "Стварај математику у покретном зарезу кориÑтећи дати Ñкуп инÑтрукција"
+
+#: config/i386/i386.opt:126
+msgid "Inline all known string operations"
+msgstr "Уткај Ñве познате операције над ниÑкама"
+
+#: config/i386/i386.opt:134
+msgid "Support MMX built-in functions"
+msgstr "Подржи уграђене ÐœÐœÐ˜ÐºÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ˜Ðµ"
+
+#: config/i386/i386.opt:138
+msgid "Use native (MS) bitfield layout"
+msgstr "КориÑти урођени (МСов) раÑпоред битÑких поља"
+
+#: config/i386/i386.opt:154
+msgid "Omit the frame pointer in leaf functions"
+msgstr "ИзоÑтави показивач оквира у функцијама-лиÑтовима"
+
+#: config/i386/i386.opt:166
+msgid "Attempt to keep stack aligned to this power of 2"
+msgstr "Покушај да одржиш Ñтек поравнат на овом Ñтепену двојке"
+
+#: config/i386/i386.opt:170
+msgid "Use push instructions to save outgoing arguments"
+msgstr "КориÑти инÑтрукције гурања за чување одлазећих аргумената"
+
+#: config/i386/i386.opt:174
+msgid "Use red-zone in the x86-64 code"
+msgstr "КориÑти црвену зону у кôду за икÑ86-64"
+
+#: config/i386/i386.opt:178
+msgid "Number of registers used to pass integer arguments"
+msgstr "Број региÑтара који Ñе кориÑти за проÑлеђивање целобројних аргумената"
+
+#: config/i386/i386.opt:182
+msgid "Alternate calling convention"
+msgstr "Ðлтернативна конвенција позивања"
+
+#: config/i386/i386.opt:190
+msgid "Support MMX and SSE built-in functions and code generation"
+msgstr "Подржи уграђене ÐœÐœÐ˜ÐºÑ Ð¸ ССЕ функције и Ñтварање кôда"
+
+#: config/i386/i386.opt:194
+msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
+msgstr "Подржи уграђене ММИкÑ, ССЕ и ССЕ2 функције и Ñтварање кôда"
+
+#: config/i386/i386.opt:198
+msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation"
+msgstr "Подржи уграђене ММИкÑ, ССЕ, ССЕ2 и ССЕ3 функције и Ñтварање кôда"
+
+#: config/i386/i386.opt:202
+msgid "Use SSE register passing conventions for SF and DF mode"
+msgstr "КориÑти ССЕ конвенције проÑлеђивања региÑтара за режиме СФ и ДФ"
+
+#: config/i386/i386.opt:206
+msgid "Uninitialized locals in .bss"
+msgstr "ÐеуÑпоÑтављени локални у .bss"
+
+#: config/i386/i386.opt:210
+msgid "Enable stack probing"
+msgstr "Укључи Ñондирање Ñтека"
+
+#: config/i386/i386.opt:214
+msgid "Use given thread-local storage dialect"
+msgstr "КориÑти дати дијалект нитно-локалног Ñкладиштења"
+
+#: config/i386/i386.opt:218
+#, c-format
+msgid "Use direct references against %gs when accessing tls data"
+msgstr "КориÑти непоÑредне упућиваче за %gs при приÑтупању ТЛС подацима"
+
+#: config/i386/cygming.opt:24
+msgid "Create console application"
+msgstr "Ðаправи терминалÑки програм"
+
+#: config/i386/cygming.opt:28
+msgid "Use the Cygwin interface"
+msgstr "КориÑти Ñуљеље Сигвина"
+
+#: config/i386/cygming.opt:32
+msgid "Generate code for a DLL"
+msgstr "Створи кôд за ДЛЛ"
+
+#: config/i386/cygming.opt:36
+msgid "Ignore dllimport for functions"
+msgstr "Игнориши dllimport за функције"
+
+#: config/i386/cygming.opt:40
+msgid "Use Mingw-specific thread support"
+msgstr "КориÑти подршку нити поÑебну за Мингв"
+
+#: config/i386/cygming.opt:44
+msgid "Set Windows defines"
+msgstr "ПоÑтави дефиниције за Виндоуз"
+
+#: config/i386/cygming.opt:48
+msgid "Create GUI application"
+msgstr "Ðаправи ГУИ програм"
+
+#: config/i386/sco5.opt:25
+msgid "Generate ELF output"
+msgstr "Створи ЕЛФ излаз"
+
+#: config/rs6000/aix41.opt:25 config/rs6000/aix64.opt:33
+msgid "Support message passing with the Parallel Environment"
+msgstr "Подржи проÑлеђивање помоћу паралелног окружења"
+
+#: config/rs6000/aix.opt:25 config/rs6000/rs6000.opt:128
+msgid "Conform more closely to IBM XLC semantics"
+msgstr "Поштуј ближе Ñемантику ИБМовог ИкÑЛЦа"
+
+#: config/rs6000/darwin.opt:25 config/rs6000/sysv4.opt:133
+msgid "Generate 64-bit code"
+msgstr "Створи 64-битни кôд"
+
+#: config/rs6000/darwin.opt:29 config/rs6000/sysv4.opt:137
+msgid "Generate 32-bit code"
+msgstr "Створи 32-битни кôд"
+
+#: config/rs6000/darwin.opt:33
+msgid "Generate code suitable for executables (NOT shared libs)"
+msgstr "Створи кôд погодан за извршне (ÐЕ за дељене библиотеке)"
+
+#: config/rs6000/rs6000.opt:25
+msgid "Use POWER instruction set"
+msgstr "КориÑти Ñкуп инÑтрукција Пауера"
+
+#: config/rs6000/rs6000.opt:29
+msgid "Do not use POWER instruction set"
+msgstr "Ðе кориÑти Ñкуп инÑтрукција Пауера"
+
+#: config/rs6000/rs6000.opt:33
+msgid "Use POWER2 instruction set"
+msgstr "КориÑти Ñкуп инÑтрукција Пауера2"
+
+#: config/rs6000/rs6000.opt:37
+msgid "Use PowerPC instruction set"
+msgstr "КориÑти Ñкуп инÑтрукција ПауерПЦа"
+
+#: config/rs6000/rs6000.opt:41
+msgid "Do not use PowerPC instruction set"
+msgstr "Ðе кориÑти Ñкуп инÑтрукција ПауерПЦа"
+
+#: config/rs6000/rs6000.opt:45
+msgid "Use PowerPC-64 instruction set"
+msgstr "КориÑти Ñкуп инÑтрукција ПауерПЦа-64"
+
+#: config/rs6000/rs6000.opt:49
+msgid "Use PowerPC General Purpose group optional instructions"
+msgstr "КориÑти опционе инÑтрукције ПауерПЦа из групе за општу употребу"
+
+#: config/rs6000/rs6000.opt:53
+msgid "Use PowerPC Graphics group optional instructions"
+msgstr "КориÑти опционе инÑтрукције ПауерПЦа из графичке групе"
+
+#: config/rs6000/rs6000.opt:57
+msgid "Use PowerPC V2.01 single field mfcr instruction"
+msgstr "КориÑти инÑтрукцију mfcr Ñа једним пољем, ПауерПЦа в2.01"
+
+#: config/rs6000/rs6000.opt:61
+msgid "Use PowerPC V2.02 popcntb instruction"
+msgstr "КориÑти инÑтрукцију popcntb ПауерПЦа в2.02"
+
+#: config/rs6000/rs6000.opt:65
+msgid "Use PowerPC V2.02 floating point rounding instructions"
+msgstr "КориÑти инÑтрукције ПауерПЦа в2.02 за заокруживање у покретном зарезу"
+
+#: config/rs6000/rs6000.opt:69
+msgid "Use AltiVec instructions"
+msgstr "КориÑти алтивек инÑтрукције"
+
+#: config/rs6000/rs6000.opt:73
+msgid "Generate load/store multiple instructions"
+msgstr "Стварај инÑтрукције вишеÑтруког учитавања/Ñкладиштења"
+
+#: config/rs6000/rs6000.opt:77
+msgid "Generate string instructions for block moves"
+msgstr "Стварај инÑтрукције ниÑки за премештања блокова"
+
+#: config/rs6000/rs6000.opt:81
+msgid "Use new mnemonics for PowerPC architecture"
+msgstr "КориÑти нову мнемонику за архитектуру ПауерПЦа"
+
+#: config/rs6000/rs6000.opt:85
+msgid "Use old mnemonics for PowerPC architecture"
+msgstr "КориÑти Ñтару мнемонику за архитектуру ПауерПЦа"
+
+#: config/rs6000/rs6000.opt:89 config/pdp11/pdp11.opt:84
+msgid "Do not use hardware floating point"
+msgstr "Ðе кориÑти хардверÑки покретан зарез"
+
+#: config/rs6000/rs6000.opt:97
+msgid "Do not generate load/store with update instructions"
+msgstr "Ðе Ñтварај инÑтрукције учитавања/Ñкладиштења Ñа ажурирањем"
+
+#: config/rs6000/rs6000.opt:101
+msgid "Generate load/store with update instructions"
+msgstr "Стварај инÑтрукције учитавања/Ñкладиштења Ñа ажурирањем"
+
+#: config/rs6000/rs6000.opt:105
+msgid "Do not generate fused multiply/add instructions"
+msgstr "Ðе Ñтварај инÑтрукције Ñтопљеног множења-додавања"
+
+#: config/rs6000/rs6000.opt:109
+msgid "Generate fused multiply/add instructions"
+msgstr "Стварај инÑтрукције Ñтопљеног множења-додавања"
+
+#: config/rs6000/rs6000.opt:113
+msgid "Schedule the start and end of the procedure"
+msgstr "РаÑпоређуј почетак и крај процедуре"
+
+#: config/rs6000/rs6000.opt:120
+msgid "Return all structures in memory (AIX default)"
+msgstr "Враћај Ñве Ñтруктуре у меморији (подразумевано за ÐикÑ)"
+
+#: config/rs6000/rs6000.opt:124
+msgid "Return small structures in registers (SVR4 default)"
+msgstr "Враћај мале Ñтруктуре у региÑтрима (подразумевано за СВР4)"
+
+#: config/rs6000/rs6000.opt:132
+msgid "Generate software floating point divide for better throughput"
+msgstr "Стварај ÑофтверÑко дељење у покретном зарезу ради боље пропуÑноÑти"
+
+#: config/rs6000/rs6000.opt:136
+msgid "Do not place floating point constants in TOC"
+msgstr "Ðе Ñтављај конÑтанте покретног зареза у ТОЦ"
+
+#: config/rs6000/rs6000.opt:140
+msgid "Place floating point constants in TOC"
+msgstr "Стављај конÑтанте покретног зареза у ТОЦ"
+
+#: config/rs6000/rs6000.opt:144
+msgid "Do not place symbol+offset constants in TOC"
+msgstr "Ðе Ñтављај конÑтанте Ñимбола+помака у ТОЦ"
+
+#: config/rs6000/rs6000.opt:148
+msgid "Place symbol+offset constants in TOC"
+msgstr "Стављај конÑтанте Ñимбола+помака у ТОЦ"
+
+#: config/rs6000/rs6000.opt:159
+msgid "Use only one TOC entry per procedure"
+msgstr "КориÑти Ñамо један ТОЦ по процедури"
+
+#: config/rs6000/rs6000.opt:163
+msgid "Put everything in the regular TOC"
+msgstr "Стави Ñве у регуларан ТОЦ"
+
+#: config/rs6000/rs6000.opt:167
+msgid "Generate VRSAVE instructions when generating AltiVec code"
+msgstr "Стварај инÑтрукције VRSAVE при ÑаÑтављању алтивек кода"
+
+#: config/rs6000/rs6000.opt:171
+msgid "Deprecated option. Use -mvrsave/-mno-vrsave instead"
+msgstr "Ðепрепоручљива опција; кориÑтите -mvrsave и -mno-vrsave"
+
+#: config/rs6000/rs6000.opt:175
+msgid "Generate isel instructions"
+msgstr "Стварај инÑтрукције isel"
+
+#: config/rs6000/rs6000.opt:179
+msgid "Deprecated option. Use -misel/-mno-isel instead"
+msgstr "Ðепрепоручљива опција; кориÑтите -misel и -mno-isel"
+
+#: config/rs6000/rs6000.opt:183
+msgid "Generate SPE SIMD instructions on E500"
+msgstr "Стварај СПЕ СИМД инÑтрукције на Е500"
+
+#: config/rs6000/rs6000.opt:187
+msgid "Deprecated option. Use -mspe/-mno-spe instead"
+msgstr "Ðепрепоручљива опција; кориÑтите -mspe и -mno-spe"
+
+#: config/rs6000/rs6000.opt:191
+msgid "Enable debug output"
+msgstr "Укључи иÑправљачки излаз"
+
+#: config/rs6000/rs6000.opt:195
+msgid "Specify ABI to use"
+msgstr "Ðаведите ÐБИ који Ñе кориÑти"
+
+#: config/rs6000/rs6000.opt:207
+msgid "Select full, part, or no traceback table"
+msgstr "Изаберите пуну или делимичну табелу повратног трага, или без ње"
+
+#: config/rs6000/rs6000.opt:211
+msgid "Avoid all range limits on call instructions"
+msgstr "Избегавај Ñва ограничења опÑега при позивним инÑтрукцијама"
+
+#: config/rs6000/rs6000.opt:215
+msgid "Warn about deprecated 'vector long ...' AltiVec type usage"
+msgstr "Упозори на превазиђену употребу алтивек типа ‘vector long ...’"
+
+#: config/rs6000/rs6000.opt:219
+msgid "Select GPR floating point method"
+msgstr "Изаберите метод покретног зареза за ГПР"
+
+#: config/rs6000/rs6000.opt:223
+msgid "Specify size of long double (64 or 128 bits)"
+msgstr "Ðаведите величину за ‘long double’ (64 или 128 битова)"
+
+#: config/rs6000/rs6000.opt:227
+msgid "Determine which dependences between insns are considered costly"
+msgstr "Одредите које завиÑноÑти између ија Ñе Ñматрају Ñкупим"
+
+#: config/rs6000/rs6000.opt:231
+msgid "Specify which post scheduling nop insertion scheme to apply"
+msgstr "Ðаведите коју шему поÑÑ‚-раÑпоређивања за уметање ÐОПа треба применити"
+
+#: config/rs6000/rs6000.opt:235
+msgid "Specify alignment of structure fields default/natural"
+msgstr "Ðаведите равнање поља Ñтруктуре, подразумевано/природно"
+
+#: config/rs6000/rs6000.opt:239
+msgid "Specify scheduling priority for dispatch slot restricted insns"
+msgstr "Ðаведите приоритет раÑпоређивања за ије ограничене жлебом одашиљања"
+
+#: config/rs6000/aix64.opt:25
+msgid "Compile for 64-bit pointers"
+msgstr "Компилуј за 64-битне показиваче"
+
+#: config/rs6000/aix64.opt:29
+msgid "Compile for 32-bit pointers"
+msgstr "Компилуј за 32-битне показиваче"
+
+#: config/rs6000/linux64.opt:25
+msgid "Call mcount for profiling before a function prologue"
+msgstr "Позивај mcount за профилиÑање пре пролога функције"
+
+#: config/rs6000/sysv4.opt:25
+msgid "Select ABI calling convention"
+msgstr "Изаберите конвенцију позивања ÐБИја"
+
+#: config/rs6000/sysv4.opt:29
+msgid "Select method for sdata handling"
+msgstr "Изаберите метод руковања Ñ-подацима"
+
+#: config/rs6000/sysv4.opt:37 config/rs6000/sysv4.opt:41
+msgid "Align to the base type of the bit-field"
+msgstr "Равнај на оÑновни тип битÑког поља"
+
+#: config/rs6000/sysv4.opt:46 config/rs6000/sysv4.opt:50
+msgid "Produce code relocatable at runtime"
+msgstr "Произведи кôд релокабилан при извршавању"
+
+#: config/rs6000/sysv4.opt:54 config/rs6000/sysv4.opt:58
+msgid "Produce little endian code"
+msgstr "Произведи кôд мале крајноÑти"
+
+#: config/rs6000/sysv4.opt:62 config/rs6000/sysv4.opt:66
+msgid "Produce big endian code"
+msgstr "Произведи кôд велике крајноÑти"
+
+#: config/rs6000/sysv4.opt:71 config/rs6000/sysv4.opt:75
+#: config/rs6000/sysv4.opt:84 config/rs6000/sysv4.opt:101
+#: config/rs6000/sysv4.opt:129 config/rs6000/sysv4.opt:141
+msgid "no description yet"
+msgstr "још увек без опиÑа"
+
+#: config/rs6000/sysv4.opt:79
+msgid "Assume all variable arg functions are prototyped"
+msgstr "ПретпоÑтави да Ñве варарг функције имају прототипе"
+
+#: config/rs6000/sysv4.opt:88
+msgid "Use EABI"
+msgstr "КориÑти ЕÐБИ"
+
+#: config/rs6000/sysv4.opt:92
+msgid "Allow bit-fields to cross word boundaries"
+msgstr "Дозволи битÑким пољима да прелазе границе речи"
+
+#: config/rs6000/sysv4.opt:96
+msgid "Use alternate register names"
+msgstr "КориÑти алтернативна имена региÑтара"
+
+#: config/rs6000/sysv4.opt:105
+msgid "Link with libsim.a, libc.a and sim-crt0.o"
+msgstr "Повежи Ñа libsim.a, libc.a и sim-crt0.o"
+
+#: config/rs6000/sysv4.opt:109
+msgid "Link with libads.a, libc.a and crt0.o"
+msgstr "Повежи Ñа libads.a, libc.a и crt0.o"
+
+#: config/rs6000/sysv4.opt:113
+msgid "Link with libyk.a, libc.a and crt0.o"
+msgstr "Повежи Ñа libyk.a, libc.a и crt0.o"
+
+#: config/rs6000/sysv4.opt:117
+msgid "Link with libmvme.a, libc.a and crt0.o"
+msgstr "Повежи Ñа libmvme.a, libc.a и crt0.o"
+
+#: config/rs6000/sysv4.opt:121
+msgid "Set the PPC_EMB bit in the ELF flags header"
+msgstr "ПоÑтави бит PPC_EMB у заглављу ЕЛФ заÑтавица"
+
+#: config/rs6000/sysv4.opt:125
+msgid "Use the WindISS simulator"
+msgstr "КориÑти Ñимулатор ВиндИСС"
+
+#: config/rs6000/sysv4.opt:145
+msgid "Generate code to use a non-exec PLT and GOT"
+msgstr "Створи кôд који кориÑти неизвршне PLT и GOT"
+
+#: config/rs6000/sysv4.opt:149
+msgid "Generate code for old exec BSS PLT"
+msgstr "Створи кôд за Ñтари извршни BSS PLT"
+
+#: config/mt/mt.opt:24
+msgid "Use byte loads and stores when generating code."
+msgstr "КориÑти учитавања и Ñкладиштења бајтова при Ñтварању кода."
+
+#: config/mt/mt.opt:32
+msgid "Do not include crt0.o in the startup files"
+msgstr "Ðе укључуј crt0.o у датотеке при покретању"
+
+#: config/mt/mt.opt:36 config/mt/mt.opt:40 config/mt/mt.opt:44
+#: config/mt/mt.opt:48 config/mt/mt.opt:52
+msgid "Internal debug switch"
+msgstr "Унутрашњи прекидач за иÑправљање"
+
+#: config/mt/mt.opt:56 config/iq2000/iq2000.opt:24
+msgid "Specify CPU for code generation purposes"
+msgstr "Ðаведите ЦПУ у Ñврху Ñтварања кода"
+
+#: config/mcore/mcore.opt:24
+msgid "Generate code for the M*Core M210"
+msgstr "Створи кôд за М*Језгро М210"
+
+#: config/mcore/mcore.opt:28
+msgid "Generate code for the M*Core M340"
+msgstr "Створи кôд за М*Језгро М340"
+
+#: config/mcore/mcore.opt:32
+msgid "Set maximum alignment to 4"
+msgstr "ПоÑтави највеће равнање на 4"
+
+#: config/mcore/mcore.opt:36
+msgid "Force functions to be aligned to a 4 byte boundary"
+msgstr "Спроведи поравнање функција на 4-бајтну границу"
+
+#: config/mcore/mcore.opt:40
+msgid "Set maximum alignment to 8"
+msgstr "ПоÑтави највеће равнање на 8"
+
+#: config/mcore/mcore.opt:44
+msgid "Generate big-endian code"
+msgstr "Створи кôд велике крајноÑти"
+
+#: config/mcore/mcore.opt:48
+msgid "Emit call graph information"
+msgstr "Емитуј информације за граф позива"
+
+#: config/mcore/mcore.opt:52
+msgid "Use the divide instruction"
+msgstr "КориÑти инÑтрукције дељења"
+
+#: config/mcore/mcore.opt:56
+msgid "Inline constants if it can be done in 2 insns or less"
+msgstr "Уткивај конÑтанте ако је могуће у 2 или мање ија"
+
+#: config/mcore/mcore.opt:60
+msgid "Generate little-endian code"
+msgstr "Створи кôд мале крајноÑти"
+
+#: config/mcore/mcore.opt:68
+msgid "Use arbitrary sized immediates in bit operations"
+msgstr "КориÑти непоÑредне произвољне величине у битÑким операцијама"
+
+#: config/mcore/mcore.opt:72
+msgid "Prefer word accesses over byte accesses"
+msgstr "Боље приÑтуп речима него бајтовима"
+
+#: config/mcore/mcore.opt:76
+msgid "Set the maximum amount for a single stack increment operation"
+msgstr "ПоÑтави највећу вредноÑÑ‚ једне операције увећања Ñтека"
+
+#: config/mcore/mcore.opt:80
+msgid "Always treat bitfields as int-sized"
+msgstr "Увек Ñматрај да Ñу битÑка поља величина инта"
+
+#: config/arc/arc.opt:33
+msgid "Prepend the name of the cpu to all public symbol names"
+msgstr "Додај име ЦПУа на почетак имена Ñвих јавних Ñимбола"
+
+#: config/arc/arc.opt:43
+msgid "Compile code for ARC variant CPU"
+msgstr "Компилуј кôд за ÐРЦ"
+
+#: config/arc/arc.opt:47
+msgid "Put functions in SECTION"
+msgstr "Стави функције у SECTION"
+
+#: config/arc/arc.opt:51
+msgid "Put data in SECTION"
+msgstr "Стави податке у SECTION"
+
+#: config/arc/arc.opt:55
+msgid "Put read-only data in SECTION"
+msgstr "Стави Ñамо-за-читање податке у SECTION"
+
+#: config/sh/sh.opt:45
+msgid "Generate SH1 code"
+msgstr "Створи кôд за СХ1"
+
+#: config/sh/sh.opt:49
+msgid "Generate SH2 code"
+msgstr "Створи кôд за СХ2"
+
+#: config/sh/sh.opt:53
+msgid "Generate SH2a code"
+msgstr "Створи кôд за СХ2а"
+
+#: config/sh/sh.opt:57
+msgid "Generate SH2a FPU-less code"
+msgstr "Створи кôд за СХ2а без ФПУа"
+
+#: config/sh/sh.opt:61
+msgid "Generate default single-precision SH2a code"
+msgstr "Створи подразумевани кôд једноÑтруке тачноÑти за СХ2а"
+
+#: config/sh/sh.opt:65
+msgid "Generate only single-precision SH2a code"
+msgstr "Створи Ñамо кôд једноÑтруке тачноÑти за СХ2а"
+
+#: config/sh/sh.opt:69
+msgid "Generate SH2e code"
+msgstr "Створи кôд за СХ2е"
+
+#: config/sh/sh.opt:73
+msgid "Generate SH3 code"
+msgstr "Створи кôд за СХ3"
+
+#: config/sh/sh.opt:77
+msgid "Generate SH3e code"
+msgstr "Створи кôд за СХ3е"
+
+#: config/sh/sh.opt:81
+msgid "Generate SH4 code"
+msgstr "Створи кôд за СХ4"
+
+#: config/sh/sh.opt:85
+msgid "Generate SH4 FPU-less code"
+msgstr "Створи кôд за СХ4 без ФПУа"
+
+#: config/sh/sh.opt:89
+msgid "Generate default single-precision SH4 code"
+msgstr "Створи подразумевани кôд једноÑтруке тачноÑти за СХ4"
+
+#: config/sh/sh.opt:93
+msgid "Generate only single-precision SH4 code"
+msgstr "Створи Ñамо кôд једноÑтруке тачноÑти за СХ4"
+
+#: config/sh/sh.opt:97
+msgid "Generate SH4a code"
+msgstr "Створи кôд за СХ4а"
+
+#: config/sh/sh.opt:101
+msgid "Generate SH4a FPU-less code"
+msgstr "Створи кôд за СХ4а без ФПУа"
+
+#: config/sh/sh.opt:105
+msgid "Generate default single-precision SH4a code"
+msgstr "Створи подразумевани кôд једноÑтруке тачноÑти за СХ4а"
+
+#: config/sh/sh.opt:109
+msgid "Generate only single-precision SH4a code"
+msgstr "Створи Ñамо кôд једноÑтруке тачноÑти за СХ4а"
+
+#: config/sh/sh.opt:113
+msgid "Generate SH4al-dsp code"
+msgstr "Створи кôд за СХ4ал-дÑп"
+
+#: config/sh/sh.opt:117
+msgid "Generate 32-bit SHmedia code"
+msgstr "Створи 32-битни кôд за СХмедију"
+
+#: config/sh/sh.opt:121
+msgid "Generate 32-bit FPU-less SHmedia code"
+msgstr "Створи 32-битни кôд за СХмедију без ФПУа"
+
+#: config/sh/sh.opt:125
+msgid "Generate 64-bit SHmedia code"
+msgstr "Створи 64-битни кôд за СХмедију"
+
+#: config/sh/sh.opt:129
+msgid "Generate 64-bit FPU-less SHmedia code"
+msgstr "Створи 64-битни кôд за СХмедију без ФПУа"
+
+#: config/sh/sh.opt:133
+msgid "Generate SHcompact code"
+msgstr "Створи кôд за СХкомпакт"
+
+#: config/sh/sh.opt:137
+msgid "Generate FPU-less SHcompact code"
+msgstr "Створи кôд за СХкомпакт без ФПУа"
+
+#: config/sh/sh.opt:141
+msgid "Throttle unrolling to avoid thrashing target registers unless the unroll benefit outweighs this"
+msgstr "Смањи одмотавање да би избегао млаћење циљних региÑтара оÑим ако Ñе одмотавањем ипак поÑтиже укупан добитак"
+
+#: config/sh/sh.opt:145
+msgid "Generate code in big endian mode"
+msgstr "Стварај кôд у режиму велике крајноÑти"
+
+#: config/sh/sh.opt:149
+msgid "Generate 32-bit offsets in switch tables"
+msgstr "Створи 32-битне помаке у прекидачким табелама"
+
+#: config/sh/sh.opt:153
+msgid "Enable SH5 cut2 workaround"
+msgstr "Укључи заобилазак cut2 за СХ5"
+
+#: config/sh/sh.opt:157
+msgid "Align doubles at 64-bit boundaries"
+msgstr "Поравнај Ñве двоÑтруке на 64-битним границама"
+
+#: config/sh/sh.opt:161
+msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp"
+msgstr "Стратегија дељења, једно од: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp"
+
+#: config/sh/sh.opt:165
+msgid "Specify name for 32 bit signed division function"
+msgstr "Ðаведите име за функцију означеног 32-битног дељења"
+
+#: config/sh/sh.opt:172
+msgid "Cost to assume for gettr insn"
+msgstr "ПретпоÑтављена цена за ију gettr"
+
+#: config/sh/sh.opt:176 config/sh/sh.opt:222
+msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions"
+msgstr "Прати РенеÑаÑову (бившу Хитачијеву) конвенцију позивања СуперХ"
+
+#: config/sh/sh.opt:180
+msgid "Increase the IEEE compliance for floating-point code"
+msgstr "Повећај ÑаглаÑноÑÑ‚ кôда покретног зареза Ñа ИЕЕЕом"
+
+#: config/sh/sh.opt:184
+msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact"
+msgstr "Укључи употребу индекÑног адреÑног режима за СХмедију32/СХкомпакт"
+
+#: config/sh/sh.opt:188
+msgid "Assume symbols might be invalid"
+msgstr "ПретпоÑтави да Ñимболи могу бити неважећи"
+
+#: config/sh/sh.opt:192
+msgid "Annotate assembler instructions with estimated addresses"
+msgstr "Придодај инÑтрукцијама аÑемблера процењене адреÑе"
+
+#: config/sh/sh.opt:196
+msgid "Generate code in little endian mode"
+msgstr "Створи кôд у режиму мале крајноÑти"
+
+#: config/sh/sh.opt:200
+msgid "Mark MAC register as call-clobbered"
+msgstr "Означи региÑтар MAC као позивом продрман"
+
+#: config/sh/sh.opt:206
+msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
+msgstr "Ðека Ñтруктуре буду умношци 4 бајта (упозорење: измењен ÐБИ)"
+
+#: config/sh/sh.opt:210
+msgid "Emit function-calls using global offset table when generating PIC"
+msgstr "Емитуј позиве функција кориÑтећи глобалну табелу помака при Ñтварању ПИЦа"
+
+#: config/sh/sh.opt:214
+msgid "Assume pt* instructions won't trap"
+msgstr "ПретпоÑтваи да pt* инÑтрукције не бацају клопке"
+
+#: config/sh/sh.opt:218
+msgid "Shorten address references during linking"
+msgstr "Скрати упућиваче адреÑа при повезивању"
+
+#: config/sh/sh.opt:226
+msgid "Deprecated. Use -Os instead"
+msgstr "Ðепрепоручљиво; кориÑтите -Os"
+
+#: config/sh/sh.opt:230
+msgid "Cost to assume for a multiply insn"
+msgstr "ПретпоÑтављена цена за ију множења"
+
+#: config/sh/sh.opt:234
+msgid "Generate library function call to invalidate instruction cache entries after fixing trampoline"
+msgstr "Створи позив библиотечке функције за поништавање Ñтавки у оÑтави инÑтрукција поÑле поправке трамполине"
+
+#: config/arm/arm.opt:24
+msgid "Specify an ABI"
+msgstr "Ðаведите ÐБИ"
+
+#: config/arm/arm.opt:28
+msgid "Generate a call to abort if a noreturn function returns"
+msgstr "Створи позив за прекидање ако Ñе неповратна функција врати"
+
+#: config/arm/arm.opt:35
+msgid "Pass FP arguments in FP registers"
+msgstr "ПроÑлеђуј ФП аргументе у ФП региÑтрима"
+
+#: config/arm/arm.opt:39
+msgid "Generate APCS conformant stack frames"
+msgstr "Стварај оквире Ñтека ÑаглаÑне Ñа ÐПЦСом"
+
+#: config/arm/arm.opt:43
+msgid "Generate re-entrant, PIC code"
+msgstr "Створи вишеулазни, ПИЦ кôд"
+
+#: config/arm/arm.opt:50
+msgid "Specify the name of the target architecture"
+msgstr "Ðаведите име циљне архитектуре"
+
+#: config/arm/arm.opt:57
+msgid "Assume target CPU is configured as big endian"
+msgstr "ПретпоÑтави да је циљни ЦПУ поÑтављен на велику крајноÑÑ‚"
+
+#: config/arm/arm.opt:61
+msgid "Thumb: Assume non-static functions may be called from ARM code"
+msgstr "Тамб: ПретпоÑтави да Ñе неÑтатичке функције могу позвати из ÐРМ кôда"
+
+#: config/arm/arm.opt:65
+msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
+msgstr "Тамб: ПретпоÑтави да функцијÑки показивачи могу водити у кôд неÑвеÑтан Тамба"
+
+#: config/arm/arm.opt:69
+msgid "Cirrus: Place NOPs to avoid invalid instruction combinations"
+msgstr "ЦируÑ: Стављај ÐОПе да би избегао неважеће комбинације инÑтрукција"
+
+#: config/arm/arm.opt:73
+msgid "Specify the name of the target CPU"
+msgstr "Ðаведите име циљног ЦПУа"
+
+#: config/arm/arm.opt:77
+msgid "Specify if floating point hardware should be used"
+msgstr "Ðаведите да ли да Ñе кориÑти хардвер за покретан зарез"
+
+#: config/arm/arm.opt:91
+msgid "Specify the name of the target floating point hardware/format"
+msgstr "Ðаведите име циљног хардвера/формата за покретан зарез"
+
+#: config/arm/arm.opt:95
+msgid "Alias for -mfloat-abi=hard"
+msgstr "Други назив за -mfloat-abi=hard"
+
+#: config/arm/arm.opt:99
+msgid "Assume target CPU is configured as little endian"
+msgstr "ПретпоÑтави да је циљни ЦПУ поÑтављен на малу крајноÑÑ‚"
+
+#: config/arm/arm.opt:103
+msgid "Generate call insns as indirect calls, if necessary"
+msgstr "Стварај ије позива као поÑредне позиве, ако је неопходно"
+
+#: config/arm/arm.opt:107
+msgid "Specify the register to be used for PIC addressing"
+msgstr "Ðаведите региÑтар који Ñе кориÑти за ПИЦ адреÑирање"
+
+#: config/arm/arm.opt:111
+msgid "Store function names in object code"
+msgstr "Складишти имена функција у објектном коду"
+
+#: config/arm/arm.opt:115
+msgid "Permit scheduling of a function's prologue sequence"
+msgstr "Дозволи раÑпоређивање пролошког редоÑледа функције"
+
+#: config/arm/arm.opt:119
+msgid "Do not load the PIC register in function prologues"
+msgstr "Ðе учитавај ПИЦ региÑтре у пролозима функција"
+
+#: config/arm/arm.opt:123
+msgid "Alias for -mfloat-abi=soft"
+msgstr "Други назив за -mfloat-abi=soft"
+
+#: config/arm/arm.opt:127
+msgid "Specify the minimum bit alignment of structures"
+msgstr "Ðаведите најмање битÑко равнање Ñтруктура"
+
+#: config/arm/arm.opt:131
+msgid "Compile for the Thumb not the ARM"
+msgstr "Компилуј за Тамб, не за ÐРМ"
+
+#: config/arm/arm.opt:135
+msgid "Support calls between Thumb and ARM instruction sets"
+msgstr "Подржи позиве између Тамба и Ñкупа инÑтрукција ÐРМа"
+
+#: config/arm/arm.opt:139
+msgid "Specify how to access the thread pointer"
+msgstr "Ðаведите како приÑтупати показивачу нити"
+
+#: config/arm/arm.opt:143
+msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
+msgstr "Тамб: Стварај (нелиÑнате) оквире Ñтека чак и ако није потребно"
+
+#: config/arm/arm.opt:147
+msgid "Thumb: Generate (leaf) stack frames even if not needed"
+msgstr "Тамб: Стварај (лиÑнате) оквире Ñтека чак и ако није потребно"
+
+#: config/arm/arm.opt:151
+msgid "Tune code for the given processor"
+msgstr "Ðаштелуј кôд за дати процеÑор"
+
+#: config/arm/arm.opt:155
+msgid "Assume big endian bytes, little endian words"
+msgstr "ПретпоÑтави бајтове велике крајноÑти, речи мале"
+
+#: config/arm/pe.opt:24
+msgid "Ignore dllimport attribute for functions"
+msgstr "Игнориши атрибут dllimport за функције"
+
+#: config/pdp11/pdp11.opt:24
+msgid "Generate code for an 11/10"
+msgstr "Створи кôд за 11/10"
+
+#: config/pdp11/pdp11.opt:28
+msgid "Generate code for an 11/40"
+msgstr "Створи кôд за 11/40"
+
+#: config/pdp11/pdp11.opt:32
+msgid "Generate code for an 11/45"
+msgstr "Створи кôд за 11/45"
+
+#: config/pdp11/pdp11.opt:36
+msgid "Use 16-bit abs patterns"
+msgstr "КориÑти 16-битне abs шеме"
+
+#: config/pdp11/pdp11.opt:40
+msgid "Return floating-point results in ac0 (fr0 in Unix assembler syntax)"
+msgstr "Враћај резултат покретног зареза у ac0 (fr0 у УникÑовој ÑинтакÑи аÑемблера)"
+
+#: config/pdp11/pdp11.opt:44
+msgid "Do not use inline patterns for copying memory"
+msgstr "Ðе кориÑти уткане шеме за копирање меморије"
+
+#: config/pdp11/pdp11.opt:48
+msgid "Use inline patterns for copying memory"
+msgstr "КориÑти уткане шеме за копирање меморије"
+
+#: config/pdp11/pdp11.opt:52
+msgid "Do not pretend that branches are expensive"
+msgstr "Ðе претварај Ñе да Ñу гранања Ñкупа"
+
+#: config/pdp11/pdp11.opt:56
+msgid "Pretend that branches are expensive"
+msgstr "Претварај Ñе да Ñу гранања Ñкупа"
+
+#: config/pdp11/pdp11.opt:60
+msgid "Use the DEC assembler syntax"
+msgstr "КориÑти ÑинтакÑу ДЕЦовог аÑемблера"
+
+#: config/pdp11/pdp11.opt:64
+msgid "Use 32 bit float"
+msgstr "КориÑти 32-битни једноÑтруки"
+
+#: config/pdp11/pdp11.opt:68
+msgid "Use 64 bit float"
+msgstr "КориÑти 64-битни једноÑтруки"
+
+#: config/pdp11/pdp11.opt:76
+msgid "Use 16 bit int"
+msgstr "КориÑти 16-битни целобројни"
+
+#: config/pdp11/pdp11.opt:80
+msgid "Use 32 bit int"
+msgstr "КориÑти 32-битни целобројни"
+
+#: config/pdp11/pdp11.opt:88
+msgid "Target has split I&D"
+msgstr "Циљ има подељен I&D"
+
+#: config/pdp11/pdp11.opt:92
+msgid "Use UNIX assembler syntax"
+msgstr "КориÑти УникÑову ÑинтакÑу аÑемблера"
+
+#: config/avr/avr.opt:24
+msgid "Use subroutines for function prologues and epilogues"
+msgstr "КориÑти потпрограме за прологе и епилоге функција"
+
+#: config/avr/avr.opt:28
+msgid "Select the target MCU"
+msgstr "Изаберите циљни МЦУ"
+
+#: config/avr/avr.opt:35
+msgid "Use STACK as the initial value of the stack pointer"
+msgstr "КориÑти STACK као почетну вредноÑÑ‚ за показивач Ñтека"
+
+#: config/avr/avr.opt:39
+msgid "Use an 8-bit 'int' type"
+msgstr "КориÑти 8-битни тип ‘int’"
+
+#: config/avr/avr.opt:43
+msgid "Change the stack pointer without disabling interrupts"
+msgstr "Мењај показивач Ñтека без иÑкључивања прекида"
+
+#: config/avr/avr.opt:47
+msgid "Do not generate tablejump insns"
+msgstr "Ðе Ñтварај ије tablejump"
+
+#: config/avr/avr.opt:57
+msgid "Use rjmp/rcall (limited range) on >8K devices"
+msgstr "КориÑти rjmp/rcall (ограничен опÑег) на >8k уређајима"
+
+#: config/avr/avr.opt:61
+msgid "Output instruction sizes to the asm file"
+msgstr "ИÑпиши величине инÑтрукција у аÑм датотеку"
+
+#: config/avr/avr.opt:65
+msgid "Change only the low 8 bits of the stack pointer"
+msgstr "Мењај Ñамо доњих 8 битова показивача Ñтека"
+
+#: config/crx/crx.opt:24
+msgid "Support multiply accumulate instructions"
+msgstr "Подржи инÑтрукције вишеÑтруке акумулације"
+
+#: config/crx/crx.opt:28
+msgid "Do not use push to store function arguments"
+msgstr "Ðе кориÑти push за Ñкладиштење аргумената функције"
+
+#: config/crx/crx.opt:32
+msgid "Restrict doloop to the given nesting level"
+msgstr "Ограничи doloop на дати ниво угњеждења"
+
+#: config/c4x/c4x.opt:24
+msgid "Generate code for C30 CPU"
+msgstr "Створи кôд за ЦПУ Ц30"
+
+#: config/c4x/c4x.opt:28
+msgid "Generate code for C31 CPU"
+msgstr "Створи кôд за Ц31"
+
+#: config/c4x/c4x.opt:32
+msgid "Generate code for C32 CPU"
+msgstr "Створи кôд за Ц32"
+
+#: config/c4x/c4x.opt:36
+msgid "Generate code for C33 CPU"
+msgstr "Створи кôд за Ц33"
+
+#: config/c4x/c4x.opt:40
+msgid "Generate code for C40 CPU"
+msgstr "Створи кôд за Ц40"
+
+#: config/c4x/c4x.opt:44
+msgid "Generate code for C44 CPU"
+msgstr "Створи кôд за Ц44"
+
+#: config/c4x/c4x.opt:48
+msgid "Assume that pointers may be aliased"
+msgstr "ПретпоÑтави да показивачи могу бити дволични"
+
+#: config/c4x/c4x.opt:52
+msgid "Big memory model"
+msgstr "Велики модел меморије"
+
+#: config/c4x/c4x.opt:56
+msgid "Use the BK register as a general purpose register"
+msgstr "КориÑти региÑтар BK као региÑтар опште намене"
+
+#: config/c4x/c4x.opt:60
+msgid "Generate code for CPU"
+msgstr "Створи кôд за ЦПУ"
+
+#: config/c4x/c4x.opt:64
+msgid "Enable use of DB instruction"
+msgstr "Укључи употребу ДБ инÑтрукција"
+
+#: config/c4x/c4x.opt:68
+msgid "Enable debugging"
+msgstr "Укључи иÑправљање"
+
+#: config/c4x/c4x.opt:72
+msgid "Enable new features under development"
+msgstr "Укључи нове могућноÑти у развоју"
+
+#: config/c4x/c4x.opt:76
+msgid "Use fast but approximate float to integer conversion"
+msgstr "КориÑти брзо али приближно претварање реалног у целобројно"
+
+#: config/c4x/c4x.opt:80
+msgid "Force RTL generation to emit valid 3 operand insns"
+msgstr "Спроведи Ñтварање РТЛа да емитује важеће трооперандÑке ије"
+
+#: config/c4x/c4x.opt:84
+msgid "Force constants into registers to improve hoisting"
+msgstr "Спроведи конÑтанте у региÑтре ради побољшања подизања"
+
+#: config/c4x/c4x.opt:88 config/c4x/c4x.opt:112
+msgid "Save DP across ISR in small memory model"
+msgstr "Снимај DP преко ИСРа у малом меморијÑком моделу"
+
+#: config/c4x/c4x.opt:92
+msgid "Allow unsigned iteration counts for RPTB/DB"
+msgstr "Дозволи неозначене бројаче итерација за RPTB/DB"
+
+#: config/c4x/c4x.opt:96
+msgid "Pass arguments on the stack"
+msgstr "ПроÑлеђуј аргументе на Ñтеку"
+
+#: config/c4x/c4x.opt:100
+msgid "Use MPYI instruction for C3x"
+msgstr "КориÑти инÑтрукцију MPYI за Ц3н"
+
+#: config/c4x/c4x.opt:104
+msgid "Enable parallel instructions"
+msgstr "Укључи паралелне инÑтрукције"
+
+#: config/c4x/c4x.opt:108
+msgid "Enable MPY||ADD and MPY||SUB instructions"
+msgstr "Укључи инÑтрукције MPY||ADD и MPY||SUB"
+
+#: config/c4x/c4x.opt:116
+msgid "Preserve all 40 bits of FP reg across call"
+msgstr "Сачувај Ñвих 40 битова ФП региÑтра преко позива"
+
+#: config/c4x/c4x.opt:120
+msgid "Pass arguments in registers"
+msgstr "ПроÑлеђуј Ñве аргументе у региÑтрима"
+
+#: config/c4x/c4x.opt:124
+msgid "Enable use of RTPB instruction"
+msgstr "Укључи употребу инÑтрукције RPTB"
+
+#: config/c4x/c4x.opt:128
+msgid "Enable use of RTPS instruction"
+msgstr "Укључи употребу инÑтрукције RPTS"
+
+#: config/c4x/c4x.opt:132
+msgid "Set the maximum number of iterations for RPTS to N"
+msgstr "ПоÑтави највећи број итерација за RPTS на N"
+
+#: config/c4x/c4x.opt:136
+msgid "Small memory model"
+msgstr "Мали модел меморије"
+
+#: config/c4x/c4x.opt:140
+msgid "Emit code compatible with TI tools"
+msgstr "Емитуј кôд ÑаглаÑан Ñа ТИјевим алатима"
+
+#: config/pa/pa-hpux.opt:24
+msgid "Generate cpp defines for server IO"
+msgstr "Стварај Ц++ дефиниције за У/И Ñервера"
+
+#: config/pa/pa-hpux.opt:28 config/pa/pa-hpux1010.opt:24
+#: config/pa/pa-hpux1111.opt:24
+msgid "Specify UNIX standard for predefines and linking"
+msgstr "Одредите Ñтандард УникÑа за предефиниције и повезивање"
+
+#: config/pa/pa-hpux.opt:32
+msgid "Generate cpp defines for workstation IO"
+msgstr "Стварај Ц++ дефиниције за У/И радне Ñтанице"
+
+#: config/pa/pa.opt:24 config/pa/pa.opt:77 config/pa/pa.opt:85
+msgid "Generate PA1.0 code"
+msgstr "Створи ПÐ1.0 кôд"
+
+#: config/pa/pa.opt:28 config/pa/pa.opt:89 config/pa/pa.opt:109
+msgid "Generate PA1.1 code"
+msgstr "Створи ПÐ1.1 кôд"
+
+#: config/pa/pa.opt:32 config/pa/pa.opt:93
+msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
+msgstr "Створи ПÐ2.0 кôд (захтева binutils 2.10 или новији)"
+
+#: config/pa/pa.opt:36
+msgid "Generate code for huge switch statements"
+msgstr "Створи кôд за огромне наредбе прекидача"
+
+#: config/pa/pa.opt:40
+msgid "Disable FP regs"
+msgstr "ИÑкључи ФП региÑтре"
+
+#: config/pa/pa.opt:44
+msgid "Disable indexed addressing"
+msgstr "ИÑкључи индекÑно адреÑирање"
+
+#: config/pa/pa.opt:48
+msgid "Generate fast indirect calls"
+msgstr "Стварај брзе поÑредне позиве"
+
+#: config/pa/pa.opt:56
+msgid "Assume code will be assembled by GAS"
+msgstr "ПретпоÑтави да ће кôд ÑаÑтавити ГÐС"
+
+#: config/pa/pa.opt:60
+msgid "Put jumps in call delay slots"
+msgstr "Стављај Ñкокове у жлебове заÑтоја позива"
+
+#: config/pa/pa.opt:65
+msgid "Enable linker optimizations"
+msgstr "Укључи оптимизације повезивача"
+
+#: config/pa/pa.opt:69
+msgid "Always generate long calls"
+msgstr "Увек Ñтварај дуге позиве"
+
+#: config/pa/pa.opt:73
+msgid "Emit long load/store sequences"
+msgstr "Емитуј дуге низове учитавања/упиÑивања"
+
+#: config/pa/pa.opt:81
+msgid "Disable space regs"
+msgstr "ИÑкључи региÑтре размака"
+
+#: config/pa/pa.opt:97
+msgid "Use portable calling conventions"
+msgstr "КориÑти преноÑиве конвенције позивања"
+
+#: config/pa/pa.opt:101
+msgid "Specify CPU for scheduling purposes. Valid arguments are 700, 7100, 7100LC, 7200, 7300, and 8000"
+msgstr "Одредите ЦПУ ради раÑпоређивања. Могући аргументи Ñу 700, 7100, 7100LC, 7200, 7300, и 8000"
+
+#: config/pa/pa.opt:113
+msgid "Do not disable space regs"
+msgstr "Ðе иÑкључуј региÑтре размака"
+
+#: config/pa/pa64-hpux.opt:24
+msgid "Assume code will be linked by GNU ld"
+msgstr "ПретпоÑтави да ће кôд повезивати Гнуов ld"
+
+#: config/pa/pa64-hpux.opt:28
+msgid "Assume code will be linked by HP ld"
+msgstr "ПретпоÑтави да ће кôд повезивати ХПов ld"
+
+#: config/xtensa/xtensa.opt:24
+msgid "Use CONST16 instruction to load constants"
+msgstr "КориÑти КОÐСТ16 инÑтрукцију за учитавање конÑтанти"
+
+#: config/xtensa/xtensa.opt:28
+msgid "Enable fused multiply/add and multiply/subtract FP instructions"
+msgstr "Укључи ФП инÑтрукције Ñтопљеног множења-додавања и множења-одузимања"
+
+#: config/xtensa/xtensa.opt:32
+msgid "Use indirect CALLXn instructions for large programs"
+msgstr "КориÑти поÑредне инÑтрукције CALLXn за велике програме"
+
+#: config/xtensa/xtensa.opt:36
+msgid "Automatically align branch targets to reduce branch penalties"
+msgstr "ÐутоматÑки равнај циљеве гранања ради Ñмањења губитака при грањању"
+
+#: config/xtensa/xtensa.opt:40
+msgid "Intersperse literal pools with code in the text section"
+msgstr "Умешај депое доÑловних ниÑки Ñа кôдом у текÑтуалном одељку"
+
+#: config/stormy16/stormy16.opt:25
+msgid "Provide libraries for the simulator"
+msgstr "Пружи библиотеке за Ñимулатор"
+
+#: config/mips/mips.opt:24
+msgid "Generate code that conforms to the given ABI"
+msgstr "Створи кôд који поштује дати ÐБИ"
+
+#: config/mips/mips.opt:28
+msgid "Use SVR4-style PIC"
+msgstr "КориÑти ПИЦ у Ñтилу СВР4"
+
+#: config/mips/mips.opt:32
+msgid "Use PMC-style 'mad' instructions"
+msgstr "КориÑти инÑтрукције mad у Ñтилу ПМЦа"
+
+#: config/mips/mips.opt:36
+msgid "Generate code for the given ISA"
+msgstr "Створи кôд за дату ИСУ"
+
+#: config/mips/mips.opt:40
+msgid "Use Branch Likely instructions, overriding the architecture default"
+msgstr "КориÑти инÑтрукције извеÑног гранања, потиÑкујући подразумевано за архитектуру"
+
+#: config/mips/mips.opt:44
+msgid "Trap on integer divide by zero"
+msgstr "Хватај целобројно дељење нулом"
+
+#: config/mips/mips.opt:48
+msgid "Use branch-and-break sequences to check for integer divide by zero"
+msgstr "КориÑти низове гранања-и-прекида ради провере целобројног дељења нулом"
+
+#: config/mips/mips.opt:52
+msgid "Use trap instructions to check for integer divide by zero"
+msgstr "КориÑти инÑтрукције клопки ради провере целобројног дељења нулом"
+
+#: config/mips/mips.opt:56
+msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bit operations"
+msgstr "Дозволи хардверÑким ФП инÑтрукцијама да покрију и 32-битне и 64-битне операције"
+
+#: config/mips/mips.opt:60
+msgid "Use MIPS-DSP instructions"
+msgstr "КориÑти инÑтрукције МИПСа-ДСП"
+
+#: config/mips/mips.opt:70
+msgid "Use big-endian byte order"
+msgstr "КориÑти редоÑлед бајтова велике крајноÑти"
+
+#: config/mips/mips.opt:74
+msgid "Use little-endian byte order"
+msgstr "КориÑти редоÑлед бајтова мале крајноÑти"
+
+#: config/mips/mips.opt:78 config/iq2000/iq2000.opt:32
+msgid "Use ROM instead of RAM"
+msgstr "КориÑти РОМ умеÑто РÐМа"
+
+#: config/mips/mips.opt:82
+msgid "Use NewABI-style %reloc() assembly operators"
+msgstr "КориÑти аÑемблерÑке операторе %reloc() у Ñтилу ЊуÐБИја"
+
+#: config/mips/mips.opt:86
+msgid "Work around certain R4000 errata"
+msgstr "Заобиђи извеÑне грешке у Р4000у"
+
+#: config/mips/mips.opt:90
+msgid "Work around certain R4400 errata"
+msgstr "Заобиђи извеÑне грешке у Р4400у"
+
+#: config/mips/mips.opt:94
+msgid "Work around errata for early SB-1 revision 2 cores"
+msgstr "Заобиђи грешке у раним језгрима СБ-1 ревизије 2"
+
+#: config/mips/mips.opt:98
+msgid "Work around certain VR4120 errata"
+msgstr "Заобиђи извеÑне грешке у ВР4120"
+
+#: config/mips/mips.opt:102
+msgid "Work around VR4130 mflo/mfhi errata"
+msgstr "Зобиђи грешке код mflo/mfhi у ВР4130"
+
+#: config/mips/mips.opt:106
+msgid "Work around an early 4300 hardware bug"
+msgstr "Забиђи хардверÑку грешку у раним 4300"
+
+#: config/mips/mips.opt:110
+msgid "FP exceptions are enabled"
+msgstr "ФП изузеци Ñу укључени"
+
+#: config/mips/mips.opt:114
+msgid "Use 32-bit floating-point registers"
+msgstr "КориÑти 32-битне региÑтре покретног зареза"
+
+#: config/mips/mips.opt:118
+msgid "Use 64-bit floating-point registers"
+msgstr "КориÑти 64-битне региÑтре покретног зареза"
+
+#: config/mips/mips.opt:122
+msgid "Use FUNC to flush the cache before calling stack trampolines"
+msgstr "КориÑти FUNC за Ñпирање оÑтаве пре звања трамполина Ñа Ñтека"
+
+#: config/mips/mips.opt:126
+msgid "Generate floating-point multiply-add instructions"
+msgstr "Стварај инÑтрукције множење-додавање у покретном зарезу"
+
+#: config/mips/mips.opt:130
+msgid "Use 32-bit general registers"
+msgstr "КориÑти 32-битне опште региÑтре"
+
+#: config/mips/mips.opt:134
+msgid "Use 64-bit general registers"
+msgstr "КориÑти 64-битне опште региÑтре"
+
+#: config/mips/mips.opt:138
+msgid "Allow the use of hardware floating-point instructions"
+msgstr "Дозволи употребу хардверÑких инÑтрукција покретног зареза"
+
+#: config/mips/mips.opt:142
+msgid "Generate code for ISA level N"
+msgstr "Створи кôд за ИСУ нивоа N"
+
+#: config/mips/mips.opt:146
+msgid "Generate mips16 code"
+msgstr "Створи кôд за мипÑ16"
+
+#: config/mips/mips.opt:150
+msgid "Use MIPS-3D instructions"
+msgstr "КориÑти МИПС-3Д инÑтрукције"
+
+#: config/mips/mips.opt:154
+msgid "Use indirect calls"
+msgstr "КориÑти поÑредне позиве"
+
+#: config/mips/mips.opt:158
+msgid "Use a 32-bit long type"
+msgstr "КориÑти 32-битан тип long"
+
+#: config/mips/mips.opt:162
+msgid "Use a 64-bit long type"
+msgstr "КориÑти 64-битан тип long"
+
+#: config/mips/mips.opt:166
+msgid "Don't optimize block moves"
+msgstr "Ðе оптимизуј блоковÑка померања"
+
+#: config/mips/mips.opt:170
+msgid "Use the mips-tfile postpass"
+msgstr "КориÑти поÑтпролаз mips-tfile"
+
+#: config/mips/mips.opt:174
+msgid "Do not use a cache-flushing function before calling stack trampolines"
+msgstr "Ðе кориÑти функцију за Ñпирање оÑтаве пре звања трамполина Ñа Ñтека"
+
+#: config/mips/mips.opt:178
+msgid "Generate normal-mode code"
+msgstr "Стварај кôд нормалног режима"
+
+#: config/mips/mips.opt:182
+msgid "Do not use MIPS-3D instructions"
+msgstr "Ðе кориÑти МИПС-3Д инÑтрукције"
+
+#: config/mips/mips.opt:186
+msgid "Use paired-single floating-point instructions"
+msgstr "КориÑти упарене једноÑтруке инÑтрукције покретног зареза"
+
+#: config/mips/mips.opt:190
+msgid "Restrict the use of hardware floating-point instructions to 32-bit operations"
+msgstr "Ограничи употребу хардверÑких инÑтрукција покретног зареза на 32-битне операције"
+
+#: config/mips/mips.opt:194
+msgid "Prevent the use of all hardware floating-point instructions"
+msgstr "Спречи употребу Ñвих хардверÑких инÑтрукција покретног зареза"
+
+#: config/mips/mips.opt:198
+msgid "Optimize lui/addiu address loads"
+msgstr "Оптимизуј учитавања адреÑа код lui/addiu"
+
+#: config/mips/mips.opt:202
+msgid "Assume all symbols have 32-bit values"
+msgstr "ПретпоÑтави да Ñви Ñимболи имају 32-битне вредноÑти"
+
+#: config/mips/mips.opt:206
+msgid "Optimize the output for PROCESSOR"
+msgstr "Оптимизуј излаз за дати процеÑор"
+
+#: config/mips/mips.opt:210 config/iq2000/iq2000.opt:45
+msgid "Put uninitialized constants in ROM (needs -membedded-data)"
+msgstr "Стави неуÑпоÑтављене конÑтанте у РОМу (захтева -membedded-data)"
+
+#: config/mips/mips.opt:214
+msgid "Perform VR4130-specific alignment optimizations"
+msgstr "Оптимизуј равнање поÑебно за ВР4130"
+
+#: config/mips/mips.opt:218
+msgid "Lift restrictions on GOT size"
+msgstr "ОтпуÑти ограничења на величину GOT"
+
+#: config/fr30/fr30.opt:24
+msgid "Assume small address space"
+msgstr "ПретпоÑтави мали адреÑни проÑтор"
+
+#: config/m68hc11/m68hc11.opt:24 config/m68hc11/m68hc11.opt:32
+msgid "Compile for a 68HC11"
+msgstr "Компилуј за 68ХЦ11"
+
+#: config/m68hc11/m68hc11.opt:28 config/m68hc11/m68hc11.opt:36
+msgid "Compile for a 68HC12"
+msgstr "Компилуј за 68ХЦ12"
+
+#: config/m68hc11/m68hc11.opt:42 config/m68hc11/m68hc11.opt:46
+msgid "Compile for a 68HCS12"
+msgstr "Компилуј за 68ХЦС12"
+
+#: config/m68hc11/m68hc11.opt:50
+msgid "Auto pre/post decrement increment allowed"
+msgstr "ÐутоматÑко пред/поÑÑ‚ увећање/умањење дозвољено"
+
+#: config/m68hc11/m68hc11.opt:54
+msgid "Min/max instructions allowed"
+msgstr "ИнÑтрукције min/max дозвољене"
+
+#: config/m68hc11/m68hc11.opt:58
+msgid "Use call and rtc for function calls and returns"
+msgstr "КориÑти call и rtc за позиве и повратке из функција"
+
+#: config/m68hc11/m68hc11.opt:62
+msgid "Auto pre/post decrement increment not allowed"
+msgstr "ÐутоматÑко пред/поÑÑ‚ увећање/умањење није дозвољено"
+
+#: config/m68hc11/m68hc11.opt:66
+msgid "Use jsr and rts for function calls and returns"
+msgstr "КориÑти jsr и rts за позиве и повратке из функција"
+
+#: config/m68hc11/m68hc11.opt:70
+msgid "Min/max instructions not allowed"
+msgstr "ИнÑтрукције min/max ниÑу дозвољене"
+
+#: config/m68hc11/m68hc11.opt:74
+msgid "Use direct addressing mode for soft registers"
+msgstr "КориÑти режим непоÑредног адреÑирања за меке региÑтре"
+
+#: config/m68hc11/m68hc11.opt:78
+msgid "Compile with 32-bit integer mode"
+msgstr "Компилуј Ñа 32-битним целобројним режимом"
+
+#: config/m68hc11/m68hc11.opt:83
+msgid "Specify the register allocation order"
+msgstr "Одредите редоÑлед резервиÑања региÑтара"
+
+#: config/m68hc11/m68hc11.opt:87
+msgid "Do not use direct addressing mode for soft registers"
+msgstr "Ðе кориÑти режим непоÑредног адреÑирања за меке региÑтре"
+
+#: config/m68hc11/m68hc11.opt:91
+msgid "Compile with 16-bit integer mode"
+msgstr "Компилуј Ñа 16-битним целобројним режимом"
+
+#: config/m68hc11/m68hc11.opt:95
+msgid "Indicate the number of soft registers available"
+msgstr "Ðаведите број доÑтупних меких региÑтара"
+
+#: config/vax/vax.opt:24 config/vax/vax.opt:28
+msgid "Target DFLOAT double precision code"
+msgstr "Циљ је кôд двоÑтруке тачноÑти DFLOAT"
+
+#: config/vax/vax.opt:32 config/vax/vax.opt:36
+msgid "Generate GFLOAT double precision code"
+msgstr "Створи кôд двоÑтруке тачноÑти GFLOAT"
+
+#: config/vax/vax.opt:40
+msgid "Generate code for GNU assembler (gas)"
+msgstr "Створи кôд за Гнуов аÑемблер (gas)"
+
+#: config/vax/vax.opt:44
+msgid "Generate code for UNIX assembler"
+msgstr "Створи кôд за УникÑов аÑемблер"
+
+#: config/vax/vax.opt:48
+msgid "Use VAXC structure conventions"
+msgstr "КориÑти конвенције VAXC за Ñтруктуре"
+
+#: config/cris/linux.opt:28
+msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
+msgstr "Заједно Ñа -fpic и -fPIC, не кориÑти упућивања GOTPLT"
+
+#: config/cris/cris.opt:46
+msgid "Work around bug in multiplication instruction"
+msgstr "Заобиђи грешку у инÑтрукцији множења"
+
+#: config/cris/cris.opt:52
+msgid "Compile for ETRAX 4 (CRIS v3)"
+msgstr "Компилуј за Ð•Ñ‚Ñ€Ð°ÐºÑ 4 (КРИС в3)"
+
+#: config/cris/cris.opt:57
+msgid "Compile for ETRAX 100 (CRIS v8)"
+msgstr "Компилуј за Ð•Ñ‚Ñ€Ð°ÐºÑ 100 (КРИС в8)"
+
+#: config/cris/cris.opt:65
+msgid "Emit verbose debug information in assembly code"
+msgstr "Емитуј опширне иÑправљачке информације у аÑемблерÑком кôду"
+
+#: config/cris/cris.opt:72
+msgid "Do not use condition codes from normal instructions"
+msgstr "Ðе кориÑти уÑловне кôдове из нормалних инÑтрукција"
+
+#: config/cris/cris.opt:81
+msgid "Do not emit addressing modes with side-effect assignment"
+msgstr "Ðе емитуј адреÑне режиме уз доделу Ñа Ñпоредним ефектима"
+
+#: config/cris/cris.opt:90
+msgid "Do not tune stack alignment"
+msgstr "Ðе подешавај равнање Ñтека"
+
+#: config/cris/cris.opt:99
+msgid "Do not tune writable data alignment"
+msgstr "Ðе подешавај равнање упиÑивих података"
+
+#: config/cris/cris.opt:108
+msgid "Do not tune code and read-only data alignment"
+msgstr "Ðе подешавај равнање података кôда и оних Ñамо-за-читање"
+
+#: config/cris/cris.opt:117
+msgid "Align code and data to 32 bits"
+msgstr "Равнај кôд и податке на 32 бита"
+
+#: config/cris/cris.opt:134
+msgid "Don't align items in code or data"
+msgstr "Ðе равнај Ñтавке у кôду и подацима"
+
+#: config/cris/cris.opt:143
+msgid "Do not emit function prologue or epilogue"
+msgstr "Ðе емитуј пролог и епилог функција"
+
+#: config/cris/cris.opt:150
+msgid "Use the most feature-enabling options allowed by other options"
+msgstr "КориÑти опцију која пружа највише могућноÑти дозвољених другим опцијама"
+
+#: config/cris/cris.opt:159
+msgid "Override -mbest-lib-options"
+msgstr "ПотиÑни -mbest-lib-options"
+
+#: config/cris/cris.opt:166
+msgid "Generate code for the specified chip or CPU version"
+msgstr "Створи кôд за наведени чип или верзију ЦПУа"
+
+#: config/cris/cris.opt:170
+msgid "Tune alignment for the specified chip or CPU version"
+msgstr "ПодеÑи равнање за наведени чип или верзију ЦПУа"
+
+#: config/cris/cris.opt:174
+msgid "Warn when a stackframe is larger than the specified size"
+msgstr "Упозори када је оквир Ñтека већи од одређене величине"
+
+#: config/cris/aout.opt:28
+msgid "Compile for the MMU-less Etrax 100-based elinux system"
+msgstr "Компилуј за ÑиÑтем Ð•Ð»Ð¸Ð½ÑƒÐºÑ Ð½Ð° оÑнову ЕтракÑа 100 без ММУа"
+
+#: config/cris/aout.opt:34
+msgid "For elinux, request a specified stack-size for this program"
+msgstr "За ЕлинукÑ, захтевај одређену величину Ñтека у овом програму"
+
+#: config/h8300/h8300.opt:24
+msgid "Generate H8S code"
+msgstr "Створи кôд за Х8С"
+
+#: config/h8300/h8300.opt:28
+msgid "Generate H8SX code"
+msgstr "Створи кôд за Ð¥8СИкÑ"
+
+#: config/h8300/h8300.opt:32
+msgid "Generate H8S/2600 code"
+msgstr "Створи кôд за Х8С/2600"
+
+#: config/h8300/h8300.opt:36
+msgid "Make integers 32 bits wide"
+msgstr "Ðека целобројни тип буде 32-битни"
+
+#: config/h8300/h8300.opt:43
+msgid "Use registers for argument passing"
+msgstr "КориÑти региÑтре за проÑлеђивање аргумената"
+
+#: config/h8300/h8300.opt:47
+msgid "Consider access to byte sized memory slow"
+msgstr "Сматрај Ñпорим приÑтуп меморији бајтне величине"
+
+#: config/h8300/h8300.opt:51
+msgid "Enable linker relaxing"
+msgstr "Укључи опуштање при повезивању"
+
+#: config/h8300/h8300.opt:55
+msgid "Generate H8/300H code"
+msgstr "Створи кôд за Х8/300Х"
+
+#: config/h8300/h8300.opt:59
+msgid "Enable the normal mode"
+msgstr "Укључи нормалан режим"
+
+#: config/h8300/h8300.opt:63
+msgid "Use H8/300 alignment rules"
+msgstr "КориÑти правила равнања за Ð¥8/300"
+
+#: config/v850/v850.opt:24
+msgid "Use registers r2 and r5"
+msgstr "КориÑти региÑтре r2 и r5"
+
+#: config/v850/v850.opt:28
+msgid "Use 4 byte entries in switch tables"
+msgstr "КориÑти 4-бајтне уноÑе у табелама пребацивања"
+
+#: config/v850/v850.opt:32
+msgid "Enable backend debugging"
+msgstr "Укључи иÑправљање зачеља"
+
+#: config/v850/v850.opt:36
+msgid "Do not use the callt instruction"
+msgstr "Ðе кориÑти инÑтрукцију callt"
+
+#: config/v850/v850.opt:40
+msgid "Reuse r30 on a per function basis"
+msgstr "Поново кориÑти r30 од функције до функције"
+
+#: config/v850/v850.opt:44
+msgid "Support Green Hills ABI"
+msgstr "Подржи ÐБИ Грин ХилÑ"
+
+#: config/v850/v850.opt:48
+msgid "Prohibit PC relative function calls"
+msgstr "Забрани позиве функција у одноÑу на ПЦ"
+
+#: config/v850/v850.opt:52
+msgid "Use stubs for function prologues"
+msgstr "КориÑти клице за прологе функција"
+
+#: config/v850/v850.opt:56
+msgid "Set the max size of data eligible for the SDA area"
+msgstr "Ðајвећа величина података подеÑних за облаÑÑ‚ СДÐ"
+
+#: config/v850/v850.opt:60
+msgid "Enable the use of the short load instructions"
+msgstr "Укључи употребу инÑтрукције кратког учитавања"
+
+#: config/v850/v850.opt:64
+msgid "Same as: -mep -mprolog-function"
+msgstr "ИÑто као: -mep -mprolog-function"
+
+#: config/v850/v850.opt:68
+msgid "Set the max size of data eligible for the TDA area"
+msgstr "Ðајвећа величина података подеÑних за облаÑÑ‚ ТДÐ"
+
+#: config/v850/v850.opt:72
+msgid "Enforce strict alignment"
+msgstr "Спроведи Ñтрого равнање"
+
+#: config/v850/v850.opt:79
+msgid "Compile for the v850 processor"
+msgstr "Компилуј за процеÑор в850"
+
+#: config/v850/v850.opt:83
+msgid "Compile for the v850e processor"
+msgstr "Компилуј за процеÑор в850е"
+
+#: config/v850/v850.opt:87
+msgid "Compile for the v850e1 processor"
+msgstr "Компилуј за процеÑор в850е1"
+
+#: config/v850/v850.opt:91
+msgid "Set the max size of data eligible for the ZDA area"
+msgstr "Ðајвећа величина података подеÑних за облаÑÑ‚ ЗДÐ"
+
+#: config/mmix/mmix.opt:25
+msgid "For intrinsics library: pass all parameters in registers"
+msgstr "За библиотеку ÑопÑтвених: проÑлеђуј Ñве параметре у региÑтрима"
+
+#: config/mmix/mmix.opt:29
+msgid "Use register stack for parameters and return value"
+msgstr "КориÑти Ñтек региÑтара за параметре и повратне вредноÑти"
+
+#: config/mmix/mmix.opt:33
+msgid "Use call-clobbered registers for parameters and return value"
+msgstr "КориÑти позивом продрмане региÑтре за параметре и повратне вредноÑти"
+
+#: config/mmix/mmix.opt:38
+msgid "Use epsilon-respecting floating point compare instructions"
+msgstr "КориÑти поредбене инÑтрукције у покретном зарезу које поштују епÑилон"
+
+#: config/mmix/mmix.opt:42
+msgid "Use zero-extending memory loads, not sign-extending ones"
+msgstr "КориÑти меморијÑка учитавања која проширују нулом, а не знаком"
+
+#: config/mmix/mmix.opt:46
+msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)"
+msgstr "Стварај резултате дељења Ñа оÑтатком који има иÑти знак као делилац (а не дељеник)"
+
+#: config/mmix/mmix.opt:50
+msgid "Prepend global symbols with \":\" (for use with PREFIX)"
+msgstr "Додај „:“ на почетак глобалних Ñимбола (за употребу Ñа PREFIX)"
+
+#: config/mmix/mmix.opt:54
+msgid "Do not provide a default start-address 0x100 of the program"
+msgstr "Ðе пружај подразумевану почетну адреÑу програма 0x100"
+
+#: config/mmix/mmix.opt:58
+msgid "Link to emit program in ELF format (rather than mmo)"
+msgstr "Повезивање даје програм у формату ЕЛФ (пре него ммо)"
+
+#: config/mmix/mmix.opt:62
+msgid "Use P-mnemonics for branches statically predicted as taken"
+msgstr "КориÑти П-мнемонику за грањања за која је Ñтатички предвиђено да ће бити извршена"
+
+#: config/mmix/mmix.opt:66
+msgid "Don't use P-mnemonics for branches"
+msgstr "Ðе кориÑти П-мнемонику за гранања"
+
+#: config/mmix/mmix.opt:80
+msgid "Use addresses that allocate global registers"
+msgstr "КориÑти адреÑе које резервишу глобалне региÑтре"
+
+#: config/mmix/mmix.opt:84
+msgid "Do not use addresses that allocate global registers"
+msgstr "Ðе кориÑти адреÑе које резервишу глобалне региÑтре"
+
+#: config/mmix/mmix.opt:88
+msgid "Generate a single exit point for each function"
+msgstr "Створи јединÑтвену излазну тачку за Ñваку функцију"
+
+#: config/mmix/mmix.opt:92
+msgid "Do not generate a single exit point for each function"
+msgstr "Ðе Ñтварај јединÑтвену излазну тачку за Ñваку функцију"
+
+#: config/mmix/mmix.opt:96
+msgid "Set start-address of the program"
+msgstr "ПоÑтави почетну адреÑу програма"
+
+#: config/mmix/mmix.opt:100
+msgid "Set start-address of data"
+msgstr "ПоÑтави почетну адреÑу података"
+
+#: config/iq2000/iq2000.opt:28
+msgid "Specify CPU for scheduling purposes"
+msgstr "Одредите ЦПУ ради раÑпоређивања"
+
+#: config/iq2000/iq2000.opt:36
+msgid "Use GP relative sdata/sbss sections"
+msgstr "КориÑти одељке sdata/sbss релативне према GP"
+
+#: config/iq2000/iq2000.opt:41
+msgid "No default crt0.o"
+msgstr "Без подразумеване crt0.o"
+
+#: config/bfin/bfin.opt:24
+msgid "Omit frame pointer for leaf functions"
+msgstr "ИзоÑтави показивач оквира за функције-лиÑтове"
+
+#: config/bfin/bfin.opt:28
+msgid "Program is entirely located in low 64k of memory"
+msgstr "Програм Ñе у потпуноÑти Ñмешта у доњих 64 kB меморије"
+
+#: config/bfin/bfin.opt:32
+msgid "Work around a hardware anomaly by adding a number of NOPs before a"
+msgstr "Заобиђи хардвеÑку неправилноÑÑ‚ додајући неколико ÐОП пре a"
+
+#: config/bfin/bfin.opt:37
+msgid "Avoid speculative loads to work around a hardware anomaly."
+msgstr "Избегавај Ñпекулативна учитавања ради заобилажења хардверÑке неправилноÑти."
+
+#: config/bfin/bfin.opt:41
+msgid "Enabled ID based shared library"
+msgstr "Укључи дељене библиотеке на оÑнову ИДа"
+
+#: config/bfin/bfin.opt:49
+msgid "Avoid generating pc-relative calls; use indirection"
+msgstr "Избегавај Ñтварање позива у одноÑу на ПЦу; кориÑти индирекцију"
+
+#: config/vxworks.opt:25
+msgid "Assume the VxWorks RTP environment"
+msgstr "ПретпоÑтави ВикÑВоркÑово окружење РТП"
+
+#: config/vxworks.opt:32
+msgid "Assume the VxWorks vThreads environment"
+msgstr "ПретпоÑтави ВикÑВоркÑово окружење вТредÑ"
+
+#: config/darwin.opt:24
+msgid "Generate code suitable for fast turn around debugging"
+msgstr "Створи кôд погодан за иÑправљање при брзим обртима"
+
+#: config/darwin.opt:28
+msgid "The earliest MacOS X version on which this program will run"
+msgstr "Ðајранија верзија МекОСа X на којој ће овај програм радити"
+
+#: config/darwin.opt:32
+msgid "Set sizeof(bool) to 1"
+msgstr "ПоÑтави sizeof(bool) на 1"
+
+#: config/lynx.opt:24
+msgid "Support legacy multi-threading"
+msgstr "Подржи заÑтарелу вишенитноÑÑ‚"
+
+#: config/lynx.opt:28
+msgid "Use shared libraries"
+msgstr "КориÑти дељене библиотеке"
+
+#: config/lynx.opt:32
+msgid "Support multi-threading"
+msgstr "Подржи вишенитноÑÑ‚"
+
+#: c.opt:42
+msgid "Assert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>"
+msgstr "Потврди да Ñе <answer> и <question> поклапају. Стављањем ‘-’ иÑпред <question> иÑкључује Ñе дати <answer> и <question>"
+
+#: c.opt:46
+msgid "Do not discard comments"
+msgstr "Ðе одбацуј коментаре"
+
+#: c.opt:50
+msgid "Do not discard comments in macro expansions"
+msgstr "Ðе одбацуј коментаре при ширењу макроа"
+
+#: c.opt:54
+msgid "Define a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1"
+msgstr "Дефиниши <macro> чија је вредноÑÑ‚ <val>. Ðко је дат Ñамо <macro>, за <val> Ñе узима 1"
+
+#: c.opt:61
+msgid "Add <dir> to the end of the main framework include path"
+msgstr "Додај <dir> на крај главне путање укључивања радног оквира"
+
+#: c.opt:65
+msgid "Print the name of header files as they are used"
+msgstr "ИÑпиÑуј имена заглавља које Ñе кориÑте"
+
+#: c.opt:69 c.opt:782
+msgid "Add <dir> to the end of the main include path"
+msgstr "Додај <dir> на крај главне путање укључивања"
+
+#: c.opt:73
+msgid "Generate make dependencies"
+msgstr "Створи завиÑноÑти за Ñправљач"
+
+#: c.opt:77
+msgid "Generate make dependencies and compile"
+msgstr "Створи завиÑноÑти за Ñправљач и компилуј"
+
+#: c.opt:81
+msgid "Write dependency output to the given file"
+msgstr "ИÑпиши завиÑноÑти у дату датотеку"
+
+#: c.opt:85
+msgid "Treat missing header files as generated files"
+msgstr "Сматрај недоÑтајућа заглавља за изведене датотеке"
+
+#: c.opt:89
+msgid "Like -M but ignore system header files"
+msgstr "Као -M али игнориши ÑиÑтемÑка заглавља"
+
+#: c.opt:93
+msgid "Like -MD but ignore system header files"
+msgstr "Као -MD али игнориши ÑиÑтемÑка заглавља"
+
+#: c.opt:97
+msgid "Generate phony targets for all headers"
+msgstr "Створи лажне циљеве за Ñва заглавља"
+
+#: c.opt:101
+msgid "Add a MAKE-quoted target"
+msgstr "Додај циљ цитран за Ñправљач"
+
+#: c.opt:105
+msgid "Add an unquoted target"
+msgstr "Додај нецитиран циљ"
+
+#: c.opt:109
+msgid "Do not generate #line directives"
+msgstr "Ðе Ñтварај директиве #line"
+
+#: c.opt:113
+msgid "Undefine <macro>"
+msgstr "Оддефиниши <macro>"
+
+#: c.opt:117
+msgid "Warn about things that will change when compiling with an ABI-compliant compiler"
+msgstr "Упозори на Ñтвари које ће Ñе променити када Ñе компилује компилатором који поштује ÐБИ"
+
+#: c.opt:121
+msgid "Enable most warning messages"
+msgstr "Укључи већину порука упозорења"
+
+#: c.opt:125
+msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector"
+msgstr "Упозори кад год Ñакупљач Ñмећа преÑретне доделу у објективном Ц-у"
+
+#: c.opt:129
+msgid "Warn about casting functions to incompatible types"
+msgstr "Упозори на претапање функција у неÑаглаÑне типове"
+
+#: c.opt:133
+msgid "Warn about C constructs that are not in the common subset of C and C++"
+msgstr "Упозори на Ц конÑтрукције које ниÑу у заједничком подÑкупу Ц-а и Ц++а"
+
+#: c.opt:138
+msgid "Warn about casts which discard qualifiers"
+msgstr "Упозори на претапања која одбацују одредбе"
+
+#: c.opt:142
+msgid "Warn about subscripts whose type is \"char\""
+msgstr "Упозори на индекÑе типа „char“"
+
+#: c.opt:146
+msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line"
+msgstr "Упозори на могуће угњеждене блоковÑке коментаре, и Ц++ коментаре који премашују једну физичку линију"
+
+#: c.opt:150
+msgid "Synonym for -Wcomment"
+msgstr "Синоним за -Wcomment"
+
+#: c.opt:154
+msgid "Warn about possibly confusing type conversions"
+msgstr "Упозори на могуће збуњујујћа претварања типова"
+
+#: c.opt:158
+msgid "Warn when all constructors and destructors are private"
+msgstr "Упозори када Ñу Ñви конÑтруктори и деÑтруктори приватни"
+
+#: c.opt:162
+msgid "Warn when a declaration is found after a statement"
+msgstr "Упозори када наиђе декларација поÑле наредбе"
+
+#: c.opt:166
+msgid "Warn about deprecated compiler features"
+msgstr "Упозори на превазиђене могућноÑти компилатора"
+
+#: c.opt:170
+msgid "Warn about compile-time integer division by zero"
+msgstr "Упозори на дељење нулом при компиловању"
+
+#: c.opt:174
+msgid "Warn about violations of Effective C++ style rules"
+msgstr "Упозори на кршења ÑтилÑких правила датих у Делотворном Ц++у"
+
+#: c.opt:178
+msgid "Warn about stray tokens after #elif and #endif"
+msgstr "Упозори на залутале целине поÑле #elif и #endif"
+
+#: c.opt:186
+msgid "Make implicit function declarations an error"
+msgstr "Ðека имплицитна декларација функције буде грешка"
+
+#: c.opt:190
+msgid "Warn if testing floating point numbers for equality"
+msgstr "Упозори на проверу једнакоÑти бројева у покретном зарезу"
+
+#: c.opt:194
+msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
+msgstr "Упозори на аномалије у формату за printf/scanf/strftime/strfmon"
+
+#: c.opt:198
+msgid "Warn if passing too many arguments to a function for its format string"
+msgstr "Упозори ако Ñе функцији проÑлеђује превише аргумената за форматирајућу ниÑку"
+
+#: c.opt:202
+msgid "Warn about format strings that are not literals"
+msgstr "Упозори на форматирајуће ниÑке које ниÑу доÑловне"
+
+#: c.opt:206
+msgid "Warn about possible security problems with format functions"
+msgstr "Упозори на могуће безбедноÑне проблеме Ñа форматÑким функцијама"
+
+#: c.opt:210
+msgid "Warn about strftime formats yielding 2-digit years"
+msgstr "Упозори на формате за strftime који дају двоцифрене године"
+
+#: c.opt:214
+msgid "Warn about zero-length formats"
+msgstr "Упозори на формате нулте дужине"
+
+#: c.opt:221
+msgid "Warn about variables which are initialized to themselves"
+msgstr "Упозори на променљиве које Ñе Ñаме уÑпоÑтављају"
+
+#: c.opt:228
+msgid "Warn about implicit function declarations"
+msgstr "Упозори на имплицитне декларације функција"
+
+#: c.opt:232
+msgid "Warn when a declaration does not specify a type"
+msgstr "Упозори када декларација не наводи тип"
+
+#: c.opt:236
+msgid "Deprecated. This switch has no effect"
+msgstr "Ðепрепоручљиво. Овај прекидач нема ефекта"
+
+#: c.opt:240
+msgid "Warn when there is a cast to a pointer from an integer of a different size"
+msgstr "Упозори на претапање у показивач из целобројног различите величине"
+
+#: c.opt:244
+msgid "Warn about invalid uses of the \"offsetof\" macro"
+msgstr "Упозори на неиÑправне употребе макроа „offsetof“"
+
+#: c.opt:248
+msgid "Warn about PCH files that are found but not used"
+msgstr "Упозори на нађене ПЦХ датотеке које Ñе не кориÑте"
+
+#: c.opt:252
+msgid "Do not warn about using \"long long\" when -pedantic"
+msgstr "Ðе упозоравај на употребу „long long“ при -pedantic"
+
+#: c.opt:256
+msgid "Warn about suspicious declarations of \"main\""
+msgstr "Упозори на Ñумњиве декларације „main“"
+
+#: c.opt:260
+msgid "Warn about possibly missing braces around initializers"
+msgstr "Упозори на могуће недоÑтајуће витичаÑте заграде око уÑпоÑтављачâ"
+
+#: c.opt:264
+msgid "Warn about global functions without previous declarations"
+msgstr "Упозори на глобалне функције без претходне декларације"
+
+#: c.opt:268
+msgid "Warn about missing fields in struct initializers"
+msgstr "Упозори на недоÑтајућа поља у уÑпоÑтављачима Ñтруктура"
+
+#: c.opt:272
+msgid "Warn about functions which might be candidates for format attributes"
+msgstr "Упозори на функције које могу бити кандидати за форматÑке атрибуте"
+
+#: c.opt:276
+msgid "Warn about user-specified include directories that do not exist"
+msgstr "Упозори на непоÑтојеће директоријуме за укључивање које је кориÑник задао"
+
+#: c.opt:280
+msgid "Warn about global functions without prototypes"
+msgstr "Упозори на глобалне функције без прототипа"
+
+#: c.opt:284
+msgid "Warn about use of multi-character character constants"
+msgstr "Упозори на употребу вишезнаковних знаковних конÑтанти"
+
+#: c.opt:288
+msgid "Warn about \"extern\" declarations not at file scope"
+msgstr "Упозори на декларације „extern“ ван доÑега датотеке"
+
+#: c.opt:292
+msgid "Warn when non-templatized friend functions are declared within a template"
+msgstr "Упозори када Ñе нешаблонÑке пријатељÑке функције декларишу унутар шаблона"
+
+#: c.opt:296
+msgid "Warn about non-virtual destructors"
+msgstr "Упозори на невиртуелне деÑтрукторе"
+
+#: c.opt:300
+msgid "Warn about NULL being passed to argument slots marked as requiring non-NULL"
+msgstr "Упозори на проÑлеђивање NULL на позицији аргумента за који Ñе захтева не-NULL"
+
+#: c.opt:304
+msgid "Warn about non-normalised Unicode strings"
+msgstr "Упозори на ненормализоване уникодÑке ниÑке"
+
+#: c.opt:308
+msgid "Warn if a C-style cast is used in a program"
+msgstr "Упозори на употребу претапања у Ñтилу Ц-а"
+
+#: c.opt:312
+msgid "Warn if an old-style parameter definition is used"
+msgstr "Упозори на ÑтаровремÑку дефиницију параметара"
+
+#: c.opt:316
+msgid "Warn about overloaded virtual function names"
+msgstr "Упозори на препуњена имена виртуелних функција"
+
+#: c.opt:320
+msgid "Warn about possibly missing parentheses"
+msgstr "Упозори на могуће недоÑтајуће заграде"
+
+#: c.opt:324
+msgid "Warn when converting the type of pointers to member functions"
+msgstr "Упозори када Ñе претварају типови показивача на чланÑке функције"
+
+#: c.opt:328
+msgid "Warn about function pointer arithmetic"
+msgstr "Упозори на аритметику Ñа функцијÑким показивачима"
+
+#: c.opt:332
+msgid "Warn when a pointer is cast to an integer of a different size"
+msgstr "Упозори када Ñе показивач претапа у целобројни различите величине"
+
+#: c.opt:336
+msgid "Warn about misuses of pragmas"
+msgstr "Упозори на злоупотребе прагми"
+
+#: c.opt:340
+msgid "Warn if inherited methods are unimplemented"
+msgstr "Упозори када наÑлеђени методи ниÑу имплементирани"
+
+#: c.opt:344
+msgid "Warn about multiple declarations of the same object"
+msgstr "Упозори на вишеÑтруке декларације иÑтог објекта"
+
+#: c.opt:348
+msgid "Warn when the compiler reorders code"
+msgstr "Упозори када компилатор преуреди кôд"
+
+#: c.opt:352
+msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)"
+msgstr "Упозори када повратни тип функције Ñпадне на „int“ (Ц), или на неуÑаглашене повратне типове (Ц++)"
+
+#: c.opt:356
+msgid "Warn if a selector has multiple methods"
+msgstr "Упозори када Ñелектор има вишеÑтруке методе"
+
+#: c.opt:360
+msgid "Warn about possible violations of sequence point rules"
+msgstr "Упозори на могућа кршења правила Ñеквенцијалних тачака"
+
+#: c.opt:364
+msgid "Warn about signed-unsigned comparisons"
+msgstr "Упозори на поређење означеног и неозначеног"
+
+#: c.opt:368
+msgid "Warn when overload promotes from unsigned to signed"
+msgstr "Упозори када препуњавање прелази из неозначеног у означено"
+
+#: c.opt:372
+msgid "Warn about uncasted NULL used as sentinel"
+msgstr "Упозори на непретопљено NULL у улози Ñтражара"
+
+#: c.opt:376
+msgid "Warn about unprototyped function declarations"
+msgstr "Упозори на непрототипизиране декларације функција"
+
+#: c.opt:380
+msgid "Warn if type signatures of candidate methods do not match exactly"
+msgstr "Упозори аке Ñе типÑки потпиÑи кандидатÑких метода не поклапају тачно"
+
+#: c.opt:384
+msgid "Warn when synthesis behavior differs from Cfront"
+msgstr "Упозори када Ñе понашање Ñинтезе разликује од Цфронта"
+
+#: c.opt:388 common.opt:142
+msgid "Do not suppress warnings from system headers"
+msgstr "Ðе Ñузбијај упозорења из ÑиÑтемÑких заглавља"
+
+#: c.opt:392
+msgid "Warn about features not present in traditional C"
+msgstr "Упозори на могућноÑти које ниÑу приÑутне у традиционалном Ц-у"
+
+#: c.opt:396
+msgid "Warn if trigraphs are encountered that might affect the meaning of the program"
+msgstr "Упозори када наиђу триграфи који могу утицати на значење програма"
+
+#: c.opt:400
+msgid "Warn about @selector()s without previously declared methods"
+msgstr "Упозори на Ñелекторе без претходно деклариÑаних метода"
+
+#: c.opt:404
+msgid "Warn if an undefined macro is used in an #if directive"
+msgstr "Упозори ако Ñе у директиви #if употреби недефиниÑани макро"
+
+#: c.opt:408
+msgid "Warn about unrecognized pragmas"
+msgstr "Упозори на непрепознате прагме"
+
+#: c.opt:412
+msgid "Warn about macros defined in the main file that are not used"
+msgstr "Упозори на макрое дефиниÑане у главној датотеци који ниÑу употребљени"
+
+#: c.opt:416
+msgid "Do not warn about using variadic macros when -pedantic"
+msgstr "Ðе упозоравај на употребу варијадичких макроа при -pedantic"
+
+#: c.opt:420
+msgid "Give strings the type \"array of char\""
+msgstr "Ðека ниÑке имају тип „array of char“"
+
+#: c.opt:424
+msgid "Warn when a pointer differs in signedness in an assignment"
+msgstr "Упозори када Ñе показивач у додели разликује по означеноÑти"
+
+#: c.opt:428
+msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)"
+msgstr "Синоним за -std=c89 (за Ц) или -std=c++98 (за Ц++)"
+
+#: c.opt:436
+msgid "Enforce class member access control semantics"
+msgstr "Спроведи Ñемантику контроле приÑтупа члановима клаÑе"
+
+#: c.opt:443
+msgid "Change when template instances are emitted"
+msgstr "Промени када Ñе емитују примерци шаблона"
+
+#: c.opt:447
+msgid "Recognize the \"asm\" keyword"
+msgstr "Препознај кључну реч „asm“"
+
+#: c.opt:451
+msgid "Recognize built-in functions"
+msgstr "Препознај уграђене функције"
+
+#: c.opt:458
+msgid "Check the return value of new"
+msgstr "Провери повратни тип за new"
+
+#: c.opt:462
+msgid "Allow the arguments of the '?' operator to have different types"
+msgstr "Дозволи да аргументи оператора ‘?’ имају различите типове"
+
+#: c.opt:466
+msgid "Reduce the size of object files"
+msgstr "Смањи величину објектних датотека"
+
+#: c.opt:470
+msgid "Make string literals \"const char[]\" not \"char[]\""
+msgstr "Ðека доÑловне ниÑке буду „const char[]“ умеÑто „char[]“"
+
+#: c.opt:474
+msgid "Use class <name> for constant strings"
+msgstr "КориÑти клаÑу <name> за конÑтантне ниÑке"
+
+#: c.opt:478
+msgid "Inline member functions by default"
+msgstr "Подразумевано уткивај чланÑке функције"
+
+#: c.opt:482
+msgid "Permit '$' as an identifier character"
+msgstr "Дозволи „$“ као знак у идентификатору"
+
+#: c.opt:489
+msgid "Generate code to check exception specifications"
+msgstr "Створи кôд за проверу одредница изузетака"
+
+#: c.opt:496
+msgid "Convert all strings and character constants to character set <cset>"
+msgstr "Претвори Ñве ниÑке и знаковне конÑтанте у Ñкуп знакова <cset>"
+
+#: c.opt:500
+msgid "Permit universal character names (\\u and \\U) in identifiers"
+msgstr "Дозволи универзална имена знакова (\\u и \\U) у идентификаторима"
+
+#: c.opt:504
+msgid "Specify the default character set for source files"
+msgstr "Ðаведи подразумевани Ñкуп знакова за изворне датотеке"
+
+#: c.opt:521
+msgid "Scope of for-init-statement variables is local to the loop"
+msgstr "ДоÑег променљивих у уÑпоÑтављачу петље је локалан за петљу"
+
+#: c.opt:525
+msgid "Do not assume that standard C libraries and \"main\" exist"
+msgstr "Ðе претпоÑтављај да Ñтандардне Ц библиотеке и „main“ поÑтоје"
+
+#: c.opt:529
+msgid "Recognize GNU-defined keywords"
+msgstr "Препознаје кључне речи које дефинише Гну"
+
+#: c.opt:533
+msgid "Generate code for GNU runtime environment"
+msgstr "Створи кôд за Гнуово извршно окружење"
+
+#: c.opt:546
+msgid "Assume normal C execution environment"
+msgstr "ПретпоÑтави нормално извршно окружење Ц-а"
+
+#: c.opt:550
+msgid "Enable support for huge objects"
+msgstr "Укључи подршку за огромне објекте"
+
+#: c.opt:554
+msgid "Export functions even if they can be inlined"
+msgstr "Извези функције чак и ако Ñе могу уткати"
+
+#: c.opt:558
+msgid "Emit implicit instantiations of inline templates"
+msgstr "Емитуј имплицитна извођења утканих шаблона"
+
+#: c.opt:562
+msgid "Emit implicit instantiations of templates"
+msgstr "Емитуј имплицитна извођења шаблона"
+
+#: c.opt:566
+msgid "Inject friend functions into enclosing namespace"
+msgstr "Убаци пријатељÑке функције у окружујући именÑки проÑтор"
+
+#: c.opt:573
+msgid "Don't warn about uses of Microsoft extensions"
+msgstr "Ðе упозоравај на употребе МајкроÑофтових проширења"
+
+#: c.opt:583
+msgid "Generate code for NeXT (Apple Mac OS X) runtime environment"
+msgstr "Створи кôд за извршно окружење ÐеКСТа (Еплов МекОС X)"
+
+#: c.opt:587
+msgid "Assume that receivers of Objective-C messages may be nil"
+msgstr "ПретпоÑтави да примаоци порука у објективном Ц-у могу бити нулти"
+
+#: c.opt:599
+msgid "Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed"
+msgstr "Стварај поÑебне методе у објективном Ц-у за уÑпоÑтављање/уништавање не-ПОД Ц++ и-променљивих, када је потребно"
+
+#: c.opt:603
+msgid "Allow fast jumps to the message dispatcher"
+msgstr "Дозволи брзе Ñкокове до отправника порука"
+
+#: c.opt:609
+msgid "Enable Objective-C exception and synchronization syntax"
+msgstr "Укључи ÑинтакÑу објективног Ц-а за изузетке и Ñинхронизацију"
+
+#: c.opt:613
+msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs"
+msgstr "Укључи Ñакупљање Ñмећа (ГЦ) у програмима у објективном Ц-у/објективном Ц++у"
+
+#: c.opt:618
+msgid "Enable Objective-C setjmp exception handling runtime"
+msgstr "Укључи извршни део објективног Ц-а за руковање setjmp изузецима"
+
+#: c.opt:622
+msgid "Recognize C++ kewords like \"compl\" and \"xor\""
+msgstr "Препознај кључне речи Ц++а као „compl“ и „xor“"
+
+#: c.opt:626
+msgid "Enable optional diagnostics"
+msgstr "Укључи опциону дијагоноÑтику"
+
+#: c.opt:633
+msgid "Look for and use PCH files even when preprocessing"
+msgstr "Тражи и кориÑти ПЦХ датотеке чак и током предобраде"
+
+#: c.opt:637
+msgid "Downgrade conformance errors to warnings"
+msgstr "Ражалуј грешке у поштовању на упозорења"
+
+#: c.opt:641
+msgid "Treat the input file as already preprocessed"
+msgstr "Сматрај улазну датотеку већ предобрађеном"
+
+#: c.opt:645
+msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime"
+msgstr "КориÑти Ñе у режиму фикÑирај-и-наÑтави за указивање да Ñе објектне датотеке могу размењивати при извршавању"
+
+#: c.opt:649
+msgid "Enable automatic template instantiation"
+msgstr "Укључи аутоматÑко извођење шаблона"
+
+#: c.opt:653
+msgid "Generate run time type descriptor information"
+msgstr "Стварај опиÑе типова при извршавању"
+
+#: c.opt:657
+msgid "Use the same size for double as for float"
+msgstr "КориÑти иÑту величину за double као за float"
+
+#: c.opt:665
+msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\""
+msgstr "Спроведи да „unsigned short“ буде подметнут за „wchar_t“"
+
+#: c.opt:669
+msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed"
+msgstr "Ðека битÑко поље буде означено када није дато ни „signed“ ни „unsigned“"
+
+#: c.opt:673
+msgid "Make \"char\" signed by default"
+msgstr "Ðека „char“ подразумевано буде означен"
+
+#: c.opt:680
+msgid "Display statistics accumulated during compilation"
+msgstr "Прикажи ÑтатиÑтику Ñрачунату током компилације"
+
+#: c.opt:687
+msgid "Distance between tab stops for column reporting"
+msgstr "Величина табулатора за пријављивање колона"
+
+#: c.opt:691
+msgid "Specify maximum template instantiation depth"
+msgstr "Одредите највећу дубину извођења шаблона"
+
+#: c.opt:698
+msgid "Do not generate thread-safe code for initializing local statics"
+msgstr "Ðе Ñтварај нитно-безбедан кôд за уÑпоÑтављање локалних Ñтатика"
+
+#: c.opt:702
+msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned"
+msgstr "Ðека битÑко поље буде неозначено када није дато ни „signed“ ни „unsigned“"
+
+#: c.opt:706
+msgid "Make \"char\" unsigned by default"
+msgstr "Ðека „char“ подразумевано буде неозначен"
+
+#: c.opt:710
+msgid "Use __cxa_atexit to register destructors"
+msgstr "КориÑти __cxa_atexit за региÑтрацију деÑтрукторâ"
+
+#: c.opt:714
+msgid "Marks all inlined methods as having hidden visibility"
+msgstr "Означи Ñкривање видљивоÑти Ñвим утканим методима"
+
+#: c.opt:718
+msgid "Discard unused virtual functions"
+msgstr "Одбаци неупотребљене виртуелне функције"
+
+#: c.opt:722
+msgid "Implement vtables using thunks"
+msgstr "Имплементирај в-табеле кориÑтећи Ñмрзеве"
+
+#: c.opt:726
+msgid "Emit common-like symbols as weak symbols"
+msgstr "Емитуј наизглед заједничке Ñимболе као Ñлабе Ñимболе"
+
+#: c.opt:730
+msgid "Convert all wide strings and character constants to character set <cset>"
+msgstr "Претвори Ñве широке ниÑке и знаковне конÑтанте у Ñкуп знакова <cset>"
+
+#: c.opt:734
+msgid "Generate a #line directive pointing at the current working directory"
+msgstr "Створи директиву #line која показује на текући радни директоријум"
+
+#: c.opt:738
+msgid "Emit cross referencing information"
+msgstr "Емитуј информације о укрштеном упућивању"
+
+#: c.opt:742
+msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode"
+msgstr "Стварај лењу потрагу клаÑа (преко objc_getClass()) за употребу у режиму Зиро-Линка"
+
+#: c.opt:746
+msgid "Dump declarations to a .decl file"
+msgstr "Попиши декларације у .decl датотеку"
+
+#: c.opt:750 c.opt:778
+msgid "Add <dir> to the end of the system include path"
+msgstr "Додај <dir> на крај ÑиÑтемÑке путање укључивања"
+
+#: c.opt:754
+msgid "Accept definition of macros in <file>"
+msgstr "Прихвати дефиниције макроа из <file>"
+
+#: c.opt:758
+msgid "Include the contents of <file> before other files"
+msgstr "Укључи Ñадржај <file> пре других датотека"
+
+#: c.opt:762
+msgid "Specify <path> as a prefix for next two options"
+msgstr "Одреди <path> као Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð·Ð° Ñледеће две опције"
+
+#: c.opt:766
+msgid "Set <dir> to be the system root directory"
+msgstr "ПоÑтави да <dir> буде корени директоријум ÑиÑтема"
+
+#: c.opt:770
+msgid "Add <dir> to the start of the system include path"
+msgstr "Додај <dir> на почетак ÑиÑтемÑке путање укључивања"
+
+#: c.opt:774
+msgid "Add <dir> to the end of the quote include path"
+msgstr "Додај <dir> на крај цитиране путање укључивања"
+
+#: c.opt:795
+msgid "Do not search standard system include directories (those specified with -isystem will still be used)"
+msgstr "Ðе тражи Ñтандардне ÑиÑтемÑке директоријуме укључивања (што је наведено помоћу -isystem ће и даље бити коришћено)"
+
+#: c.opt:799
+msgid "Do not search standard system include directories for C++"
+msgstr "Ðе тражи Ñтандардне ÑиÑтемÑке директоријуме укључивања за Ц++"
+
+#: c.opt:815
+msgid "Generate C header of platform-specific features"
+msgstr "Створи Ц заглавље Ñа оÑобинама поÑебним за платформу"
+
+#: c.opt:819
+msgid "Print a checksum of the executable for PCH validity checking, and stop"
+msgstr "ИÑпиши контролни збир извршне датотеке за проверу ПЦХа и Ñтани"
+
+#: c.opt:823
+msgid "Remap file names when including files"
+msgstr "Премапирај имена датотека при укључивању датотека"
+
+#: c.opt:827
+msgid "Conform to the ISO 1998 C++ standard"
+msgstr "Поштуј Ñтандард Ц++а ИСО 1998"
+
+#: c.opt:831 c.opt:859
+msgid "Conform to the ISO 1990 C standard"
+msgstr "Поштуј Ñтандард Ц-а ИСО 1990"
+
+#: c.opt:835 c.opt:867
+msgid "Conform to the ISO 1999 C standard"
+msgstr "Поштуј Ñтандард Ц-а ИСО 1999"
+
+#: c.opt:839
+msgid "Deprecated in favor of -std=c99"
+msgstr "Ðепрепоручљиво, боље -std=c99"
+
+#: c.opt:843
+msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
+msgstr "Поштуј Ñтандард Ц++а ИСО 1998, Ñа Гнуовим проширењима"
+
+#: c.opt:847
+msgid "Conform to the ISO 1990 C standard with GNU extensions"
+msgstr "Поштуј Ñтандард Ц-а ИСО 1990, Ñа Гнуовим проширењима"
+
+#: c.opt:851
+msgid "Conform to the ISO 1999 C standard with GNU extensions"
+msgstr "Поштуј Ñтандард Ц-а ИСО 1999, Ñа Гнуовим проширењима"
+
+#: c.opt:855
+msgid "Deprecated in favor of -std=gnu99"
+msgstr "Ðепрепоручљиво, боље -std=gnu99"
+
+#: c.opt:863
+msgid "Conform to the ISO 1990 C standard as amended in 1994"
+msgstr "Поштуј Ñтандард Ц-а ИСО 1990, Ñа допунама из 1994."
+
+#: c.opt:871
+msgid "Deprecated in favor of -std=iso9899:1999"
+msgstr "Ðепрепоручљиво, боље -std=iso9899:1999"
+
+#: c.opt:875
+msgid "Enable traditional preprocessing"
+msgstr "Укључи традиционалну предобраду"
+
+#: c.opt:879
+msgid "Support ISO C trigraphs"
+msgstr "Подржи триграфе ИСО Ц-а"
+
+#: c.opt:883
+msgid "Do not predefine system-specific and GCC-specific macros"
+msgstr "Ðе предефиниши макрое поÑебне за ÑиÑтем и ГЦЦ"
+
+#: c.opt:887
+msgid "Enable verbose output"
+msgstr "Укључи опширан излаз"
+
+#: common.opt:28
+msgid "Display this information"
+msgstr "Прикажи ову информацију"
+
+#: common.opt:32
+msgid "Set parameter <param> to value. See below for a complete list of parameters"
+msgstr "ПоÑтави параметар <param> на вредноÑÑ‚. Види ниже целокупну лиÑту параметара"
+
+#: common.opt:42
+msgid "Put global and static data smaller than <number> bytes into a special section (on some targets)"
+msgstr "Стави глобалне и Ñтатичке податке мање од <number> бајтова у поÑебан одељак (на неким циљевима)"
+
+#: common.opt:46
+msgid "Set optimization level to <number>"
+msgstr "ПоÑтави ниво оптимизације на <number>"
+
+#: common.opt:50
+msgid "Optimize for space rather than speed"
+msgstr "Оптимизуј величину пре него брзину"
+
+#: common.opt:54
+msgid "This switch is deprecated; use -Wextra instead"
+msgstr "Овај прекидач је превазиђен; кориÑтите -Wextra"
+
+#: common.opt:58
+msgid "Warn about returning structures, unions or arrays"
+msgstr "Упозори на враћање Ñтруктура, унија или низова"
+
+#: common.opt:62
+msgid "Warn about inappropriate attribute usage"
+msgstr "Упозори на неприкладну употребу атрибута"
+
+#: common.opt:66
+msgid "Warn about pointer casts which increase alignment"
+msgstr "Упозори на претапања показивача која увећавају равнање"
+
+#: common.opt:70
+msgid "Warn about uses of __attribute__((deprecated)) declarations"
+msgstr "Упозори на употребе декларација __attribute__((deprecated))"
+
+#: common.opt:74
+msgid "Warn when an optimization pass is disabled"
+msgstr "Упозори када је оптимизациони пролаз иÑкључен"
+
+#: common.opt:78
+msgid "Treat all warnings as errors"
+msgstr "Сматрај Ñва упозорења грешкама"
+
+#: common.opt:82
+msgid "Print extra (possibly unwanted) warnings"
+msgstr "ИÑпиÑуј додатна (могуће нежељена) упозорења"
+
+#: common.opt:86
+msgid "Exit on the first error occurred"
+msgstr "Изађи код прве ÑуÑретнуте грешке"
+
+#: common.opt:90
+msgid "Warn when an inlined function cannot be inlined"
+msgstr "Упозори када Ñе уткана функција не може уткати"
+
+#: common.opt:94
+msgid "Warn if an object is larger than <number> bytes"
+msgstr "Упозори ако је објекат већи од <number> бајтова"
+
+#: common.opt:98
+msgid "Warn if the loop cannot be optimized due to nontrivial assumptions."
+msgstr "Упозори ако Ñе петља не може оптимизовати уÑлед нетривијалних претпоÑтавки."
+
+#: common.opt:102
+msgid "Warn about functions which might be candidates for __attribute__((noreturn))"
+msgstr "Упозори на функције које могу бити кандидати за __attribute__((noreturn))"
+
+#: common.opt:106
+msgid "Warn when the packed attribute has no effect on struct layout"
+msgstr "Упозори када атрибут паковања нема ефекта на раÑпоред Ñтруктуре"
+
+#: common.opt:110
+msgid "Warn when padding is required to align structure members"
+msgstr "Упозори када Ñе захтева уметање ради равнања чланова Ñтруктуре"
+
+#: common.opt:114
+msgid "Warn when one local variable shadows another"
+msgstr "Упозори када једна локална променљива заклања другу"
+
+#: common.opt:118
+msgid "Warn when not issuing stack smashing protection for some reason"
+msgstr "Упозори када Ñе из неког разлога не издаје заштита од разбијања Ñтека"
+
+#: common.opt:122 common.opt:126
+msgid "Warn about code which might break strict aliasing rules"
+msgstr "Упозори на кôд који може прекршити правила Ñтроге дволичноÑти"
+
+#: common.opt:130
+msgid "Warn about enumerated switches, with no default, missing a case"
+msgstr "Упозори на набројиве прекидаче без подразумеване гране, којима недоÑтаје Ñлучај"
+
+#: common.opt:134
+msgid "Warn about enumerated switches missing a \"default:\" statement"
+msgstr "Упозори на набројиве прекидаче којима недоÑтаје наредба „default:“"
+
+#: common.opt:138
+msgid "Warn about all enumerated switches missing a specific case"
+msgstr "Упозори на Ñве набројиве прекидаче којима недоÑтаје одређени Ñлучај"
+
+#: common.opt:146
+msgid "Warn about uninitialized automatic variables"
+msgstr "Упозори на неуÑпоÑтављене аутоматÑке променљиве"
+
+#: common.opt:150
+msgid "Warn about code that will never be executed"
+msgstr "Упозори на кôд који Ñе никад не извршава"
+
+#: common.opt:154
+msgid "Enable all -Wunused- warnings"
+msgstr "Укључи Ñва упозорења -Wunused-*"
+
+#: common.opt:158
+msgid "Warn when a function is unused"
+msgstr "Упозори када Ñе функција не кориÑти"
+
+#: common.opt:166
+msgid "Warn when a function parameter is unused"
+msgstr "Упозори када Ñе параметар функције не кориÑти"
+
+#: common.opt:170
+msgid "Warn when an expression value is unused"
+msgstr "Упозори када Ñе вредноÑÑ‚ израза не кориÑти"
+
+#: common.opt:174
+msgid "Warn when a variable is unused"
+msgstr "Упозори када Ñе променљива не кориÑти"
+
+#: common.opt:178
+msgid "Warn when a register variable is declared volatile"
+msgstr "Упозори када Ñе региÑтарÑка променљива проглаÑи непоÑтојаном"
+
+#: common.opt:182
+msgid "Emit declaration information into <file>"
+msgstr "Емитуј податке о декларацијама у <file>"
+
+#: common.opt:195
+msgid "Enable dumps from specific passes of the compiler"
+msgstr "Укључи попиÑе из одређених пролаза компилатора"
+
+#: common.opt:199
+msgid "Set the file basename to be used for dumps"
+msgstr "ПоÑтави оÑновно име датотека за попиÑе"
+
+#: common.opt:217
+msgid "Align the start of functions"
+msgstr "Поравнај почетке функција"
+
+#: common.opt:224
+msgid "Align labels which are only reached by jumping"
+msgstr "Поравнај етикете које Ñе доÑтижу једино Ñкакањем"
+
+#: common.opt:231
+msgid "Align all labels"
+msgstr "Поравнај Ñве етикете"
+
+#: common.opt:238
+msgid "Align the start of loops"
+msgstr "Поравнај почетке петљи"
+
+#: common.opt:251
+msgid "Specify that arguments may alias each other and globals"
+msgstr "ПретпоÑтави да аргументи могу бити дволични, међуÑобно и Ñа глобалнима"
+
+#: common.opt:255
+msgid "Assume arguments may alias globals but not each other"
+msgstr "ПретпоÑтави да аргументи могу бити дволични Ñа глобалнима, али не и међуÑобно"
+
+#: common.opt:259
+msgid "Assume arguments alias neither each other nor globals"
+msgstr "ПретпоÑтави да аргументи не могу бити дволични, ни међуÑобно ни Ñа глобалнима"
+
+#: common.opt:263
+msgid "Generate unwind tables that are exact at each instruction boundary"
+msgstr "Стварај табеле одмотавања које Ñу тачне на Ñвакој граници инÑтрукција"
+
+#: common.opt:271
+msgid "Generate code to check bounds before indexing arrays"
+msgstr "Стварај кôд за проверу граница пре индекÑирања низова"
+
+#: common.opt:275
+msgid "Replace add, compare, branch with branch on count register"
+msgstr "Замени додавање-упоређивање-гранање региÑтром за гранање-на-збир"
+
+#: common.opt:279
+msgid "Use profiling information for branch probabilities"
+msgstr "КориÑти профилишуће информације за вероватноће гранања"
+
+#: common.opt:283
+msgid "Perform branch target load optimization before prologue / epilogue threading"
+msgstr "Оптимизуј учитавање циља гранања пре плетења пролога или епилога"
+
+#: common.opt:287
+msgid "Perform branch target load optimization after prologue / epilogue threading"
+msgstr "Оптимизуј учитавање циља гранања поÑле плетења пролога или епилога"
+
+#: common.opt:291
+msgid "Restrict target load migration not to re-use registers in any basic block"
+msgstr "Спречи миграцију учитавања циља да кориÑти иÑте региÑтре у било којем оÑновном блоку"
+
+#: common.opt:295
+msgid "Mark <register> as being preserved across functions"
+msgstr "Означи да Ñе <register> очувава преко функција"
+
+#: common.opt:299
+msgid "Mark <register> as being corrupted by function calls"
+msgstr "Означи да Ñе <register> квари позивима функција"
+
+#: common.opt:306
+msgid "Save registers around function calls"
+msgstr "Сачувавај региÑтре око позива функција"
+
+#: common.opt:310
+msgid "Do not put uninitialized globals in the common section"
+msgstr "Ðе Ñтављај неуÑпоÑтављене глобалне у заједнички одељак"
+
+#: common.opt:314
+msgid "Perform a register copy-propagation optimization pass"
+msgstr "Изврши оптимизацију за раÑпроÑтирање копирања преко региÑтара"
+
+#: common.opt:318
+msgid "Perform cross-jumping optimization"
+msgstr "Изврши оптимизацију за укрштање Ñкокова"
+
+#: common.opt:322
+msgid "When running CSE, follow jumps to their targets"
+msgstr "При извршавању ЦСЕа прати Ñкокове до њихових циљева"
+
+#: common.opt:326
+msgid "When running CSE, follow conditional jumps"
+msgstr "При извршавању ЦСЕа прати уÑловне Ñкокове"
+
+#: common.opt:330
+msgid "Omit range reduction step when performing complex division"
+msgstr "ИзоÑтави корак редукције опÑега при комплекÑним дељењима"
+
+#: common.opt:334
+msgid "Place data items into their own section"
+msgstr "Стављај податке у њихов ÑопÑтвени одељак"
+
+#: common.opt:340
+msgid "Defer popping functions args from stack until later"
+msgstr "Одложи за каÑније подизање аргумената Ñа Ñтека"
+
+#: common.opt:344
+msgid "Attempt to fill delay slots of branch instructions"
+msgstr "Покушај да иÑпуниш жлебове заÑтоја за инÑтрукције гранања"
+
+#: common.opt:348
+msgid "Delete useless null pointer checks"
+msgstr "Обриши беÑкориÑне провере нултог показивача"
+
+#: common.opt:352
+msgid "How often to emit source location at the beginning of line-wrapped diagnostics"
+msgstr "Колико чеÑто емитовати локацију у извору на почетку дијагноÑтике преломљене у више линија"
+
+#: common.opt:356
+msgid "Amend appropriate diagnostic messages with the command line option that controls them"
+msgstr "Допуни одговарајуће дијагноÑтичке поруке опцијом командне линије које их контролишу"
+
+#: common.opt:360
+msgid "Dump various compiler internals to a file"
+msgstr "Попиши разне унутрашње Ñтвари компилатора у датотеку"
+
+#: common.opt:364
+msgid "Suppress output of instruction numbers and line number notes in debugging dumps"
+msgstr "Сузбиј иÑÐ¿Ð¸Ñ Ð±Ñ€Ð¾Ñ˜ÐµÐ²Ð° инÑтрукција и линија у иÑправљачким попиÑима"
+
+#: common.opt:368
+msgid "Perform early inlining"
+msgstr "Изврши рано уткивање"
+
+#: common.opt:372
+msgid "Perform DWARF2 duplicate elimination"
+msgstr "Изврши елиминацију дупликата ДВÐРФ 2"
+
+#: common.opt:376 common.opt:380
+msgid "Perform unused type elimination in debug info"
+msgstr "Елиминиши неупотребље типове у иÑправљачким информацијама"
+
+#: common.opt:384
+msgid "Enable exception handling"
+msgstr "Укључи руковање изузецима"
+
+#: common.opt:388
+msgid "Perform a number of minor, expensive optimizations"
+msgstr "Изврши и неке мање, а Ñкупе оптимизације"
+
+#: common.opt:395
+msgid "Assume no NaNs or infinities are generated"
+msgstr "ПретпоÑтави да Ñе не Ñтварају ни ÐаÐи ни беÑконачноÑти"
+
+#: common.opt:399
+msgid "Mark <register> as being unavailable to the compiler"
+msgstr "Означи да <register> није доÑтупан компилатору"
+
+#: common.opt:403
+msgid "Don't allocate floats and doubles in extended-precision registers"
+msgstr "Ðе резервиши једноÑтруке и двоÑтруке у региÑтрима проширене тачноÑти"
+
+#: common.opt:409
+msgid "Copy memory address constants into registers before use"
+msgstr "Копирај конÑтантне меморијÑке адреÑе у региÑтре пре употребе"
+
+#: common.opt:415
+msgid "Copy memory operands into registers before use"
+msgstr "Копирај меморијÑке операнде у региÑтре пре употребе"
+
+#: common.opt:422
+msgid "Allow function addresses to be held in registers"
+msgstr "Дозволи држање адреÑа функција у региÑтрима"
+
+#: common.opt:426
+msgid "Place each function into its own section"
+msgstr "Стави Ñваку функцију у њен ÑопÑтвени одељак"
+
+#: common.opt:430
+msgid "Perform global common subexpression elimination"
+msgstr "Елиминиши глобалне заједничке подизразе"
+
+#: common.opt:434
+msgid "Perform enhanced load motion during global common subexpression elimination"
+msgstr "Изврши побољшано кретање учитавања током елиминације глобалних заједничких подизраза"
+
+#: common.opt:438
+msgid "Perform store motion after global common subexpression elimination"
+msgstr "Изврши кретање Ñкладиштења током елиминације глобалних заједничких подизраза"
+
+#: common.opt:442
+msgid "Perform redundant load after store elimination in global common subexpression"
+msgstr "Елиминиши непотребно учитавање поÑле Ñкладиштења у глобалном заједничком подизразу"
+
+#: common.opt:447
+msgid "Perform global common subexpression elimination after register allocation"
+msgstr "Елиминиши глобалне заједничке подизразе поÑле резервиÑања региÑтара"
+
+#: common.opt:452
+msgid "Enable guessing of branch probabilities"
+msgstr "Укључи погађање вероватноћа гранања"
+
+#: common.opt:460
+msgid "Process #ident directives"
+msgstr "Обради директиве #ident"
+
+#: common.opt:464
+msgid "Perform conversion of conditional jumps to branchless equivalents"
+msgstr "Претвори уÑловне Ñкокове у безгране еквиваленте"
+
+#: common.opt:468
+msgid "Perform conversion of conditional jumps to conditional execution"
+msgstr "Претвори уÑловне Ñкокове у уÑловно извршавање"
+
+#: common.opt:476
+msgid "Do not generate .size directives"
+msgstr "Ðе Ñтварај директиве .size"
+
+#: common.opt:485
+msgid "Pay attention to the \"inline\" keyword"
+msgstr "Обраћај пажњу на кључну реч „inline“"
+
+#: common.opt:489
+msgid "Integrate simple functions into their callers"
+msgstr "Интегриши једноÑтавне функције у њихове позиваче"
+
+#: common.opt:493
+msgid "Integrate functions called once into their callers"
+msgstr "Интегриши функције једном позване у њихове позиваче"
+
+#: common.opt:500
+msgid "Limit the size of inlined functions to <number>"
+msgstr "Ограничи број утканих функција на <number>"
+
+#: common.opt:504
+msgid "Instrument function entry and exit with profiling calls"
+msgstr "Опреми улаз и излаз функција профилишућим позивима"
+
+#: common.opt:508
+msgid "Perform Interprocedural constant propagation"
+msgstr "Изврши међупроцедурално раÑпроÑтирање конÑтанти"
+
+#: common.opt:512
+msgid "Discover pure and const functions"
+msgstr "Откривај чиÑте и конÑтантне функције"
+
+#: common.opt:516
+msgid "Discover readonly and non addressable static variables"
+msgstr "Откривај Ñтатичке променљиве које Ñу Ñамо за читање и не могу Ñе адреÑирати"
+
+#: common.opt:520
+msgid "Type based escape and alias analysis"
+msgstr "Ðнализа бегова и дволичноÑти на оÑнову типова"
+
+#: common.opt:524
+msgid "Optimize induction variables on trees"
+msgstr "Оптимизуј индукционе променљиве на Ñтаблима"
+
+#: common.opt:528
+msgid "Use jump tables for sufficiently large switch statements"
+msgstr "КориÑти табеле Ñкокова за довољно велике наредбе прекидача"
+
+#: common.opt:532
+msgid "Generate code for functions even if they are fully inlined"
+msgstr "Стварај кôд за функције чак и ако Ñу потпуно уткане"
+
+#: common.opt:536
+msgid "Emit static const variables even if they are not used"
+msgstr "Емитуј Ñтатичке конÑтантне променљиве чак и ако Ñе не кориÑте"
+
+#: common.opt:540
+msgid "Give external symbols a leading underscore"
+msgstr "Додај Ñпољашњим Ñимболима водећу подвлаку"
+
+#: common.opt:544
+msgid "Perform loop optimizations"
+msgstr "Оптимизуј петље"
+
+#: common.opt:548
+msgid "Perform loop optimizations using the new loop optimizer"
+msgstr "Оптимизуј петље кориÑтећи нови оптимизатор петљи"
+
+#: common.opt:552
+msgid "Set errno after built-in math functions"
+msgstr "ПоÑтави errno поÑле уграђених математичких фја"
+
+#: common.opt:556
+msgid "Report on permanent memory allocation"
+msgstr "Извештавај о трајном резервиÑању меморије"
+
+#: common.opt:563
+msgid "Attempt to merge identical constants and constant variables"
+msgstr "Покушај да Ñтопиш иÑтоветне конÑтанте и конÑтантне променљиве"
+
+#: common.opt:567
+msgid "Attempt to merge identical constants across compilation units"
+msgstr "Покушај да Ñтопиш иÑтоветне конÑтанте преко компилационих јединица"
+
+#: common.opt:571
+msgid "Limit diagnostics to <number> characters per line. 0 suppresses line-wrapping"
+msgstr "Ограничи дијагноÑтику на <number> знакова по линији. 0 Ñузбија преламање линија"
+
+#: common.opt:575
+msgid "Perform SMS based modulo scheduling before the first scheduling pass"
+msgstr "Изврши окретно модуло-раÑпоређивање на оÑнову СМСа пре првог раÑпоређивачког пролаза"
+
+#: common.opt:579
+msgid "Move loop invariant computations out of loops"
+msgstr "ПремеÑти инваријантна рачунања изван петљи"
+
+#: common.opt:583
+msgid "Add mudflap bounds-checking instrumentation for single-threaded program"
+msgstr "Додај блатобранÑку проверу граница за једнонитни програм"
+
+#: common.opt:587
+msgid "Add mudflap bounds-checking instrumentation for multi-threaded program"
+msgstr "Додај блатобранÑку проверу граница за вишенитни програм"
+
+#: common.opt:591
+msgid "Ignore read operations when inserting mudflap instrumentation"
+msgstr "Игнориши операције читања при опремању блатобраном"
+
+#: common.opt:595
+msgid "Enable/Disable the traditional scheduling in loops that already passed modulo scheduling"
+msgstr "Укључи/иÑкључи традиционално раÑпоређивање у петљама које Ñу већ прошле кроз модуло-раÑпоређивање"
+
+#: common.opt:599
+msgid "Support synchronous non-call exceptions"
+msgstr "Подржи Ñинхроне непозивне изузетке"
+
+#: common.opt:603
+msgid "When possible do not generate stack frames"
+msgstr "Када је могуће не Ñтварај оквире Ñтека"
+
+#: common.opt:607
+msgid "Do the full register move optimization pass"
+msgstr "Изврши потпуни пролаз оптимизације померањем региÑтара"
+
+#: common.opt:611
+msgid "Optimize sibling and tail recursive calls"
+msgstr "Оптимизуј Ñродничке и репно рекурзивне позиве"
+
+#: common.opt:615
+msgid "Pack structure members together without holes"
+msgstr "Пакуј чланове Ñтруктура заједно без рупа"
+
+#: common.opt:619
+msgid "Set initial maximum structure member alignment"
+msgstr "ПоÑтави почетно највеће равнање чланова Ñтруктуре"
+
+#: common.opt:623
+msgid "Return small aggregates in memory, not registers"
+msgstr "Враћај мале Ñкупине у меморији, не у региÑтрима"
+
+#: common.opt:627
+msgid "Perform loop peeling"
+msgstr "Изврши љушћење петљи"
+
+#: common.opt:631
+msgid "Enable machine specific peephole optimizations"
+msgstr "Укључи машинÑки-завиÑне окнаÑте оптимизације"
+
+#: common.opt:635
+msgid "Enable an RTL peephole pass before sched2"
+msgstr "Укључи окнаÑти РТЛ пролаз пре sched2"
+
+#: common.opt:639
+msgid "Generate position-independent code if possible (large mode)"
+msgstr "Стварај положајно-незавиÑни кôд ако је могуће (велики режим)"
+
+#: common.opt:643
+msgid "Generate position-independent code for executables if possible (large mode)"
+msgstr "Стварај положајно-незавиÑни кôд за извршне ако је могуће (велики режим)"
+
+#: common.opt:647
+msgid "Generate position-independent code if possible (small mode)"
+msgstr "Стварај положајно-незавиÑни кôд ако је могуће (мали режим)"
+
+#: common.opt:651
+msgid "Generate position-independent code for executables if possible (small mode)"
+msgstr "Стварај положајно-незавиÑни кôд за извршне ако је могуће (мали режим)"
+
+#: common.opt:655
+msgid "Generate prefetch instructions, if available, for arrays in loops"
+msgstr "Стварај инÑтрукције предохватања, ако Ñу доÑтупне, за низове у петљама"
+
+#: common.opt:659
+msgid "Enable basic program profiling code"
+msgstr "Укључи оÑновни кôд за профилиÑање програма"
+
+#: common.opt:663
+msgid "Insert arc-based program profiling code"
+msgstr "Убаци кôд за профилиÑање програма на оÑнову лукова"
+
+#: common.opt:667
+msgid "Enable common options for generating profile info for profile feedback directed optimizations"
+msgstr "Укључи уобичајене опције за Ñтварање профилних информација, ради оптимизација на оÑнову одзива профилиÑања"
+
+#: common.opt:671
+msgid "Enable common options for performing profile feedback directed optimizations"
+msgstr "Укључи уобичајене опције за оптимизације на оÑнову одзива профилиÑања"
+
+#: common.opt:675
+msgid "Insert code to profile values of expressions"
+msgstr "Умећи кôд за профилиÑање вредноÑти израза"
+
+#: common.opt:682
+msgid "Make compile reproducible using <string>"
+msgstr "Учини компилацију поновљивом кориÑтећи <string>"
+
+#: common.opt:686
+msgid "Return small aggregates in registers"
+msgstr "Враћај мале Ñкупине у региÑтрима"
+
+#: common.opt:690
+msgid "Enables a register move optimization"
+msgstr "Укључи оптимизацију померањем региÑтара"
+
+#: common.opt:694
+msgid "Perform a register renaming optimization pass"
+msgstr "Изврши пролаз оптимизације преименовањем региÑтара"
+
+#: common.opt:698
+msgid "Reorder basic blocks to improve code placement"
+msgstr "ПрераÑпореди оÑновне блокове ради побољшања поÑтављења кôда"
+
+#: common.opt:702
+msgid "Reorder basic blocks and partition into hot and cold sections"
+msgstr "ПрераÑпореди оÑновне блокове и подели на вруће и хладне одељке"
+
+#: common.opt:706
+msgid "Reorder functions to improve code placement"
+msgstr "ПрераÑпореди функције ради побољшања поÑтављења кôда"
+
+#: common.opt:710
+msgid "Add a common subexpression elimination pass after loop optimizations"
+msgstr "Додај пролаз елиминације заједничких подизраза поÑле оптимизација петље"
+
+#: common.opt:714
+msgid "Run the loop optimizer twice"
+msgstr "Изврши оптимизатор петљи двапут"
+
+#: common.opt:718
+msgid "Disable optimizations that assume default FP rounding behavior"
+msgstr "ИÑкључи оптимизације које претпоÑтављају подразумевано понашање ФП заокруживања"
+
+#: common.opt:722
+msgid "Enable scheduling across basic blocks"
+msgstr "Укључи раÑпоређивање преко оÑновних блокова"
+
+#: common.opt:726
+msgid "Allow speculative motion of non-loads"
+msgstr "Дозволи Ñпекулативно кретање не-учитавања"
+
+#: common.opt:730
+msgid "Allow speculative motion of some loads"
+msgstr "Дозволи Ñпекулативно кретање неких учитавања"
+
+#: common.opt:734
+msgid "Allow speculative motion of more loads"
+msgstr "Дозволи Ñпекулативно кретање више учитавања"
+
+#: common.opt:738
+msgid "Set the verbosity level of the scheduler"
+msgstr "ПоÑтави ниво опширноÑти раÑпоређивача"
+
+#: common.opt:742
+msgid "If scheduling post reload, do superblock scheduling"
+msgstr "Ðко Ñе раÑпоређује поÑле поновљеног учитавања, изврши ÑуперблоковÑко раÑпоређивање"
+
+#: common.opt:746
+msgid "If scheduling post reload, do trace scheduling"
+msgstr "Ðко Ñе раÑпоређује поÑле поновљеног учитавања, изврши раÑпоређивање трага"
+
+#: common.opt:750
+msgid "Reschedule instructions before register allocation"
+msgstr "ПрераÑпореди инÑтрукције пре резервиÑања региÑтара"
+
+#: common.opt:754
+msgid "Reschedule instructions after register allocation"
+msgstr "ПрераÑпореди инÑтрукције поÑле резервиÑања региÑтара"
+
+#: common.opt:760
+msgid "Allow premature scheduling of queued insns"
+msgstr "Дозволи прерано раÑпоређивање ија у реду"
+
+#: common.opt:764
+msgid "Set number of queued insns that can be prematurely scheduled"
+msgstr "Број ија у реду које Ñе могу прерано раÑпоређивати"
+
+#: common.opt:772 common.opt:776
+msgid "Set dependence distance checking in premature scheduling of queued insns"
+msgstr "Провера раÑтојања завиÑноÑти у прераном раÑпоређивању ија у реду"
+
+#: common.opt:780
+msgid "Mark data as shared rather than private"
+msgstr "Означи податке као дељене пре него као приватне"
+
+#: common.opt:784
+msgid "Show column numbers in diagnostics, when available. Default on"
+msgstr "Приказуј бројеве колона у дијагноÑтици, ако Ñу доÑтупни. Подразумевано укључено."
+
+#: common.opt:788
+msgid "Disable optimizations observable by IEEE signaling NaNs"
+msgstr "ИÑкључи оптимизације приметне при ИЕЕЕ издавању ÐаÐа"
+
+#: common.opt:792
+msgid "Convert floating point constants to single precision constants"
+msgstr "Претвори конÑтанте у покретном зарезу у једноÑтруку прецизноÑÑ‚"
+
+#: common.opt:796
+msgid "Split lifetimes of induction variables when loops are unrolled"
+msgstr "Подели времена живота индукционих променљивих када Ñе петље одмотавају"
+
+#: common.opt:800
+msgid "Apply variable expansion when loops are unrolled"
+msgstr "Примени ширење променљивих када Ñе петље одмотавају"
+
+#: common.opt:806
+msgid "Insert stack checking code into the program"
+msgstr "Уметни кôд за проверу Ñтека у програм"
+
+#: common.opt:813
+msgid "Trap if the stack goes past <register>"
+msgstr "Хватај ако Ñтек прође поред <register>"
+
+#: common.opt:817
+msgid "Trap if the stack goes past symbol <name>"
+msgstr "Хватај ако Ñтек прође поред Ñимбола <name>"
+
+#: common.opt:821
+msgid "Use propolice as a stack protection method"
+msgstr "КориÑти propolice као метод заштите Ñтека"
+
+#: common.opt:825
+msgid "Use a stack protection method for every function"
+msgstr "КориÑти метод заштите Ñтека за Ñваку функцију"
+
+#: common.opt:829
+msgid "Perform strength reduction optimizations"
+msgstr "Изврши оптимизације Ñмањења Ñнаге"
+
+#: common.opt:837
+msgid "Assume strict aliasing rules apply"
+msgstr "ПретпоÑтави правила Ñтроге дволичноÑти"
+
+#: common.opt:841
+msgid "Check for syntax errors, then stop"
+msgstr "Провери ÑинтакÑне грешке, па Ñтани"
+
+#: common.opt:845
+msgid "Create data files needed by \"gcov\""
+msgstr "Створи датотеке потребне за „gcov“"
+
+#: common.opt:849
+msgid "Perform jump threading optimizations"
+msgstr "Изврши оптимизације плетења Ñкокова"
+
+#: common.opt:853
+msgid "Report the time taken by each compiler pass"
+msgstr "ИзвеÑти о времену потрошеном у Ñваком компилаторÑком пролазу"
+
+#: common.opt:857
+msgid "Set the default thread-local storage code generation model"
+msgstr "Подразумевани модел Ñтварања кôда за нитно-локално Ñкладиштење"
+
+#: common.opt:861
+msgid "Perform superblock formation via tail duplication"
+msgstr "Формирај Ñуперблокове преко умножавања репа"
+
+#: common.opt:868
+msgid "Assume floating-point operations can trap"
+msgstr "ПретпоÑтави да операције у покретном зарезу могу да хватају"
+
+#: common.opt:872
+msgid "Trap for signed overflow in addition, subtraction and multiplication"
+msgstr "Хватај преливање означених при додавању, одузимању и множењу"
+
+#: common.opt:876
+msgid "Enable SSA-CCP optimization on trees"
+msgstr "Укључи ССÐ-ЦЦП оптимизацију над Ñтаблима"
+
+#: common.opt:880
+msgid "Enable SSA-CCP optimization for stores and loads"
+msgstr "Укључи ССÐ-ЦЦП оптимизацију за Ñкладиштења и учитавања"
+
+#: common.opt:884
+msgid "Enable loop header copying on trees"
+msgstr "Укључи копирање заглавља петље на Ñтаблима"
+
+#: common.opt:888
+msgid "Coalesce memory temporaries in the SSA->normal pass"
+msgstr "Сједини меморијÑке привремене у пролазу ССÐ->нормално"
+
+#: common.opt:892
+msgid "Replace SSA temporaries with better names in copies"
+msgstr "Смени ССРпривремене бољим именима у копијама"
+
+#: common.opt:896
+msgid "Enable copy propagation on trees"
+msgstr "Укључи раÑпроÑтирање копирања на Ñтаблима"
+
+#: common.opt:900
+msgid "Enable copy propagation for stores and loads"
+msgstr "Укључи раÑпроÑтирање копирања за Ñкладиштења и учитавања"
+
+#: common.opt:904
+msgid "Enable SSA dead code elimination optimization on trees"
+msgstr "Укључи ССРоптимизацију елиминације мртвог кôда на Ñтаблима"
+
+#: common.opt:908
+msgid "Enable dominator optimizations"
+msgstr "Укључи доминаторÑке оптимизације"
+
+#: common.opt:912
+msgid "Enable dead store elimination"
+msgstr "Укључи елиминацију мртвих Ñкладиштења"
+
+#: common.opt:916
+msgid "Enable Full Redundancy Elimination (FRE) on trees"
+msgstr "Укључи пуну елиминацију ÑувишноÑти (ФРЕ) на Ñтаблима"
+
+#: common.opt:920
+msgid "Enable loop invariant motion on trees"
+msgstr "Укључи кретање инваријанти петље на Ñтаблима"
+
+#: common.opt:924
+msgid "Enable linear loop transforms on trees"
+msgstr "Укључи линеарне транÑформације петљи на Ñтаблима"
+
+#: common.opt:928
+msgid "Create canonical induction variables in loops"
+msgstr "Стварај каноничке индукционе променљиве у петљама"
+
+#: common.opt:932
+msgid "Enable loop optimizations on tree level"
+msgstr "Укључи оптимизације петљи на нивоу Ñтабла"
+
+#: common.opt:936
+msgid "Enable SSA-PRE optimization on trees"
+msgstr "Укључи ССÐ-ПРЕ оптимизацију на Ñтаблима"
+
+#: common.opt:940
+msgid "Perform structural alias analysis"
+msgstr "Изврши анализу Ñтруктурних дволичноÑти"
+
+#: common.opt:944
+msgid "Enable SSA code sinking on trees"
+msgstr "Укључи ССРпотапање кôда на Ñтаблима"
+
+#: common.opt:948
+msgid "Perform scalar replacement of aggregates"
+msgstr "Изврши Ñкаларну замену Ñкупина"
+
+#: common.opt:952
+msgid "Replace temporary expressions in the SSA->normal pass"
+msgstr "Замени привремене изразе у пролазу ССÐ->нормално"
+
+#: common.opt:956
+msgid "Perform live range splitting during the SSA->normal pass"
+msgstr "Изврши поделу опÑега уживо током пролаза ССÐ->нормално"
+
+#: common.opt:960
+msgid "Perform Value Range Propagation on trees"
+msgstr "Изврши раÑпроÑтирање опÑега вредноÑти на Ñтаблима"
+
+#: common.opt:964
+msgid "Compile whole compilation unit at a time"
+msgstr "Компилуј целу компилациону јединицу у једном тренутку"
+
+#: common.opt:968
+msgid "Perform loop unrolling when iteration count is known"
+msgstr "Одмотај петљу када Ñе зна број итерација"
+
+#: common.opt:972
+msgid "Perform loop unrolling for all loops"
+msgstr "Одмотај Ñве петље"
+
+#: common.opt:979
+msgid "Allow loop optimizations to assume that the loops behave in normal way"
+msgstr "Дозволи да оптимизације петље претпоÑтаве да Ñе петље нормално понашају"
+
+#: common.opt:987
+msgid "Allow math optimizations that may violate IEEE or ISO standards"
+msgstr "Дозволи математичке оптимизације које могу прекршити ИЕЕЕ или ИСО Ñтандарде"
+
+#: common.opt:991
+msgid "Perform loop unswitching"
+msgstr "Изврши одуÑловљавање петљи"
+
+#: common.opt:995
+msgid "Just generate unwind tables for exception handling"
+msgstr "Само Ñтвори табеле одмотавања за руковање изузецима"
+
+#: common.opt:999
+msgid "Perform variable tracking"
+msgstr "Изврши праћење променљивих"
+
+#: common.opt:1003
+msgid "Enable loop vectorization on trees"
+msgstr "Укључи векторизацију петљи на Ñтаблима"
+
+#: common.opt:1007
+msgid "Enable loop versioning when doing loop vectorization on trees"
+msgstr "Укључи верзиониÑање петље при векторизацији на Ñтаблима"
+
+#: common.opt:1011
+msgid "Set the verbosity level of the vectorizer"
+msgstr "ПоÑтави ниво опширноÑти векторизатора"
+
+#: common.opt:1021
+msgid "Add extra commentary to assembler output"
+msgstr "Додај допунÑке коментаре у иÑпиÑу аÑемблера"
+
+#: common.opt:1025
+msgid "Set the default symbol visibility"
+msgstr "ПоÑтави подразумевану видљивоÑÑ‚ Ñимбола"
+
+#: common.opt:1030
+msgid "Use expression value profiles in optimizations"
+msgstr "КориÑти профиле вредноÑти израза у оптимизацијама"
+
+#: common.opt:1034
+msgid "Construct webs and split unrelated uses of single variable"
+msgstr "КонÑтруиши мреже и подели неповезане употребе једне променљиве"
+
+#: common.opt:1038
+msgid "Perform whole program optimizations"
+msgstr "Изврши оптимизације целог програма"
+
+#: common.opt:1042
+msgid "Assume signed arithmetic overflow wraps around"
+msgstr "ПретпоÑтави да Ñе преливање означене аритметике омотава"
+
+#: common.opt:1046
+msgid "Put zero initialized data in the bss section"
+msgstr "Стави податке уÑпоÑтављене на нулу у одељак bss"
+
+#: common.opt:1050
+msgid "Generate debug information in default format"
+msgstr "Стварај иÑправљачке информације у подразумеваном формату"
+
+#: common.opt:1054
+msgid "Generate debug information in COFF format"
+msgstr "Стварај иÑправљачке информације у формату КОФФа"
+
+#: common.opt:1058
+msgid "Generate debug information in DWARF v2 format"
+msgstr "Стварај иÑправљачке информације у формату ДВÐРФа 2"
+
+#: common.opt:1062
+msgid "Generate debug information in default extended format"
+msgstr "Стварај иÑправљачке информације у подразумеваном проширеном формату"
+
+#: common.opt:1066
+msgid "Generate debug information in STABS format"
+msgstr "Стварај иÑправљачке информације у формату СТÐБСа"
+
+#: common.opt:1070
+msgid "Generate debug information in extended STABS format"
+msgstr "Стварај иÑправљачке информације у проширеном формату СТÐБСа"
+
+#: common.opt:1074
+msgid "Generate debug information in VMS format"
+msgstr "Стварај иÑправљачке информације у формату ВМСа"
+
+#: common.opt:1078
+msgid "Generate debug information in XCOFF format"
+msgstr "Стварај иÑправљачке информације у формату ИкÑКОФФа"
+
+#: common.opt:1082
+msgid "Generate debug information in extended XCOFF format"
+msgstr "Стварај иÑправљачке информације у проширеном формату ИкÑКОФФа"
+
+#: common.opt:1086
+msgid "Place output into <file>"
+msgstr "Стави излаз у <file>"
+
+#: common.opt:1090
+msgid "Enable function profiling"
+msgstr "Укључи профилиÑање функција"
+
+#: common.opt:1094
+msgid "Issue warnings needed for strict compliance to the standard"
+msgstr "Издај упозорења потребна за Ñтрого поштовање Ñтандарда"
+
+#: common.opt:1098
+msgid "Like -pedantic but issue them as errors"
+msgstr "Као -pedantic али их издај као грешке"
+
+#: common.opt:1102
+msgid "Do not display functions compiled or elapsed time"
+msgstr "Ðе приказуј компиловане функције или протекло време"
+
+#: common.opt:1106
+msgid "Display the compiler's version"
+msgstr "Прикажи верзију компилатора"
+
+#: common.opt:1110
+msgid "Suppress warnings"
+msgstr "Сузбиј упозорења"
+
+#: attribs.c:175
+#, gcc-internal-format
+msgid "%qs attribute directive ignored"
+msgstr "атрибутÑка директива %qs игнориÑана"
+
+#: attribs.c:183
+#, gcc-internal-format
+msgid "wrong number of arguments specified for %qs attribute"
+msgstr "погрешан број аргумената наведне за атрибут %qs"
+
+#: attribs.c:200
+#, gcc-internal-format
+msgid "%qs attribute does not apply to types"
+msgstr "атрибут %qs није примењив на типове"
+
+#: attribs.c:247
+#, gcc-internal-format
+msgid "%qs attribute only applies to function types"
+msgstr "атрибут %qs је примењив Ñамо на функцијÑке типове"
+
+#: bb-reorder.c:1872
+#, gcc-internal-format
+msgid "multiple hot/cold transitions found (bb %i)"
+msgstr "вишеÑтруки хладни/врући прелази нађени (об. %i)"
+
+#: bt-load.c:1504
+#, gcc-internal-format
+msgid "branch target register load optimization is not intended to be run twice"
+msgstr "оптимизацију учитавања циља гранања у региÑтар не треба покретати двапут"
+
+#: builtins.c:389
+#, gcc-internal-format
+msgid "offset outside bounds of constant string"
+msgstr "померај ван граница конÑтантне ниÑке"
+
+#: builtins.c:989
+#, gcc-internal-format
+msgid "second argument to %<__builtin_prefetch%> must be a constant"
+msgstr "други аргумент за %<__builtin_prefetch%> мора бити конÑтанта"
+
+#: builtins.c:996
+#, gcc-internal-format
+msgid "invalid second argument to %<__builtin_prefetch%>; using zero"
+msgstr "неиÑправан други аргумент за %<__builtin_prefetch%>; кориÑтим нулу"
+
+#: builtins.c:1004
+#, gcc-internal-format
+msgid "third argument to %<__builtin_prefetch%> must be a constant"
+msgstr "трећи аргумент за %<__builtin_prefetch%> мора бити конÑтанта"
+
+#: builtins.c:1011
+#, gcc-internal-format
+msgid "invalid third argument to %<__builtin_prefetch%>; using zero"
+msgstr "неиÑправан трећи аргумент за %<__builtin_prefetch%>; кориÑтим нулу"
+
+#: builtins.c:4124
+#, gcc-internal-format
+msgid "argument of %<__builtin_args_info%> must be constant"
+msgstr "аргумент за %<__builtin_args_info%> мора бити конÑтанта"
+
+#: builtins.c:4130
+#, gcc-internal-format
+msgid "argument of %<__builtin_args_info%> out of range"
+msgstr "аргумент за %<__builtin_args_info%> ван опÑега"
+
+#: builtins.c:4136
+#, gcc-internal-format
+msgid "missing argument in %<__builtin_args_info%>"
+msgstr "недоÑтаје аргумент за %<__builtin_args_info%>"
+
+#: builtins.c:4232 gimplify.c:1882
+#, gcc-internal-format
+msgid "too few arguments to function %<va_start%>"
+msgstr "премало аргумената за функцију %<va_start%>"
+
+#: builtins.c:4396
+#, gcc-internal-format
+msgid "first argument to %<va_arg%> not of type %<va_list%>"
+msgstr "први аргумент за %<va_arg%> није типа %<va_list%>"
+
+#. 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:4410
+#, gcc-internal-format
+msgid "%qT is promoted to %qT when passed through %<...%>"
+msgstr "%qT Ñе унапређује у %qT при проÑлеђивању кроз %<...%>"
+
+#: builtins.c:4415
+#, gcc-internal-format
+msgid "(so you should pass %qT not %qT to %<va_arg%>)"
+msgstr "(Ñтога би требало да проÑледите %qT умеÑто %qT за %<va_arg%>)"
+
+#. We can, however, treat "undefined" any way we please.
+#. Call abort to encourage the user to fix the program.
+#: builtins.c:4421 c-typeck.c:2185
+#, gcc-internal-format
+msgid "if this code is reached, the program will abort"
+msgstr "ако Ñе овај кôд доÑегне, програм ће Ñе прекинути"
+
+#: builtins.c:4540
+#, gcc-internal-format
+msgid "invalid argument to %<__builtin_frame_address%>"
+msgstr "неиÑправан аргумент за %<__builtin_frame_address%>"
+
+#: builtins.c:4542
+#, gcc-internal-format
+msgid "invalid argument to %<__builtin_return_address%>"
+msgstr "неиÑправан аргумент за %<__builtin_return_address%>"
+
+#: builtins.c:4555
+#, gcc-internal-format
+msgid "unsupported argument to %<__builtin_frame_address%>"
+msgstr "неподржан аргумент за %<__builtin_frame_address%>"
+
+#: builtins.c:4557
+#, gcc-internal-format
+msgid "unsupported argument to %<__builtin_return_address%>"
+msgstr "неподржан аргумент за %<__builtin_return_address%>"
+
+#: builtins.c:4660
+#, gcc-internal-format
+msgid "second argument to %<__builtin_expect%> must be a constant"
+msgstr "други аргумент за %<__builtin_expect%> мора бити конÑтанта"
+
+#: builtins.c:6134
+#, gcc-internal-format
+msgid "%<__builtin_longjmp%> second argument must be 1"
+msgstr "%<__builtin_longjmp%> други аргумент мора бити 1"
+
+#: builtins.c:6698
+#, gcc-internal-format
+msgid "target format does not support infinity"
+msgstr "циљни формат не подржава беÑконачноÑÑ‚"
+
+#: builtins.c:8540 builtins.c:8634
+#, gcc-internal-format
+msgid "too few arguments to function %qs"
+msgstr "премало аргумената за функцију %qs"
+
+#: builtins.c:8546 builtins.c:8640
+#, gcc-internal-format
+msgid "too many arguments to function %qs"
+msgstr "превише аргумената за функцију %qs"
+
+#: builtins.c:8552 builtins.c:8665
+#, gcc-internal-format
+msgid "non-floating-point argument to function %qs"
+msgstr "аргумент који није у покретном зарезу за функцију %qs"
+
+#: builtins.c:9765
+#, gcc-internal-format
+msgid "%<va_start%> used in function with fixed args"
+msgstr "%<va_start%> употребљено у функцији Ñа фикÑним аргументима"
+
+#. Evidently an out of date version of <stdarg.h>; can't validate
+#. va_start's second argument, but can still work as intended.
+#: builtins.c:9772
+#, gcc-internal-format
+msgid "%<__builtin_next_arg%> called without an argument"
+msgstr "%<__builtin_next_arg%> позвано без аргумената"
+
+#: builtins.c:9787
+#, gcc-internal-format
+msgid "%<va_start%> used with too many arguments"
+msgstr "%<va_start%> употребљено Ñа превише аргумената"
+
+#. 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:9807
+#, gcc-internal-format
+msgid "second parameter of %<va_start%> not last named argument"
+msgstr "други параметар за %<va_start%> није поÑледњи именовани аргумент"
+
+#: builtins.c:9919
+#, gcc-internal-format
+msgid "%Hfirst argument of %D must be a pointer, second integer constant"
+msgstr "%Hпрви аргумент за %D мора бити показивач, а други целобројна конÑтанта"
+
+#: builtins.c:9932
+#, gcc-internal-format
+msgid "%Hlast argument of %D is not integer constant between 0 and 3"
+msgstr "%HпоÑледњи аргумент за %D није целобројна конÑтанта између 0 и 3"
+
+#: builtins.c:9978 builtins.c:10131 builtins.c:10199
+#, gcc-internal-format
+msgid "%Hcall to %D will always overflow destination buffer"
+msgstr "%Hпозив за %D ће увек прелити одредишни бафер"
+
+#: c-common.c:831
+#, gcc-internal-format
+msgid "%qD is not defined outside of function scope"
+msgstr "%qD није дефиниÑано изван доÑега функције"
+
+#: c-common.c:852
+#, gcc-internal-format
+msgid "string length %qd is greater than the length %qd ISO C%d compilers are required to support"
+msgstr "дужина ниÑке %qd већа је од дужине %qd коју ИСО компилатори Ц%d морају да подрже"
+
+#: c-common.c:893
+#, gcc-internal-format
+msgid "overflow in constant expression"
+msgstr "преливање у конÑтантном изразу"
+
+#: c-common.c:913
+#, gcc-internal-format
+msgid "integer overflow in expression"
+msgstr "целобројно преливање у изразу"
+
+#: c-common.c:922
+#, gcc-internal-format
+msgid "floating point overflow in expression"
+msgstr "преливање покретног зареза у изразу"
+
+#: c-common.c:928
+#, gcc-internal-format
+msgid "vector overflow in expression"
+msgstr "векторÑко преливање у изразу"
+
+#. This detects cases like converting -129 or 256 to unsigned char.
+#: c-common.c:950
+#, gcc-internal-format
+msgid "large integer implicitly truncated to unsigned type"
+msgstr "велики целобројни имплицитно подÑечен на неозначени тип"
+
+#: c-common.c:953
+#, gcc-internal-format
+msgid "negative integer implicitly converted to unsigned type"
+msgstr "негативни целобројни имплицитно претворен у неозначени тип"
+
+#: c-common.c:975
+#, gcc-internal-format
+msgid "type-punning to incomplete type might break strict-aliasing rules"
+msgstr "типÑко преметање у непотпун тип може прекршити правила Ñтроге дволичноÑти"
+
+#: c-common.c:983
+#, gcc-internal-format
+msgid "dereferencing type-punned pointer will break strict-aliasing rules"
+msgstr "разрешавање типÑки преметнутог показивача ће прекршити правила Ñтроге дволичноÑти"
+
+#: c-common.c:987
+#, gcc-internal-format
+msgid "dereferencing type-punned pointer might break strict-aliasing rules"
+msgstr "разрешавање типÑки преметнутог показивача може прекршити правила Ñтроге дволичноÑти"
+
+#: c-common.c:1049
+#, gcc-internal-format
+msgid "overflow in implicit constant conversion"
+msgstr "преливање у имплицитном претварању конÑтанте"
+
+#: c-common.c:1185
+#, gcc-internal-format
+msgid "operation on %qE may be undefined"
+msgstr "операција над %qE може бити недефиниÑана"
+
+#: c-common.c:1471
+#, gcc-internal-format
+msgid "case label does not reduce to an integer constant"
+msgstr "етикета Ñлучаја Ñе не Ñводи на целобројну конÑтанту"
+
+#: c-common.c:1511
+#, gcc-internal-format
+msgid "case label value is less than minimum value for type"
+msgstr "етикета Ñлучаја је мања од најмање вредноÑти типа"
+
+#: c-common.c:1519
+#, gcc-internal-format
+msgid "case label value exceeds maximum value for type"
+msgstr "етикета Ñлучаја премашује највећу вредноÑÑ‚ типа"
+
+#: c-common.c:1527
+#, gcc-internal-format
+msgid "lower value in case label range less than minimum value for type"
+msgstr "доња вредноÑÑ‚ у опÑегу етикета Ñлучаја мања од најмање вредноÑти типа"
+
+#: c-common.c:1536
+#, gcc-internal-format
+msgid "upper value in case label range exceeds maximum value for type"
+msgstr "горња вредноÑÑ‚ у опÑегу етикета Ñлучаја премашује највећу вредноÑÑ‚ типа"
+
+#: c-common.c:1876
+#, gcc-internal-format
+msgid "invalid truth-value expression"
+msgstr "неиÑправан израз иÑтинитоÑне вредноÑти"
+
+#: c-common.c:1924
+#, gcc-internal-format
+msgid "invalid operands to binary %s"
+msgstr "неиÑправни операнди за бинарно %s"
+
+#: c-common.c:2159
+#, gcc-internal-format
+msgid "comparison is always false due to limited range of data type"
+msgstr "поређење је увек нетачно уÑлед ограниченог опÑега типа"
+
+#: c-common.c:2161
+#, gcc-internal-format
+msgid "comparison is always true due to limited range of data type"
+msgstr "поређење је увек тачно уÑлед ограниченог опÑега типа"
+
+#: c-common.c:2231
+#, gcc-internal-format
+msgid "comparison of unsigned expression >= 0 is always true"
+msgstr "поређење неозначеног израза >= 0 је увек тачно"
+
+#: c-common.c:2240
+#, gcc-internal-format
+msgid "comparison of unsigned expression < 0 is always false"
+msgstr "поређење неозначеног израза < 0 је увек тачно"
+
+#: c-common.c:2282
+#, gcc-internal-format
+msgid "pointer of type %<void *%> used in arithmetic"
+msgstr "показивач типа %<void *%> употребљен у аритметици"
+
+#: c-common.c:2288
+#, gcc-internal-format
+msgid "pointer to a function used in arithmetic"
+msgstr "показивач на функцију употребљен у аритметици"
+
+#: c-common.c:2294
+#, gcc-internal-format
+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:2420
+#, gcc-internal-format
+msgid "the address of %qD, will always evaluate as %<true%>"
+msgstr "адреÑа за %qD ће увек бити израчуната као %<true%>"
+
+#: c-common.c:2517
+#, gcc-internal-format
+msgid "suggest parentheses around assignment used as truth value"
+msgstr "предлажем заграде око израза употребљеног као иÑтинитоÑна вредноÑÑ‚"
+
+#: c-common.c:2585 c-common.c:2625
+#, gcc-internal-format
+msgid "invalid use of %<restrict%>"
+msgstr "неиÑправна употреба %<restrict%>"
+
+#: c-common.c:2841
+#, gcc-internal-format
+msgid "invalid application of %<sizeof%> to a function type"
+msgstr "неиÑправна примена %<sizeof%> на функцијÑки тип"
+
+#: c-common.c:2851
+#, gcc-internal-format
+msgid "invalid application of %qs to a void type"
+msgstr "неиÑправна примена %qs на празан тип"
+
+#: c-common.c:2857
+#, gcc-internal-format
+msgid "invalid application of %qs to incomplete type %qT "
+msgstr "неиÑправна примена %qs на непотпун тип %qT"
+
+#: c-common.c:2898
+#, gcc-internal-format
+msgid "%<__alignof%> applied to a bit-field"
+msgstr "%<__alignof%> примењено на битÑко поље"
+
+#: c-common.c:3444
+#, gcc-internal-format
+msgid "cannot disable built-in function %qs"
+msgstr "не могу да иÑкључим уграђену функцију %qs"
+
+#: c-common.c:3632
+#, gcc-internal-format
+msgid "pointers are not permitted as case values"
+msgstr "показивачи ниÑу дозвољени као вредноÑти Ñлучаја"
+
+#: c-common.c:3638
+#, gcc-internal-format
+msgid "range expressions in switch statements are non-standard"
+msgstr "изрази опÑега у наредбама прекидача ниÑу Ñтандардни"
+
+#: c-common.c:3664
+#, gcc-internal-format
+msgid "empty range specified"
+msgstr "наведен је празан опÑег"
+
+#: c-common.c:3724
+#, gcc-internal-format
+msgid "duplicate (or overlapping) case value"
+msgstr "двоÑтрука (или преклапајућа) вредноÑÑ‚ Ñлучаја"
+
+#: c-common.c:3725
+#, gcc-internal-format
+msgid "%Jthis is the first entry overlapping that value"
+msgstr "%Jово је први ÑƒÐ½Ð¾Ñ ÐºÐ¾Ñ˜Ð¸ преклапа ту вредноÑÑ‚"
+
+#: c-common.c:3729
+#, gcc-internal-format
+msgid "duplicate case value"
+msgstr "двоÑтрука вредноÑÑ‚ Ñлучаја"
+
+#: c-common.c:3730
+#, gcc-internal-format
+msgid "%Jpreviously used here"
+msgstr "%Jпретходно употребљена овде"
+
+#: c-common.c:3734
+#, gcc-internal-format
+msgid "multiple default labels in one switch"
+msgstr "вишеÑтруке етикете подразумеваног у иÑтом прекидачу"
+
+#: c-common.c:3735
+#, gcc-internal-format
+msgid "%Jthis is the first default label"
+msgstr "%Jово је прва етикета подразумеваног"
+
+#: c-common.c:3784
+#, gcc-internal-format
+msgid "%Jcase value %qs not in enumerated type"
+msgstr "%JвредноÑÑ‚ Ñлучаја %qs није у набројивом типу"
+
+#: c-common.c:3787
+#, gcc-internal-format
+msgid "%Jcase value %qs not in enumerated type %qT"
+msgstr "%JвредноÑÑ‚ Ñлучаја %qs није у набројивом типу %qT"
+
+#: c-common.c:3844
+#, gcc-internal-format
+msgid "%Hswitch missing default case"
+msgstr "%Hпрекидачу недоÑтаје подразумевани Ñлучај"
+
+#. Warn if there are enumerators that don't correspond to
+#. case expressions.
+#: c-common.c:3904
+#, gcc-internal-format
+msgid "%Henumeration value %qE not handled in switch"
+msgstr "%Hнабројива вредноÑÑ‚ %qE није обрађена у прекидачу"
+
+#: c-common.c:3931
+#, gcc-internal-format
+msgid "taking the address of a label is non-standard"
+msgstr "узимање адреÑе етикете није Ñтандардно"
+
+#: c-common.c:4095
+#, gcc-internal-format
+msgid "%qE attribute ignored for field of type %qT"
+msgstr "атрибут %qE Ñе игнорише за поље типа %qT"
+
+#: c-common.c:4106 c-common.c:4125 c-common.c:4143 c-common.c:4170
+#: c-common.c:4189 c-common.c:4212 c-common.c:4233 c-common.c:4258
+#: c-common.c:4284 c-common.c:4332 c-common.c:4359 c-common.c:4410
+#: c-common.c:4435 c-common.c:4463 c-common.c:4482 c-common.c:4814
+#: c-common.c:4879 c-common.c:4975 c-common.c:5041 c-common.c:5059
+#: c-common.c:5105 c-common.c:5175 c-common.c:5199 c-common.c:5498
+#: c-common.c:5521 c-common.c:5560
+#, gcc-internal-format
+msgid "%qE attribute ignored"
+msgstr "атрибут %qE Ñе игнорише"
+
+#: c-common.c:4313
+#, gcc-internal-format
+msgid "%qE attribute have effect only on public objects"
+msgstr "атрибут %qE има утицаја Ñамо у јавним објектима"
+
+#: c-common.c:4520
+#, gcc-internal-format
+msgid "unknown machine mode %qs"
+msgstr "непознат машинÑки режим %qs"
+
+#: c-common.c:4540
+#, gcc-internal-format
+msgid "specifying vector types with __attribute__ ((mode)) is deprecated"
+msgstr "превазиђено задавање векторÑких типова помоћу __attribute__ ((режим))"
+
+#: c-common.c:4543
+#, gcc-internal-format
+msgid "use __attribute__ ((vector_size)) instead"
+msgstr "употребите __attribute__ ((величина_вектора)) умеÑто тога"
+
+#: c-common.c:4552
+#, gcc-internal-format
+msgid "unable to emulate %qs"
+msgstr "не могу да емулирам %qs"
+
+#: c-common.c:4562
+#, gcc-internal-format
+msgid "invalid pointer mode %qs"
+msgstr "неиÑправан режим показивача %qs"
+
+#: c-common.c:4577
+#, gcc-internal-format
+msgid "no data type for mode %qs"
+msgstr "нема типа података за режим %qs"
+
+#: c-common.c:4587
+#, gcc-internal-format
+msgid "cannot use mode %qs for enumeral types"
+msgstr "не могу да кориÑтим режим %qs за бројевне типове"
+
+#: c-common.c:4614
+#, gcc-internal-format
+msgid "mode %qs applied to inappropriate type"
+msgstr "режим %qs примењен на неодговарајући тип"
+
+#: c-common.c:4645
+#, gcc-internal-format
+msgid "%Jsection attribute cannot be specified for local variables"
+msgstr "%Jатрибут одељка Ñе не може навеÑти за локалне променљиве"
+
+#: c-common.c:4656
+#, gcc-internal-format
+msgid "section of %q+D conflicts with previous declaration"
+msgstr "одељак за %q+D коÑи Ñе Ñа претходном декларацијом"
+
+#: c-common.c:4665
+#, gcc-internal-format
+msgid "section attribute not allowed for %q+D"
+msgstr "атрибут одељка није допуштен за %q+D"
+
+#: c-common.c:4671
+#, gcc-internal-format
+msgid "%Jsection attributes are not supported for this target"
+msgstr "%Jатрибути одељка ниÑу подржани за овај циљ"
+
+#: c-common.c:4703
+#, gcc-internal-format
+msgid "requested alignment is not a constant"
+msgstr "захтевано равнање није конÑтанта"
+
+#: c-common.c:4708
+#, gcc-internal-format
+msgid "requested alignment is not a power of 2"
+msgstr "захтевано равнање није Ñтепен двојке"
+
+#: c-common.c:4713
+#, gcc-internal-format
+msgid "requested alignment is too large"
+msgstr "захтевано равнање је превелико"
+
+#: c-common.c:4739
+#, gcc-internal-format
+msgid "alignment may not be specified for %q+D"
+msgstr "равнање Ñе не може навеÑти за %q+D"
+
+#: c-common.c:4777
+#, gcc-internal-format
+msgid "%q+D defined both normally and as an alias"
+msgstr "%q+D дефиниÑано и нормално и као алијаÑ"
+
+#: c-common.c:4793
+#, gcc-internal-format
+msgid "alias argument not a string"
+msgstr "аргумент алијаÑа није ниÑка"
+
+#: c-common.c:4844
+#, gcc-internal-format
+msgid "%Jweakref attribute must appear before alias attribute"
+msgstr "%Jатрибут Ñлабог упућивања мора Ñе јавити пре атрибута алијаÑа"
+
+#: c-common.c:4872
+#, gcc-internal-format
+msgid "%qE attribute ignored on non-class types"
+msgstr "атрибут %qE Ñе игнорише на не-клаÑним типовима"
+
+#: c-common.c:4885
+#, gcc-internal-format
+msgid "visibility argument not a string"
+msgstr "видљивоÑÑ‚ аргумента није ниÑка"
+
+#: c-common.c:4897
+#, gcc-internal-format
+msgid "%qE attribute ignored on types"
+msgstr "атрибут %qE Ñе игнорише на типовима"
+
+#: c-common.c:4912
+#, gcc-internal-format
+msgid "visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\""
+msgstr "аргумент видљивоÑти мора бити једно од „default“, „hidden“, „protected“ или „internal“"
+
+#: c-common.c:4983
+#, gcc-internal-format
+msgid "tls_model argument not a string"
+msgstr "аргумент за tls_model није ниÑка"
+
+#: c-common.c:4996
+#, gcc-internal-format
+msgid "tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\""
+msgstr "аргумент за tls_model мора бити једно од „local-exec“, „initial-exec“, „local-dynamic“ или „global-dynamic“"
+
+#: c-common.c:5015 c-common.c:5079
+#, gcc-internal-format
+msgid "%J%qE attribute applies only to functions"
+msgstr "%Jатрибут %qE примењује Ñе Ñамо на функције"
+
+#: c-common.c:5020 c-common.c:5084
+#, gcc-internal-format
+msgid "%Jcan%'t set %qE attribute after definition"
+msgstr "%Jатрибут %qE не може Ñе поÑтавити поÑле дефиниције"
+
+#: c-common.c:5173
+#, gcc-internal-format
+msgid "%qE attribute ignored for %qE"
+msgstr "атрибут %qE Ñе игнорише за %qE"
+
+#: c-common.c:5228
+#, gcc-internal-format
+msgid "invalid vector type for attribute %qE"
+msgstr "неиÑправан тип вектора за атрибут %qE"
+
+#: c-common.c:5234
+#, gcc-internal-format
+msgid "vector size not an integral multiple of component size"
+msgstr "величина вектора није целобројни умножак величине компоненте"
+
+#: c-common.c:5240
+#, gcc-internal-format
+msgid "zero vector size"
+msgstr "нулта величина вектора"
+
+#: c-common.c:5248
+#, gcc-internal-format
+msgid "number of components of the vector not a power of two"
+msgstr "број компоненти вектора није Ñтепен двојке"
+
+#: c-common.c:5276
+#, gcc-internal-format
+msgid "nonnull attribute without arguments on a non-prototype"
+msgstr "ненулти атрибут без аргумената код непрототипа"
+
+#: c-common.c:5291
+#, gcc-internal-format
+msgid "nonnull argument has invalid operand number (argument %lu)"
+msgstr "ненулти аргумент има неиÑправан број операнада (аргумент %lu)"
+
+#: c-common.c:5310
+#, gcc-internal-format
+msgid "nonnull argument with out-of-range operand number (argument %lu, operand %lu)"
+msgstr "ненулти аргумент Ñа бројем операнада ван опÑега (аргумент %lu, операнд %lu)"
+
+#: c-common.c:5318
+#, gcc-internal-format
+msgid "nonnull argument references non-pointer operand (argument %lu, operand %lu)"
+msgstr "ненулти аргумент упућује на непоказивачки операнд (аргумент %lu, операнд %lu)"
+
+#: c-common.c:5381 c-common.c:5404
+#, gcc-internal-format
+msgid "not enough variable arguments to fit a sentinel"
+msgstr "недовољно променљивих аргумената да би Ñе уклопио Ñтражар"
+
+#: c-common.c:5425
+#, gcc-internal-format
+msgid "missing sentinel in function call"
+msgstr "недоÑтаје Ñтражар у позиву функције"
+
+#: c-common.c:5467
+#, gcc-internal-format
+msgid "null argument where non-null required (argument %lu)"
+msgstr "нулти аргумент где је неопходан ненулти (аргумент %lu)"
+
+#: c-common.c:5532
+#, gcc-internal-format
+msgid "cleanup argument not an identifier"
+msgstr "чиÑтачки аргумент није идентификатор"
+
+#: c-common.c:5539
+#, gcc-internal-format
+msgid "cleanup argument not a function"
+msgstr "чиÑтачки аргумент није функција"
+
+#: c-common.c:5578
+#, gcc-internal-format
+msgid "%qE attribute requires prototypes with named arguments"
+msgstr "атрибут %qE захтева прототипове Ñа именованим аргументима"
+
+#: c-common.c:5589
+#, gcc-internal-format
+msgid "%qE attribute only applies to variadic functions"
+msgstr "атрибут %qE је примењив Ñамо на варијадичке функције"
+
+#: c-common.c:5600
+#, gcc-internal-format
+msgid "requested position is not an integer constant"
+msgstr "захтевани положај није целобројна конÑтанта"
+
+#: c-common.c:5607
+#, gcc-internal-format
+msgid "requested position is less than zero"
+msgstr "захтевани положај је мањи од нуле"
+
+#: c-common.c:5909
+#, gcc-internal-format
+msgid "%Hignoring return value of %qD, declared with attribute warn_unused_result"
+msgstr "%Hигноришем повратну вредноÑÑ‚ из %qD деклариÑану уз атрибут warn_unused_result"
+
+#: c-common.c:5913
+#, gcc-internal-format
+msgid "%Hignoring return value of function declared with attribute warn_unused_result"
+msgstr "%Hигноришем повратну вредноÑÑ‚ функције деклариÑану уз атрибут warn_unused_result"
+
+#: c-common.c:5973 cp/typeck.c:4257
+#, gcc-internal-format
+msgid "attempt to take address of bit-field structure member %qD"
+msgstr "покушај узимања адреÑе битÑког поља %qD у Ñтруктури"
+
+#: c-common.c:6020
+#, gcc-internal-format
+msgid "invalid lvalue in assignment"
+msgstr "неиÑправна л-вредноÑÑ‚ у додели"
+
+#: c-common.c:6023
+#, gcc-internal-format
+msgid "invalid lvalue in increment"
+msgstr "неиÑправна л-вредноÑÑ‚ у увећању"
+
+#: c-common.c:6026
+#, gcc-internal-format
+msgid "invalid lvalue in decrement"
+msgstr "неиÑправна л-вредноÑÑ‚ у умањењу"
+
+#: c-common.c:6029
+#, gcc-internal-format
+msgid "invalid lvalue in unary %<&%>"
+msgstr "неиÑправна л-вредноÑÑ‚ у унарном %<&%>"
+
+#: c-common.c:6032
+#, gcc-internal-format
+msgid "invalid lvalue in asm statement"
+msgstr "неиÑправна л-вредноÑÑ‚ у asm наредби"
+
+#: c-common.c:6160 c-common.c:6209 c-typeck.c:2443
+#, gcc-internal-format
+msgid "too few arguments to function %qE"
+msgstr "премало аргумената за функцију %qE"
+
+#. ??? This should not be an error when inlining calls to
+#. unprototyped functions.
+#: c-common.c:6177 c-typeck.c:4095
+#, gcc-internal-format
+msgid "incompatible type for argument %d of %qE"
+msgstr "неÑаглаÑни тип за аргумент %d у %qE"
+
+#. Except for passing an argument to an unprototyped function,
+#. this is a constraint violation. When passing an argument to
+#. an unprototyped function, it is compile-time undefined;
+#. making it a constraint in that case was rejected in
+#. DR#252.
+#: c-convert.c:96 c-typeck.c:1596 c-typeck.c:3736 cp/typeck.c:1372
+#: cp/typeck.c:6014 fortran/convert.c:89 treelang/tree-convert.c:79
+#, gcc-internal-format
+msgid "void value not ignored as it ought to be"
+msgstr "празна вредноÑÑ‚ није игнориÑана а требало би"
+
+#: c-convert.c:134 fortran/convert.c:122 java/typeck.c:154
+#: treelang/tree-convert.c:105
+#, gcc-internal-format
+msgid "conversion to non-scalar type requested"
+msgstr "затражено је претварање у неÑкаларни тип"
+
+#: c-decl.c:564
+#, gcc-internal-format
+msgid "array %q+D assumed to have one element"
+msgstr "претпоÑтавља Ñе да низ %q+D има један елемент"
+
+#: c-decl.c:669
+#, gcc-internal-format
+msgid "GCC supports only %u nested scopes"
+msgstr "ГЦЦ подржава Ñамо %u угњеждених доÑега"
+
+#: c-decl.c:755 cp/decl.c:351 java/decl.c:1700
+#, gcc-internal-format
+msgid "label %q+D used but not defined"
+msgstr "етикета %q+D употребљена али недефиниÑана"
+
+#: c-decl.c:761 cp/decl.c:362 java/decl.c:1705
+#, gcc-internal-format
+msgid "label %q+D defined but not used"
+msgstr "етикета %q+D дефиниÑана али неупотребљена"
+
+#: c-decl.c:763
+#, gcc-internal-format
+msgid "label %q+D declared but not defined"
+msgstr "етикета %q+D деклариÑана али недефиниÑана"
+
+#: c-decl.c:798
+#, gcc-internal-format
+msgid "nested function %q+D declared but never defined"
+msgstr "угњеждена функција %q+D деклариÑана али нигде дефиниÑана"
+
+#: c-decl.c:812 cp/decl.c:556
+#, gcc-internal-format
+msgid "unused variable %q+D"
+msgstr "неупотребљена променљива %q+D"
+
+#: c-decl.c:816
+#, gcc-internal-format
+msgid "type of array %q+D completed incompatibly with implicit initialization"
+msgstr "тип низа %q+D довршен неÑаглаÑно Ñа имплицитним уÑпоÑтављањем"
+
+#: c-decl.c:1050
+#, gcc-internal-format
+msgid "a parameter list with an ellipsis can%'t match an empty parameter name list declaration"
+msgstr "лиÑта параметара Ñа тротачком не може поклопити декларацију празне лиÑте имена параметара"
+
+#: c-decl.c:1057
+#, gcc-internal-format
+msgid "an argument type that has a default promotion can%'t match an empty parameter name list declaration"
+msgstr "тип аргумента који има подразумевано унапређење не може поклопити декларацију празне лиÑте имена параметара"
+
+#: c-decl.c:1092
+#, gcc-internal-format
+msgid "prototype for %q+D declares more arguments than previous old-style definition"
+msgstr "протитип за %q+D декларише више аргумената од претходне ÑтаровремÑке дефиниције"
+
+#: c-decl.c:1098
+#, gcc-internal-format
+msgid "prototype for %q+D declares fewer arguments than previous old-style definition"
+msgstr "протитип за %q+D декларише мање аргумената од претходне ÑтаровремÑке дефиниције"
+
+#: c-decl.c:1107
+#, gcc-internal-format
+msgid "prototype for %q+D declares argument %d with incompatible type"
+msgstr "протитип за %q+D декларише %d Ñа неÑаглаÑним типом"
+
+#. If we get here, no errors were found, but do issue a warning
+#. for this poor-style construct.
+#: c-decl.c:1120
+#, gcc-internal-format
+msgid "prototype for %q+D follows non-prototype definition"
+msgstr "протитип за %q+D прати непрототипÑку дефиницију"
+
+#: c-decl.c:1135
+#, gcc-internal-format
+msgid "previous definition of %q+D was here"
+msgstr "претходна дефиниција %q+D беше овде"
+
+#: c-decl.c:1137
+#, gcc-internal-format
+msgid "previous implicit declaration of %q+D was here"
+msgstr "претходна имплицитна декларација %q+D беше овде"
+
+#: c-decl.c:1139
+#, gcc-internal-format
+msgid "previous declaration of %q+D was here"
+msgstr "претходна декларација %q+D беше овде"
+
+#: c-decl.c:1179
+#, gcc-internal-format
+msgid "%q+D redeclared as different kind of symbol"
+msgstr "%q+D поново деклариÑано као различита врÑта Ñимбола"
+
+#: c-decl.c:1183
+#, gcc-internal-format
+msgid "built-in function %q+D declared as non-function"
+msgstr "уграђена функција %q+D деклариÑана као нефункција"
+
+#: c-decl.c:1186 c-decl.c:1302 c-decl.c:1926
+#, gcc-internal-format
+msgid "declaration of %q+D shadows a built-in function"
+msgstr "декларација %q+D заклања уграђену функцију"
+
+#: c-decl.c:1195
+#, gcc-internal-format
+msgid "redeclaration of enumerator %q+D"
+msgstr "поновљена декларација набрајача %q+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:1216
+#, gcc-internal-format
+msgid "conflicting types for built-in function %q+D"
+msgstr "Ñукобљени типови за уграђену функцију %q+D"
+
+#: c-decl.c:1240 c-decl.c:1253 c-decl.c:1263
+#, gcc-internal-format
+msgid "conflicting types for %q+D"
+msgstr "Ñукобљени типови за %q+D"
+
+#: c-decl.c:1261
+#, gcc-internal-format
+msgid "conflicting type qualifiers for %q+D"
+msgstr "Ñукобљене одредбе типа за %q+D"
+
+#. Allow OLDDECL to continue in use.
+#: c-decl.c:1278
+#, gcc-internal-format
+msgid "redefinition of typedef %q+D"
+msgstr "поновљена дефиниција типа %q+D"
+
+#: c-decl.c:1326 c-decl.c:1404
+#, gcc-internal-format
+msgid "redefinition of %q+D"
+msgstr "поновљена дефиниција %q+D"
+
+#: c-decl.c:1361 c-decl.c:1442
+#, gcc-internal-format
+msgid "static declaration of %q+D follows non-static declaration"
+msgstr "Ñтатичка декларација %q+D прати неÑтатичку декларацију"
+
+#: c-decl.c:1371 c-decl.c:1378 c-decl.c:1431 c-decl.c:1439
+#, gcc-internal-format
+msgid "non-static declaration of %q+D follows static declaration"
+msgstr "неÑтатичка декларација %q+D прати Ñтатичку декларацију"
+
+#: c-decl.c:1391
+#, gcc-internal-format
+msgid "thread-local declaration of %q+D follows non-thread-local declaration"
+msgstr "нитно-локална декларација %q+D прати не-нитно-локалну декларацију"
+
+#: c-decl.c:1394
+#, gcc-internal-format
+msgid "non-thread-local declaration of %q+D follows thread-local declaration"
+msgstr "не-нитно-локална декларација %q+D прати нитно-локалну декларацију"
+
+#: c-decl.c:1424
+#, gcc-internal-format
+msgid "extern declaration of %q+D follows declaration with no linkage"
+msgstr "декларација Ñпољашњег %q+D прати декларацију без повезивоÑти"
+
+#: c-decl.c:1460
+#, gcc-internal-format
+msgid "declaration of %q+D with no linkage follows extern declaration"
+msgstr "декларација %q+D без повезивоÑти прати декларацију Ñпољашњег"
+
+#: c-decl.c:1466
+#, gcc-internal-format
+msgid "redeclaration of %q+D with no linkage"
+msgstr "поновљена декларација %q+D без повезивоÑти"
+
+#: c-decl.c:1480
+#, gcc-internal-format
+msgid "redeclaration of %q+D with different visibility (old visibility preserved)"
+msgstr "поновљена декларација %q+D Ñа различитом видљивошћу (чува Ñе Ñтара видљивоÑÑ‚)"
+
+#: c-decl.c:1491
+#, gcc-internal-format
+msgid "inline declaration of %qD follows declaration with attribute noinline"
+msgstr "уткана декларација %q+D прати декларацију без атрибута noinline"
+
+#: c-decl.c:1498
+#, gcc-internal-format
+msgid "declaration of %q+D with attribute noinline follows inline declaration "
+msgstr "декларација %q+D Ñа атрибутом noinline прати уткану декларацију "
+
+#: c-decl.c:1513
+#, gcc-internal-format
+msgid "%q+D declared inline after being called"
+msgstr "%q+D деклариÑано уткано пошто је већ позвано"
+
+#: c-decl.c:1518
+#, gcc-internal-format
+msgid "%q+D declared inline after its definition"
+msgstr "%q+D деклариÑано уткано поÑле Ñвоје дефиниције"
+
+#: c-decl.c:1537
+#, gcc-internal-format
+msgid "redefinition of parameter %q+D"
+msgstr "поновљена дефиниција параметра %q+D"
+
+#: c-decl.c:1564
+#, gcc-internal-format
+msgid "redundant redeclaration of %q+D"
+msgstr "Ñувишна поновљена декларација %q+D"
+
+#: c-decl.c:1913
+#, gcc-internal-format
+msgid "declaration of %q+D shadows previous non-variable"
+msgstr "декларација %q+D заклања претходну не-променљиву"
+
+#: c-decl.c:1918
+#, gcc-internal-format
+msgid "declaration of %q+D shadows a parameter"
+msgstr "декларација %q+D заклања параметар"
+
+#: c-decl.c:1921
+#, gcc-internal-format
+msgid "declaration of %q+D shadows a global declaration"
+msgstr "декларација %q+D заклања глобалну декларацију"
+
+#: c-decl.c:1931
+#, gcc-internal-format
+msgid "declaration of %q+D shadows a previous local"
+msgstr "декларација %q+D заклања претходну локалну"
+
+#: c-decl.c:1934 cp/name-lookup.c:954 cp/name-lookup.c:985
+#: cp/name-lookup.c:993
+#, gcc-internal-format
+msgid "%Jshadowed declaration is here"
+msgstr "%Jзаклоњена декларација је овде"
+
+#: c-decl.c:2134
+#, gcc-internal-format
+msgid "nested extern declaration of %qD"
+msgstr "угњеждена декларација %qD"
+
+#: c-decl.c:2303
+#, gcc-internal-format
+msgid "implicit declaration of function %qE"
+msgstr "имплицитна декларација функције %qE"
+
+#: c-decl.c:2364
+#, gcc-internal-format
+msgid "incompatible implicit declaration of built-in function %qD"
+msgstr "неÑаглаÑна имплицитна декларација уграђене функције %qD"
+
+#: c-decl.c:2373
+#, gcc-internal-format
+msgid "incompatible implicit declaration of function %qD"
+msgstr "неÑаглаÑна имплицитна декларација функције %qD"
+
+#: c-decl.c:2426
+#, gcc-internal-format
+msgid "%H%qE undeclared here (not in a function)"
+msgstr "%H%qE недеклариÑано овде (не у функцији)"
+
+#: c-decl.c:2431
+#, gcc-internal-format
+msgid "%H%qE undeclared (first use in this function)"
+msgstr "%H%qE недеклариÑано (прва употреба у овој функцији)"
+
+#: c-decl.c:2435
+#, gcc-internal-format
+msgid "%H(Each undeclared identifier is reported only once"
+msgstr "%H(Сваки недеклариÑани идентификатор пријављен је Ñамо једном"
+
+#: c-decl.c:2436
+#, gcc-internal-format
+msgid "%Hfor each function it appears in.)"
+msgstr "%Hза Ñваку функцију у којој Ñе јавља.)"
+
+#: c-decl.c:2474 cp/decl.c:2131
+#, gcc-internal-format
+msgid "label %qE referenced outside of any function"
+msgstr "на етикету %qE упућено ван било које функције"
+
+#: c-decl.c:2516
+#, gcc-internal-format
+msgid "duplicate label declaration %qE"
+msgstr "двоÑтрука декларација етикете %qE"
+
+#: c-decl.c:2552
+#, gcc-internal-format
+msgid "%Hduplicate label %qD"
+msgstr "%HдвоÑтрука етикета %qD"
+
+#: c-decl.c:2562
+#, gcc-internal-format
+msgid "%Jjump into statement expression"
+msgstr "%JÑкок у наредбени израз"
+
+#: c-decl.c:2564
+#, gcc-internal-format
+msgid "%Jjump into scope of identifier with variably modified type"
+msgstr "%JÑкок у доÑег идентификатора Ñа променљиво измењивим типом"
+
+#: c-decl.c:2579
+#, gcc-internal-format
+msgid "%Htraditional C lacks a separate namespace for labels, identifier %qE conflicts"
+msgstr "%Hтрадиционалном Ц-у недоÑтаје одвојени именÑки проÑтор за етикете, те је идентификатор %qE у Ñукобу"
+
+#: c-decl.c:2654
+#, gcc-internal-format
+msgid "%H%qE defined as wrong kind of tag"
+msgstr "%H%qE дефиниÑан као погрешна врÑта ознаке"
+
+#: c-decl.c:2869
+#, gcc-internal-format
+msgid "unnamed struct/union that defines no instances"
+msgstr "неименована Ñтруктура/унија која не дефинише ниједан примерак"
+
+#: c-decl.c:2877
+#, gcc-internal-format
+msgid "empty declaration with storage class specifier does not redeclare tag"
+msgstr "празна декларација Ñа наводиоцем Ñкладишне клаÑе која не редекларише ознаку"
+
+#: c-decl.c:2888
+#, gcc-internal-format
+msgid "empty declaration with type qualifier does not redeclare tag"
+msgstr "празна декларација Ñа одредом типа која не редекларише ознаку"
+
+#: c-decl.c:2909 c-decl.c:2916
+#, gcc-internal-format
+msgid "useless type name in empty declaration"
+msgstr "беÑкориÑно име типа у празној декларацији"
+
+#: c-decl.c:2924
+#, gcc-internal-format
+msgid "%<inline%> in empty declaration"
+msgstr "%<inline%> у празној декларацији"
+
+#: c-decl.c:2930
+#, gcc-internal-format
+msgid "%<auto%> in file-scope empty declaration"
+msgstr "%<auto%> у празној декларацији у доÑегу датотеке"
+
+#: c-decl.c:2936
+#, gcc-internal-format
+msgid "%<register%> in file-scope empty declaration"
+msgstr "%<register%> у празној декларацији у доÑегу датотеке"
+
+#: c-decl.c:2942
+#, gcc-internal-format
+msgid "useless storage class specifier in empty declaration"
+msgstr "беÑкориÑан наводилац Ñкладишне клаÑе у празној декларацији"
+
+#: c-decl.c:2948
+#, gcc-internal-format
+msgid "useless %<__thread%> in empty declaration"
+msgstr "беÑкориÑно %<__thread%> у празној декларацији"
+
+#: c-decl.c:2956
+#, gcc-internal-format
+msgid "useless type qualifier in empty declaration"
+msgstr "беÑкориÑна одредба типа у празној декларацији"
+
+#: c-decl.c:2963 c-parser.c:1157
+#, gcc-internal-format
+msgid "empty declaration"
+msgstr "празна декларација"
+
+#: c-decl.c:3029
+#, gcc-internal-format
+msgid "ISO C90 does not support %<static%> or type qualifiers in parameter array declarators"
+msgstr "ИСО Ц 90 не подржава %<static%> или одредбе типа у параметарÑким деклараторима низова"
+
+#: c-decl.c:3032
+#, gcc-internal-format
+msgid "ISO C90 does not support %<[*]%> array declarators"
+msgstr "ИСО Ц 90 не подржава деклараторе низова %<[*]%>"
+
+#: c-decl.c:3035
+#, gcc-internal-format
+msgid "GCC does not yet properly implement %<[*]%> array declarators"
+msgstr "ГЦЦ још увек не имплементира иÑправно деклараторе низова %<[*]%>"
+
+#: c-decl.c:3054
+#, gcc-internal-format
+msgid "static or type qualifiers in abstract declarator"
+msgstr "Ñтатичка или одредбе типова у апÑтрактном декларатору"
+
+#: c-decl.c:3142
+#, gcc-internal-format
+msgid "%q+D is usually a function"
+msgstr "%q+D је обично функција"
+
+#: c-decl.c:3151 cp/decl.c:3700 cp/decl2.c:825
+#, gcc-internal-format
+msgid "typedef %qD is initialized (use __typeof__ instead)"
+msgstr "дефиниција типа %qD је уÑпоÑтављена (употребите __typeof__)"
+
+#: c-decl.c:3156
+#, gcc-internal-format
+msgid "function %qD is initialized like a variable"
+msgstr "функција %qD је уÑпоÑтављена као променљива"
+
+#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
+#: c-decl.c:3162
+#, gcc-internal-format
+msgid "parameter %qD is initialized"
+msgstr "параметар %qD је уÑпоÑтављен"
+
+#: c-decl.c:3187
+#, gcc-internal-format
+msgid "variable %qD has initializer but incomplete type"
+msgstr "променљива %qD има уÑпоÑтављач али је непотпуног типа"
+
+#: c-decl.c:3263 c-decl.c:5885 cp/decl.c:3739 cp/decl.c:10141
+#, gcc-internal-format
+msgid "inline function %q+D given attribute noinline"
+msgstr "утканој функцији %q+D дат је атрибут noinline"
+
+#: c-decl.c:3335
+#, gcc-internal-format
+msgid "initializer fails to determine size of %q+D"
+msgstr "уÑпоÑтављач не одређује величину за %q+D"
+
+#: c-decl.c:3340
+#, gcc-internal-format
+msgid "array size missing in %q+D"
+msgstr "недоÑтаје величина низа у %q+D"
+
+#: c-decl.c:3352
+#, gcc-internal-format
+msgid "zero or negative size array %q+D"
+msgstr "нулта или негативна величина низа %q+D"
+
+#: c-decl.c:3407 varasm.c:1646
+#, gcc-internal-format
+msgid "storage size of %q+D isn%'t known"
+msgstr "величина Ñкладишта за %q+D није позната"
+
+#: c-decl.c:3417
+#, gcc-internal-format
+msgid "storage size of %q+D isn%'t constant"
+msgstr "величина Ñкладишта за %q+D није конÑтантна"
+
+#: c-decl.c:3464
+#, gcc-internal-format
+msgid "ignoring asm-specifier for non-static local variable %q+D"
+msgstr "игноришем наводилац asm за неÑтатичку локалну променљиву %q+D"
+
+#: c-decl.c:3492 fortran/f95-lang.c:670
+#, gcc-internal-format
+msgid "cannot put object with volatile field into register"
+msgstr "не могу да Ñтавим објекат Ñа непоÑтојаним пољем у региÑтар"
+
+#: c-decl.c:3627
+#, gcc-internal-format
+msgid "ISO C forbids forward parameter declarations"
+msgstr "ИСО Ц забрањује унапредне декларације параметара"
+
+#: c-decl.c:3746
+#, gcc-internal-format
+msgid "bit-field %qs width not an integer constant"
+msgstr "ширина битÑког поља %qs није целобројна конÑтанта"
+
+#: c-decl.c:3754
+#, gcc-internal-format
+msgid "negative width in bit-field %qs"
+msgstr "негативна ширина у битÑком пољу %qs"
+
+#: c-decl.c:3759
+#, gcc-internal-format
+msgid "zero width for bit-field %qs"
+msgstr "нулта ширина за битÑко поље %qs"
+
+#: c-decl.c:3769
+#, gcc-internal-format
+msgid "bit-field %qs has invalid type"
+msgstr "битÑко поље %qs има неиÑправан тип"
+
+#: c-decl.c:3779
+#, gcc-internal-format
+msgid "type of bit-field %qs is a GCC extension"
+msgstr "тип битÑког поља %qs је проширење ГЦЦа"
+
+#: c-decl.c:3788
+#, gcc-internal-format
+msgid "width of %qs exceeds its type"
+msgstr "ширина %qs премашује Ñвој тип"
+
+#: c-decl.c:3801
+#, gcc-internal-format
+msgid "%qs is narrower than values of its type"
+msgstr "%qs је уже од вредноÑти Ñвог типа"
+
+#: c-decl.c:3950
+#, gcc-internal-format
+msgid "type defaults to %<int%> in declaration of %qs"
+msgstr "тип Ñпада на %<int%> у декларацији %qs"
+
+#: c-decl.c:3978
+#, gcc-internal-format
+msgid "duplicate %<const%>"
+msgstr "удвоÑтручено %<const%>"
+
+#: c-decl.c:3980
+#, gcc-internal-format
+msgid "duplicate %<restrict%>"
+msgstr "удвоÑтручено %<restrict%>"
+
+#: c-decl.c:3982
+#, gcc-internal-format
+msgid "duplicate %<volatile%>"
+msgstr "удвоÑтручено %<volatile%>"
+
+#: c-decl.c:4001
+#, gcc-internal-format
+msgid "function definition declared %<auto%>"
+msgstr "дефиниција функције деклариÑана као %<auto%>"
+
+#: c-decl.c:4003
+#, gcc-internal-format
+msgid "function definition declared %<register%>"
+msgstr "дефиниција функције деклариÑана као %<register%>"
+
+#: c-decl.c:4005
+#, gcc-internal-format
+msgid "function definition declared %<typedef%>"
+msgstr "дефиниција функције деклариÑана као %<typedef%>"
+
+#: c-decl.c:4007
+#, gcc-internal-format
+msgid "function definition declared %<__thread%>"
+msgstr "дефиниција функције деклариÑана као %<__thread%>"
+
+#: c-decl.c:4023
+#, gcc-internal-format
+msgid "storage class specified for structure field %qs"
+msgstr "Ñкладишна клаÑа наведена за поље Ñтруктуре %qs"
+
+#: c-decl.c:4027 cp/decl.c:7187
+#, gcc-internal-format
+msgid "storage class specified for parameter %qs"
+msgstr "Ñкладишна клаÑа наведена за параметар %qs"
+
+#: c-decl.c:4030 cp/decl.c:7189
+#, gcc-internal-format
+msgid "storage class specified for typename"
+msgstr "Ñкладишна клаÑа наведена за име типа"
+
+#: c-decl.c:4043 cp/decl.c:7206
+#, gcc-internal-format
+msgid "%qs initialized and declared %<extern%>"
+msgstr "%qs уÑпоÑтављено и деклариÑано као %<extern%>"
+
+#: c-decl.c:4045 cp/decl.c:7209
+#, gcc-internal-format
+msgid "%qs has both %<extern%> and initializer"
+msgstr "%qs има и %<extern%> и уÑпоÑтављач"
+
+#: c-decl.c:4050
+#, gcc-internal-format
+msgid "file-scope declaration of %qs specifies %<auto%>"
+msgstr "декларација датотечног доÑега за %qs наводи %<auto%>"
+
+#: c-decl.c:4052
+#, gcc-internal-format
+msgid "file-scope declaration of %qs specifies %<register%>"
+msgstr "декларација датотечног доÑега за %qs наводи %<register%>"
+
+#: c-decl.c:4057 cp/decl.c:7213
+#, gcc-internal-format
+msgid "nested function %qs declared %<extern%>"
+msgstr "угњеждена функција %qs деклариÑана као %<extern%>"
+
+#: c-decl.c:4060 cp/decl.c:7223
+#, gcc-internal-format
+msgid "function-scope %qs implicitly auto and declared %<__thread%>"
+msgstr "%qs доÑега функције имплицитно аутоматÑка и деклараÑина као %<__thread%>"
+
+#. 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:4107 c-decl.c:4301
+#, gcc-internal-format
+msgid "static or type qualifiers in non-parameter array declarator"
+msgstr "Ñтатичка или одредба типа у непараметарÑком декларатору низа"
+
+#: c-decl.c:4153
+#, gcc-internal-format
+msgid "declaration of %qs as array of voids"
+msgstr "декларација %qs као низа празних"
+
+#: c-decl.c:4159
+#, gcc-internal-format
+msgid "declaration of %qs as array of functions"
+msgstr "декларација %qs као низа функција"
+
+#: c-decl.c:4164
+#, gcc-internal-format
+msgid "invalid use of structure with flexible array member"
+msgstr "неиÑправна употреба Ñтруктуре Ñа флекÑибилним чланÑким низом"
+
+#: c-decl.c:4184
+#, gcc-internal-format
+msgid "size of array %qs has non-integer type"
+msgstr "величина низа %qs има нецелобројни тип"
+
+#: c-decl.c:4189
+#, gcc-internal-format
+msgid "ISO C forbids zero-size array %qs"
+msgstr "ИСО Ц забрањује нулту величину низа %qs"
+
+#: c-decl.c:4196
+#, gcc-internal-format
+msgid "size of array %qs is negative"
+msgstr "величина низа %qs је негативна"
+
+#: c-decl.c:4210
+#, gcc-internal-format
+msgid "ISO C90 forbids array %qs whose size can%'t be evaluated"
+msgstr "ИСО Ц 90 забрањује низ %qs чија Ñе величина не може израчунати"
+
+#: c-decl.c:4214
+#, gcc-internal-format
+msgid "ISO C90 forbids variable-size array %qs"
+msgstr "ИСО Ц 90 забрањује низ променљиве величине %qs"
+
+#: c-decl.c:4254 c-decl.c:4423 cp/decl.c:7646
+#, gcc-internal-format
+msgid "size of array %qs is too large"
+msgstr "величина низа %qs је превелика"
+
+#: c-decl.c:4265
+#, gcc-internal-format
+msgid "ISO C90 does not support flexible array members"
+msgstr "ИСО Ц 90 не подржава флекÑибилне чланÑке низове"
+
+#: c-decl.c:4275
+#, gcc-internal-format
+msgid "array type has incomplete element type"
+msgstr "низовни тип има непотпун тип елемента"
+
+#: c-decl.c:4333 cp/decl.c:7307
+#, gcc-internal-format
+msgid "%qs declared as function returning a function"
+msgstr "%qs деклариÑано као функција која враћа функцију"
+
+#: c-decl.c:4338 cp/decl.c:7312
+#, gcc-internal-format
+msgid "%qs declared as function returning an array"
+msgstr "%qs деклариÑано као функција која враћа низ"
+
+#: c-decl.c:4358
+#, gcc-internal-format
+msgid "function definition has qualified void return type"
+msgstr "дефиниција функције има одређен празан повратни тип"
+
+#: c-decl.c:4361
+#, gcc-internal-format
+msgid "type qualifiers ignored on function return type"
+msgstr "одредбе типова Ñе игноришу на повратном типу функције"
+
+#: c-decl.c:4390 c-decl.c:4436 c-decl.c:4531 c-decl.c:4621
+#, gcc-internal-format
+msgid "ISO C forbids qualified function types"
+msgstr "ИСО Ц забрањује одређене функцијÑке типове"
+
+#: c-decl.c:4444
+#, gcc-internal-format
+msgid "typedef %q+D declared %<inline%>"
+msgstr "дефиниција типа %q+D деклариÑана као %<inline%>"
+
+#: c-decl.c:4474
+#, gcc-internal-format
+msgid "ISO C forbids const or volatile function types"
+msgstr "ИСО Ц забрањује конÑтантне или непоÑтојане функцијÑке типове"
+
+#: c-decl.c:4494
+#, gcc-internal-format
+msgid "variable or field %qs declared void"
+msgstr "променљива или поље %qs деклариÑано као празно"
+
+#: c-decl.c:4524
+#, gcc-internal-format
+msgid "attributes in parameter array declarator ignored"
+msgstr "атрибути у параметарÑком декларатору низа игнориÑани"
+
+#: c-decl.c:4558
+#, gcc-internal-format
+msgid "parameter %q+D declared %<inline%>"
+msgstr "параметар %q+D деклариÑан као %<inline%>"
+
+#: c-decl.c:4571
+#, gcc-internal-format
+msgid "field %qs declared as a function"
+msgstr "поље %qs деклариÑано као функција"
+
+#: c-decl.c:4577
+#, gcc-internal-format
+msgid "field %qs has incomplete type"
+msgstr "поље %qs има непотпун тип"
+
+#: c-decl.c:4591 c-decl.c:4603 c-decl.c:4607
+#, gcc-internal-format
+msgid "invalid storage class for function %qs"
+msgstr "неиÑправна Ñкладишна клаÑа за функцију %qs"
+
+#: c-decl.c:4627
+#, gcc-internal-format
+msgid "%<noreturn%> function returns non-void value"
+msgstr "функција Ñа %<noreturn%> враћа непразну вредноÑÑ‚"
+
+#: c-decl.c:4655
+#, gcc-internal-format
+msgid "cannot inline function %<main%>"
+msgstr "функција %<main%> Ñе не може уткати"
+
+#: c-decl.c:4702
+#, gcc-internal-format
+msgid "variable previously declared %<static%> redeclared %<extern%>"
+msgstr "променљива претходно деклариÑана као %<static%> поново деклариÑана као %<extern%>"
+
+#: c-decl.c:4712
+#, gcc-internal-format
+msgid "variable %q+D declared %<inline%>"
+msgstr "променљива %q+D деклариÑана као %<inline%>"
+
+#. A mere warning is sure to result in improper semantics
+#. at runtime. Don't bother to allow this to compile.
+#. A mere warning is sure to result in improper
+#. semantics at runtime. Don't bother to allow this to
+#. compile.
+#: c-decl.c:4742 cp/decl.c:6115 cp/decl.c:8236
+#, gcc-internal-format
+msgid "thread-local storage not supported for this target"
+msgstr "нитно-локално Ñкладиштење није подржано за овај циљ"
+
+#: c-decl.c:4807 c-decl.c:5964
+#, gcc-internal-format
+msgid "function declaration isn%'t a prototype"
+msgstr "декларација функције није прототип"
+
+#: c-decl.c:4815
+#, gcc-internal-format
+msgid "parameter names (without types) in function declaration"
+msgstr "имена параметара (без типова) у декларацији функције"
+
+#: c-decl.c:4848
+#, gcc-internal-format
+msgid "parameter %u (%q+D) has incomplete type"
+msgstr "параметар %u (%q+D) има непотпун тип"
+
+#: c-decl.c:4851
+#, gcc-internal-format
+msgid "%Jparameter %u has incomplete type"
+msgstr "%Jпараметар %u има непотпун тип"
+
+#: c-decl.c:4860
+#, gcc-internal-format
+msgid "parameter %u (%q+D) has void type"
+msgstr "параметар %u (%q+D) има празан тип"
+
+#: c-decl.c:4863
+#, gcc-internal-format
+msgid "%Jparameter %u has void type"
+msgstr "%Jпараметар %u има празан тип"
+
+#: c-decl.c:4923
+#, gcc-internal-format
+msgid "%<void%> as only parameter may not be qualified"
+msgstr "%<void%> као једини параметар не може бити одређен"
+
+#: c-decl.c:4927 c-decl.c:4961
+#, gcc-internal-format
+msgid "%<void%> must be the only parameter"
+msgstr "%<void%> мора бити једини параметар"
+
+#: c-decl.c:4955
+#, gcc-internal-format
+msgid "parameter %q+D has just a forward declaration"
+msgstr "параметар %q+D има Ñамо унапредну декларацију"
+
+#. The %s will be one of 'struct', 'union', or 'enum'.
+#: c-decl.c:5000
+#, gcc-internal-format
+msgid "%<%s %E%> declared inside parameter list"
+msgstr "%<%s %E%> деклариÑано унутар параметарÑке лиÑте"
+
+#. The %s will be one of 'struct', 'union', or 'enum'.
+#: c-decl.c:5004
+#, gcc-internal-format
+msgid "anonymous %s declared inside parameter list"
+msgstr "анонимно %s деклариÑано унутар лиÑте"
+
+#: c-decl.c:5009
+#, gcc-internal-format
+msgid "its scope is only this definition or declaration, which is probably not what you want"
+msgstr "има доÑег Ñамо у овој дефиницији или декларацији, што вероватно није оно што желите"
+
+#: c-decl.c:5142
+#, gcc-internal-format
+msgid "redefinition of %<union %E%>"
+msgstr "поновна дефиниција %<union %E%>"
+
+#: c-decl.c:5144
+#, gcc-internal-format
+msgid "redefinition of %<struct %E%>"
+msgstr "поновна дефиниција %<struct %E%>"
+
+#: c-decl.c:5149
+#, gcc-internal-format
+msgid "nested redefinition of %<union %E%>"
+msgstr "угњеждена поновна дефиниција %<union %E%>"
+
+#: c-decl.c:5151
+#, gcc-internal-format
+msgid "nested redefinition of %<struct %E%>"
+msgstr "угњеждена поновна дефиниција %<struct %E%>"
+
+#: c-decl.c:5222 cp/decl.c:3500
+#, gcc-internal-format
+msgid "declaration does not declare anything"
+msgstr "декларација ништа не декларише"
+
+#: c-decl.c:5226
+#, gcc-internal-format
+msgid "ISO C doesn%'t support unnamed structs/unions"
+msgstr "ИСО Ц не подржава неименоване Ñтрукутре/уније"
+
+#: c-decl.c:5269 c-decl.c:5285
+#, gcc-internal-format
+msgid "duplicate member %q+D"
+msgstr "удвоÑтручени члан %q+D"
+
+#: c-decl.c:5324
+#, gcc-internal-format
+msgid "union has no named members"
+msgstr "унија нема именованих чланова"
+
+#: c-decl.c:5326
+#, gcc-internal-format
+msgid "union has no members"
+msgstr "унија нема чланова"
+
+#: c-decl.c:5331
+#, gcc-internal-format
+msgid "struct has no named members"
+msgstr "Ñтруктура нема именованих чланова"
+
+#: c-decl.c:5333
+#, gcc-internal-format
+msgid "struct has no members"
+msgstr "Ñтруктура нема чланова"
+
+#: c-decl.c:5392
+#, gcc-internal-format
+msgid "%Jflexible array member in union"
+msgstr "%JфлекÑибилан чланÑки низ у унији"
+
+#: c-decl.c:5397
+#, gcc-internal-format
+msgid "%Jflexible array member not at end of struct"
+msgstr "%JфлекÑибилан чланÑки низ није на крају Ñтруктуре"
+
+#: c-decl.c:5402
+#, gcc-internal-format
+msgid "%Jflexible array member in otherwise empty struct"
+msgstr "%JфлекÑибилан чланÑки низ у иначе празној Ñтруктури"
+
+#: c-decl.c:5409
+#, gcc-internal-format
+msgid "%Jinvalid use of structure with flexible array member"
+msgstr "%JнеиÑправна употреба Ñтруктуре Ñа флекÑибилним чланÑким низом"
+
+#: c-decl.c:5520
+#, gcc-internal-format
+msgid "union cannot be made transparent"
+msgstr "унија не може бити учињена провидном"
+
+#: c-decl.c:5591
+#, gcc-internal-format
+msgid "nested redefinition of %<enum %E%>"
+msgstr "угњеждена поновна дефиниција %<enum %E%>"
+
+#. This enum is a named one that has been declared already.
+#: c-decl.c:5598
+#, gcc-internal-format
+msgid "redeclaration of %<enum %E%>"
+msgstr "поновљена декларација %<enum %E%>"
+
+#: c-decl.c:5661
+#, gcc-internal-format
+msgid "enumeration values exceed range of largest integer"
+msgstr "вредноÑти у набрајању премашују опÑег највећег целог броја"
+
+#: c-decl.c:5678
+#, gcc-internal-format
+msgid "specified mode too small for enumeral values"
+msgstr "наведени режим је премали за набројиве вредноÑти"
+
+#: c-decl.c:5774
+#, gcc-internal-format
+msgid "enumerator value for %qE is not an integer constant"
+msgstr "вредноÑÑ‚ набрајача за %qE није целобројна конÑтанта"
+
+#: c-decl.c:5791
+#, gcc-internal-format
+msgid "overflow in enumeration values"
+msgstr "преливање у вредноÑтима набрајача"
+
+#: c-decl.c:5796
+#, gcc-internal-format
+msgid "ISO C restricts enumerator values to range of %<int%>"
+msgstr "ИСО Ц ограничава вредноÑти набрајача на опÑег %<int%>"
+
+#: c-decl.c:5892
+#, gcc-internal-format
+msgid "return type is an incomplete type"
+msgstr "повратни тип је непотпун тип"
+
+#: c-decl.c:5900
+#, gcc-internal-format
+msgid "return type defaults to %<int%>"
+msgstr "повратни тип Ñпада на %<int%>"
+
+#: c-decl.c:5971
+#, gcc-internal-format
+msgid "no previous prototype for %q+D"
+msgstr "нема претходног прототипа за %q+D"
+
+#: c-decl.c:5980
+#, gcc-internal-format
+msgid "%q+D was used with no prototype before its definition"
+msgstr "%q+D је употребљено без прототипа пре дефиниције"
+
+#: c-decl.c:5986
+#, gcc-internal-format
+msgid "no previous declaration for %q+D"
+msgstr "нема претходне декларације за %q+D"
+
+#: c-decl.c:5996
+#, gcc-internal-format
+msgid "%q+D was used with no declaration before its definition"
+msgstr "%q+D је употребљено без декларације пре дефиниције"
+
+#: c-decl.c:6028 c-decl.c:6545
+#, gcc-internal-format
+msgid "return type of %q+D is not %<int%>"
+msgstr "повратни тип за %q+D није %<int%>"
+
+#: c-decl.c:6043
+#, gcc-internal-format
+msgid "first argument of %q+D should be %<int%>"
+msgstr "први аргумент за %q+D треба да је %<int%>"
+
+#: c-decl.c:6051
+#, gcc-internal-format
+msgid "second argument of %q+D should be %<char **%>"
+msgstr "други аргумент за %q+D треба да је %<char **%>"
+
+#: c-decl.c:6060
+#, gcc-internal-format
+msgid "third argument of %q+D should probably be %<char **%>"
+msgstr "трећи аргумент за %q+D вероватно треба да је %<char **%>"
+
+#: c-decl.c:6070
+#, gcc-internal-format
+msgid "%q+D takes only zero or two arguments"
+msgstr "%q+D прима или ниједан или два аргумента"
+
+#: c-decl.c:6073
+#, gcc-internal-format
+msgid "%q+D is normally a non-static function"
+msgstr "%q+D је обично неÑтатичка функција"
+
+#: c-decl.c:6119
+#, gcc-internal-format
+msgid "%Jold-style parameter declarations in prototyped function definition"
+msgstr "%JÑтаровремÑка декларација параметара у дефиницији функције Ñа прототипом"
+
+#: c-decl.c:6133
+#, gcc-internal-format
+msgid "%Jtraditional C rejects ISO C style function definitions"
+msgstr "%Jтрадиционални Ц одбија дефиниције функција у Ñтилу ИСО Ц-а"
+
+#: c-decl.c:6149
+#, gcc-internal-format
+msgid "%Jparameter name omitted"
+msgstr "%JизоÑтављено име параметра"
+
+#: c-decl.c:6183
+#, gcc-internal-format
+msgid "%Jold-style function definition"
+msgstr "%JÑтаровремÑка дефиниција функције"
+
+#: c-decl.c:6192
+#, gcc-internal-format
+msgid "%Jparameter name missing from parameter list"
+msgstr "%JнедоÑтаје име параметра у лиÑти параметара"
+
+#: c-decl.c:6203
+#, gcc-internal-format
+msgid "%q+D declared as a non-parameter"
+msgstr "%q+D деклариÑано као не-параметарÑко"
+
+#: c-decl.c:6208
+#, gcc-internal-format
+msgid "multiple parameters named %q+D"
+msgstr "више параметара по имену %q+D"
+
+#: c-decl.c:6216
+#, gcc-internal-format
+msgid "parameter %q+D declared with void type"
+msgstr "параметар %q+D деклариÑан Ñа празним типом"
+
+#: c-decl.c:6233 c-decl.c:6235
+#, gcc-internal-format
+msgid "type of %q+D defaults to %<int%>"
+msgstr "тип за %q+D Ñпада на %<int%>"
+
+#: c-decl.c:6254
+#, gcc-internal-format
+msgid "parameter %q+D has incomplete type"
+msgstr "параметар %q+D има непотпун тип"
+
+#: c-decl.c:6260
+#, gcc-internal-format
+msgid "declaration for parameter %q+D but no such parameter"
+msgstr "декларација за параметар %q+D, али нема таквог"
+
+#: c-decl.c:6310
+#, gcc-internal-format
+msgid "number of arguments doesn%'t match built-in prototype"
+msgstr "број аргумената не одговора уграђеном прототипу"
+
+#: c-decl.c:6314
+#, gcc-internal-format
+msgid "number of arguments doesn%'t match prototype"
+msgstr "број аргумената не одговара прототипу"
+
+#: c-decl.c:6315 c-decl.c:6355 c-decl.c:6368
+#, gcc-internal-format
+msgid "%Hprototype declaration"
+msgstr "%Hдекларација прототипа"
+
+#: c-decl.c:6349
+#, gcc-internal-format
+msgid "promoted argument %qD doesn%'t match built-in prototype"
+msgstr "унапређени аргумент %qD не одговара уграђеном прототипу"
+
+#: c-decl.c:6353
+#, gcc-internal-format
+msgid "promoted argument %qD doesn%'t match prototype"
+msgstr "унапређени аргумент %qD не одговара прототипу"
+
+#: c-decl.c:6363
+#, gcc-internal-format
+msgid "argument %qD doesn%'t match built-in prototype"
+msgstr "аргумент %qD не одговара уграђеном прототипу"
+
+#: c-decl.c:6367
+#, gcc-internal-format
+msgid "argument %qD doesn%'t match prototype"
+msgstr "аргумент %qD не одговара прототипу"
+
+#: c-decl.c:6590 cp/decl.c:10962
+#, gcc-internal-format
+msgid "no return statement in function returning non-void"
+msgstr "нема повратне наредбе у функцији која враћа непразан тип"
+
+#: c-decl.c:6599
+#, gcc-internal-format
+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:6692
+#, gcc-internal-format
+msgid "%<for%> loop initial declaration used outside C99 mode"
+msgstr "Иницијална декларација у %<for%> петљи употребљена ван режима Ц-а 99"
+
+#: c-decl.c:6721
+#, gcc-internal-format
+msgid "declaration of static variable %q+D in %<for%> loop initial declaration"
+msgstr "декларација Ñтатичке променљиве %q+D у почетној декларацији %<for%> петље"
+
+#: c-decl.c:6724
+#, gcc-internal-format
+msgid "declaration of %<extern%> variable %q+D in %<for%> loop initial declaration"
+msgstr "декларација Ñпољашње променљиве %q+D у почетној декларацији %<for%> петље"
+
+#: c-decl.c:6729
+#, gcc-internal-format
+msgid "%<struct %E%> declared in %<for%> loop initial declaration"
+msgstr "%<struct %E%> деклариÑана у почетној декларацији %<for%> петље"
+
+#: c-decl.c:6733
+#, gcc-internal-format
+msgid "%<union %E%> declared in %<for%> loop initial declaration"
+msgstr "%<union %E%> деклариÑана у почетној декларацији %<for%> петље"
+
+#: c-decl.c:6737
+#, gcc-internal-format
+msgid "%<enum %E%> declared in %<for%> loop initial declaration"
+msgstr "%<enum %E%> деклариÑан у почетној декларацији %<for%> петље"
+
+#: c-decl.c:6741
+#, gcc-internal-format
+msgid "declaration of non-variable %q+D in %<for%> loop initial declaration"
+msgstr "декларација не-променљиве %q+D у почетној декларацији %<for%> петље"
+
+#: c-decl.c:7025 c-decl.c:7176 c-decl.c:7386
+#, gcc-internal-format
+msgid "duplicate %qE"
+msgstr "удвоÑтручено %qE"
+
+#: c-decl.c:7048 c-decl.c:7185 c-decl.c:7288
+#, gcc-internal-format
+msgid "two or more data types in declaration specifiers"
+msgstr "два или више типова података у наводиоцима декларације"
+
+#: c-decl.c:7060 cp/parser.c:7512
+#, gcc-internal-format
+msgid "%<long long long%> is too long for GCC"
+msgstr "%<long long long%> је предуго за ГЦЦ"
+
+#: c-decl.c:7067 c-decl.c:7259
+#, gcc-internal-format
+msgid "both %<long long%> and %<double%> in declaration specifiers"
+msgstr "и %<long long%> и %<double%> у наводиоцима декларације"
+
+#: c-decl.c:7073
+#, gcc-internal-format
+msgid "ISO C90 does not support %<long long%>"
+msgstr "ИСО Ц 90 не подржава %<long long%>"
+
+#: c-decl.c:7078 c-decl.c:7098
+#, gcc-internal-format
+msgid "both %<long%> and %<short%> in declaration specifiers"
+msgstr "и %<long%> и %<short%> у наводиоцима декларације"
+
+#: c-decl.c:7081 c-decl.c:7192
+#, gcc-internal-format
+msgid "both %<long%> and %<void%> in declaration specifiers"
+msgstr "и %<long%> и %<void%> у наводиоцима декларације"
+
+#: c-decl.c:7084 c-decl.c:7211
+#, gcc-internal-format
+msgid "both %<long%> and %<_Bool%> in declaration specifiers"
+msgstr "и %<long%> и %<_Bool%> у наводиоцима декларације"
+
+#: c-decl.c:7087 c-decl.c:7230
+#, gcc-internal-format
+msgid "both %<long%> and %<char%> in declaration specifiers"
+msgstr "и %<long%> и %<char%> у наводиоцима декларације"
+
+#: c-decl.c:7090 c-decl.c:7243
+#, gcc-internal-format
+msgid "both %<long%> and %<float%> in declaration specifiers"
+msgstr "и %<long%> и %<float%> у наводиоцима декларације"
+
+#: c-decl.c:7101 c-decl.c:7195
+#, gcc-internal-format
+msgid "both %<short%> and %<void%> in declaration specifiers"
+msgstr "и %<short%> и %<void%> у наводиоцима декларације"
+
+#: c-decl.c:7104 c-decl.c:7214
+#, gcc-internal-format
+msgid "both %<short%> and %<_Bool%> in declaration specifiers"
+msgstr "и %<short%> и %<_Bool%> у наводиоцима декларације"
+
+#: c-decl.c:7107 c-decl.c:7233
+#, gcc-internal-format
+msgid "both %<short%> and %<char%> in declaration specifiers"
+msgstr "и %<short%> и %<char%> у наводиоцима декларације"
+
+#: c-decl.c:7110 c-decl.c:7246
+#, gcc-internal-format
+msgid "both %<short%> and %<float%> in declaration specifiers"
+msgstr "и %<short%> и %<float%> у наводиоцима декларације"
+
+#: c-decl.c:7113 c-decl.c:7262
+#, gcc-internal-format
+msgid "both %<short%> and %<double%> in declaration specifiers"
+msgstr "и %<short%> и %<double%> у наводиоцима декларације"
+
+#: c-decl.c:7121 c-decl.c:7141
+#, gcc-internal-format
+msgid "both %<signed%> and %<unsigned%> in declaration specifiers"
+msgstr "и %<signed%> и %<unsigned%> у наводиоцима декларације"
+
+#: c-decl.c:7124 c-decl.c:7198
+#, gcc-internal-format
+msgid "both %<signed%> and %<void%> in declaration specifiers"
+msgstr "и %<signed%> и %<void%> у наводиоцима декларације"
+
+#: c-decl.c:7127 c-decl.c:7217
+#, gcc-internal-format
+msgid "both %<signed%> and %<_Bool%> in declaration specifiers"
+msgstr "и %<signed%> и %<_Bool%> у наводиоцима декларације"
+
+#: c-decl.c:7130 c-decl.c:7249
+#, gcc-internal-format
+msgid "both %<signed%> and %<float%> in declaration specifiers"
+msgstr "и %<signed%> и %<float%> у наводиоцима декларације"
+
+#: c-decl.c:7133 c-decl.c:7265
+#, gcc-internal-format
+msgid "both %<signed%> and %<double%> in declaration specifiers"
+msgstr "и %<signed%> и %<double%> у наводиоцима декларације"
+
+#: c-decl.c:7144 c-decl.c:7201
+#, gcc-internal-format
+msgid "both %<unsigned%> and %<void%> in declaration specifiers"
+msgstr "и %<unsigned%> и %<void%> у наводиоцима декларације"
+
+#: c-decl.c:7147 c-decl.c:7220
+#, gcc-internal-format
+msgid "both %<unsigned%> and %<_Bool%> in declaration specifiers"
+msgstr "и %<unsigned%> и %<_Bool%> у наводиоцима декларације"
+
+#: c-decl.c:7150 c-decl.c:7252
+#, gcc-internal-format
+msgid "both %<unsigned%> and %<float%> in declaration specifiers"
+msgstr "и %<unsigned%> и %<float%> у наводиоцима декларације"
+
+#: c-decl.c:7153 c-decl.c:7268
+#, gcc-internal-format
+msgid "both %<unsigned%> and %<double%> in declaration specifiers"
+msgstr "и %<unsigned%> и %<double%> у наводиоцима декларације"
+
+#: c-decl.c:7161
+#, gcc-internal-format
+msgid "ISO C90 does not support complex types"
+msgstr "ИСО Ц 90 не подржава комплекÑне типове"
+
+#: c-decl.c:7163 c-decl.c:7204
+#, gcc-internal-format
+msgid "both %<complex%> and %<void%> in declaration specifiers"
+msgstr "и %<complex%> и %<void%> у наводиоцима декларације"
+
+#: c-decl.c:7166 c-decl.c:7223
+#, gcc-internal-format
+msgid "both %<complex%> and %<_Bool%> in declaration specifiers"
+msgstr "и %<complex%> и %<_Bool%> у наводиоцима декларације"
+
+#: c-decl.c:7305
+#, gcc-internal-format
+msgid "%qE fails to be a typedef or built in type"
+msgstr "%qE није ни по дефиницији типа ни уграђени тип"
+
+#: c-decl.c:7337
+#, gcc-internal-format
+msgid "%qE is not at beginning of declaration"
+msgstr "%qE није на почетку декларације"
+
+#: c-decl.c:7351
+#, gcc-internal-format
+msgid "%<__thread%> used with %<auto%>"
+msgstr "%<__thread%> употребљено уз %<auto%>"
+
+#: c-decl.c:7353
+#, gcc-internal-format
+msgid "%<__thread%> used with %<register%>"
+msgstr "%<__thread%> употребљено уз %<register%>"
+
+#: c-decl.c:7355
+#, gcc-internal-format
+msgid "%<__thread%> used with %<typedef%>"
+msgstr "%<__thread%> употребљено уз %<typedef%>"
+
+#: c-decl.c:7366 cp/parser.c:7398
+#, gcc-internal-format
+msgid "%<__thread%> before %<extern%>"
+msgstr "%<__thread%> пре %<extern%>"
+
+#: c-decl.c:7375 cp/parser.c:7388
+#, gcc-internal-format
+msgid "%<__thread%> before %<static%>"
+msgstr "%<__thread%> пре %<static%>"
+
+#: c-decl.c:7391
+#, gcc-internal-format
+msgid "multiple storage classes in declaration specifiers"
+msgstr "вишеÑтруке Ñкладишне клаÑе у наводиоцима декларације"
+
+#: c-decl.c:7398
+#, gcc-internal-format
+msgid "%<__thread%> used with %qE"
+msgstr "%<__thread%> употребљено уз %qE"
+
+#: c-decl.c:7452
+#, gcc-internal-format
+msgid "ISO C does not support plain %<complex%> meaning %<double complex%>"
+msgstr "ИСО Ц не подржава да обичан %<complex%> значи %<double complex%>"
+
+#: c-decl.c:7497 c-decl.c:7523
+#, gcc-internal-format
+msgid "ISO C does not support complex integer types"
+msgstr "ИСО Ц не подржава комплекÑне целобројне типове"
+
+#: c-decl.c:7597 toplev.c:822
+#, gcc-internal-format
+msgid "%q+F used but never defined"
+msgstr "%q+F употребљено али недефиниÑано"
+
+#: c-format.c:97 c-format.c:206
+#, gcc-internal-format
+msgid "format string has invalid operand number"
+msgstr "форматирајућа ниÑка има неиÑправан број операнада"
+
+#: c-format.c:114
+#, gcc-internal-format
+msgid "function does not return string type"
+msgstr "функција не враћа податак типа ниÑке"
+
+#: c-format.c:143
+#, gcc-internal-format
+msgid "format string argument not a string type"
+msgstr "аргумент форматирајуће ниÑке није типа ниÑке"
+
+#: c-format.c:186
+#, gcc-internal-format
+msgid "unrecognized format specifier"
+msgstr "непрепознат наводилац формата"
+
+#: c-format.c:198
+#, gcc-internal-format
+msgid "%qE is an unrecognized format function type"
+msgstr "%qE је непрепознат тип форматирајуће функције"
+
+#: c-format.c:212
+#, gcc-internal-format
+msgid "%<...%> has invalid operand number"
+msgstr "%<...%> има неиÑправан број операнада"
+
+#: c-format.c:219
+#, gcc-internal-format
+msgid "format string argument follows the args to be formatted"
+msgstr "аргумент форматирајуће ниÑке прати аргументе које треба форматирати"
+
+#: c-format.c:899
+#, gcc-internal-format
+msgid "function might be possible candidate for %qs format attribute"
+msgstr "функција може бити могући кандидат за форматÑки атрибут %qs"
+
+#: c-format.c:991 c-format.c:1012 c-format.c:2026
+#, gcc-internal-format
+msgid "missing $ operand number in format"
+msgstr "недоÑтаје број операнда $ у формату"
+
+#: c-format.c:1021
+#, gcc-internal-format
+msgid "%s does not support %%n$ operand number formats"
+msgstr "%s не подржава формат %%n$ за број операнда"
+
+#: c-format.c:1028
+#, gcc-internal-format
+msgid "operand number out of range in format"
+msgstr "број операнда ван опÑега у формату"
+
+#: c-format.c:1051
+#, gcc-internal-format
+msgid "format argument %d used more than once in %s format"
+msgstr "форматирајући аргумент %d употребљен више од једанпут у формату %s"
+
+#: c-format.c:1083
+#, gcc-internal-format
+msgid "$ operand number used after format without operand number"
+msgstr "број операнда $ употребљен поÑле формата без броја операнда"
+
+#: c-format.c:1114
+#, gcc-internal-format
+msgid "format argument %d unused before used argument %d in $-style format"
+msgstr "форматирајући аргумент %d није употребљен пре употребљеног аргумента %d у формату типа $"
+
+#: c-format.c:1209
+#, gcc-internal-format
+msgid "format not a string literal, format string not checked"
+msgstr "формат није доÑловна ниÑка, формат није проверен"
+
+#: c-format.c:1224 c-format.c:1227
+#, gcc-internal-format
+msgid "format not a string literal and no format arguments"
+msgstr "формат није доÑловна ниÑка и нема форматирајућих аргумената"
+
+#: c-format.c:1230
+#, gcc-internal-format
+msgid "format not a string literal, argument types not checked"
+msgstr "формат није доÑловна ниÑка, типови аргумената ниÑу проверени"
+
+#: c-format.c:1243
+#, gcc-internal-format
+msgid "too many arguments for format"
+msgstr "превише аргумената за формат"
+
+#: c-format.c:1246
+#, gcc-internal-format
+msgid "unused arguments in $-style format"
+msgstr "неупотребљени аргументи у формату типа $"
+
+#: c-format.c:1249
+#, gcc-internal-format
+msgid "zero-length %s format string"
+msgstr "форматирајућа ниÑка %s нулте дужине"
+
+#: c-format.c:1253
+#, gcc-internal-format
+msgid "format is a wide character string"
+msgstr "формат је широкознаковна ниÑка"
+
+#: c-format.c:1256
+#, gcc-internal-format
+msgid "unterminated format string"
+msgstr "неодређена форматирајућа ниÑка"
+
+#: c-format.c:1470
+#, gcc-internal-format
+msgid "embedded %<\\0%> in format"
+msgstr "угњеждено %<\\0%> у формату"
+
+#: c-format.c:1485
+#, gcc-internal-format
+msgid "spurious trailing %<%%%> in format"
+msgstr "Ñувишно пратеће %<%%%> у формату"
+
+#: c-format.c:1529 c-format.c:1774
+#, gcc-internal-format
+msgid "repeated %s in format"
+msgstr "поновљено %s у формату"
+
+#: c-format.c:1542
+#, gcc-internal-format
+msgid "missing fill character at end of strfmon format"
+msgstr "недоÑтаје знак попуне на крају формата strfmon"
+
+#: c-format.c:1586 c-format.c:1688 c-format.c:1973 c-format.c:2038
+#, gcc-internal-format
+msgid "too few arguments for format"
+msgstr "премало аргумената за формат"
+
+#: c-format.c:1627
+#, gcc-internal-format
+msgid "zero width in %s format"
+msgstr "нулта дужина у формату %s"
+
+#: c-format.c:1645
+#, gcc-internal-format
+msgid "empty left precision in %s format"
+msgstr "празна лева тачноÑÑ‚ у формату %s"
+
+#: c-format.c:1718
+#, gcc-internal-format
+msgid "empty precision in %s format"
+msgstr "празна тачноÑÑ‚ у формату %s"
+
+#: c-format.c:1758
+#, gcc-internal-format
+msgid "%s does not support the %qs %s length modifier"
+msgstr "%s не подржава модификатор дужине %qs за %s"
+
+#: c-format.c:1808
+#, gcc-internal-format
+msgid "conversion lacks type at end of format"
+msgstr "претварању недоÑтаје тип на крају формата"
+
+#: c-format.c:1819
+#, gcc-internal-format
+msgid "unknown conversion type character %qc in format"
+msgstr "непознат знак типа претварања %qc у формату"
+
+#: c-format.c:1822
+#, gcc-internal-format
+msgid "unknown conversion type character 0x%x in format"
+msgstr "непознат знак типа претварања 0x%x у формату"
+
+#: c-format.c:1829
+#, gcc-internal-format
+msgid "%s does not support the %<%%%c%> %s format"
+msgstr "%s не подржава %<%%%c%> формат за %s"
+
+#: c-format.c:1845
+#, gcc-internal-format
+msgid "%s used with %<%%%c%> %s format"
+msgstr "%s употребљено уз %<%%%c%> формат за %s"
+
+#: c-format.c:1854
+#, gcc-internal-format
+msgid "%s does not support %s"
+msgstr "%s не подржава %s"
+
+#: c-format.c:1864
+#, gcc-internal-format
+msgid "%s does not support %s with the %<%%%c%> %s format"
+msgstr "%s не подржава %s Ñа %<%%%c%> форматом за %s"
+
+#: c-format.c:1898
+#, gcc-internal-format
+msgid "%s ignored with %s and %<%%%c%> %s format"
+msgstr "%s игнориÑано Ñа %s и %<%%%c%> форматом за %s"
+
+#: c-format.c:1902
+#, gcc-internal-format
+msgid "%s ignored with %s in %s format"
+msgstr "%s игнориÑано Ñа %s у формату %s"
+
+#: c-format.c:1909
+#, gcc-internal-format
+msgid "use of %s and %s together with %<%%%c%> %s format"
+msgstr "употреба %s и %s заједно Ñа %<%%%c%> форматом за %s"
+
+#: c-format.c:1913
+#, gcc-internal-format
+msgid "use of %s and %s together in %s format"
+msgstr "употреба %s и %s заједно у формату %s"
+
+#: c-format.c:1932
+#, gcc-internal-format
+msgid "%<%%%c%> yields only last 2 digits of year in some locales"
+msgstr "%<%%%c%> даје Ñамо поÑледње две цифре године у неким локалитетима"
+
+#: c-format.c:1935
+#, gcc-internal-format
+msgid "%<%%%c%> yields only last 2 digits of year"
+msgstr "%<%%%c%> даје Ñамо поÑледње две цифре године"
+
+#. The end of the format string was reached.
+#: c-format.c:1952
+#, gcc-internal-format
+msgid "no closing %<]%> for %<%%[%> format"
+msgstr "нема затварајућег %<]%> за формат %<%%[%>"
+
+#: c-format.c:1966
+#, gcc-internal-format
+msgid "use of %qs length modifier with %qc type character"
+msgstr "употреба модификатора дужине %qs Ñа знаком типа %qc"
+
+#: c-format.c:1988
+#, gcc-internal-format
+msgid "%s does not support the %<%%%s%c%> %s format"
+msgstr "%s не подржава %<%%%s%c%> формат за %s"
+
+#: c-format.c:2005
+#, gcc-internal-format
+msgid "operand number specified with suppressed assignment"
+msgstr "број операнда наведен Ñа Ñузбијеном доделом"
+
+#: c-format.c:2008
+#, gcc-internal-format
+msgid "operand number specified for format taking no argument"
+msgstr "број операнда наведен за формат који не узима ниједан аргумент"
+
+#: c-format.c:2151
+#, gcc-internal-format
+msgid "writing through null pointer (argument %d)"
+msgstr "пиÑање кроз нулти показивач (аргумент %d)"
+
+#: c-format.c:2159
+#, gcc-internal-format
+msgid "reading through null pointer (argument %d)"
+msgstr "читање кроз нулти показивач (аргумент %d)"
+
+#: c-format.c:2179
+#, gcc-internal-format
+msgid "writing into constant object (argument %d)"
+msgstr "пиÑање у конÑтантан објекат (аргумент %d)"
+
+#: c-format.c:2190
+#, gcc-internal-format
+msgid "extra type qualifiers in format argument (argument %d)"
+msgstr "Ñувишна одредба типа у форматирајућем аргументу (аргумент %d)"
+
+#: c-format.c:2301
+#, gcc-internal-format
+msgid "%s should have type %<%s%s%>, but argument %d has type %qT"
+msgstr "%s треба да је типа %<%s%s%>, али аргумент %d је типа %qT"
+
+#: c-format.c:2305
+#, gcc-internal-format
+msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT"
+msgstr "формат %q.*s очекује тип %<%s%s%>, али аргумент %d је типа %qT"
+
+#: c-format.c:2313
+#, gcc-internal-format
+msgid "%s should have type %<%T%s%>, but argument %d has type %qT"
+msgstr "%s треба да је типа %<%T%s%>, али аргумент %d је типа %qT"
+
+#: c-format.c:2317
+#, gcc-internal-format
+msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT"
+msgstr "формат %q.*s очекује тип %<%T%s%>, али аргумент %d је типа %qT"
+
+#: c-format.c:2376 c-format.c:2382 c-format.c:2532
+#, gcc-internal-format
+msgid "%<__gcc_host_wide_int__%> is not defined as a type"
+msgstr "%<__gcc_host_wide_int__%> није дефиниÑано као тип"
+
+#: c-format.c:2389 c-format.c:2542
+#, gcc-internal-format
+msgid "%<__gcc_host_wide_int__%> is not defined as %<long%> or %<long long%>"
+msgstr "%<__gcc_host_wide_int__%> није дефиниÑано као %<long%> или %<long long%>"
+
+#: c-format.c:2438
+#, gcc-internal-format
+msgid "%<locus%> is not defined as a type"
+msgstr "%<locus%> није дефиниÑано као тип"
+
+#: c-format.c:2491
+#, gcc-internal-format
+msgid "%<location_t%> is not defined as a type"
+msgstr "%<location_t%> није дефиниÑано као тип"
+
+#: c-format.c:2508
+#, gcc-internal-format
+msgid "%<tree%> is not defined as a type"
+msgstr "%<tree%> није дефиниÑано као тип"
+
+#: c-format.c:2513
+#, gcc-internal-format
+msgid "%<tree%> is not defined as a pointer type"
+msgstr "%<tree%> није дефиниÑано као показивачки тип"
+
+#: c-format.c:2724
+#, gcc-internal-format
+msgid "args to be formatted is not %<...%>"
+msgstr "аргументи за форматирање ниÑу %<...%>"
+
+#: c-format.c:2733
+#, gcc-internal-format
+msgid "strftime formats cannot format arguments"
+msgstr "формати strftime не могу форматирати аргументе"
+
+#: c-lex.c:254
+#, gcc-internal-format
+msgid "badly nested C headers from preprocessor"
+msgstr "лоше угњеждено Ц заглавље из предобрађивача"
+
+#: c-lex.c:302
+#, gcc-internal-format
+msgid "%Hignoring #pragma %s %s"
+msgstr "%Hигноришем #pragma %s %s"
+
+#. ... or not.
+#: c-lex.c:412
+#, gcc-internal-format
+msgid "%Hstray %<@%> in program"
+msgstr "%Hзалутало %<@%> у програму"
+
+#: c-lex.c:426
+#, gcc-internal-format
+msgid "stray %qs in program"
+msgstr "залутало %qs у програму"
+
+#: c-lex.c:436
+#, gcc-internal-format
+msgid "missing terminating %c character"
+msgstr "недоÑтаје окончавајући знак %c"
+
+#: c-lex.c:438
+#, gcc-internal-format
+msgid "stray %qc in program"
+msgstr "залутало %qc у програму"
+
+#: c-lex.c:440
+#, gcc-internal-format
+msgid "stray %<\\%o%> in program"
+msgstr "залутало %<\\%o%> у програму"
+
+#: c-lex.c:601
+#, gcc-internal-format
+msgid "this decimal constant is unsigned only in ISO C90"
+msgstr "ова декадна конÑтанта је неозначена Ñамо у ИЦО Ц-у 90"
+
+#: c-lex.c:605
+#, gcc-internal-format
+msgid "this decimal constant would be unsigned in ISO C90"
+msgstr "ова декадна конÑтанта би била неозначена у ИЦО Ц-у 90"
+
+#: c-lex.c:621
+#, gcc-internal-format
+msgid "integer constant is too large for %qs type"
+msgstr "целобројна конÑтанта превелика за тип %qs"
+
+#: c-lex.c:687
+#, gcc-internal-format
+msgid "floating constant exceeds range of %<%s%>"
+msgstr "конÑтанта у покретном зарезу премашује опÑег за %<%s%>"
+
+#: c-lex.c:770
+#, gcc-internal-format
+msgid "traditional C rejects string constant concatenation"
+msgstr "традиционални Ц одбија надовезивање конÑтантних ниÑки"
+
+#: c-objc-common.c:81
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it is suppressed using -fno-inline"
+msgstr "функција %q+F не може никако бити уткана јер је то Ñузбијено помоћу -fno-inline"
+
+#: c-objc-common.c:91
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it might not be bound within this unit of translation"
+msgstr "функција %q+F не може никако бити уткана јер можда није ограничена у оквиру ове преводилачке јединице"
+
+#: c-objc-common.c:99
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses attributes conflicting with inlining"
+msgstr "функција %q+F не може никако бити уткана јер кориÑти атрибуте Ñукобљене Ñа уткивањем"
+
+#: c-opts.c:147
+#, gcc-internal-format
+msgid "no class name specified with %qs"
+msgstr "нема имена клаÑе наведеног помоћу %qs"
+
+#: c-opts.c:151
+#, gcc-internal-format
+msgid "assertion missing after %qs"
+msgstr "недоÑтаје тврдња поÑле %qs"
+
+#: c-opts.c:156
+#, gcc-internal-format
+msgid "macro name missing after %qs"
+msgstr "недоÑтаје име макроа поÑле %qs"
+
+#: c-opts.c:165
+#, gcc-internal-format
+msgid "missing path after %qs"
+msgstr "недоÑтаје путања поÑле %qs"
+
+#: c-opts.c:174
+#, gcc-internal-format
+msgid "missing filename after %qs"
+msgstr "недоÑтаје име датотеке поÑле %qs"
+
+#: c-opts.c:179
+#, gcc-internal-format
+msgid "missing makefile target after %qs"
+msgstr "недоÑтаје Ñправљачки циљ поÑле %qs"
+
+#: c-opts.c:319
+#, gcc-internal-format
+msgid "-I- specified twice"
+msgstr "-I- наведено двапут"
+
+#: c-opts.c:322
+#, gcc-internal-format
+msgid "obsolete option -I- used, please use -iquote instead"
+msgstr "употребљена заÑтарела опција -I-, кориÑтите -iquote умеÑто ње"
+
+#: c-opts.c:492
+#, gcc-internal-format
+msgid "argument %qs to %<-Wnormalized%> not recognized"
+msgstr "аргумент %qs за %<-Wnormalized%> није препознат"
+
+#: c-opts.c:576
+#, gcc-internal-format
+msgid "switch %qs is no longer supported"
+msgstr "прекидач %qs више није подржан"
+
+#: c-opts.c:686
+#, gcc-internal-format
+msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"
+msgstr "-fhandle-exceptions је преименовано у -fexceptions (и Ñада је подразумевано укључено)"
+
+#: c-opts.c:868
+#, gcc-internal-format
+msgid "output filename specified twice"
+msgstr "излазна датотека наведена двапут"
+
+#: c-opts.c:1012
+#, gcc-internal-format
+msgid "-Wformat-y2k ignored without -Wformat"
+msgstr "-Wformat-y2k Ñе игнорише без -Wformat"
+
+#: c-opts.c:1014
+#, gcc-internal-format
+msgid "-Wformat-extra-args ignored without -Wformat"
+msgstr "-Wformat-extra-args Ñе игнорише без -Wformat"
+
+#: c-opts.c:1016
+#, gcc-internal-format
+msgid "-Wformat-zero-length ignored without -Wformat"
+msgstr "-Wformat-zero-length Ñе игнорише без -Wformat"
+
+#: c-opts.c:1018
+#, gcc-internal-format
+msgid "-Wformat-nonliteral ignored without -Wformat"
+msgstr "-Wformat-nonliteral Ñе игнорише без -Wformat"
+
+#: c-opts.c:1020
+#, gcc-internal-format
+msgid "-Wformat-security ignored without -Wformat"
+msgstr "-Wformat-security Ñе игнорише без -Wformat"
+
+#: c-opts.c:1040
+#, gcc-internal-format
+msgid "opening output file %s: %m"
+msgstr "отварам улазну датотеку %s: %m"
+
+#: c-opts.c:1045
+#, gcc-internal-format
+msgid "too many filenames given. Type %s --help for usage"
+msgstr "задато је превише датотека. Упишите %s --help за употребу"
+
+#: c-opts.c:1131
+#, gcc-internal-format
+msgid "YYDEBUG was not defined at build time, -dy ignored"
+msgstr "YYDEBUG није дефиниÑано приликом градње, -dy Ñе игнорише"
+
+#: c-opts.c:1177
+#, gcc-internal-format
+msgid "opening dependency file %s: %m"
+msgstr "отварам датотеку завиÑноÑти %s: %m"
+
+#: c-opts.c:1187
+#, gcc-internal-format
+msgid "closing dependency file %s: %m"
+msgstr "затварам датотеку завиÑноÑти %s: %m"
+
+#: c-opts.c:1190
+#, gcc-internal-format
+msgid "when writing output to %s: %m"
+msgstr "када упиÑујем излаз у %s: %m"
+
+#: c-opts.c:1270
+#, gcc-internal-format
+msgid "to generate dependencies you must specify either -M or -MM"
+msgstr "да биÑте Ñтворили завиÑноÑти морате навеÑти или -M или -MM"
+
+#: c-opts.c:1438
+#, gcc-internal-format
+msgid "too late for # directive to set debug directory"
+msgstr "прекаÑно за # директиву да поÑтави иÑправљачки директоријум"
+
+#: c-parser.c:969
+#, gcc-internal-format
+msgid "ISO C forbids an empty source file"
+msgstr "ИСО Ц забрањује празну изворну датотеку"
+
+#: c-parser.c:1054 c-parser.c:5762
+#, gcc-internal-format
+msgid "ISO C does not allow extra %<;%> outside of a function"
+msgstr "ИСО Ц не дозвољава додатно %<;%> изван функције"
+
+#: c-parser.c:1145
+#, gcc-internal-format
+msgid "expected declaration specifiers"
+msgstr "очекивани Ñу наводиоци декларације"
+
+#: c-parser.c:1193
+#, gcc-internal-format
+msgid "data definition has no type or storage class"
+msgstr "дефиниција података нема тип или Ñкладишну клаÑу"
+
+#: c-parser.c:1247
+#, gcc-internal-format
+msgid "expected %<,%> or %<;%>"
+msgstr "очекивано је %<,%> или %<;%>"
+
+#. This can appear in many cases looking nothing like a
+#. function definition, so we don't give a more specific
+#. error suggesting there was one.
+#: c-parser.c:1254 c-parser.c:1271
+#, gcc-internal-format
+msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>"
+msgstr "очекивано је %<=%>, %<,%>, %<;%>, %<asm%> или %<__attribute__%>"
+
+#: c-parser.c:1263
+#, gcc-internal-format
+msgid "ISO C forbids nested functions"
+msgstr "ИСО Ц забрањује угњеждене функције"
+
+#: c-parser.c:1609 c-parser.c:2372 c-parser.c:2981 c-parser.c:3222
+#: c-parser.c:4009 c-parser.c:4590 c-parser.c:4980 c-parser.c:5000
+#: c-parser.c:5115 c-parser.c:5261 c-parser.c:5278 c-parser.c:5410
+#: c-parser.c:5422 c-parser.c:5447 c-parser.c:5575 c-parser.c:5604
+#: c-parser.c:5612 c-parser.c:5640 c-parser.c:5654 c-parser.c:5867
+#: c-parser.c:5966
+#, gcc-internal-format
+msgid "expected identifier"
+msgstr "очекиван је идентификатор"
+
+#: c-parser.c:1635 cp/parser.c:10280
+#, gcc-internal-format
+msgid "comma at end of enumerator list"
+msgstr "зарез на крају лиÑте набрајања"
+
+#: c-parser.c:1641
+#, gcc-internal-format
+msgid "expected %<,%> or %<}%>"
+msgstr "очекивано је %<,%> или %<}%>"
+
+#: c-parser.c:1655 c-parser.c:1825 c-parser.c:5729
+#, gcc-internal-format
+msgid "expected %<{%>"
+msgstr "очекивано је %<{%>"
+
+#: c-parser.c:1664
+#, gcc-internal-format
+msgid "ISO C forbids forward references to %<enum%> types"
+msgstr "ИСО Ц забрањује помињања унапред за %<enum%> типове"
+
+#: c-parser.c:1767
+#, gcc-internal-format
+msgid "expected class name"
+msgstr "очекивано је име клаÑе"
+
+#: c-parser.c:1786 c-parser.c:5514
+#, gcc-internal-format
+msgid "extra semicolon in struct or union specified"
+msgstr "Ñувишна тачка-зарез у Ñтруктури или унији"
+
+#: c-parser.c:1808
+#, gcc-internal-format
+msgid "no semicolon at end of struct or union"
+msgstr "недоÑтаје тачка-зарез на крају Ñтруктуре или уније"
+
+#: c-parser.c:1811
+#, gcc-internal-format
+msgid "expected %<;%>"
+msgstr "очекивано је %<;%>"
+
+#: c-parser.c:1888 c-parser.c:2815
+#, gcc-internal-format
+msgid "expected specifier-qualifier-list"
+msgstr "очекивана је лиÑта наводилаца-одредби"
+
+#: c-parser.c:1898
+#, gcc-internal-format
+msgid "ISO C forbids member declarations with no members"
+msgstr "ИСО Ц забрањује чланÑке декларације без чланова"
+
+#: c-parser.c:1967
+#, gcc-internal-format
+msgid "expected %<,%>, %<;%> or %<}%>"
+msgstr "очекивано је %<,%>, %<;%> или %<}%>"
+
+#: c-parser.c:1974
+#, gcc-internal-format
+msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>"
+msgstr "очекивано је %<:%>, %<,%>, %<;%>, %<}%> или %<__attribute__%>"
+
+#: c-parser.c:2023
+#, gcc-internal-format
+msgid "%<typeof%> applied to a bit-field"
+msgstr "%<typeof%> примењено на битÑко поље"
+
+#: c-parser.c:2242
+#, gcc-internal-format
+msgid "expected identifier or %<(%>"
+msgstr "очекиван је идентификатор или %<(%>"
+
+#: c-parser.c:2435
+#, gcc-internal-format
+msgid "ISO C requires a named argument before %<...%>"
+msgstr "ИСО Ц захтева именовани аргумент пре %<...%>"
+
+#: c-parser.c:2537
+#, gcc-internal-format
+msgid "expected declaration specifiers or %<...%>"
+msgstr "очекивани Ñу наводиоци декларације или %<...%>"
+
+#: c-parser.c:2587
+#, gcc-internal-format
+msgid "wide string literal in %<asm%>"
+msgstr "широка доÑловна ниÑка у %<asm%>"
+
+#: c-parser.c:2593
+#, gcc-internal-format
+msgid "expected string literal"
+msgstr "очекивана је доÑловна ниÑка"
+
+#: c-parser.c:2907
+#, gcc-internal-format
+msgid "ISO C forbids empty initializer braces"
+msgstr "ИСО Ц забрањује празне витичаÑте заграде уÑпоÑтављача"
+
+#: c-parser.c:2952
+#, gcc-internal-format
+msgid "obsolete use of designated initializer with %<:%>"
+msgstr "заÑтарела употреба утврђеног уÑпоÑтављача Ñа %<:%>"
+
+#: c-parser.c:3075
+#, gcc-internal-format
+msgid "ISO C forbids specifying range of elements to initialize"
+msgstr "ИСО Ц забрањује навођење опÑега елемената за уÑпоÑтављање"
+
+#: c-parser.c:3088
+#, gcc-internal-format
+msgid "ISO C90 forbids specifying subobject to initialize"
+msgstr "ИСО Ц 90 забрањује навођење подобјекта за уÑпоÑтављање"
+
+#: c-parser.c:3096
+#, gcc-internal-format
+msgid "obsolete use of designated initializer without %<=%>"
+msgstr "заÑтарела употреба утврђеног уÑпоÑтављача без %<=%>"
+
+#: c-parser.c:3104
+#, gcc-internal-format
+msgid "expected %<=%>"
+msgstr "очекивано је %<=%>"
+
+#: c-parser.c:3241
+#, gcc-internal-format
+msgid "ISO C forbids label declarations"
+msgstr "ИСО Ц забрањује декларације етикета"
+
+#: c-parser.c:3246 c-parser.c:3255
+#, gcc-internal-format
+msgid "expected declaration or statement"
+msgstr "очекивана је декларација или наредба"
+
+#: c-parser.c:3275 c-parser.c:3303
+#, gcc-internal-format
+msgid "%HISO C90 forbids mixed declarations and code"
+msgstr "%HИСО Ц 90 забрањује мешање декларација и кода"
+
+#: c-parser.c:3319
+#, gcc-internal-format
+msgid "label at end of compound statement"
+msgstr "етикета на крају Ñложене наредбе"
+
+#: c-parser.c:3362
+#, gcc-internal-format
+msgid "expected %<:%> or %<...%>"
+msgstr "очекивано је %<:%> или %<...%>"
+
+#: c-parser.c:3498
+#, gcc-internal-format
+msgid "expected identifier or %<*%>"
+msgstr "очекиван је идентификатор или %<*%>"
+
+#. Avoid infinite loop in error recovery:
+#. c_parser_skip_until_found stops at a closing nesting
+#. delimiter without consuming it, but here we need to consume
+#. it to proceed further.
+#: c-parser.c:3560
+#, gcc-internal-format
+msgid "expected statement"
+msgstr "очекивана је наредба"
+
+#: c-parser.c:3894
+#, gcc-internal-format
+msgid "%E qualifier ignored on asm"
+msgstr "одредба %E Ñе игнорише уз asm"
+
+#: c-parser.c:4174
+#, gcc-internal-format
+msgid "ISO C forbids omitting the middle term of a ?: expression"
+msgstr "ИСО Ц забрањује изоÑтављање Ñредњег члана ?: израза"
+
+#: c-parser.c:4560
+#, gcc-internal-format
+msgid "traditional C rejects the unary plus operator"
+msgstr "традиционални Ц одбија оператор унарни плуÑ"
+
+#: c-parser.c:4673
+#, gcc-internal-format
+msgid "%<sizeof%> applied to a bit-field"
+msgstr "%<sizeof%> примењено на битÑко поље"
+
+#: c-parser.c:4816 c-parser.c:5157 c-parser.c:5179
+#, gcc-internal-format
+msgid "expected expression"
+msgstr "очекиван је израз"
+
+#: c-parser.c:4842
+#, gcc-internal-format
+msgid "braced-group within expression allowed only inside a function"
+msgstr "витичаÑто заграђена група унутар израза дозвољена је Ñамо у оквиру функције"
+
+#: c-parser.c:4856
+#, gcc-internal-format
+msgid "ISO C forbids braced-groups within expressions"
+msgstr "ИСО Ц забрањује витичаÑто заграђене групе унутар израза"
+
+#: c-parser.c:5039
+#, gcc-internal-format
+msgid "first argument to %<__builtin_choose_expr%> not a constant"
+msgstr "први аргумент за %<__builtin_choose_expr%> није конÑтанта"
+
+#: c-parser.c:5206
+#, gcc-internal-format
+msgid "compound literal has variable size"
+msgstr "Ñложена доÑловна ниÑка има променљиву величину"
+
+#: c-parser.c:5214
+#, gcc-internal-format
+msgid "ISO C90 forbids compound literals"
+msgstr "ИСО Ц 90 забрањује Ñложене доÑловне ниÑке"
+
+#: c-parser.c:5725
+#, gcc-internal-format
+msgid "extra semicolon in method definition specified"
+msgstr "Ñувишна тачка-зарез у дефиницији метода"
+
+#: c-pch.c:132
+#, gcc-internal-format
+msgid "can%'t create precompiled header %s: %m"
+msgstr "не могу да направим прекомпиловано заглавље %s: %m"
+
+#: c-pch.c:153
+#, gcc-internal-format
+msgid "can%'t write to %s: %m"
+msgstr "не могу да пишем у %s: %m"
+
+#: c-pch.c:159
+#, gcc-internal-format
+msgid "%qs is not a valid output file"
+msgstr "%qs није иÑправна излазна датотека"
+
+#: c-pch.c:188 c-pch.c:203 c-pch.c:217
+#, gcc-internal-format
+msgid "can%'t write %s: %m"
+msgstr "не могу да упишем %s: %m"
+
+#: c-pch.c:193 c-pch.c:210
+#, gcc-internal-format
+msgid "can%'t seek in %s: %m"
+msgstr "не могу да тражим у %s: %m"
+
+#: c-pch.c:201 c-pch.c:243 c-pch.c:283 c-pch.c:334
+#, gcc-internal-format
+msgid "can%'t read %s: %m"
+msgstr "не могу да читам %s: %m"
+
+#: c-pch.c:452
+#, gcc-internal-format
+msgid "malformed #pragma GCC pch_preprocess, ignored"
+msgstr "лоше формирано #pragma GCC pch_preprocess, игноришем"
+
+#: c-pch.c:458
+#, gcc-internal-format
+msgid "pch_preprocess pragma should only be used with -fpreprocessed"
+msgstr "прагма pch_preprocess треба да Ñе кориÑти Ñамо уз -fpreprocessed"
+
+#: c-pch.c:459
+#, gcc-internal-format
+msgid "use #include instead"
+msgstr "кориÑтите #include умеÑто тога"
+
+#: c-pch.c:467
+#, gcc-internal-format
+msgid "%s: couldn%'t open PCH file: %m"
+msgstr "%s: не могу да отворим ПЦХ датотеку: %m"
+
+#: c-pch.c:472
+#, gcc-internal-format
+msgid "use -Winvalid-pch for more information"
+msgstr "употребите -Winvalid-pch за више информација"
+
+#: c-pch.c:473
+#, gcc-internal-format
+msgid "%s: PCH file was invalid"
+msgstr "%s: ПЦХ датотека није иÑправна"
+
+#: c-pragma.c:101
+#, gcc-internal-format
+msgid "#pragma pack (pop) encountered without matching #pragma pack (push)"
+msgstr "ÑуÑретнуто #pragma pack (pop) без поклапајућег #pragma pack (push)"
+
+#: c-pragma.c:114
+#, gcc-internal-format
+msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s)"
+msgstr "ÑуÑретнуто #pragma pack(pop, %s) без поклапајућег #pragma pack(push, %s)"
+
+#: c-pragma.c:128
+#, gcc-internal-format
+msgid "#pragma pack(push[, id], <n>) is not supported on this target"
+msgstr "#pragma pack(push[, id], <n>) није подржано на овом циљу"
+
+#: c-pragma.c:130
+#, gcc-internal-format
+msgid "#pragma pack(pop[, id], <n>) is not supported on this target"
+msgstr "#pragma pack(pop[, id], <n>) није подржано на овом циљу"
+
+#: c-pragma.c:151
+#, gcc-internal-format
+msgid "missing %<(%> after %<#pragma pack%> - ignored"
+msgstr "недоÑтаје %<(%> поÑле %<#pragma pack%> — игноришем"
+
+#: c-pragma.c:164 c-pragma.c:204
+#, gcc-internal-format
+msgid "malformed %<#pragma pack%> - ignored"
+msgstr "лоше формирано %<#pragma pack%> — игноришем"
+
+#: c-pragma.c:169
+#, gcc-internal-format
+msgid "malformed %<#pragma pack(push[, id][, <n>])%> - ignored"
+msgstr "лоше формирано %<#pragma pack(push[, id][, <n>])%> — игноришем"
+
+#: c-pragma.c:171
+#, gcc-internal-format
+msgid "malformed %<#pragma pack(pop[, id])%> - ignored"
+msgstr "лоше формирано %<#pragma pack(pop[, id])%> — игноришем"
+
+#: c-pragma.c:180
+#, gcc-internal-format
+msgid "unknown action %qs for %<#pragma pack%> - ignored"
+msgstr "непозната радња %qs за %<#pragma pack%> — игноришем"
+
+#: c-pragma.c:207
+#, gcc-internal-format
+msgid "junk at end of %<#pragma pack%>"
+msgstr "Ñмеће на крају %<#pragma pack%>"
+
+#: c-pragma.c:210
+#, gcc-internal-format
+msgid "#pragma pack has no effect with -fpack-struct - ignored"
+msgstr "#pragma pack нема ефекта уз -fpack-struct — игноришем"
+
+#: c-pragma.c:230
+#, gcc-internal-format
+msgid "alignment must be a small power of two, not %d"
+msgstr "равнање мора бити мали Ñтепен двојке, не %d"
+
+#: c-pragma.c:263
+#, gcc-internal-format
+msgid "applying #pragma weak %q+D after first use results in unspecified behavior"
+msgstr "примена #pragma weak %q+D поÑле прве употребе доводи до неодређеног понашања"
+
+#: c-pragma.c:337 c-pragma.c:342
+#, gcc-internal-format
+msgid "malformed #pragma weak, ignored"
+msgstr "лоше формирано #pragma weak, игноришем"
+
+#: c-pragma.c:346
+#, gcc-internal-format
+msgid "junk at end of #pragma weak"
+msgstr "Ñмеће на крају #pragma weak"
+
+#: c-pragma.c:414 c-pragma.c:416
+#, gcc-internal-format
+msgid "malformed #pragma redefine_extname, ignored"
+msgstr "лоше формирано #pragma redefine_extname, игноришем"
+
+#: c-pragma.c:419
+#, gcc-internal-format
+msgid "junk at end of #pragma redefine_extname"
+msgstr "Ñмеће на крају #pragma redefine_extname"
+
+#: c-pragma.c:425
+#, gcc-internal-format
+msgid "#pragma redefine_extname not supported on this target"
+msgstr "#pragma redefine_extname није подржано на овом циљу"
+
+#: c-pragma.c:442 c-pragma.c:529
+#, gcc-internal-format
+msgid "#pragma redefine_extname ignored due to conflict with previous rename"
+msgstr "#pragma redefine_extname игнориÑано уÑлед Ñукоба Ñа претходним преименовањем"
+
+#: c-pragma.c:465
+#, gcc-internal-format
+msgid "#pragma redefine_extname ignored due to conflict with previous #pragma redefine_extname"
+msgstr "#pragma redefine_extname игнориÑано уÑлед Ñукоба Ñа претходним #pragma redefine_extname"
+
+#: c-pragma.c:484
+#, gcc-internal-format
+msgid "malformed #pragma extern_prefix, ignored"
+msgstr "лоше формирано #pragma extern_prefix, игноришем"
+
+#: c-pragma.c:487
+#, gcc-internal-format
+msgid "junk at end of #pragma extern_prefix"
+msgstr "Ñмеће на крају #pragma extern_prefix"
+
+#: c-pragma.c:494
+#, gcc-internal-format
+msgid "#pragma extern_prefix not supported on this target"
+msgstr "#pragma extern_prefix није подржано на овом циљу"
+
+#: c-pragma.c:520
+#, gcc-internal-format
+msgid "asm declaration ignored due to conflict with previous rename"
+msgstr "asm декларација игнориÑана уÑлед Ñукоба Ñа претходним преименовањем"
+
+#: c-pragma.c:551
+#, gcc-internal-format
+msgid "#pragma redefine_extname ignored due to conflict with __asm__ declaration"
+msgstr "#pragma redefine_extname игнориÑано уÑлед Ñукоба Ñа декларацијом __asm__"
+
+#: c-pragma.c:616
+#, gcc-internal-format
+msgid "#pragma GCC visibility must be followed by push or pop"
+msgstr "#pragma GCC visibility мора пратити push или pop"
+
+#: c-pragma.c:623
+#, gcc-internal-format
+msgid "no matching push for %<#pragma GCC visibility pop%>"
+msgstr "нема поклапајућег push за %<#pragma GCC visibility pop%>"
+
+#: c-pragma.c:635 c-pragma.c:661
+#, gcc-internal-format
+msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored"
+msgstr "недоÑтаје %<(%> поÑле %<#pragma GCC visibility push%> — игноришем"
+
+#: c-pragma.c:639
+#, gcc-internal-format
+msgid "malformed #pragma GCC visibility push"
+msgstr "лоше формирано #pragma GCC visibility push"
+
+#: c-pragma.c:656
+#, gcc-internal-format
+msgid "#pragma GCC visibility push() must specify default, internal, hidden or protected"
+msgstr "#pragma GCC visibility push() мора задати default, internal, hidden или protected"
+
+#: c-pragma.c:665
+#, gcc-internal-format
+msgid "junk at end of %<#pragma GCC visibility%>"
+msgstr "Ñмеће на крају %<#pragma GCC visibility%>"
+
+#: c-typeck.c:156
+#, gcc-internal-format
+msgid "%qD has an incomplete type"
+msgstr "%qD има непотпун тип"
+
+#: c-typeck.c:177 cp/call.c:2693
+#, gcc-internal-format
+msgid "invalid use of void expression"
+msgstr "неиÑправна употреба израза празног типа"
+
+#: c-typeck.c:185
+#, gcc-internal-format
+msgid "invalid use of flexible array member"
+msgstr "неиÑправна употреба флекÑибилног чланÑког низа"
+
+#: c-typeck.c:191
+#, gcc-internal-format
+msgid "invalid use of array with unspecified bounds"
+msgstr "неиÑправна употреба низа Ñа ненаведеним границама"
+
+#: c-typeck.c:199
+#, gcc-internal-format
+msgid "invalid use of undefined type %<%s %E%>"
+msgstr "неиÑправна употреба недефиниÑаног типа %<%s %E%>"
+
+#. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL.
+#: c-typeck.c:203
+#, gcc-internal-format
+msgid "invalid use of incomplete typedef %qD"
+msgstr "неиÑправна употреба непотпуног typedef %qD"
+
+#: c-typeck.c:430 c-typeck.c:455
+#, gcc-internal-format
+msgid "function types not truly compatible in ISO C"
+msgstr "функцијÑки типови ниÑу иÑтинÑки ÑаглаÑни у ИСО Ц-у "
+
+#: c-typeck.c:857
+#, gcc-internal-format
+msgid "types are not quite compatible"
+msgstr "типови ниÑу ÑаÑвим ÑаглаÑни"
+
+#: c-typeck.c:1175
+#, gcc-internal-format
+msgid "function return types not compatible due to %<volatile%>"
+msgstr "повратни типови функција ниÑу ÑаглаÑни уÑлед %<volatile%>"
+
+#: c-typeck.c:1334 c-typeck.c:2628
+#, gcc-internal-format
+msgid "arithmetic on pointer to an incomplete type"
+msgstr "аритметика Ñа показивачем на непотпун тип"
+
+#: c-typeck.c:1725
+#, gcc-internal-format
+msgid "%qT has no member named %qE"
+msgstr "%qT нема члан по имену %qE"
+
+#: c-typeck.c:1760
+#, gcc-internal-format
+msgid "request for member %qE in something not a structure or union"
+msgstr "захтев за члан %qE у нечему што није ни Ñтруктура ни унија"
+
+#: c-typeck.c:1791
+#, gcc-internal-format
+msgid "dereferencing pointer to incomplete type"
+msgstr "разрешавање показивача на непотпун тип"
+
+#: c-typeck.c:1795
+#, gcc-internal-format
+msgid "dereferencing %<void *%> pointer"
+msgstr "разрешавање %<void *%> показивача"
+
+#: c-typeck.c:1812 cp/typeck.c:2197
+#, gcc-internal-format
+msgid "invalid type argument of %qs"
+msgstr "неиÑправан аргумент типа за %qs"
+
+#: c-typeck.c:1840 cp/typeck.c:2348
+#, gcc-internal-format
+msgid "subscripted value is neither array nor pointer"
+msgstr "индекÑирана вредноÑÑ‚ није ни низ ни показивач"
+
+#: c-typeck.c:1851 cp/typeck.c:2267 cp/typeck.c:2353
+#, gcc-internal-format
+msgid "array subscript is not an integer"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° није целобројан"
+
+#: c-typeck.c:1857
+#, gcc-internal-format
+msgid "subscripted value is pointer to function"
+msgstr "индекÑирана вредноÑÑ‚ је показивач на функцију"
+
+#: c-typeck.c:1870 cp/typeck.c:2263
+#, gcc-internal-format
+msgid "array subscript has type %<char%>"
+msgstr "Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð° је типа %<char%>"
+
+#: c-typeck.c:1910
+#, gcc-internal-format
+msgid "ISO C forbids subscripting %<register%> array"
+msgstr "ИСО Ц забрањује %<register%> низове"
+
+#: c-typeck.c:1912
+#, gcc-internal-format
+msgid "ISO C90 forbids subscripting non-lvalue array"
+msgstr "ИСО Ц 90 забрањује индекÑирање не-л-вредноÑног низа"
+
+#: c-typeck.c:2154
+#, gcc-internal-format
+msgid "called object %qE is not a function"
+msgstr "позвани објекат %qE није функција"
+
+#. 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:2181
+#, gcc-internal-format
+msgid "function called through a non-compatible type"
+msgstr "функција позвана кроз неÑаглаÑан тип"
+
+#: c-typeck.c:2288
+#, gcc-internal-format
+msgid "too many arguments to function %qE"
+msgstr "превише аргумената за функцију %qE"
+
+#: c-typeck.c:2309
+#, gcc-internal-format
+msgid "type of formal parameter %d is incomplete"
+msgstr "тип формалног параметра %d није потпун"
+
+#: c-typeck.c:2322
+#, gcc-internal-format
+msgid "passing argument %d of %qE as integer rather than floating due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као целобројног умеÑто као реалног, због прототипа"
+
+#: c-typeck.c:2327
+#, gcc-internal-format
+msgid "passing argument %d of %qE as integer rather than complex due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као целобројног умеÑто као комплекÑног, због прототипа"
+
+#: c-typeck.c:2332
+#, gcc-internal-format
+msgid "passing argument %d of %qE as complex rather than floating due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као комплекÑног умеÑто као реалног, због прототипа"
+
+#: c-typeck.c:2337
+#, gcc-internal-format
+msgid "passing argument %d of %qE as floating rather than integer due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као реалног умеÑто као целобројног, због прототипа"
+
+#: c-typeck.c:2342
+#, gcc-internal-format
+msgid "passing argument %d of %qE as complex rather than integer due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као комплекÑног умеÑто као целобројног, због прототипа"
+
+#: c-typeck.c:2347
+#, gcc-internal-format
+msgid "passing argument %d of %qE as floating rather than complex due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као реалног умеÑто као комплекÑног, због прототипа"
+
+#: c-typeck.c:2359
+#, gcc-internal-format
+msgid "passing argument %d of %qE as %<float%> rather than %<double%> due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као %<float%> умеÑто као %<double%>, због прототипа"
+
+#: c-typeck.c:2379
+#, gcc-internal-format
+msgid "passing argument %d of %qE with different width due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE Ñа различитом ширином, због прототипа"
+
+#: c-typeck.c:2402
+#, gcc-internal-format
+msgid "passing argument %d of %qE as unsigned due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као неозначеног, због прототипа"
+
+#: c-typeck.c:2406
+#, gcc-internal-format
+msgid "passing argument %d of %qE as signed due to prototype"
+msgstr "проÑлеђивање аргумента %d за %qE као означеног, због прототипа"
+
+#: c-typeck.c:2496
+#, gcc-internal-format
+msgid "suggest parentheses around + or - inside shift"
+msgstr "предложи заграде око + или - унутар помака"
+
+#: c-typeck.c:2504
+#, gcc-internal-format
+msgid "suggest parentheses around && within ||"
+msgstr "предложи заграде око && унутар ||"
+
+#: c-typeck.c:2514
+#, gcc-internal-format
+msgid "suggest parentheses around arithmetic in operand of |"
+msgstr "предложи заграде око аритметике у операнду уз |"
+
+#: c-typeck.c:2519
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of |"
+msgstr "предложи заграде око поређења у операнду уз |"
+
+#: c-typeck.c:2529
+#, gcc-internal-format
+msgid "suggest parentheses around arithmetic in operand of ^"
+msgstr "предложи заграде око аритметике у операнду уз ^"
+
+#: c-typeck.c:2534
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of ^"
+msgstr "предложи заграде око поређења у операнду уз ^"
+
+#: c-typeck.c:2542
+#, gcc-internal-format
+msgid "suggest parentheses around + or - in operand of &"
+msgstr "предложи заграде око + или - у операнду уз &"
+
+#: c-typeck.c:2547
+#, gcc-internal-format
+msgid "suggest parentheses around comparison in operand of &"
+msgstr "предложи заграде око поређења у операнду уз &"
+
+#: c-typeck.c:2553
+#, gcc-internal-format
+msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
+msgstr "поређења као X<=Y<=Z немају Ñвоје математичко значење"
+
+#: c-typeck.c:2580
+#, gcc-internal-format
+msgid "pointer of type %<void *%> used in subtraction"
+msgstr "показивачи типа %<void *%> употребљени у одузимању"
+
+#: c-typeck.c:2582
+#, gcc-internal-format
+msgid "pointer to a function used in subtraction"
+msgstr "показивач на функцију употребљен у одузимању"
+
+#: c-typeck.c:2679
+#, gcc-internal-format
+msgid "wrong type argument to unary plus"
+msgstr "погрешан тип аргумента уз унарно плуÑ"
+
+#: c-typeck.c:2692
+#, gcc-internal-format
+msgid "wrong type argument to unary minus"
+msgstr "погрешан тип аргумента уз унарно минуÑ"
+
+#: c-typeck.c:2709
+#, gcc-internal-format
+msgid "ISO C does not support %<~%> for complex conjugation"
+msgstr "ИСО Ц не подржава %<~%> за комплекÑну конјугацију"
+
+#: c-typeck.c:2715
+#, gcc-internal-format
+msgid "wrong type argument to bit-complement"
+msgstr "погрешан тип аргумента уз битÑки комплемент"
+
+#: c-typeck.c:2723
+#, gcc-internal-format
+msgid "wrong type argument to abs"
+msgstr "погрешан тип аргумента за abs"
+
+#: c-typeck.c:2735
+#, gcc-internal-format
+msgid "wrong type argument to conjugation"
+msgstr "погрешан тип аргумента за конјугацију"
+
+#: c-typeck.c:2747
+#, gcc-internal-format
+msgid "wrong type argument to unary exclamation mark"
+msgstr "погрешан тип аргумента уз унарни знак узвика"
+
+#: c-typeck.c:2784
+#, gcc-internal-format
+msgid "ISO C does not support %<++%> and %<--%> on complex types"
+msgstr "ИСО Ц не подржава %<++%> и %<--%> за комплекÑне типове"
+
+#: c-typeck.c:2800 c-typeck.c:2832
+#, gcc-internal-format
+msgid "wrong type argument to increment"
+msgstr "погрешан тип аргумента уз увећање"
+
+#: c-typeck.c:2802 c-typeck.c:2834
+#, gcc-internal-format
+msgid "wrong type argument to decrement"
+msgstr "погрешан тип аргумента уз умањење"
+
+#: c-typeck.c:2823
+#, gcc-internal-format
+msgid "increment of pointer to unknown structure"
+msgstr "увећање показивача на непознату Ñтруктуру"
+
+#: c-typeck.c:2825
+#, gcc-internal-format
+msgid "decrement of pointer to unknown structure"
+msgstr "умањење показивача на непознату Ñтруктуру"
+
+#: c-typeck.c:3002
+#, gcc-internal-format
+msgid "assignment of read-only member %qD"
+msgstr "додела Ñамо-за-читање члану %qD"
+
+#: c-typeck.c:3003
+#, gcc-internal-format
+msgid "increment of read-only member %qD"
+msgstr "увећање Ñамо-за-читање члана %qD"
+
+#: c-typeck.c:3004
+#, gcc-internal-format
+msgid "decrement of read-only member %qD"
+msgstr "умањење Ñамо-за-читање члана %qD"
+
+#: c-typeck.c:3005
+#, gcc-internal-format
+msgid "read-only member %qD used as %<asm%> output"
+msgstr "Ñамо-за-читање члан %qD употребљен као %<asm%> излаз"
+
+#: c-typeck.c:3009
+#, gcc-internal-format
+msgid "assignment of read-only variable %qD"
+msgstr "додела Ñамо-за-читање променљивој %qD"
+
+#: c-typeck.c:3010
+#, gcc-internal-format
+msgid "increment of read-only variable %qD"
+msgstr "увећање Ñамо-за-читање променљиве %qD"
+
+#: c-typeck.c:3011
+#, gcc-internal-format
+msgid "decrement of read-only variable %qD"
+msgstr "умањење Ñамо-за-читање променљиве %qD"
+
+#: c-typeck.c:3012
+#, gcc-internal-format
+msgid "read-only variable %qD used as %<asm%> output"
+msgstr "Ñамо-за-читање променљива %qD употребљена као %<asm%> излаз"
+
+#: c-typeck.c:3015
+#, gcc-internal-format
+msgid "assignment of read-only location"
+msgstr "додела Ñамо-за-читање локацији"
+
+#: c-typeck.c:3016
+#, gcc-internal-format
+msgid "increment of read-only location"
+msgstr "увећање Ñамо-за-читање локације"
+
+#: c-typeck.c:3017
+#, gcc-internal-format
+msgid "decrement of read-only location"
+msgstr "умањење Ñамо-за-читање локације"
+
+#: c-typeck.c:3018
+#, gcc-internal-format
+msgid "read-only location used as %<asm%> output"
+msgstr "Ñамо-за-читање локација употребљена као %<asm%> излаз"
+
+#: c-typeck.c:3053
+#, gcc-internal-format
+msgid "cannot take address of bit-field %qD"
+msgstr "не може Ñе узети адреÑа битÑког поља %qD"
+
+#: c-typeck.c:3081
+#, gcc-internal-format
+msgid "global register variable %qD used in nested function"
+msgstr "глобална региÑтарÑка променљива %qD употребљена у угњежденој функцији"
+
+#: c-typeck.c:3084
+#, gcc-internal-format
+msgid "register variable %qD used in nested function"
+msgstr "региÑтарÑка променљива %qD употребљена у угњежденој функцији"
+
+#: c-typeck.c:3089
+#, gcc-internal-format
+msgid "address of global register variable %qD requested"
+msgstr "затражена адреÑа глобалне региÑтарÑке променљиве %qD"
+
+#: c-typeck.c:3091
+#, gcc-internal-format
+msgid "address of register variable %qD requested"
+msgstr "затражена адреÑа региÑтарÑке променљиве %qD"
+
+#: c-typeck.c:3137
+#, gcc-internal-format
+msgid "non-lvalue array in conditional expression"
+msgstr "не-л-вредноÑни низ у уÑловном изразу"
+
+#: c-typeck.c:3181
+#, gcc-internal-format
+msgid "signed and unsigned type in conditional expression"
+msgstr "означени и неозначени типови у уÑловном изразу"
+
+#: c-typeck.c:3188
+#, gcc-internal-format
+msgid "ISO C forbids conditional expr with only one void side"
+msgstr "ИСО Ц забрањује уÑловне изразе Ñа Ñамо једном празном Ñтраном"
+
+#: c-typeck.c:3204 c-typeck.c:3212
+#, gcc-internal-format
+msgid "ISO C forbids conditional expr between %<void *%> and function pointer"
+msgstr "ИСО Ц забрањује уÑловни израз између %<void *%> и функцијÑког показивача"
+
+#: c-typeck.c:3219
+#, gcc-internal-format
+msgid "pointer type mismatch in conditional expression"
+msgstr "неÑлагање показивачких типова у уÑловном изразу"
+
+#: c-typeck.c:3226 c-typeck.c:3236
+#, gcc-internal-format
+msgid "pointer/integer type mismatch in conditional expression"
+msgstr "неÑлагање типова показивача или целобројних у уÑловном изразу"
+
+#: c-typeck.c:3250
+#, gcc-internal-format
+msgid "type mismatch in conditional expression"
+msgstr "неÑлагање типова у уÑловном изразу"
+
+#: c-typeck.c:3290
+#, gcc-internal-format
+msgid "left-hand operand of comma expression has no effect"
+msgstr "леви операнд зарез-израза нема ефекта"
+
+#: c-typeck.c:3324
+#, gcc-internal-format
+msgid "cast specifies array type"
+msgstr "претапање наводи низовни тип"
+
+#: c-typeck.c:3330
+#, gcc-internal-format
+msgid "cast specifies function type"
+msgstr "претапање наводи функцијÑки тип"
+
+#: c-typeck.c:3340
+#, gcc-internal-format
+msgid "ISO C forbids casting nonscalar to the same type"
+msgstr "ИСО Ц забрањује претапање неÑкалара у иÑти тип"
+
+#: c-typeck.c:3357
+#, gcc-internal-format
+msgid "ISO C forbids casts to union type"
+msgstr "ИСО Ц забрањује претапање у унијÑки тип"
+
+#: c-typeck.c:3365
+#, gcc-internal-format
+msgid "cast to union type from type not present in union"
+msgstr "претапање у унијÑки тип из типа који не чини унију"
+
+#: c-typeck.c:3411
+#, gcc-internal-format
+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:3416
+#, gcc-internal-format
+msgid "cast discards qualifiers from pointer target type"
+msgstr "претапање одбацује одредбе Ñа циљног типа показивача"
+
+#: c-typeck.c:3432
+#, gcc-internal-format
+msgid "cast increases required alignment of target type"
+msgstr "претапање увећава неопходно равнање циљног типа"
+
+#: c-typeck.c:3439
+#, gcc-internal-format
+msgid "cast from pointer to integer of different size"
+msgstr "претапање из показивача у целобројни различите величине"
+
+#: c-typeck.c:3443
+#, gcc-internal-format
+msgid "cast from function call of type %qT to non-matching type %qT"
+msgstr "претапање из функцијÑког позива типа %qT у непоклапајући тип %qT"
+
+#: c-typeck.c:3451
+#, gcc-internal-format
+msgid "cast to pointer from integer of different size"
+msgstr "претапање из целобројног у показивач различите величине"
+
+#: c-typeck.c:3464
+#, gcc-internal-format
+msgid "ISO C forbids conversion of function pointer to object pointer type"
+msgstr "ИСО Ц забрањује претварање показивача на функцију у показивач на објекат"
+
+#: c-typeck.c:3473
+#, gcc-internal-format
+msgid "ISO C forbids conversion of object pointer to function pointer type"
+msgstr "ИСО Ц забрањује претварање показивача на објекат у показивач на функцијÑки тип"
+
+#: c-typeck.c:3747
+#, gcc-internal-format
+msgid "cannot pass rvalue to reference parameter"
+msgstr "д-вредноÑÑ‚ Ñе не може проÑледити упућивачком параметру"
+
+#: c-typeck.c:3854 c-typeck.c:4022
+#, gcc-internal-format
+msgid "passing argument %d of %qE makes qualified function pointer from unqualified"
+msgstr "проÑлеђивање аргумента %d од %qE прави одређени функцијÑки показивач од неодређеног"
+
+#: c-typeck.c:3857 c-typeck.c:4025
+#, gcc-internal-format
+msgid "assignment makes qualified function pointer from unqualified"
+msgstr "додела прави одређени функцијÑки показивач од неодређеног"
+
+#: c-typeck.c:3860 c-typeck.c:4027
+#, gcc-internal-format
+msgid "initialization makes qualified function pointer from unqualified"
+msgstr "уÑпоÑтављање прави одређени функцијÑки показивач од неодређеног"
+
+#: c-typeck.c:3863 c-typeck.c:4029
+#, gcc-internal-format
+msgid "return makes qualified function pointer from unqualified"
+msgstr "повратак прави одређени функцијÑки показивач од неодређеног"
+
+#: c-typeck.c:3867 c-typeck.c:3989
+#, gcc-internal-format
+msgid "passing argument %d of %qE discards qualifiers from pointer target type"
+msgstr "проÑлеђивање аргумента %d од %qE одбацује одредбе Ñа циљног типа показивача"
+
+#: c-typeck.c:3869 c-typeck.c:3991
+#, gcc-internal-format
+msgid "assignment discards qualifiers from pointer target type"
+msgstr "додела одбацује одредбе Ñа циљног типа показивача"
+
+#: c-typeck.c:3871 c-typeck.c:3993
+#, gcc-internal-format
+msgid "initialization discards qualifiers from pointer target type"
+msgstr "уÑпоÑтављање одбацује одредбе Ñа циљног типа показивача"
+
+#: c-typeck.c:3873 c-typeck.c:3995
+#, gcc-internal-format
+msgid "return discards qualifiers from pointer target type"
+msgstr "повратак одбацује одредбе Ñа циљног типа показивача"
+
+#: c-typeck.c:3880
+#, gcc-internal-format
+msgid "ISO C prohibits argument conversion to union type"
+msgstr "ИСО Ц забрањује претварање аргумента у унијÑки тип"
+
+#: c-typeck.c:3915
+#, gcc-internal-format
+msgid "request for implicit conversion from %qT to %qT not permitted in C++"
+msgstr "захтев за имплицтно претварање из %qT у %qT није дозвољен у Ц++у"
+
+#: c-typeck.c:3928
+#, gcc-internal-format
+msgid "argument %d of %qE might be a candidate for a format attribute"
+msgstr "аргумент %d од %qE може бити кандидат за форматÑки атрибут"
+
+#: c-typeck.c:3934
+#, gcc-internal-format
+msgid "assignment left-hand side might be a candidate for a format attribute"
+msgstr "лева Ñтрана доделе може бити кандидат за форматÑки атрибут"
+
+#: c-typeck.c:3939
+#, gcc-internal-format
+msgid "initialization left-hand side might be a candidate for a format attribute"
+msgstr "лева Ñтрана уÑпоÑтављања може бити кандидат за форматÑки атрибут"
+
+#: c-typeck.c:3944
+#, gcc-internal-format
+msgid "return type might be a candidate for a format attribute"
+msgstr "повратни тип може бити кандидат за форматÑки атрибут"
+
+#: c-typeck.c:3969
+#, gcc-internal-format
+msgid "ISO C forbids passing argument %d of %qE between function pointer and %<void *%>"
+msgstr "ИСО Ц забрањује проÑлеђивање аргумента %d од %qE између функцијÑког показивача и %<void *%>"
+
+#: c-typeck.c:3972
+#, gcc-internal-format
+msgid "ISO C forbids assignment between function pointer and %<void *%>"
+msgstr "ИСО Ц забрањује доделу између функцијÑког показивача и %<void *%>"
+
+#: c-typeck.c:3974
+#, gcc-internal-format
+msgid "ISO C forbids initialization between function pointer and %<void *%>"
+msgstr "ИСО Ц забрањује уÑпоÑтављање између функцијÑког показивача и %<void *%>"
+
+#: c-typeck.c:3976
+#, gcc-internal-format
+msgid "ISO C forbids return between function pointer and %<void *%>"
+msgstr "ИСО Ц забрањује повратак између функцијÑког показивача и %<void *%>"
+
+#: c-typeck.c:4005
+#, gcc-internal-format
+msgid "pointer targets in passing argument %d of %qE differ in signedness"
+msgstr "циљеви показивача у проÑлеђивању аргумента %d за %qE разликују Ñе у означеноÑти"
+
+#: c-typeck.c:4007
+#, gcc-internal-format
+msgid "pointer targets in assignment differ in signedness"
+msgstr "циљеви показивача у додели разликују Ñе у означеноÑти"
+
+#: c-typeck.c:4009
+#, gcc-internal-format
+msgid "pointer targets in initialization differ in signedness"
+msgstr "циљеви показивача у уÑпоÑтављању разликују Ñе у означеноÑти"
+
+#: c-typeck.c:4011
+#, gcc-internal-format
+msgid "pointer targets in return differ in signedness"
+msgstr "циљеви показивача у повратку разликују Ñе у означеноÑти"
+
+#: c-typeck.c:4036
+#, gcc-internal-format
+msgid "passing argument %d of %qE from incompatible pointer type"
+msgstr "проÑлеђивање аргумента %d од %qE из неÑаглаÑног показивачког типа"
+
+#: c-typeck.c:4038
+#, gcc-internal-format
+msgid "assignment from incompatible pointer type"
+msgstr "додела из неÑаглаÑног показивачког типа"
+
+#: c-typeck.c:4039
+#, gcc-internal-format
+msgid "initialization from incompatible pointer type"
+msgstr "уÑпоÑтављање из неÑаглаÑног показивачког типа"
+
+#: c-typeck.c:4041
+#, gcc-internal-format
+msgid "return from incompatible pointer type"
+msgstr "повратак из неÑаглаÑног показивачког типа"
+
+#: c-typeck.c:4063
+#, gcc-internal-format
+msgid "passing argument %d of %qE makes pointer from integer without a cast"
+msgstr "проÑлеђивање аргумента %d од %qE прави показивач од целобројног без претапања"
+
+#: c-typeck.c:4065
+#, gcc-internal-format
+msgid "assignment makes pointer from integer without a cast"
+msgstr "додела прави показивач од целобројног без претапања"
+
+#: c-typeck.c:4067
+#, gcc-internal-format
+msgid "initialization makes pointer from integer without a cast"
+msgstr "уÑпоÑтављање прави показивач од целобројног без претапања"
+
+#: c-typeck.c:4069
+#, gcc-internal-format
+msgid "return makes pointer from integer without a cast"
+msgstr "повратак прави показивач од целобројног без претапања"
+
+#: c-typeck.c:4076
+#, gcc-internal-format
+msgid "passing argument %d of %qE makes integer from pointer without a cast"
+msgstr "проÑлеђивање аргумента %d од %qE прави целобројни од показивача без претапања"
+
+#: c-typeck.c:4078
+#, gcc-internal-format
+msgid "assignment makes integer from pointer without a cast"
+msgstr "додела прави целобројни од показивача без претапања"
+
+#: c-typeck.c:4080
+#, gcc-internal-format
+msgid "initialization makes integer from pointer without a cast"
+msgstr "уÑпоÑтављање прави целобројни од показивача без претапања"
+
+#: c-typeck.c:4082
+#, gcc-internal-format
+msgid "return makes integer from pointer without a cast"
+msgstr "повратак прави целобројни од показивача без претапања"
+
+#: c-typeck.c:4098
+#, gcc-internal-format
+msgid "incompatible types in assignment"
+msgstr "неÑаглаÑни типови у додели"
+
+#: c-typeck.c:4101
+#, gcc-internal-format
+msgid "incompatible types in initialization"
+msgstr "неÑаглаÑни типови у уÑпоÑтављању"
+
+#: c-typeck.c:4104
+#, gcc-internal-format
+msgid "incompatible types in return"
+msgstr "неÑаглаÑни типови у повратку"
+
+#: c-typeck.c:4185
+#, gcc-internal-format
+msgid "traditional C rejects automatic aggregate initialization"
+msgstr "традиционални Ц одбија аутоматÑку уÑпоÑтављање Ñкупина"
+
+#: c-typeck.c:4353 c-typeck.c:4368 c-typeck.c:4383
+#, gcc-internal-format
+msgid "(near initialization for %qs)"
+msgstr "(близу уÑпоÑтављања за %qs)"
+
+#: c-typeck.c:4921 cp/decl.c:4597
+#, gcc-internal-format
+msgid "opaque vector types cannot be initialized"
+msgstr "непрозирни векторÑки типови не могу бити уÑпоÑтављени"
+
+#: c-typeck.c:5551
+#, gcc-internal-format
+msgid "unknown field %qE specified in initializer"
+msgstr "непознато поље %qE наведено у уÑпоÑтављачу"
+
+#: c-typeck.c:6445
+#, gcc-internal-format
+msgid "traditional C rejects initialization of unions"
+msgstr "традиционални Ц одбија уÑпоÑтављање унија"
+
+#: c-typeck.c:6753
+#, gcc-internal-format
+msgid "jump into statement expression"
+msgstr "Ñкок у наредбени израз"
+
+#: c-typeck.c:6759
+#, gcc-internal-format
+msgid "jump into scope of identifier with variably modified type"
+msgstr "Ñкок у доÑег идентификатора Ñа променљиво измењивим типом"
+
+#: c-typeck.c:6796
+#, gcc-internal-format
+msgid "ISO C forbids %<goto *expr;%>"
+msgstr "ИСО Ц забрањује %<goto *expr;%>"
+
+#: c-typeck.c:6811 cp/typeck.c:6262
+#, gcc-internal-format
+msgid "function declared %<noreturn%> has a %<return%> statement"
+msgstr "функција деклариÑана Ñа %<noreturn%> има наредбу %<return%>"
+
+#: c-typeck.c:6819
+#, gcc-internal-format
+msgid "%<return%> with no value, in function returning non-void"
+msgstr "%<return%> без вредноÑти у функцији која не враћа празан тип"
+
+#: c-typeck.c:6828
+#, gcc-internal-format
+msgid "%<return%> with a value, in function returning void"
+msgstr "%<return%> Ñа вредношћу у функцији која враћа празан тип"
+
+#: c-typeck.c:6885
+#, gcc-internal-format
+msgid "function returns address of local variable"
+msgstr "функција враћа адреÑу на локалну променљиву"
+
+#: c-typeck.c:6958 cp/semantics.c:916
+#, gcc-internal-format
+msgid "switch quantity not an integer"
+msgstr "величина у прекидачу није целобројна"
+
+#: c-typeck.c:6969
+#, gcc-internal-format
+msgid "%<long%> switch expression not converted to %<int%> in ISO C"
+msgstr "%<long%> израз у прекидачу не претвара Ñе у %<int%> у ИСО Ц-у"
+
+#: c-typeck.c:7010
+#, gcc-internal-format
+msgid "case label in statement expression not containing enclosing switch statement"
+msgstr "етикета Ñлучаја у наредбеном изразу не Ñадржи обухватајућу наредбу прекидача"
+
+#: c-typeck.c:7013
+#, gcc-internal-format
+msgid "%<default%> label in statement expression not containing enclosing switch statement"
+msgstr "етикета %<default%> у наредбеном изразу не Ñадржи обухватајућу наредбу прекидача"
+
+#: c-typeck.c:7019
+#, gcc-internal-format
+msgid "case label in scope of identifier with variably modified type not containing enclosing switch statement"
+msgstr "етикета Ñлучаја у доÑегу идентификатора Ñа променљиво измењивим типом не Ñадржи обухватајућу наредбу прекидача"
+
+#: c-typeck.c:7022
+#, gcc-internal-format
+msgid "%<default%> label in scope of identifier with variably modified type not containing enclosing switch statement"
+msgstr "етикета %<default%> у доÑегу идентификатора Ñа променљиво измењивим типом не Ñадржи обухватајућу наредбу прекидача"
+
+#: c-typeck.c:7026 cp/parser.c:6207
+#, gcc-internal-format
+msgid "case label not within a switch statement"
+msgstr "етикета Ñлучаја није у оквиру наредбе прекидача"
+
+#: c-typeck.c:7028
+#, gcc-internal-format
+msgid "%<default%> label not within a switch statement"
+msgstr "етикета %<default%> није у оквиру наредбе прекидача"
+
+#: c-typeck.c:7105
+#, gcc-internal-format
+msgid "%Hsuggest explicit braces to avoid ambiguous %<else%>"
+msgstr "%Hпредложи екÑплицитне витичаÑте заграде ради избегавања двоÑмиÑленог %<else%>"
+
+#: c-typeck.c:7124
+#, gcc-internal-format
+msgid "%Hempty body in an if-statement"
+msgstr "%Hпразно тело у наредби if"
+
+#: c-typeck.c:7133
+#, gcc-internal-format
+msgid "%Hempty body in an else-statement"
+msgstr "%Hпразно тело у наредби else"
+
+#: c-typeck.c:7242 cp/cp-gimplify.c:118 cp/parser.c:6704
+#, gcc-internal-format
+msgid "break statement not within loop or switch"
+msgstr "наредба иÑкакања није у оквиру петље или прекидача"
+
+#: c-typeck.c:7244 cp/parser.c:6715
+#, gcc-internal-format
+msgid "continue statement not within a loop"
+msgstr "наредба наÑтављања није у оквиру петље"
+
+#: c-typeck.c:7264
+#, gcc-internal-format
+msgid "%Hstatement with no effect"
+msgstr "%Hнаредба без ефекта"
+
+#: c-typeck.c:7286
+#, gcc-internal-format
+msgid "expression statement has incomplete type"
+msgstr "наредба израза има непотпун тип"
+
+#: c-typeck.c:7744 c-typeck.c:7785
+#, gcc-internal-format
+msgid "division by zero"
+msgstr "дељење нулом"
+
+#: c-typeck.c:7830 cp/typeck.c:3036
+#, gcc-internal-format
+msgid "right shift count is negative"
+msgstr "негативан деÑни помак"
+
+#: c-typeck.c:7837 cp/typeck.c:3042
+#, gcc-internal-format
+msgid "right shift count >= width of type"
+msgstr "деÑни помак >= од ширине типа"
+
+#: c-typeck.c:7858 cp/typeck.c:3061
+#, gcc-internal-format
+msgid "left shift count is negative"
+msgstr "негативан леви помак"
+
+#: c-typeck.c:7861 cp/typeck.c:3063
+#, gcc-internal-format
+msgid "left shift count >= width of type"
+msgstr "леви помак >= од ширине типа"
+
+#: c-typeck.c:7879 cp/typeck.c:3098
+#, gcc-internal-format
+msgid "comparing floating point with == or != is unsafe"
+msgstr "поређење реалних помоћу == или != није безбедно"
+
+#: c-typeck.c:7903 c-typeck.c:7910
+#, gcc-internal-format
+msgid "ISO C forbids comparison of %<void *%> with function pointer"
+msgstr "ИСО Ц забрањује поређење %<void *%> и функцијÑког показивача"
+
+#: c-typeck.c:7916 c-typeck.c:7962
+#, gcc-internal-format
+msgid "comparison of distinct pointer types lacks a cast"
+msgstr "поређењу различитих показивачких типова недоÑтаје претапање"
+
+#: c-typeck.c:7930 c-typeck.c:7935 c-typeck.c:7982 c-typeck.c:7987
+#, gcc-internal-format
+msgid "comparison between pointer and integer"
+msgstr "поређење између показивача и целобројног"
+
+#: c-typeck.c:7954
+#, gcc-internal-format
+msgid "comparison of complete and incomplete pointers"
+msgstr "поређење потпуног и непотпуног показивача"
+
+#: c-typeck.c:7957
+#, gcc-internal-format
+msgid "ISO C forbids ordered comparisons of pointers to functions"
+msgstr "ИСО Ц забрањује поређена уређеноÑти показивача на функције"
+
+#: c-typeck.c:7970 c-typeck.c:7977
+#, gcc-internal-format
+msgid "ordered comparison of pointer with integer zero"
+msgstr "поређење уређеноÑти показивача Ñа целобројном нулом"
+
+#: c-typeck.c:8207
+#, gcc-internal-format
+msgid "comparison between signed and unsigned"
+msgstr "поређење означеног и неозначеног"
+
+#: c-typeck.c:8253 cp/typeck.c:3521
+#, gcc-internal-format
+msgid "comparison of promoted ~unsigned with constant"
+msgstr "поређење унапређеног ~неозначеног Ñа конÑтантом"
+
+#: c-typeck.c:8261 cp/typeck.c:3529
+#, gcc-internal-format
+msgid "comparison of promoted ~unsigned with unsigned"
+msgstr "поређење унапређеног ~неозначеног Ñа неозначеним"
+
+#: c-typeck.c:8319
+#, gcc-internal-format
+msgid "used array that cannot be converted to pointer where scalar is required"
+msgstr "употребљен низ који Ñе не може претворити у показивач где Ñе захтева Ñкалар"
+
+#: c-typeck.c:8323
+#, gcc-internal-format
+msgid "used struct type value where scalar is required"
+msgstr "употребљена вредноÑÑ‚ Ñтруктурног типа где Ñе захтева Ñкалар"
+
+#: c-typeck.c:8327
+#, gcc-internal-format
+msgid "used union type value where scalar is required"
+msgstr "употребљена вредноÑÑ‚ унијÑког типа где Ñе захтева Ñкалар"
+
+#: calls.c:1929
+#, gcc-internal-format
+msgid "function call has aggregate value"
+msgstr "позив функције има ÑкупинÑку вредноÑÑ‚"
+
+#: cfgexpand.c:1597
+#, gcc-internal-format
+msgid "not protecting local variables: variable length buffer"
+msgstr "не штитим локалне променљиве: бафер променљиве величине"
+
+#: cfgexpand.c:1599
+#, gcc-internal-format
+msgid "not protecting function: no buffer at least %d bytes long"
+msgstr "не штитим функцију: нема бафера великог бар %d бајтова"
+
+#: cfghooks.c:90
+#, gcc-internal-format
+msgid "bb %d on wrong place"
+msgstr "об. %d на погрешном меÑту"
+
+#: cfghooks.c:96
+#, gcc-internal-format
+msgid "prev_bb of %d should be %d, not %d"
+msgstr "prev_bb за %d треба да је %d, а не %d"
+
+#: cfghooks.c:113
+#, gcc-internal-format
+msgid "verify_flow_info: Wrong count of block %i %i"
+msgstr "verify_flow_info: Погрешан збир блока %i %i"
+
+#: cfghooks.c:119
+#, gcc-internal-format
+msgid "verify_flow_info: Wrong frequency of block %i %i"
+msgstr "verify_flow_info: Погрешна учеÑтаноÑÑ‚ блока %i %i"
+
+#: cfghooks.c:127
+#, gcc-internal-format
+msgid "verify_flow_info: Duplicate edge %i->%i"
+msgstr "verify_flow_info: УдвоÑтручена ивица %i->%i"
+
+#: cfghooks.c:133
+#, gcc-internal-format
+msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
+msgstr "verify_flow_info: Погрешна вероватноћа ивице %i->%i %i"
+
+#: cfghooks.c:139
+#, gcc-internal-format
+msgid "verify_flow_info: Wrong count of edge %i->%i %i"
+msgstr "verify_flow_info: Погрешан збир ивице %i->%i %i"
+
+#: cfghooks.c:151
+#, gcc-internal-format
+msgid "verify_flow_info: Basic block %d succ edge is corrupted"
+msgstr "verify_flow_info: ИÑкварена наÑледне ивица оÑновног блока %d"
+
+#: cfghooks.c:165 cfgrtl.c:2045
+#, gcc-internal-format
+msgid "wrong amount of branch edges after unconditional jump %i"
+msgstr "погрешан број гранÑких ивица поÑле безуÑловног Ñкока %i"
+
+#: cfghooks.c:173 cfghooks.c:184
+#, gcc-internal-format
+msgid "basic block %d pred edge is corrupted"
+msgstr "иÑкварена претходна ивица оÑновног блока %d"
+
+#: cfghooks.c:185
+#, gcc-internal-format
+msgid "its dest_idx should be %d, not %d"
+msgstr "њен dest_idx треба да је %d, не %d"
+
+#: cfghooks.c:214
+#, gcc-internal-format
+msgid "basic block %i edge lists are corrupted"
+msgstr "иÑкварене лиÑте ивица оÑновног блока %i"
+
+#: cfghooks.c:227
+#, gcc-internal-format
+msgid "verify_flow_info failed"
+msgstr "verify_flow_info није уÑпело"
+
+#: cfghooks.c:288
+#, gcc-internal-format
+msgid "%s does not support redirect_edge_and_branch"
+msgstr "%s не подржава redirect_edge_and_branch"
+
+#: cfghooks.c:306
+#, gcc-internal-format
+msgid "%s does not support redirect_edge_and_branch_force"
+msgstr "%s не подржава redirect_edge_and_branch_force"
+
+#: cfghooks.c:324
+#, gcc-internal-format
+msgid "%s does not support split_block"
+msgstr "%s не подржава split_block"
+
+#: cfghooks.c:360
+#, gcc-internal-format
+msgid "%s does not support move_block_after"
+msgstr "%s не подржава move_block_after"
+
+#: cfghooks.c:373
+#, gcc-internal-format
+msgid "%s does not support delete_basic_block"
+msgstr "%s не подржава delete_basic_block"
+
+#: cfghooks.c:405
+#, gcc-internal-format
+msgid "%s does not support split_edge"
+msgstr "%s не подржава split_edge"
+
+#: cfghooks.c:466
+#, gcc-internal-format
+msgid "%s does not support create_basic_block"
+msgstr "%s не подржава create_basic_block"
+
+#: cfghooks.c:494
+#, gcc-internal-format
+msgid "%s does not support can_merge_blocks_p"
+msgstr "%s не подржава can_merge_blocks_p"
+
+#: cfghooks.c:505
+#, gcc-internal-format
+msgid "%s does not support predict_edge"
+msgstr "%s не подржава predict_edge"
+
+#: cfghooks.c:514
+#, gcc-internal-format
+msgid "%s does not support predicted_by_p"
+msgstr "%s не подржава predicted_by_p"
+
+#: cfghooks.c:528
+#, gcc-internal-format
+msgid "%s does not support merge_blocks"
+msgstr "%s не подржава merge_blocks"
+
+#: cfghooks.c:573
+#, gcc-internal-format
+msgid "%s does not support make_forwarder_block"
+msgstr "%s не подржава make_forwarder_block"
+
+#: cfghooks.c:678
+#, gcc-internal-format
+msgid "%s does not support can_duplicate_block_p"
+msgstr "%s не подржава can_duplicate_block_p"
+
+#: cfghooks.c:706
+#, gcc-internal-format
+msgid "%s does not support duplicate_block"
+msgstr "%s не подржава duplicate_block"
+
+#: cfghooks.c:774
+#, gcc-internal-format
+msgid "%s does not support block_ends_with_call_p"
+msgstr "%s не подржава block_ends_with_call_p"
+
+#: cfghooks.c:785
+#, gcc-internal-format
+msgid "%s does not support block_ends_with_condjump_p"
+msgstr "%s не подржава block_ends_with_condjump_p"
+
+#: cfghooks.c:803
+#, gcc-internal-format
+msgid "%s does not support flow_call_edges_add"
+msgstr "%s не подржава flow_call_edges_add"
+
+#: cfgloop.c:1088
+#, gcc-internal-format
+msgid "size of loop %d should be %d, not %d"
+msgstr "величина петље %d треба да је %d, не %d"
+
+#: cfgloop.c:1105
+#, gcc-internal-format
+msgid "bb %d do not belong to loop %d"
+msgstr "об. %d не припада петљи %d"
+
+#: cfgloop.c:1122
+#, gcc-internal-format
+msgid "loop %d's header does not have exactly 2 entries"
+msgstr "заглавље петље %d нема тачно две Ñтавке"
+
+#: cfgloop.c:1129
+#, gcc-internal-format
+msgid "loop %d's latch does not have exactly 1 successor"
+msgstr "реза петље %d нема тачно један наÑледник"
+
+#: cfgloop.c:1134
+#, gcc-internal-format
+msgid "loop %d's latch does not have header as successor"
+msgstr "реза петље %d нема једно заглавље као наÑледник"
+
+#: cfgloop.c:1139
+#, gcc-internal-format
+msgid "loop %d's latch does not belong directly to it"
+msgstr "реза петље %d не припада петљи непоÑредно"
+
+#: cfgloop.c:1145
+#, gcc-internal-format
+msgid "loop %d's header does not belong directly to it"
+msgstr "заглавље петље %d не припада петљи непоÑредно"
+
+#: cfgloop.c:1151
+#, gcc-internal-format
+msgid "loop %d's latch is marked as part of irreducible region"
+msgstr "реза петље %d је означена као део неÑводљиве облаÑти"
+
+#: cfgloop.c:1184
+#, gcc-internal-format
+msgid "basic block %d should be marked irreducible"
+msgstr "оÑновни блок %d треба да је означен неÑводљивим"
+
+#: cfgloop.c:1190
+#, gcc-internal-format
+msgid "basic block %d should not be marked irreducible"
+msgstr "оÑновни блок %d не треба да је означен неÑводљивим"
+
+#: cfgloop.c:1198
+#, gcc-internal-format
+msgid "edge from %d to %d should be marked irreducible"
+msgstr "ивица од %d до %d треба да је означена неÑводљивом"
+
+#: cfgloop.c:1205
+#, gcc-internal-format
+msgid "edge from %d to %d should not be marked irreducible"
+msgstr "ивица од %d до %d не треба да је означена неÑводљивом"
+
+#: cfgloop.c:1240
+#, gcc-internal-format
+msgid "wrong single exit %d->%d recorded for loop %d"
+msgstr "погрешан једноÑтруки излаза %d->%d забележен за петљу %d"
+
+#: cfgloop.c:1244
+#, gcc-internal-format
+msgid "right exit is %d->%d"
+msgstr "прави излаз је %d->%d"
+
+#: cfgloop.c:1261
+#, gcc-internal-format
+msgid "single exit not recorded for loop %d"
+msgstr "једноÑтруки излаз није забележен за петљу %d"
+
+#: cfgloop.c:1268
+#, gcc-internal-format
+msgid "loop %d should not have single exit (%d -> %d)"
+msgstr "петља %d не треба да има једноÑтруки излаз (%d -> %d)"
+
+#: cfgrtl.c:1931
+#, gcc-internal-format
+msgid "BB_RTL flag not set for block %d"
+msgstr "заÑтавица BB_RTL није поÑтављена за блок %d"
+
+#: cfgrtl.c:1937
+#, gcc-internal-format
+msgid "end insn %d for block %d not found in the insn stream"
+msgstr "крајња ија %d за блок %d није нађена у току ија"
+
+#: cfgrtl.c:1951
+#, gcc-internal-format
+msgid "insn %d is in multiple basic blocks (%d and %d)"
+msgstr "ија %d је у више оÑновних блокова (%d и %d)"
+
+#: cfgrtl.c:1963
+#, gcc-internal-format
+msgid "head insn %d for block %d not found in the insn stream"
+msgstr "заглавна ија %d за блок %d није нађена у току ија"
+
+#: cfgrtl.c:1987
+#, gcc-internal-format
+msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
+msgstr "verify_flow_info: REG_BR_PROB Ñе не поклапа Ñа конф. %wi %i"
+
+#: cfgrtl.c:2002
+#, gcc-internal-format
+msgid "fallthru edge crosses section boundary (bb %i)"
+msgstr "пропадна ивица преÑеца границе одељка (об. %i)"
+
+#: cfgrtl.c:2027
+#, gcc-internal-format
+msgid "missing REG_EH_REGION note in the end of bb %i"
+msgstr "недоÑтаје REG_EH_REGION белешка на крају об. %i"
+
+#: cfgrtl.c:2035
+#, gcc-internal-format
+msgid "too many outgoing branch edges from bb %i"
+msgstr "превише излазних гранÑких ивица из об. %i"
+
+#: cfgrtl.c:2040
+#, gcc-internal-format
+msgid "fallthru edge after unconditional jump %i"
+msgstr "пропадна ивица поÑле безуÑловног Ñкока %i"
+
+#: cfgrtl.c:2051
+#, gcc-internal-format
+msgid "wrong amount of branch edges after conditional jump %i"
+msgstr "погрешна количина гранÑких ивица поÑле безуÑловног Ñкока %i"
+
+#: cfgrtl.c:2057
+#, gcc-internal-format
+msgid "call edges for non-call insn in bb %i"
+msgstr "позивне ивице за не-позивну ију у об. %i"
+
+#: cfgrtl.c:2066
+#, gcc-internal-format
+msgid "abnormal edges for no purpose in bb %i"
+msgstr "абнормалне ивице без Ñврхе у об. %i"
+
+#: cfgrtl.c:2078
+#, gcc-internal-format
+msgid "insn %d inside basic block %d but block_for_insn is NULL"
+msgstr "ија %d унутар оÑновног блока %d али block_for_insn јеÑте NULL"
+
+#: cfgrtl.c:2082
+#, gcc-internal-format
+msgid "insn %d inside basic block %d but block_for_insn is %i"
+msgstr "ија %d унутар оÑновног блока %d али block_for_insn јеÑте %i"
+
+#: cfgrtl.c:2096 cfgrtl.c:2106
+#, gcc-internal-format
+msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
+msgstr "NOTE_INSN_BASIC_BLOCK недоÑтаје за блок %d"
+
+#: cfgrtl.c:2119
+#, gcc-internal-format
+msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
+msgstr "NOTE_INSN_BASIC_BLOCK %d уÑред оÑновног блока %d"
+
+#: cfgrtl.c:2129
+#, gcc-internal-format
+msgid "in basic block %d:"
+msgstr "у оÑновном блоку %d:"
+
+#: cfgrtl.c:2166
+#, gcc-internal-format
+msgid "bb prediction set for block %i, but it is not used in RTL land"
+msgstr "предвиђање об. поÑтављено за блок %i, али Ñе не кориÑти у Ñвету РТЛа"
+
+#: cfgrtl.c:2184
+#, gcc-internal-format
+msgid "missing barrier after block %i"
+msgstr "недоÑтаје баријера поÑле блока %i"
+
+#: cfgrtl.c:2197
+#, gcc-internal-format
+msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
+msgstr "verify_flow_info: нетачни блокови за пропад %i->%i"
+
+#: cfgrtl.c:2206
+#, gcc-internal-format
+msgid "verify_flow_info: Incorrect fallthru %i->%i"
+msgstr "verify_flow_info: нетачан пропад %i->%i"
+
+#: cfgrtl.c:2225
+#, gcc-internal-format
+msgid "basic blocks not laid down consecutively"
+msgstr "оÑновни блокови ниÑу положени надовезујуће"
+
+#: cfgrtl.c:2264
+#, gcc-internal-format
+msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
+msgstr "број об. белешки у ланцу ија (%d) != n_basic_blocks (%d)"
+
+#: cgraph.c:763
+#, gcc-internal-format
+msgid "%D renamed after being referenced in assembly"
+msgstr "%D преименован пошто је поменут у аÑемблеру"
+
+#: cgraphunit.c:664
+#, gcc-internal-format
+msgid "aux field set for edge %s->%s"
+msgstr "помоћно поље поÑтављено за ивицу %s->%s"
+
+#: cgraphunit.c:670
+#, gcc-internal-format
+msgid "Execution count is negative"
+msgstr "Број извршавања је негативан"
+
+#: cgraphunit.c:677
+#, gcc-internal-format
+msgid "caller edge count is negative"
+msgstr "број ивица позивача је негативан"
+
+#: cgraphunit.c:686
+#, gcc-internal-format
+msgid "inlined_to pointer is wrong"
+msgstr "показивач inlined_to је погрешан"
+
+#: cgraphunit.c:691
+#, gcc-internal-format
+msgid "multiple inline callers"
+msgstr "вишеÑтруки уткани позивачи"
+
+#: cgraphunit.c:698
+#, gcc-internal-format
+msgid "inlined_to pointer set for noninline callers"
+msgstr "показивач inlined_to поÑтављен за неуткане позиваче"
+
+#: cgraphunit.c:704
+#, gcc-internal-format
+msgid "inlined_to pointer is set but no predecesors found"
+msgstr "показивач inlined_to поÑтављен али нема претходника"
+
+#: cgraphunit.c:709
+#, gcc-internal-format
+msgid "inlined_to pointer refers to itself"
+msgstr "показивач inlined_to упућује на Ñамог Ñебе"
+
+#: cgraphunit.c:719
+#, gcc-internal-format
+msgid "node not found in DECL_ASSEMBLER_NAME hash"
+msgstr "чвор није нађен у хрпи DECL_ASSEMBLER_NAME"
+
+#: cgraphunit.c:747
+#, gcc-internal-format
+msgid "shared call_stmt:"
+msgstr "дељени call_stmt:"
+
+#: cgraphunit.c:753
+#, gcc-internal-format
+msgid "edge points to wrong declaration:"
+msgstr "ивица показује на погрешну декларацију:"
+
+#: cgraphunit.c:762
+#, gcc-internal-format
+msgid "missing callgraph edge for call stmt:"
+msgstr "недоÑтаје графпоз ивица за call_stmt:"
+
+#: cgraphunit.c:779
+#, gcc-internal-format
+msgid "edge %s->%s has no corresponding call_stmt"
+msgstr "ивица %s->%s нема одговарајући call_stmt"
+
+#: cgraphunit.c:791
+#, gcc-internal-format
+msgid "verify_cgraph_node failed"
+msgstr "verify_cgraph_node није уÑпело"
+
+#: cgraphunit.c:1028
+#, gcc-internal-format
+msgid "failed to reclaim unneeded function"
+msgstr "ниÑам уÑпео да повратим непотребну функцију"
+
+#: cgraphunit.c:1308
+#, gcc-internal-format
+msgid "nodes with no released memory found"
+msgstr "нађени чворови без оÑлобођене меморије"
+
+#: collect2.c:1172
+#, gcc-internal-format
+msgid "unknown demangling style '%s'"
+msgstr "непознат Ñтил раÑпетљавања „%s“"
+
+#: collect2.c:1495
+#, gcc-internal-format
+msgid "%s terminated with signal %d [%s]%s"
+msgstr "%s окончан Ñигналом %d [%s]%s"
+
+#: collect2.c:1513
+#, gcc-internal-format
+msgid "%s returned %d exit status"
+msgstr "%s врати излазни ÑÑ‚Ð°Ñ‚ÑƒÑ %d"
+
+#: collect2.c:2175
+#, gcc-internal-format
+msgid "cannot find 'ldd'"
+msgstr "не могу да нађем „ldd“"
+
+#: convert.c:65
+#, gcc-internal-format
+msgid "cannot convert to a pointer type"
+msgstr "не могу да претворим у показивачки тип"
+
+#: convert.c:304
+#, gcc-internal-format
+msgid "pointer value used where a floating point value was expected"
+msgstr "показивачка вредноÑÑ‚ употребљена где Ñе очекивала реална"
+
+#: convert.c:308
+#, gcc-internal-format
+msgid "aggregate value used where a float was expected"
+msgstr "ÑкупинÑка вредноÑÑ‚ употребљена где Ñе очекивала реална"
+
+#: convert.c:333
+#, gcc-internal-format
+msgid "conversion to incomplete type"
+msgstr "претварање у непотпун тип"
+
+#: convert.c:688 convert.c:764
+#, gcc-internal-format
+msgid "can't convert between vector values of different size"
+msgstr "не могу да претварам између векторÑких вредноÑти различитих величина"
+
+#: convert.c:694
+#, gcc-internal-format
+msgid "aggregate value used where an integer was expected"
+msgstr "ÑкупинÑка вредноÑÑ‚ употребљена где Ñе очекивала целобројна"
+
+#: convert.c:744
+#, gcc-internal-format
+msgid "pointer value used where a complex was expected"
+msgstr "показивачка вредноÑÑ‚ употребљена где Ñе очекивала комплекÑна"
+
+#: convert.c:748
+#, gcc-internal-format
+msgid "aggregate value used where a complex was expected"
+msgstr "ÑкупинÑка вредноÑÑ‚ употребљена где Ñе очекивала комплекÑна"
+
+#: convert.c:770
+#, gcc-internal-format
+msgid "can't convert value to a vector"
+msgstr "не могу да претворим вредноÑÑ‚ у вектор"
+
+#: coverage.c:183
+#, gcc-internal-format
+msgid "%qs is not a gcov data file"
+msgstr "%qs није датотека података гкова"
+
+#: coverage.c:194
+#, gcc-internal-format
+msgid "%qs is version %q.*s, expected version %q.*s"
+msgstr "%qs је верзија %q.*s, а очекивана је %q.*s"
+
+#: coverage.c:274 coverage.c:282
+#, gcc-internal-format
+msgid "coverage mismatch for function %u while reading execution counters"
+msgstr "неÑлагање покривача за функцију %u у току читања извршних бројача"
+
+#: coverage.c:276 coverage.c:359
+#, gcc-internal-format
+msgid "checksum is %x instead of %x"
+msgstr "контролни збир је %x умеÑто %x"
+
+#: coverage.c:284 coverage.c:367
+#, gcc-internal-format
+msgid "number of counters is %d instead of %d"
+msgstr "број бројача је %d умеÑто %d"
+
+#: coverage.c:290
+#, gcc-internal-format
+msgid "cannot merge separate %s counters for function %u"
+msgstr "не могу да Ñтопим заÑебних %s бројача за функцију %u"
+
+#: coverage.c:311
+#, gcc-internal-format
+msgid "%qs has overflowed"
+msgstr "%qs Ñе прелило"
+
+#: coverage.c:311
+#, gcc-internal-format
+msgid "%qs is corrupted"
+msgstr "%qs је иÑкварено"
+
+#: coverage.c:348
+#, gcc-internal-format
+msgid "no coverage for function %qs found"
+msgstr "покривач за функцију %qs није нађен"
+
+#: coverage.c:356 coverage.c:364
+#, gcc-internal-format
+msgid "coverage mismatch for function %qs while reading counter %qs"
+msgstr "неÑлагање покривача за функцију %qs у току читања бројача %qs"
+
+#: coverage.c:529
+#, gcc-internal-format
+msgid "cannot open %s"
+msgstr "не могу да отворим %s"
+
+#: coverage.c:564
+#, gcc-internal-format
+msgid "error writing %qs"
+msgstr "грешка при пиÑању %qs"
+
+#: diagnostic.c:602
+#, gcc-internal-format
+msgid "in %s, at %s:%d"
+msgstr "у %s, код %s:%d"
+
+#: dominance.c:855
+#, gcc-internal-format
+msgid "dominator of %d status unknown"
+msgstr "доминатор %d ÑтатуÑа непознат"
+
+#: dominance.c:857
+#, gcc-internal-format
+msgid "dominator of %d should be %d, not %d"
+msgstr "доминатор %d треба да је %d, не %d"
+
+#: dominance.c:869
+#, gcc-internal-format
+msgid "ENTRY does not dominate bb %d"
+msgstr "ENTRY не доминира на об. %d"
+
+#: dwarf2out.c:3533
+#, gcc-internal-format
+msgid "DW_LOC_OP %s not implemented"
+msgstr "DW_LOC_OP %s није имплементирано"
+
+#: emit-rtl.c:2269
+#, gcc-internal-format
+msgid "invalid rtl sharing found in the insn"
+msgstr "неиÑправно rtl дељење нађено у ији"
+
+#: emit-rtl.c:2271
+#, gcc-internal-format
+msgid "shared rtx"
+msgstr "дељено rtx"
+
+#: emit-rtl.c:2273 flow.c:492 flow.c:517 flow.c:539
+#, gcc-internal-format
+msgid "internal consistency failure"
+msgstr "неуÑпех уÑлед унутрашње неуÑаглашеноÑти"
+
+#: emit-rtl.c:3337
+#, gcc-internal-format
+msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
+msgstr "ИЦЕ: emit_insn употребљено где је потребно emit_jump_insn:\n"
+
+#: errors.c:133 java/jv-scan.c:289
+#, gcc-internal-format
+msgid "abort in %s, at %s:%d"
+msgstr "прекид у %s, код %s:%d"
+
+#: except.c:338
+#, gcc-internal-format
+msgid "exception handling disabled, use -fexceptions to enable"
+msgstr "руковање изузецима је иÑкључено, укључите помоћу -fexceptions"
+
+#: except.c:2786
+#, gcc-internal-format
+msgid "argument of %<__builtin_eh_return_regno%> must be constant"
+msgstr "аргумент за %<__builtin_eh_return_regno%> мора бити конÑтанта"
+
+#: except.c:2917
+#, gcc-internal-format
+msgid "__builtin_eh_return not supported on this target"
+msgstr "__builtin_eh_return није подржан на овом циљу"
+
+#: except.c:3771 except.c:3780
+#, gcc-internal-format
+msgid "region_array is corrupted for region %i"
+msgstr "region_array је иÑкварен за облаÑÑ‚ %i"
+
+#: except.c:3785
+#, gcc-internal-format
+msgid "outer block of region %i is wrong"
+msgstr "погрешан Ñпољашњи блок облаÑти %i"
+
+#: except.c:3790
+#, gcc-internal-format
+msgid "region %i may contain throw and is contained in region that may not"
+msgstr "облаÑÑ‚ %i може Ñадржати бацање, а Ñадржана је у облаÑти која то не може"
+
+#: except.c:3796
+#, gcc-internal-format
+msgid "negative nesting depth of region %i"
+msgstr "негативна дубина угњеждења облаÑти %i"
+
+#: except.c:3816
+#, gcc-internal-format
+msgid "tree list ends on depth %i"
+msgstr "лиÑта Ñтабла Ñе завршава на дубини %i"
+
+#: except.c:3821
+#, gcc-internal-format
+msgid "array does not match the region tree"
+msgstr "низ не одговара Ñтаблу облаÑти"
+
+#: except.c:3827
+#, gcc-internal-format
+msgid "verify_eh_tree failed"
+msgstr "verify_eh_tree није уÑпело"
+
+#: explow.c:1212
+#, gcc-internal-format
+msgid "stack limits not supported on this target"
+msgstr "ограничења Ñтека ниÑу подржана на овом циљу"
+
+#: fold-const.c:3331 fold-const.c:3342
+#, gcc-internal-format
+msgid "comparison is always %d due to width of bit-field"
+msgstr "поређење је увек %d уÑлед ширине битÑког поља"
+
+#: fold-const.c:4943 fold-const.c:4958
+#, gcc-internal-format
+msgid "comparison is always %d"
+msgstr "поређење је увек %d"
+
+#: fold-const.c:5087
+#, gcc-internal-format
+msgid "%<or%> of unmatched not-equal tests is always 1"
+msgstr "%<or%> непоклопљених теÑтова неједнакоÑти је увек 1"
+
+#: fold-const.c:5092
+#, gcc-internal-format
+msgid "%<and%> of mutually exclusive equal-tests is always 0"
+msgstr "%<and%> међуÑобно иÑкључивих теÑтова једнакоÑти је увек 0"
+
+#: fold-const.c:10313
+#, gcc-internal-format
+msgid "fold check: original tree changed by fold"
+msgstr "провера Ñажимања: првобитно дрво измењено Ñажимањем"
+
+#: function.c:491
+#, gcc-internal-format
+msgid "%Jtotal size of local objects too large"
+msgstr "%Jукупна величина локалних објеката је превелика"
+
+#: function.c:838 varasm.c:1674
+#, gcc-internal-format
+msgid "size of variable %q+D is too large"
+msgstr "величина променљиве %q+D је превелика"
+
+#: function.c:1548
+#, gcc-internal-format
+msgid "impossible constraint in %<asm%>"
+msgstr "немогуће ограничење у %<asm%>"
+
+#: function.c:3506
+#, gcc-internal-format
+msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>"
+msgstr "променљива %q+D може бити продрмана Ñа %<longjmp%> или %<vfork%>"
+
+#: function.c:3527
+#, gcc-internal-format
+msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>"
+msgstr "аргумент %q+D може бити продрман Ñа %<longjmp%> или %<vfork%>"
+
+#: function.c:3922
+#, gcc-internal-format
+msgid "function returns an aggregate"
+msgstr "функција враћа ÑкупинÑку вредноÑÑ‚"
+
+#: function.c:4314
+#, gcc-internal-format
+msgid "unused parameter %q+D"
+msgstr "неупотребљен параметар %q+D"
+
+#: gcc.c:1243
+#, gcc-internal-format
+msgid "ambiguous abbreviation %s"
+msgstr "двоÑмиÑлена Ñкраћеница %s"
+
+#: gcc.c:1270
+#, gcc-internal-format
+msgid "incomplete '%s' option"
+msgstr "непотпуна опција „%s“"
+
+#: gcc.c:1281
+#, gcc-internal-format
+msgid "missing argument to '%s' option"
+msgstr "опцији „%s“ недоÑтаје аргумент"
+
+#: gcc.c:1294
+#, gcc-internal-format
+msgid "extraneous argument to '%s' option"
+msgstr "Ñувишан аргумент за опцију „%s“"
+
+#: gcc.c:3804
+#, gcc-internal-format
+msgid "warning: -pipe ignored because -save-temps specified"
+msgstr "упозорење: -pipe Ñе игнорише јер је задато -save-temps"
+
+#: gcc.c:4105
+#, gcc-internal-format
+msgid "warning: '-x %s' after last input file has no effect"
+msgstr "упозорење: „-x %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:5174
+#, gcc-internal-format
+msgid "spec failure: '%%*' has not been initialized by pattern match"
+msgstr "крах навода: „%%*“ није уÑпоÑтављено шематÑким поклапањем"
+
+#: gcc.c:5183
+#, gcc-internal-format
+msgid "warning: use of obsolete %%[ operator in specs"
+msgstr "упозорење: употреба заÑтарелог оператора %%[ у наводима"
+
+#: gcc.c:5264
+#, gcc-internal-format
+msgid "spec failure: unrecognized spec option '%c'"
+msgstr "крах навода: непрепозната опција навода „%c“"
+
+#: gcc.c:6188
+#, gcc-internal-format
+msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC"
+msgstr "крах навода: више од једног аргумента за SYSROOT_SUFFIX_SPEC"
+
+#: gcc.c:6211
+#, gcc-internal-format
+msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
+msgstr "крах навода: више од једног аргумента за SYSROOT_HEADERS_SUFFIX_SPEC"
+
+#: gcc.c:6300
+#, gcc-internal-format
+msgid "unrecognized option '-%s'"
+msgstr "непрепозната опција „-%s“"
+
+#: gcc.c:6491 gcc.c:6554
+#, gcc-internal-format
+msgid "%s: %s compiler not installed on this system"
+msgstr "%s: компилатор за %s није инÑталиран на овом ÑиÑтему"
+
+#: gcc.c:6646
+#, gcc-internal-format
+msgid "%s: linker input file unused because linking not done"
+msgstr "%s: улазна датотека повезивача Ñе не кориÑти је Ñе повезивање не извршава"
+
+#: gcc.c:6686
+#, gcc-internal-format
+msgid "language %s not recognized"
+msgstr "језик %s није препознат"
+
+#: gcc.c:6757
+#, gcc-internal-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#: gcse.c:6587
+#, gcc-internal-format
+msgid "%s: %d basic blocks and %d edges/basic block"
+msgstr "%s: %d оÑновних блокова и %d ивица по оÑновном блоку"
+
+#: gcse.c:6600
+#, gcc-internal-format
+msgid "%s: %d basic blocks and %d registers"
+msgstr "%s: %d оÑновних блокова и %d региÑтара"
+
+#: ggc-common.c:404 ggc-common.c:412 ggc-common.c:480 ggc-common.c:499
+#: ggc-page.c:2110 ggc-page.c:2141 ggc-page.c:2148 ggc-zone.c:2291
+#: ggc-zone.c:2306
+#, gcc-internal-format
+msgid "can't write PCH file: %m"
+msgstr "не могу да запишем ПЦХ датотеку: %m"
+
+#: ggc-common.c:492 config/i386/host-cygwin.c:58
+#, gcc-internal-format
+msgid "can't get position in PCH file: %m"
+msgstr "не могу да добавим положај у ПЦХ датотеци: %m"
+
+#: ggc-common.c:502
+#, gcc-internal-format
+msgid "can't write padding to PCH file: %m"
+msgstr "не могу да запишем уметање у ПЦХ датотеку: %m"
+
+#: ggc-common.c:557 ggc-common.c:565 ggc-common.c:572 ggc-common.c:575
+#: ggc-common.c:585 ggc-common.c:588 ggc-page.c:2235 ggc-zone.c:2325
+#, gcc-internal-format
+msgid "can't read PCH file: %m"
+msgstr "не могу да читам ПЦХ датотеку: %m"
+
+#: ggc-common.c:580
+#, gcc-internal-format
+msgid "had to relocate PCH"
+msgstr "морадох премеÑтим ПЦХ"
+
+#: ggc-page.c:1448
+#, gcc-internal-format
+msgid "open /dev/zero: %m"
+msgstr "отварање /dev/zero: %m"
+
+#: ggc-page.c:2126 ggc-page.c:2132
+#, gcc-internal-format
+msgid "can't write PCH file"
+msgstr "не могу да запишем ПЦХ датотеку"
+
+#: ggc-zone.c:2288 ggc-zone.c:2299
+#, gcc-internal-format
+msgid "can't seek PCH file: %m"
+msgstr "не могу да тражим у ПЦХ датотеци: %m"
+
+#: ggc-zone.c:2302
+#, gcc-internal-format
+msgid "can't write PCH fle: %m"
+msgstr "не могу да запишем ПЦХ датотеку: %m"
+
+#: gimple-low.c:202
+#, gcc-internal-format
+msgid "unexpected node"
+msgstr "неочекивани чвор"
+
+#: gimplify.c:3683
+#, gcc-internal-format
+msgid "invalid lvalue in asm output %d"
+msgstr "неиÑправна л-вредноÑÑ‚ у излазу аÑемблера %d"
+
+#: gimplify.c:3795
+#, gcc-internal-format
+msgid "memory input %d is not directly addressable"
+msgstr "меморијÑки улаз %d не може Ñе непоÑредно адреÑирати"
+
+#: gimplify.c:4671
+#, gcc-internal-format
+msgid "gimplification failed"
+msgstr "гимплификација није уÑпела"
+
+#: global.c:376 global.c:389 global.c:403
+#, gcc-internal-format
+msgid "%s cannot be used in asm here"
+msgstr "%s Ñе не може кориÑтити овде у аÑемблеру"
+
+#: graph.c:403 java/jcf-parse.c:1086 java/jcf-parse.c:1221 java/lex.c:1855
+#: objc/objc-act.c:501
+#, gcc-internal-format
+msgid "can't open %s: %m"
+msgstr "не могу да отворим %s: %m"
+
+#: haifa-sched.c:182
+#, gcc-internal-format
+msgid "fix_sched_param: unknown param: %s"
+msgstr "fix_sched_param: непознат параметар %s"
+
+#. Eventually this should become a hard error IMO.
+#: opts.c:261
+#, gcc-internal-format
+msgid "command line option \"%s\" is valid for %s but not for %s"
+msgstr "опција командне линије „%s“ иÑправна је за %s али не за %s"
+
+#: opts.c:315
+#, gcc-internal-format
+msgid "command line option %qs is not supported by this configuration"
+msgstr "опција командне линије %qs није подржана овом конфигурацијом"
+
+#: opts.c:359
+#, gcc-internal-format
+msgid "missing argument to \"%s\""
+msgstr "недоÑтаје аргумент за „%s“"
+
+#: opts.c:369
+#, gcc-internal-format
+msgid "argument to \"%s\" should be a non-negative integer"
+msgstr "аргумент за „%s“ треба да је ненегативан цео број"
+
+#: opts.c:457
+#, gcc-internal-format
+msgid "unrecognized command line option \"%s\""
+msgstr "непрепозната опција командне линије „%s“"
+
+#: opts.c:670
+#, gcc-internal-format
+msgid "-Wuninitialized is not supported without -O"
+msgstr "-Wuninitialized није подржано без -O"
+
+#: opts.c:685
+#, gcc-internal-format
+msgid "-freorder-blocks-and-partition does not work with exceptions"
+msgstr "-freorder-blocks-and-partition не ради Ñа изузецима"
+
+#: opts.c:696
+#, gcc-internal-format
+msgid "-freorder-blocks-and-partition does not support unwind info"
+msgstr "-freorder-blocks-and-partition не подржава податке одмотавања"
+
+#: opts.c:710
+#, gcc-internal-format
+msgid "-freorder-blocks-and-partition does not work on this architecture"
+msgstr "-freorder-blocks-and-partition не ради на овој архитектури"
+
+#: opts.c:878
+#, gcc-internal-format
+msgid "structure alignment must be a small power of two, not %d"
+msgstr "равнање Ñтруктуре мора бити мали Ñтепен двојке, не %d"
+
+#: opts.c:936
+#, gcc-internal-format
+msgid "unrecognized visibility value \"%s\""
+msgstr "непрепозната вредноÑÑ‚ видљивоÑти „%s“"
+
+#: opts.c:984
+#, gcc-internal-format
+msgid "unrecognized register name \"%s\""
+msgstr "непрепознато име региÑтра „%s“"
+
+#: opts.c:1008
+#, gcc-internal-format
+msgid "unknown tls-model \"%s\""
+msgstr "непознат ТЛС модел „%s“"
+
+#: opts.c:1058
+#, gcc-internal-format
+msgid "-f[no-]force-mem is nop and option will be removed in 4.2"
+msgstr "-f[no-]force-mem не ради ништа и биће уклоњена у 4.2"
+
+#: opts.c:1081
+#, gcc-internal-format
+msgid "%s: --param arguments should be of the form NAME=VALUE"
+msgstr "%s: аргументи за --param треба да Ñу облика ИМЕ=ВРЕДÐОСТ"
+
+#: opts.c:1086
+#, gcc-internal-format
+msgid "invalid --param value %qs"
+msgstr "неиÑправна вредноÑÑ‚ %qs за --param"
+
+#: opts.c:1183
+#, gcc-internal-format
+msgid "target system does not support debug output"
+msgstr "циљни ÑиÑтем не подржава иÑправљачки излаз"
+
+#: opts.c:1190
+#, gcc-internal-format
+msgid "debug format \"%s\" conflicts with prior selection"
+msgstr "иÑправљачки формат „%s“ коÑи Ñе Ñа претходним избором"
+
+#: opts.c:1206
+#, gcc-internal-format
+msgid "unrecognised debug output level \"%s\""
+msgstr "непрепознат ниво иÑправљачког излаза „%s“"
+
+#: opts.c:1208
+#, gcc-internal-format
+msgid "debug output level %s is too high"
+msgstr "ниво иÑправљачког излаза %s је превиÑок"
+
+#: params.c:71
+#, gcc-internal-format
+msgid "minimum value of parameter %qs is %u"
+msgstr "најмања вредноÑÑ‚ параметра %qs је %u"
+
+#: params.c:76
+#, gcc-internal-format
+msgid "maximum value of parameter %qs is %u"
+msgstr "највећа вредноÑÑ‚ параметра %qs је %u"
+
+#. If we didn't find this parameter, issue an error message.
+#: params.c:85
+#, gcc-internal-format
+msgid "invalid parameter %qs"
+msgstr "неиÑправан параметар %qs"
+
+#: profile.c:287
+#, gcc-internal-format
+msgid "corrupted profile info: run_max * runs < sum_max"
+msgstr "иÑкварени подаци профила: run_max * runs < sum_max"
+
+#: profile.c:293
+#, gcc-internal-format
+msgid "corrupted profile info: sum_all is smaller than sum_max"
+msgstr "иÑкварени подаци профила: sum_all је мање од sum_max"
+
+#: profile.c:338
+#, gcc-internal-format
+msgid "corrupted profile info: edge from %i to %i exceeds maximal count"
+msgstr "иÑкварени подаци профила: ивица из %i у %i премашује највећи збир"
+
+#: profile.c:503
+#, gcc-internal-format
+msgid "corrupted profile info: number of iterations for basic block %d thought to be %i"
+msgstr "иÑкварени подаци профила: број итерација за оÑновни блок %d је предвиђен као %i"
+
+#: profile.c:524
+#, gcc-internal-format
+msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i"
+msgstr "иÑкварени подаци профила: број извршавања за ивицу %d-%d је предвиђен као %i"
+
+#: reg-stack.c:526
+#, gcc-internal-format
+msgid "output constraint %d must specify a single register"
+msgstr "излазно ограничење %d мора навеÑти један једини региÑтар"
+
+#: reg-stack.c:536
+#, gcc-internal-format
+msgid "output constraint %d cannot be specified together with \"%s\" clobber"
+msgstr "излазно ограничење %d не може бити наведено заједно Ñа продрмом „%s“"
+
+#: reg-stack.c:559
+#, gcc-internal-format
+msgid "output regs must be grouped at top of stack"
+msgstr "излазни региÑтри морају бити групиÑани на врху Ñтека"
+
+#: reg-stack.c:596
+#, gcc-internal-format
+msgid "implicitly popped regs must be grouped at top of stack"
+msgstr "имплицитно подигнути региÑтри морају бити групиÑани на врху Ñтека"
+
+#: reg-stack.c:615
+#, gcc-internal-format
+msgid "output operand %d must use %<&%> constraint"
+msgstr "излазни операнд %d мора кориÑтити ограничење %<&%>"
+
+#: regclass.c:766
+#, gcc-internal-format
+msgid "can't use '%s' as a %s register"
+msgstr "„%s“ Ñе не може кориÑтити као %s региÑтар"
+
+#: regclass.c:781 config/ia64/ia64.c:5041 config/ia64/ia64.c:5048
+#: config/pa/pa.c:339 config/pa/pa.c:346
+#, gcc-internal-format
+msgid "unknown register name: %s"
+msgstr "непознато име региÑтра: %s"
+
+#: regclass.c:791
+#, gcc-internal-format
+msgid "global register variable follows a function definition"
+msgstr "глобална региÑтарÑка променљива прати дефиницију функције"
+
+#: regclass.c:795
+#, gcc-internal-format
+msgid "register used for two global register variables"
+msgstr "региÑтар Ñе кориÑти за две глобалне региÑтарÑке променљиве"
+
+#: regclass.c:800
+#, gcc-internal-format
+msgid "call-clobbered register used for global register variable"
+msgstr "позивом продрман региÑтар кориÑти Ñе за глобалну региÑтарÑку променљиву"
+
+#: regrename.c:1916
+#, gcc-internal-format
+msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
+msgstr "validate_value_data: [%u] Лош next_regno за празан ланац (%u)"
+
+#: regrename.c:1928
+#, gcc-internal-format
+msgid "validate_value_data: Loop in regno chain (%u)"
+msgstr "validate_value_data: Петља у regno ланцу (%u)"
+
+#: regrename.c:1931
+#, gcc-internal-format
+msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
+msgstr "validate_value_data: [%u] Лош oldest_regno (%u)"
+
+#: regrename.c:1943
+#, gcc-internal-format
+msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
+msgstr "validate_value_data: [%u] Ðепразан рег. у ланцу (%s %u %i)"
+
+#: reload.c:1270
+#, gcc-internal-format
+msgid "cannot reload integer constant operand in %<asm%>"
+msgstr "не може Ñе поново учитати целобројни конÑтантни операнд у %<asm%>"
+
+#: reload.c:1293
+#, gcc-internal-format
+msgid "impossible register constraint in %<asm%>"
+msgstr "немогуће региÑтарÑко ограничење у %<asm%>"
+
+#: reload.c:3568
+#, gcc-internal-format
+msgid "%<&%> constraint used with no register class"
+msgstr "%<&%> ограничење употребљено без региÑтарÑке клаÑе"
+
+#: reload.c:3739 reload.c:3971
+#, gcc-internal-format
+msgid "inconsistent operand constraints in an %<asm%>"
+msgstr "неуÑаглашена ограничења операнда у %<asm%>"
+
+#: reload1.c:1235
+#, gcc-internal-format
+msgid "frame size too large for reliable stack checking"
+msgstr "величина оквира превелика за поуздану проверу Ñтека"
+
+#: reload1.c:1238
+#, gcc-internal-format
+msgid "try reducing the number of local variables"
+msgstr "покушајте да Ñмањите број локалних променљивих"
+
+#: reload1.c:1894
+#, gcc-internal-format
+msgid "can't find a register in class %qs while reloading %<asm%>"
+msgstr "не могу да нађем региÑтар у клаÑи %qs при поновном учитавању %<asm%>"
+
+#: reload1.c:1899
+#, gcc-internal-format
+msgid "unable to find a register to spill in class %qs"
+msgstr "не могу да нађем региÑтар за проÑипање у клаÑи %qs"
+
+#: reload1.c:3984
+#, gcc-internal-format
+msgid "%<asm%> operand requires impossible reload"
+msgstr "операнд у %<asm%> захтева немогуће поновно учитавање"
+
+#: reload1.c:5108
+#, gcc-internal-format
+msgid "%<asm%> operand constraint incompatible with operand size"
+msgstr "ограничење операнда у %<asm%> неÑаглаÑно Ñа величином операнда"
+
+#: reload1.c:6738
+#, gcc-internal-format
+msgid "output operand is constant in %<asm%>"
+msgstr "излазни операнд је конÑтантан у %<asm%>"
+
+#: rtl.c:474
+#, gcc-internal-format
+msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d"
+msgstr "РТЛ провера: приÑтуп елта %d у „%s“ поÑледњим елтом %d у %s, код %s:%d"
+
+#: rtl.c:484
+#, gcc-internal-format
+msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
+msgstr "РТЛ провера: очекивах је елт %d типа „%c“, добих „%c“ (rtx %s) у %s, код %s:%d"
+
+#: rtl.c:494
+#, gcc-internal-format
+msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d"
+msgstr "РТЛ провера: очекивах је елт %d типа „%c“ или „%c“, добих „%c“ (rtx %s) у %s, код %s:%d"
+
+#: rtl.c:503
+#, gcc-internal-format
+msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d"
+msgstr "РТЛ провера: очекивах кôд „%s“, добих „%s“ у %s, код %s:%d"
+
+#: rtl.c:513
+#, gcc-internal-format
+msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d"
+msgstr "РТЛ провера: очекивах кôд „%s“ или „%s“, добих „%s“ у %s, код %s:%d"
+
+#: rtl.c:539
+#, gcc-internal-format
+msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
+msgstr "РТЛ провера: приÑтуп елта %d вектора поÑледњим елтом %d у %s, код %s:%d"
+
+#: rtl.c:550
+#, gcc-internal-format
+msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d"
+msgstr "РТЛ провера заÑтавице: %s употребљена Ñа неочекиваним rtx кодом „%s“ у „%s“, код %s:%d"
+
+#: stmt.c:317
+#, gcc-internal-format
+msgid "output operand constraint lacks %<=%>"
+msgstr "ограничењу излазног операнда недоÑтаје %<=%>"
+
+#: stmt.c:332
+#, gcc-internal-format
+msgid "output constraint %qc for operand %d is not at the beginning"
+msgstr "излазно ограничење %qc за операнд %d није на почетку"
+
+#: stmt.c:355
+#, gcc-internal-format
+msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>"
+msgstr "ограничење операнда Ñадржи нетачно позиционирано %<+%> или %<=%>"
+
+#: stmt.c:362 stmt.c:461
+#, gcc-internal-format
+msgid "%<%%%> constraint used with last operand"
+msgstr "ограничење %<%%%> употребљено Ñа поÑледњим операндом"
+
+#: stmt.c:381
+#, gcc-internal-format
+msgid "matching constraint not valid in output operand"
+msgstr "поклапајуће ограничење није иÑправно у излазном операнду"
+
+#: stmt.c:452
+#, gcc-internal-format
+msgid "input operand constraint contains %qc"
+msgstr "ограничење улазног операнда Ñадржи %qc"
+
+#: stmt.c:494
+#, gcc-internal-format
+msgid "matching constraint references invalid operand number"
+msgstr "поклапајуће ограничење упућује на неиÑправан број операнда"
+
+#: stmt.c:532
+#, gcc-internal-format
+msgid "invalid punctuation %qc in constraint"
+msgstr "неиÑправна интерпункција %qc у ограничењу"
+
+#: stmt.c:556
+#, gcc-internal-format
+msgid "matching constraint does not allow a register"
+msgstr "поклапајуће ограничење не дозвољава региÑтар"
+
+#: stmt.c:615
+#, gcc-internal-format
+msgid "asm-specifier for variable %qs conflicts with asm clobber list"
+msgstr "наводилац asm за променљиву %qs коÑи Ñе Ñа asm лиÑтом продрмавања"
+
+#: stmt.c:703
+#, gcc-internal-format
+msgid "unknown register name %qs in %<asm%>"
+msgstr "непознато име региÑтра %qs у %<asm%>"
+
+#: stmt.c:711
+#, gcc-internal-format
+msgid "PIC register %qs clobbered in %<asm%>"
+msgstr "ПИЦ региÑтар %qs продрман у %<asm%>"
+
+#: stmt.c:758
+#, gcc-internal-format
+msgid "more than %d operands in %<asm%>"
+msgstr "више од %d операнада у %<asm%>"
+
+#: stmt.c:821
+#, gcc-internal-format
+msgid "output number %d not directly addressable"
+msgstr "излазни број %d не може Ñе непоÑредно адреÑирати"
+
+#: stmt.c:900
+#, gcc-internal-format
+msgid "asm operand %d probably doesn%'t match constraints"
+msgstr "asm операнд %d вероватно не одговара ограничењима"
+
+#: stmt.c:910
+#, gcc-internal-format
+msgid "use of memory input without lvalue in asm operand %d is deprecated"
+msgstr "превазиђена употреба меморијÑког улаза без л-вредноÑти у asm операнду %d"
+
+#: stmt.c:1057
+#, gcc-internal-format
+msgid "asm clobber conflict with output operand"
+msgstr "Ñукоб asm продрмавања Ñа излазним операндом"
+
+#: stmt.c:1062
+#, gcc-internal-format
+msgid "asm clobber conflict with input operand"
+msgstr "Ñукоб asm продрмавања Ñа улазним операндом"
+
+#: stmt.c:1139
+#, gcc-internal-format
+msgid "too many alternatives in %<asm%>"
+msgstr "превише алтернатива у %<asm%>"
+
+#: stmt.c:1151
+#, gcc-internal-format
+msgid "operand constraints for %<asm%> differ in number of alternatives"
+msgstr "ограничења операнда за %<asm%> разликују Ñе у броју алтернатива"
+
+#: stmt.c:1204
+#, gcc-internal-format
+msgid "duplicate asm operand name %qs"
+msgstr "двоÑтруко име asm операнда %qs"
+
+#: stmt.c:1302
+#, gcc-internal-format
+msgid "missing close brace for named operand"
+msgstr "недоÑтаје затворена витичаÑта заграда за именовани операнд"
+
+#: stmt.c:1330
+#, gcc-internal-format
+msgid "undefined named operand %qs"
+msgstr "недефиниÑани именовани операнд %qs"
+
+#: stmt.c:1474
+#, gcc-internal-format
+msgid "%Hvalue computed is not used"
+msgstr "%Hизрачуната вредноÑÑ‚ Ñе не кориÑти"
+
+#: stor-layout.c:149
+#, gcc-internal-format
+msgid "type size can%'t be explicitly evaluated"
+msgstr "величина типа не може бити екÑплицитно израчуната"
+
+#: stor-layout.c:151
+#, gcc-internal-format
+msgid "variable-size type declared outside of any function"
+msgstr "тип променљиве величине деклариÑан изван било које функције"
+
+#: stor-layout.c:462
+#, gcc-internal-format
+msgid "size of %q+D is %d bytes"
+msgstr "величина %q+D је %d бајтова"
+
+#: stor-layout.c:464
+#, gcc-internal-format
+msgid "size of %q+D is larger than %wd bytes"
+msgstr "величина %q+D је већа од %wd бајтова"
+
+#: stor-layout.c:890
+#, gcc-internal-format
+msgid "packed attribute causes inefficient alignment for %q+D"
+msgstr "атрибут паковања доводи до неефикаÑног равнања за %q+D"
+
+#: stor-layout.c:893
+#, gcc-internal-format
+msgid "packed attribute is unnecessary for %q+D"
+msgstr "атрибут паковања непотребан за %q+D"
+
+#. No, we need to skip space before this field.
+#. Bump the cumulative size to multiple of field alignment.
+#: stor-layout.c:908
+#, gcc-internal-format
+msgid "padding struct to align %q+D"
+msgstr "убацујем уметак у Ñтруктуру ради равнања %q+D"
+
+#: stor-layout.c:1311
+#, gcc-internal-format
+msgid "padding struct size to alignment boundary"
+msgstr "убацујем уметак за величину Ñтруктуре до границе равнања"
+
+#: stor-layout.c:1341
+#, gcc-internal-format
+msgid "packed attribute causes inefficient alignment for %qs"
+msgstr "атрибут паковања доводи до неефикаÑног равнања за %qs"
+
+#: stor-layout.c:1345
+#, gcc-internal-format
+msgid "packed attribute is unnecessary for %qs"
+msgstr "атрибут паковања непотребан за %qs"
+
+#: stor-layout.c:1351
+#, gcc-internal-format
+msgid "packed attribute causes inefficient alignment"
+msgstr "атрибут паковања доводи до неефикаÑног равнања"
+
+#: stor-layout.c:1353
+#, gcc-internal-format
+msgid "packed attribute is unnecessary"
+msgstr "атрибут паковања непотребан"
+
+#: stor-layout.c:1858
+#, gcc-internal-format
+msgid "alignment of array elements is greater than element size"
+msgstr "равнање елемената низа је веће од величине елемента"
+
+#: targhooks.c:98
+#, gcc-internal-format
+msgid "__builtin_saveregs not supported by this target"
+msgstr "__builtin_saveregs није подржано овим циљем"
+
+#: tlink.c:484
+#, gcc-internal-format
+msgid "repository file '%s' does not contain command-line arguments"
+msgstr "датотека Ñкладишта „%s“ не Ñадржи аргументе командне линије"
+
+#: tlink.c:705
+#, gcc-internal-format
+msgid "'%s' was assigned to '%s', but was not defined during recompilation, or vice versa"
+msgstr "„%s“ је додељено у „%s“ али није дефиниÑано током поновне компилације, или обрнуто"
+
+#: tlink.c:775
+#, gcc-internal-format
+msgid "ld returned %d exit status"
+msgstr "ld врати излазни ÑÑ‚Ð°Ñ‚ÑƒÑ %d"
+
+#: toplev.c:513
+#, gcc-internal-format
+msgid "invalid option argument %qs"
+msgstr "неиÑправан аргумент опције %qs"
+
+#: toplev.c:603
+#, gcc-internal-format
+msgid "getting core file size maximum limit: %m"
+msgstr "добављам ограничење највеће величине датотеке језгра: %m"
+
+#: toplev.c:606
+#, gcc-internal-format
+msgid "setting core file size limit to maximum: %m"
+msgstr "поÑтављам ограничење највеће величине датотеке језгра: %m"
+
+#: toplev.c:824
+#, gcc-internal-format
+msgid "%q+F declared %<static%> but never defined"
+msgstr "%q+F деклариÑано као %<static%> али нигде дефиниÑано"
+
+#: toplev.c:849
+#, gcc-internal-format
+msgid "%q+D defined but not used"
+msgstr "%q+D дефиниÑано али неупотребљено"
+
+#: toplev.c:892 toplev.c:916
+#, gcc-internal-format
+msgid "%qs is deprecated (declared at %s:%d)"
+msgstr "%qs је превазиђено (деклариÑано код %s:%d)"
+
+#: toplev.c:920
+#, gcc-internal-format
+msgid "type is deprecated (declared at %s:%d)"
+msgstr "тип је превазиђен (деклариÑан код %s:%d)"
+
+#: toplev.c:926
+#, gcc-internal-format
+msgid "%qs is deprecated"
+msgstr "%qs је превазиђено"
+
+#: toplev.c:928
+#, gcc-internal-format
+msgid "type is deprecated"
+msgstr "тип је превазиђен"
+
+#: toplev.c:1095
+#, gcc-internal-format
+msgid "unrecognized gcc debugging option: %c"
+msgstr "непрепозната иÑправљачка опција: %c"
+
+#: toplev.c:1248
+#, gcc-internal-format
+msgid "can%'t open %s for writing: %m"
+msgstr "не могу да отворим %s за пиÑање: %m"
+
+#: toplev.c:1592
+#, gcc-internal-format
+msgid "instruction scheduling not supported on this target machine"
+msgstr "раÑпоређивање инÑтрукција није подржано на овој циљној машини"
+
+#: toplev.c:1596
+#, gcc-internal-format
+msgid "this target machine does not have delayed branches"
+msgstr "ова циљна машина нема одгођена гранања"
+
+#: toplev.c:1610
+#, gcc-internal-format
+msgid "-f%sleading-underscore not supported on this target machine"
+msgstr "-f%sleading-underscore није подржано на овој циљној машини"
+
+#: toplev.c:1683
+#, gcc-internal-format
+msgid "target system does not support the \"%s\" debug format"
+msgstr "циљни ÑиÑтем не подржава иÑправљачки формат „%s“"
+
+#: toplev.c:1695
+#, gcc-internal-format
+msgid "variable tracking requested, but useless unless producing debug info"
+msgstr "праћење променљивих затражено, али беÑкориÑно без Ñтварања иÑправљачких података"
+
+#: toplev.c:1698
+#, gcc-internal-format
+msgid "variable tracking requested, but not supported by this debug format"
+msgstr "праћење променљивих затражено, али неподржано овим иÑправљачким фоматом"
+
+#: toplev.c:1718
+#, gcc-internal-format
+msgid "can%'t open %s: %m"
+msgstr "не могу да отворим %s: %m"
+
+#: toplev.c:1725
+#, gcc-internal-format
+msgid "-ffunction-sections not supported for this target"
+msgstr "-ffunction-sections није подржано за овај циљ"
+
+#: toplev.c:1730
+#, gcc-internal-format
+msgid "-fdata-sections not supported for this target"
+msgstr "-fdata-sections није подржано за овај циљ"
+
+#: toplev.c:1737
+#, gcc-internal-format
+msgid "-ffunction-sections disabled; it makes profiling impossible"
+msgstr "-ffunction-sections иÑкључено јер би онемогућило профилиÑање"
+
+#: toplev.c:1744
+#, gcc-internal-format
+msgid "-fprefetch-loop-arrays not supported for this target"
+msgstr "-fprefetch-loop-arrays није подржано за овај циљ"
+
+#: toplev.c:1750
+#, gcc-internal-format
+msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)"
+msgstr "-fprefetch-loop-arrays није подржано за овај циљ (покушајте нешто од -march)"
+
+#: toplev.c:1759
+#, gcc-internal-format
+msgid "-fprefetch-loop-arrays is not supported with -Os"
+msgstr "-fprefetch-loop-arrays није подржано уз -O варијанте"
+
+#: toplev.c:1765
+#, gcc-internal-format
+msgid "-ffunction-sections may affect debugging on some targets"
+msgstr "-ffunction-sections може утицати на иÑправљање на неком циљевима"
+
+#: toplev.c:1780
+#, gcc-internal-format
+msgid "-fstack-protector not supported for this target"
+msgstr "-fstack-protector није подржано за овај циљ"
+
+#: toplev.c:1793
+#, gcc-internal-format
+msgid "unwind tables currently requires a frame pointer for correctness"
+msgstr "табеле одмотавања тренутно захтевају показивач оквира ради иÑправноÑти"
+
+#: toplev.c:1898
+#, gcc-internal-format
+msgid "error writing to %s: %m"
+msgstr "грешка при упиÑу у %s: %m"
+
+#: toplev.c:1900 java/jcf-parse.c:1105 java/jcf-write.c:3539
+#, gcc-internal-format
+msgid "error closing %s: %m"
+msgstr "грешка при затварању %s: %m"
+
+#: tree-cfg.c:1445 tree-cfg.c:2083 tree-cfg.c:2086
+#, gcc-internal-format
+msgid "%Hwill never be executed"
+msgstr "%Hникада неће бити извршено"
+
+#: tree-cfg.c:3172
+#, gcc-internal-format
+msgid "SSA name in freelist but still referenced"
+msgstr "ССРиме у лиÑти Ñлободних, али Ñе упућује на Ñš"
+
+#: tree-cfg.c:3181
+#, gcc-internal-format
+msgid "ASSERT_EXPR with an always-false condition"
+msgstr "ASSERT_EXPR Ñа увек нетачним уÑловом"
+
+#: tree-cfg.c:3191
+#, gcc-internal-format
+msgid "GIMPLE register modified with BIT_FIELD_REF"
+msgstr "ГИМПЛЕ региÑтар измењен помоћу BIT_FIELD_REF"
+
+#: tree-cfg.c:3226
+#, gcc-internal-format
+msgid "invariant not recomputed when ADDR_EXPR changed"
+msgstr "инваријанта није поново израчуната када Ñе ADDR_EXPR промени"
+
+#: tree-cfg.c:3232
+#, gcc-internal-format
+msgid "constant not recomputed when ADDR_EXPR changed"
+msgstr "конÑтанта није поново израчуната када Ñе ADDR_EXPR промени"
+
+#: tree-cfg.c:3237
+#, gcc-internal-format
+msgid "side effects not recomputed when ADDR_EXPR changed"
+msgstr "Ñпоредни ефекти ниÑу поново израчунати када Ñе ADDR_EXPR промени"
+
+#: tree-cfg.c:3253
+#, gcc-internal-format
+msgid "address taken, but ADDRESSABLE bit not set"
+msgstr "адреÑа узета, али бит ADDRESSABLE није поÑтављен"
+
+#: tree-cfg.c:3263
+#, gcc-internal-format
+msgid "non-boolean used in condition"
+msgstr "не-логичка вредноÑÑ‚ употребљена у уÑлову"
+
+#: tree-cfg.c:3268
+#, gcc-internal-format
+msgid "invalid conditional operand"
+msgstr "неиÑправан операнд уÑлова"
+
+#: tree-cfg.c:3323
+#, gcc-internal-format
+msgid "invalid reference prefix"
+msgstr "неиÑправан Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑƒÐ¿ÑƒÑ›Ð¸Ð²Ð°Ñ‡Ð°"
+
+#: tree-cfg.c:3388
+#, gcc-internal-format
+msgid "is not a valid GIMPLE statement"
+msgstr "није иÑправна ГИМПЛЕ наредба"
+
+#: tree-cfg.c:3408
+#, gcc-internal-format
+msgid "statement marked for throw, but doesn%'t"
+msgstr "наредба означена за бацање, али не чини то"
+
+#: tree-cfg.c:3413
+#, gcc-internal-format
+msgid "statement marked for throw in middle of block"
+msgstr "наредба означена за бацање уÑред блока"
+
+#: tree-cfg.c:3508
+#, gcc-internal-format
+msgid "bb_for_stmt (phi) is set to a wrong basic block"
+msgstr "bb_for_stmt (phi) поÑтављено на погрешан оÑновни блок"
+
+#: tree-cfg.c:3523
+#, gcc-internal-format
+msgid "PHI def is not a GIMPLE value"
+msgstr "ПХИ дефиниција није ГИМПЛЕ вредноÑÑ‚"
+
+#: tree-cfg.c:3539 tree-cfg.c:3562
+#, gcc-internal-format
+msgid "incorrect sharing of tree nodes"
+msgstr "нетачно дељење чворова Ñтабла"
+
+#: tree-cfg.c:3553
+#, gcc-internal-format
+msgid "bb_for_stmt (stmt) is set to a wrong basic block"
+msgstr "bb_for_stmt (stmt) поÑтављено на погрешан оÑновни блок"
+
+#: tree-cfg.c:3571
+#, gcc-internal-format
+msgid "verify_stmts failed"
+msgstr "verify_stmts није уÑпело"
+
+#: tree-cfg.c:3592
+#, gcc-internal-format
+msgid "ENTRY_BLOCK has a statement list associated with it"
+msgstr "ENTRY_BLOCK има придружену лиÑту наредби"
+
+#: tree-cfg.c:3598
+#, gcc-internal-format
+msgid "EXIT_BLOCK has a statement list associated with it"
+msgstr "EXIT_BLOCK има придружену лиÑту наредби"
+
+#: tree-cfg.c:3605
+#, gcc-internal-format
+msgid "fallthru to exit from bb %d"
+msgstr "пропад до излаза из об. %d"
+
+#: tree-cfg.c:3627
+#, gcc-internal-format
+msgid "nonlocal label %s is not first in a sequence of labels in bb %d"
+msgstr "нелокална етикета %s није прва у низу етикета у об. %d"
+
+#: tree-cfg.c:3636
+#, gcc-internal-format
+msgid "label %s to block does not match in bb %d"
+msgstr "етикета %s за блок не поклапа Ñе у об. %d"
+
+#: tree-cfg.c:3645
+#, gcc-internal-format
+msgid "label %s has incorrect context in bb %d"
+msgstr "етикета %s има нетачан контекÑÑ‚ у об. %d"
+
+#: tree-cfg.c:3659
+#, gcc-internal-format
+msgid "control flow in the middle of basic block %d"
+msgstr "контролни ток уÑред оÑновног блока %d"
+
+#: tree-cfg.c:3669
+#, gcc-internal-format
+msgid "label %s in the middle of basic block %d"
+msgstr "етикета %s уÑред оÑновног блока %d"
+
+#: tree-cfg.c:3688
+#, gcc-internal-format
+msgid "fallthru edge after a control statement in bb %d"
+msgstr "пропадна ивица поÑле контролне наредбе у об. %d"
+
+#: tree-cfg.c:3703
+#, gcc-internal-format
+msgid "structured COND_EXPR at the end of bb %d"
+msgstr "Ñтруктуиран COND_EXPR на крају об. %d"
+
+#: tree-cfg.c:3716 tree-cfg.c:3754 tree-cfg.c:3767 tree-cfg.c:3838
+#, gcc-internal-format
+msgid "wrong outgoing edge flags at end of bb %d"
+msgstr "погрешне заÑтавице излазне ивице на крају об. %d"
+
+#: tree-cfg.c:3724
+#, gcc-internal-format
+msgid "%<then%> label does not match edge at end of bb %d"
+msgstr "етикета %<then%> не поклапа ивицу на крају об. %d"
+
+#: tree-cfg.c:3732
+#, gcc-internal-format
+msgid "%<else%> label does not match edge at end of bb %d"
+msgstr "етикета %<else%> не поклапа ивицу на крају об. %d"
+
+#: tree-cfg.c:3742
+#, gcc-internal-format
+msgid "explicit goto at end of bb %d"
+msgstr "екÑплицитно goto на крају об. %d"
+
+#: tree-cfg.c:3772
+#, gcc-internal-format
+msgid "return edge does not point to exit in bb %d"
+msgstr "повратна ивица не показује на излаз у об. %d"
+
+#: tree-cfg.c:3805
+#, gcc-internal-format
+msgid "found default case not at end of case vector"
+msgstr "нађен подразумевани Ñлучај који није на крају вектора Ñлучаја"
+
+#: tree-cfg.c:3811
+#, gcc-internal-format
+msgid "case labels not sorted:"
+msgstr "етикете Ñлучајева ниÑу Ñортиране:"
+
+#: tree-cfg.c:3822
+#, gcc-internal-format
+msgid "no default case found at end of case vector"
+msgstr "подразумевани Ñлучај није нађен на крају вектора Ñлучајева"
+
+#: tree-cfg.c:3830
+#, gcc-internal-format
+msgid "extra outgoing edge %d->%d"
+msgstr "Ñувишна излазна ивица %d->%d"
+
+#: tree-cfg.c:3852
+#, gcc-internal-format
+msgid "missing edge %i->%i"
+msgstr "недоÑтаје ивица %i->%i"
+
+#: tree-cfg.c:5143 tree-cfg.c:5147
+#, gcc-internal-format
+msgid "%H%<noreturn%> function does return"
+msgstr "%H%<noreturn%> функција ипак враћа"
+
+#: tree-cfg.c:5169 tree-cfg.c:5174
+#, gcc-internal-format
+msgid "%Hcontrol reaches end of non-void function"
+msgstr "%Hконтрола Ñтиже до краја функције непразног типа"
+
+#: tree-cfg.c:5234
+#, gcc-internal-format
+msgid "%Jfunction might be possible candidate for attribute %<noreturn%>"
+msgstr "%Jфункција може бити кандидат за атрибут %<noreturn%>"
+
+#: tree-dump.c:856
+#, gcc-internal-format
+msgid "could not open dump file %qs: %s"
+msgstr "ниÑам могао да отворим датотеку попиÑа %qs: %s"
+
+#: tree-dump.c:987
+#, gcc-internal-format
+msgid "ignoring unknown option %q.*s in %<-fdump-%s%>"
+msgstr "игноришем непознату опцију %q.*s у %<-fdump-%s%>"
+
+#: tree-eh.c:1767
+#, gcc-internal-format
+msgid "EH edge %i->%i is missing"
+msgstr "недоÑтаје ЕХ ивица %i->%i"
+
+#: tree-eh.c:1772
+#, gcc-internal-format
+msgid "EH edge %i->%i miss EH flag"
+msgstr "ЕХ ивици %i->%i недоÑтаје ЕХ заÑтавица"
+
+#. ??? might not be mistake.
+#: tree-eh.c:1778
+#, gcc-internal-format
+msgid "EH edge %i->%i has duplicated regions"
+msgstr "ЕХ ивица %i->%i има удвоÑтручене облаÑти"
+
+#: tree-eh.c:1812
+#, gcc-internal-format
+msgid "BB %i can not throw but has EH edges"
+msgstr "Об. %i не може да баци али има ЕХ ивице"
+
+#: tree-eh.c:1819
+#, gcc-internal-format
+msgid "BB %i last statement has incorrectly set region"
+msgstr "ПоÑледња наредба у об. %i има неиÑправно поÑтављену облаÑÑ‚"
+
+#: tree-eh.c:1830
+#, gcc-internal-format
+msgid "unnecessary EH edge %i->%i"
+msgstr "непотребна ЕХ ивица %i->%i"
+
+#: tree-inline.c:1386
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses alloca (override using the always_inline attribute)"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти alloca (потиÑните атрибутом always_inline)"
+
+#: tree-inline.c:1398
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses setjmp"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти setjmp"
+
+#: tree-inline.c:1412
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses variable argument lists"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти променљиву лиÑту аргумената"
+
+#: tree-inline.c:1423
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses setjmp-longjmp exception handling"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти јер кориÑти руковање изузецима типа setjmp-longjmp"
+
+#: tree-inline.c:1430
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses non-local goto"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти нелокално goto"
+
+#: tree-inline.c:1441
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses __builtin_return or __builtin_apply_args"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти __builtin_return или __builtin_apply_args"
+
+#: tree-inline.c:1460
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it contains a computed goto"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти рачунÑко goto"
+
+#: tree-inline.c:1474
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it receives a non-local goto"
+msgstr "функција %q+F Ñе не може уткати јер прима нелокално goto"
+
+#: tree-inline.c:1499
+#, gcc-internal-format
+msgid "function %q+F can never be inlined because it uses variable sized variables"
+msgstr "функција %q+F Ñе не може уткати јер кориÑти променљиве променљиве величине"
+
+#: tree-inline.c:2038 tree-inline.c:2048
+#, gcc-internal-format
+msgid "inlining failed in call to %q+F: %s"
+msgstr "уткивање није уÑпело у позиву %q+F: %s"
+
+#: tree-inline.c:2039 tree-inline.c:2050
+#, gcc-internal-format
+msgid "called from here"
+msgstr "позвано одавде"
+
+#: tree-mudflap.c:847
+#, gcc-internal-format
+msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF"
+msgstr "блатобранÑка провера још увек није имплементирана за ARRAY_RANGE_REF"
+
+#: tree-mudflap.c:1038
+#, gcc-internal-format
+msgid "mudflap cannot track %qs in stub function"
+msgstr "блатобран не може да прати %qs у клици функције"
+
+#: tree-mudflap.c:1269
+#, gcc-internal-format
+msgid "mudflap cannot track unknown size extern %qs"
+msgstr "блатобран не може да прати Ñпољашње %qs непознате величине"
+
+#: tree-nomudflap.c:51
+#, gcc-internal-format
+msgid "mudflap: this language is not supported"
+msgstr "блатобран: овај језик није подржан"
+
+#: tree-optimize.c:478
+#, gcc-internal-format
+msgid "size of return value of %q+D is %u bytes"
+msgstr "величина повратне вредноÑти %q+D је %u бајтова"
+
+#: tree-optimize.c:481
+#, gcc-internal-format
+msgid "size of return value of %q+D is larger than %wd bytes"
+msgstr "величина повратне вредноÑти %q+D је већа од %wd бајтова"
+
+#: tree-outof-ssa.c:614 tree-outof-ssa.c:629 tree-outof-ssa.c:643
+#: tree-outof-ssa.c:665 tree-outof-ssa.c:1120 tree-outof-ssa.c:1872
+#: tree-ssa-live.c:429 tree-ssa-live.c:1835
+#, gcc-internal-format
+msgid "SSA corruption"
+msgstr "ССРиÑкварење"
+
+#: tree-outof-ssa.c:2287
+#, gcc-internal-format
+msgid " Pending stmts not issued on PRED edge (%d, %d)\n"
+msgstr " ÐаÑтупајуће наредбе ниÑу издате на претходној ивици (%d, %d)\n"
+
+#: tree-outof-ssa.c:2293
+#, gcc-internal-format
+msgid " Pending stmts not issued on SUCC edge (%d, %d)\n"
+msgstr " ÐаÑтупајуће наредбе ниÑу издате на наÑледној ивици (%d, %d)\n"
+
+#: tree-outof-ssa.c:2300
+#, gcc-internal-format
+msgid " Pending stmts not issued on ENTRY edge (%d, %d)\n"
+msgstr " ÐаÑтупајуће наредбе ниÑу издате на улазној ивици (%d, %d)\n"
+
+#: tree-outof-ssa.c:2306
+#, gcc-internal-format
+msgid " Pending stmts not issued on EXIT edge (%d, %d)\n"
+msgstr " ÐаÑтупајуће наредбе ниÑу издате на излазној ивици (%d, %d)\n"
+
+#: tree-profile.c:216
+#, gcc-internal-format
+msgid "unimplemented functionality"
+msgstr "неимплементирана фунционалноÑÑ‚"
+
+#: tree-ssa-loop-niter.c:1118
+#, gcc-internal-format
+msgid "%H%s"
+msgstr "%H%s"
+
+#: tree-ssa-operands.c:1328
+#, gcc-internal-format
+msgid "internal error"
+msgstr "унутрашња грешка"
+
+#: tree-ssa.c:111
+#, gcc-internal-format
+msgid "expected an SSA_NAME object"
+msgstr "очекиван објекат типа SSA_NAME"
+
+#: tree-ssa.c:117
+#, gcc-internal-format
+msgid "type mismatch between an SSA_NAME and its symbol"
+msgstr "неÑлагање типова између SSA_NAME и његовог Ñимбола"
+
+#: tree-ssa.c:123
+#, gcc-internal-format
+msgid "found an SSA_NAME that had been released into the free pool"
+msgstr "нађен SSA_NAME који је оÑлобољен у депо Ñлободних"
+
+#: tree-ssa.c:129
+#, gcc-internal-format
+msgid "found a virtual definition for a GIMPLE register"
+msgstr "нађена виртуелна дефиниција за ГИМПЛЕ региÑтар"
+
+#: tree-ssa.c:135
+#, gcc-internal-format
+msgid "found a real definition for a non-register"
+msgstr "нађена Ñтварна дефиниција за не-региÑтар"
+
+#: tree-ssa.c:142
+#, gcc-internal-format
+msgid "found real variable when subvariables should have appeared"
+msgstr "нађена Ñтварна променљива кад је требало да Ñе појаве потпроменљиве"
+
+#: tree-ssa.c:171
+#, gcc-internal-format
+msgid "SSA_NAME created in two different blocks %i and %i"
+msgstr "SSA_NAME направљен у два различита блока %i и %i"
+
+#: tree-ssa.c:180
+#, gcc-internal-format
+msgid "SSA_NAME_DEF_STMT is wrong"
+msgstr "SSA_NAME_DEF_STMT је погрешно"
+
+#: tree-ssa.c:238
+#, gcc-internal-format
+msgid "missing definition"
+msgstr "недоÑтаје дефиниција"
+
+#: tree-ssa.c:244
+#, gcc-internal-format
+msgid "definition in block %i does not dominate use in block %i"
+msgstr "дефиниција у блоку %i не доминира употребом у блоку %i"
+
+#: tree-ssa.c:252
+#, gcc-internal-format
+msgid "definition in block %i follows the use"
+msgstr "дефиниција у блоку %i прати употребу"
+
+#: tree-ssa.c:259
+#, gcc-internal-format
+msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set"
+msgstr "SSA_NAME_OCCURS_IN_ABNORMAL_PHI треба да је поÑтављено"
+
+#: tree-ssa.c:267
+#, gcc-internal-format
+msgid "no immediate_use list"
+msgstr "нема лиÑте непоÑредне употребе"
+
+#: tree-ssa.c:279
+#, gcc-internal-format
+msgid "wrong immediate use list"
+msgstr "погрешна лиÑта непоÑредне употребе"
+
+#: tree-ssa.c:312
+#, gcc-internal-format
+msgid "incoming edge count does not match number of PHI arguments"
+msgstr "долазна ивица Ñе не поклапа Ñа бројем ПХИ аргумената"
+
+#: tree-ssa.c:327
+#, gcc-internal-format
+msgid "PHI argument is missing for edge %d->%d"
+msgstr "недоÑтаје ПХИ аргумент за ивицу %d->%d"
+
+#: tree-ssa.c:336
+#, gcc-internal-format
+msgid "PHI argument is not SSA_NAME, or invariant"
+msgstr "ПХИ аргумент није SSA_NAME нити инваријанта"
+
+#: tree-ssa.c:348
+#, gcc-internal-format
+msgid "wrong edge %d->%d for PHI argument"
+msgstr "погрешна ивица %d->%d за ПХИ аргумент"
+
+#: tree-ssa.c:397
+#, gcc-internal-format
+msgid "non-addressable variable inside an alias set"
+msgstr "променљива која Ñе не може адреÑирати унутар Ñкупа алијаÑа"
+
+#: tree-ssa.c:413
+#, gcc-internal-format
+msgid "addressable variable that is an alias tag but is not in any alias set"
+msgstr "променљива која Ñе може адреÑирати која је ознака алијаÑа, али није ни у једном Ñкупу алијаÑа"
+
+#: tree-ssa.c:423
+#, gcc-internal-format
+msgid "verify_flow_insensitive_alias_info failed"
+msgstr "verify_flow_insensitive_alias_info није уÑпело"
+
+#: tree-ssa.c:465
+#, gcc-internal-format
+msgid "dereferenced pointers should have a name or a type tag"
+msgstr "разрешени показивачи треба да имају име или ознаку типа"
+
+#: tree-ssa.c:472
+#, gcc-internal-format
+msgid "pointers with a memory tag, should have points-to sets"
+msgstr "показивачи Ñа меморијÑком ознаком треба да имају Ñкупове показује-на"
+
+#: tree-ssa.c:480
+#, gcc-internal-format
+msgid "pointer escapes but its name tag is not call-clobbered"
+msgstr "показивач бежи али његова ознака имена није позивом продрмана"
+
+#: tree-ssa.c:489
+#, gcc-internal-format
+msgid "verify_flow_sensitive_alias_info failed"
+msgstr "verify_flow_sensitive_alias_info није уÑпело"
+
+#: tree-ssa.c:566
+#, gcc-internal-format
+msgid "alias set of a pointer's type tag should be a superset of the corresponding name tag"
+msgstr "Ñкуп алијаÑа за ознаку типа показивача треба да је надÑкуп одговарајуће ознаке имена"
+
+#: tree-ssa.c:582
+#, gcc-internal-format
+msgid "two different pointers with identical points-to sets but different name tags"
+msgstr "два различита показивача Ñа иÑтоветним показује-на Ñкуповима, али различитим ознакама имена"
+
+#: tree-ssa.c:614
+#, gcc-internal-format
+msgid "verify_name_tags failed"
+msgstr "verify_name_tags није уÑпело"
+
+#: tree-ssa.c:685
+#, gcc-internal-format
+msgid "AUX pointer initialized for edge %d->%d"
+msgstr "ÐУКС показивач уÑпоÑтављен за ивицу %d->%d"
+
+#: tree-ssa.c:708
+#, gcc-internal-format
+msgid "stmt (%p) marked modified after optimization pass : "
+msgstr "наредба (%p) означена измењеном поÑле оптимизујућег пролаза: "
+
+#: tree-ssa.c:726
+#, gcc-internal-format
+msgid "statement makes a memory store, but has no V_MAY_DEFS nor V_MUST_DEFS"
+msgstr "наредба чини Ñкладиштење у меморију, али нема V_MAY_DEFS нити V_MUST_DEFS"
+
+#: tree-ssa.c:737
+#, gcc-internal-format
+msgid "statement makes aliased stores, but has no V_MAY_DEFS"
+msgstr "наредба чини дволична Ñкладиштења, али нема V_MAY_DEFS"
+
+#: tree-ssa.c:776
+#, gcc-internal-format
+msgid "verify_ssa failed"
+msgstr "verify_ssa није уÑпело"
+
+#. We only do data flow with SSA_NAMEs, so that's all we
+#. can warn about.
+#: tree-ssa.c:1163
+#, gcc-internal-format
+msgid "%H%qD is used uninitialized in this function"
+msgstr "%H%qD у овој функцији кориÑти Ñе неуÑпоÑтављено"
+
+#: tree-ssa.c:1201
+#, gcc-internal-format
+msgid "%H%qD may be used uninitialized in this function"
+msgstr "%H%qD у овој функцији може бити бити употребљено неуÑпоÑтављено"
+
+#: tree-vect-transform.c:561
+#, gcc-internal-format
+msgid "no support for induction"
+msgstr "нема подршке за индукцију"
+
+#: tree.c:3497
+#, gcc-internal-format
+msgid "%q+D already declared with dllexport attribute: dllimport ignored"
+msgstr "%q+D већ деклариÑано Ñа атрибутом dllexport: dllimport Ñе игнорише"
+
+#: tree.c:3509
+#, gcc-internal-format
+msgid "%q+D redeclared without dllimport attribute after being referenced with dll linkage"
+msgstr "%q+D поново деклариÑано без атрибута dllimport пошто је на Ñš упућено ДЛЛ повезивошћу"
+
+#: tree.c:3525 config/i386/winnt-cxx.c:70
+#, gcc-internal-format
+msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored"
+msgstr "%q+D поново деклариÑано без атрибута dllimport: претходно dllimport Ñе игнорише"
+
+#: tree.c:3577 config/darwin.c:1236 config/arm/arm.c:2896
+#: config/arm/arm.c:2924 config/avr/avr.c:4656 config/h8300/h8300.c:5282
+#: config/h8300/h8300.c:5306 config/i386/i386.c:2066 config/i386/i386.c:16727
+#: config/ia64/ia64.c:534 config/m68hc11/m68hc11.c:1118
+#: config/sh/symbian.c:409 config/sh/symbian.c:416
+#, gcc-internal-format
+msgid "%qs attribute ignored"
+msgstr "атрибут %qs Ñе игнорише"
+
+#: tree.c:3596
+#, gcc-internal-format
+msgid "inline function %q+D declared as dllimport: attribute ignored"
+msgstr "уткана функција %q+D поново деклариÑана као dllimport: атрибут Ñе игнорише"
+
+#: tree.c:3604
+#, gcc-internal-format
+msgid "function %q+D definition is marked dllimport"
+msgstr "дефиниција функције %q+D означена као dllimport"
+
+#: tree.c:3612 config/sh/symbian.c:431
+#, gcc-internal-format
+msgid "variable %q+D definition is marked dllimport"
+msgstr "дефиниција променљиве %q+D означена као dllimport"
+
+#: tree.c:3635 config/sh/symbian.c:506
+#, gcc-internal-format
+msgid "external linkage required for symbol %q+D because of %qs attribute"
+msgstr "Ñпољашња повезивоÑÑ‚ неопходна за Ñимбол %q+D због атрибута %qs"
+
+#: tree.c:5029
+#, gcc-internal-format
+msgid "arrays of functions are not meaningful"
+msgstr "низови функција немају ÑмиÑла"
+
+#: tree.c:5081
+#, gcc-internal-format
+msgid "function return type cannot be function"
+msgstr "повратни тип функције не може бити функција"
+
+#: tree.c:6000
+#, gcc-internal-format
+msgid "tree check: %s, have %s in %s, at %s:%d"
+msgstr "провера Ñтабла: %s, имам %s у %s, код %s:%d"
+
+#: tree.c:6037
+#, gcc-internal-format
+msgid "tree check: expected none of %s, have %s in %s, at %s:%d"
+msgstr "провера Ñтабла: не очекивај ниједно од %s, имам %s у %s, код %s:%d"
+
+#: tree.c:6050
+#, gcc-internal-format
+msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d"
+msgstr "провера Ñтабла: очекивах клаÑу %qs, имам %qs (%s) у %s, код %s:%d"
+
+#: tree.c:6075
+#, gcc-internal-format
+msgid "tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d"
+msgstr "провера Ñтабла: очекивах Ñтабло које Ñадржи Ñтруктуру %qs, имам %qs у %s, код %s:%d"
+
+#: tree.c:6089
+#, gcc-internal-format
+msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
+msgstr "провера Ñтабла: приÑтупих елту %d у tree_vec Ñа %d елтова у %s, код %s:%d"
+
+#: tree.c:6101
+#, gcc-internal-format
+msgid "tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d"
+msgstr "провера Ñтабла: приÑтупих елту %d у phi_node Ñа %d елтова у %s, код %s:%d"
+
+#: tree.c:6113
+#, gcc-internal-format
+msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
+msgstr "провера Ñтабла: приÑтупих операнду %d од %s Ñа %d операнада у %s, код %s:%d"
+
+#: value-prof.c:101
+#, gcc-internal-format
+msgid "%HCorrupted value profile: %s profiler overall count (%d) does not match BB count (%d)"
+msgstr "%HИÑкварена вредноÑÑ‚ профила: укупни број профилизатора %s (%d) не поклапа Ñе Ñа бројем об. (%d)"
+
+#: varasm.c:470
+#, gcc-internal-format
+msgid "%+D causes a section type conflict"
+msgstr "%+D изазива Ñукоб типа одељка"
+
+#: varasm.c:930 varasm.c:938
+#, gcc-internal-format
+msgid "register name not specified for %q+D"
+msgstr "име региÑтра није наведено за %q+D"
+
+#: varasm.c:940
+#, gcc-internal-format
+msgid "invalid register name for %q+D"
+msgstr "неиÑправно име региÑтра за %q+D"
+
+#: varasm.c:942
+#, gcc-internal-format
+msgid "data type of %q+D isn%'t suitable for a register"
+msgstr "тип податка за %q+D није погодан за региÑтар"
+
+#: varasm.c:945
+#, gcc-internal-format
+msgid "register specified for %q+D isn%'t suitable for data type"
+msgstr "региÑтар наведен за %q+D није погодан за тип податка"
+
+#: varasm.c:955
+#, gcc-internal-format
+msgid "global register variable has initial value"
+msgstr "глобална региÑтарÑка променљива има почетну вредноÑÑ‚"
+
+#: varasm.c:959
+#, gcc-internal-format
+msgid "optimization may eliminate reads and/or writes to register variables"
+msgstr "оптимизација може уклонити читања и/или пиÑања у региÑтарÑке променљиве"
+
+#: varasm.c:997
+#, gcc-internal-format
+msgid "register name given for non-register variable %q+D"
+msgstr "име региÑтра дато за нерегиÑтарÑку променљиву %q+D"
+
+#: varasm.c:1074
+#, gcc-internal-format
+msgid "global destructors not supported on this target"
+msgstr "глобални деÑтруктори ниÑу подржани на овом циљу"
+
+#: varasm.c:1135
+#, gcc-internal-format
+msgid "global constructors not supported on this target"
+msgstr "глобални конÑтруктори ниÑу подржани на овом циљу"
+
+#: varasm.c:1697
+#, gcc-internal-format
+msgid "alignment of %q+D is greater than maximum object file alignment. Using %d"
+msgstr "равнање за %q+D веће је од највећег равнања објектне датотеке. КориÑтим %d"
+
+#: varasm.c:1736
+#, gcc-internal-format
+msgid "thread-local COMMON data not implemented"
+msgstr "нитно-локални COMMON подаци ниÑу имплементирани"
+
+#: varasm.c:1761
+#, gcc-internal-format
+msgid "requested alignment for %q+D is greater than implemented alignment of %wu"
+msgstr "захтевано равнање за %q+D веће је од имплементираног равнања за %wu"
+
+#: varasm.c:3935
+#, gcc-internal-format
+msgid "no-op convert from %wd to %wd bytes in initializer"
+msgstr "не-оп претварање из %wd у %wd бајтова у уÑпоÑтављачу"
+
+#: varasm.c:3979
+#, gcc-internal-format
+msgid "initializer for integer value is too complicated"
+msgstr "уÑпоÑтављач за целобројну вредноÑÑ‚ је превише компликован"
+
+#: varasm.c:3984
+#, gcc-internal-format
+msgid "initializer for floating value is not a floating constant"
+msgstr "уÑпоÑтављач за реалну вредноÑÑ‚ није реална конÑтанта"
+
+#: varasm.c:4253
+#, gcc-internal-format
+msgid "invalid initial value for member %qs"
+msgstr "неиÑправна почетна вредноÑÑ‚ за члан %qs"
+
+#: varasm.c:4453 varasm.c:4497
+#, gcc-internal-format
+msgid "weak declaration of %q+D must precede definition"
+msgstr "Ñлаба декларација %q+D мора претходити дефиницији"
+
+#: varasm.c:4461
+#, gcc-internal-format
+msgid "weak declaration of %q+D after first use results in unspecified behavior"
+msgstr "Ñлаба декларација %q+D поÑле прве употребе резултује неодређеним понашањем"
+
+#: varasm.c:4495
+#, gcc-internal-format
+msgid "weak declaration of %q+D must be public"
+msgstr "Ñлаба декларација %q+D мора бити јавна"
+
+#: varasm.c:4504
+#, gcc-internal-format
+msgid "weak declaration of %q+D not supported"
+msgstr "Ñлаба декларација %q+D није подржана"
+
+#: varasm.c:4534
+#, gcc-internal-format
+msgid "only weak aliases are supported in this configuration"
+msgstr "Ñамо Ñлаби алијаÑи Ñу подржани у овој конфигурацији"
+
+#: varasm.c:4764
+#, gcc-internal-format
+msgid "%Jweakref is not supported in this configuration"
+msgstr "%JÑлаби упућивач није подржан у овој конфигурацији"
+
+#: varasm.c:4837
+#, gcc-internal-format
+msgid "%q+D aliased to undefined symbol %qs"
+msgstr "%q+D удволичено Ñа недефиниÑаним Ñимболом %qs"
+
+#: varasm.c:4842
+#, gcc-internal-format
+msgid "%q+D aliased to external symbol %qs"
+msgstr "%q+D удволичено Ñа Ñпољашњим Ñимболом %qs"
+
+#: varasm.c:4881
+#, gcc-internal-format
+msgid "weakref %q+D ultimately targets itself"
+msgstr "Ñлаби упућивач %q+D на крају циља Ñамог Ñебе"
+
+#: varasm.c:4894
+#, gcc-internal-format
+msgid "%Jalias definitions not supported in this configuration"
+msgstr "%Jдефиниције алијаÑа ниÑу подржане у овој конфигурацији"
+
+#: varasm.c:4899
+#, gcc-internal-format
+msgid "%Jonly weak aliases are supported in this configuration"
+msgstr "%JÑамо Ñлаби алијаÑи Ñу подржани у овој конфигурацији"
+
+#: varasm.c:4956
+#, gcc-internal-format
+msgid "visibility attribute not supported in this configuration; ignored"
+msgstr "атрибут видљивоÑти није подржан у овој конфигурацији, игноришем"
+
+#: varray.c:207
+#, gcc-internal-format
+msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
+msgstr "виртуелни низ %s[%lu]: елемент %lu ван граница у %s, код %s:%d"
+
+#: varray.c:217
+#, gcc-internal-format
+msgid "underflowed virtual array %s in %s, at %s:%d"
+msgstr "подливен виртуелни низ %s у %s, код %s:%d"
+
+#: vec.c:153
+#, gcc-internal-format
+msgid "vector %s %s domain error, in %s at %s:%u"
+msgstr "вектор %s грешке домена %s, у %s код %s:%u"
+
+#. Print an error message for unrecognized stab codes.
+#: xcoffout.c:187
+#, gcc-internal-format
+msgid "no sclass for %s stab (0x%x)"
+msgstr "нема sclass за %s stab (0x%x)"
+
+#: config/darwin-c.c:86
+#, gcc-internal-format
+msgid "too many #pragma options align=reset"
+msgstr "превише #pragma options align=reset"
+
+#: config/darwin-c.c:106 config/darwin-c.c:109 config/darwin-c.c:111
+#: config/darwin-c.c:113
+#, gcc-internal-format
+msgid "malformed '#pragma options', ignoring"
+msgstr "лоше формирано „#pragma options“, игноришем"
+
+#: config/darwin-c.c:116
+#, gcc-internal-format
+msgid "junk at end of '#pragma options'"
+msgstr "Ñмеће на крају „#pragma options“"
+
+#: config/darwin-c.c:126
+#, gcc-internal-format
+msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring"
+msgstr "лоше формирано „#pragma options align={mac68k|power|reset}“, игноришем"
+
+#: config/darwin-c.c:138
+#, gcc-internal-format
+msgid "missing '(' after '#pragma unused', ignoring"
+msgstr "недоÑтаје „(“ поÑле „#pragma unused“, игноришем"
+
+#: config/darwin-c.c:156
+#, gcc-internal-format
+msgid "missing ')' after '#pragma unused', ignoring"
+msgstr "недоÑтаје „)“ поÑле „#pragma unused“, игноришем"
+
+#: config/darwin-c.c:159
+#, gcc-internal-format
+msgid "junk at end of '#pragma unused'"
+msgstr "Ñмеће на крају „#pragma unused“"
+
+#: config/darwin-c.c:385
+#, gcc-internal-format
+msgid "subframework include %s conflicts with framework include"
+msgstr "укључивање радног подоквира %s коÑи Ñе Ñа укључивањем радног оквира"
+
+#: config/darwin-c.c:577
+#, gcc-internal-format
+msgid "Unknown value %qs of -mmacosx-version-min"
+msgstr "Ðепозната вредноÑÑ‚ %qs за -mmacosx-version-min"
+
+#: config/darwin.c:1350
+#, gcc-internal-format
+msgid "internal and protected visibility attributes not supported in this configuration; ignored"
+msgstr "атрибути унутрашње и заштићене видљивоÑти ниÑу подржани у овој конфигурацији, игноришем"
+
+#: config/host-darwin.c:63
+#, gcc-internal-format
+msgid "couldn't unmap pch_address_space: %m"
+msgstr "ниÑам могао да демапирам pch_address_space: %m"
+
+#: config/sol2-c.c:94 config/sol2-c.c:110
+#, gcc-internal-format
+msgid "malformed %<#pragma align%>, ignoring"
+msgstr "лоше формирано %<#pragma align%>, игноришем"
+
+#: config/sol2-c.c:103
+#, gcc-internal-format
+msgid "invalid alignment for %<#pragma align%>, ignoring"
+msgstr "неиÑправно равнање за %<#pragma align%>, игноришем"
+
+#: config/sol2-c.c:118
+#, gcc-internal-format
+msgid "%<#pragma align%> must appear before the declaration of %D, ignoring"
+msgstr "%<#pragma align%> мора да Ñе јави пре декларације %D, игноришем"
+
+#: config/sol2-c.c:130 config/sol2-c.c:142
+#, gcc-internal-format
+msgid "malformed %<#pragma align%>"
+msgstr "лоше формирано %<#pragma align%>"
+
+#: config/sol2-c.c:137
+#, gcc-internal-format
+msgid "junk at end of %<#pragma align%>"
+msgstr "Ñмеће на крају %<#pragma align%>"
+
+#: config/sol2-c.c:158 config/sol2-c.c:165
+#, gcc-internal-format
+msgid "malformed %<#pragma init%>, ignoring"
+msgstr "лоше формирано %<#pragma init%>, игноришем"
+
+#: config/sol2-c.c:188 config/sol2-c.c:200
+#, gcc-internal-format
+msgid "malformed %<#pragma init%>"
+msgstr "лоше формирано %<#pragma init%>"
+
+#: config/sol2-c.c:195
+#, gcc-internal-format
+msgid "junk at end of %<#pragma init%>"
+msgstr "Ñмеће на крају %<#pragma init%>"
+
+#: config/sol2-c.c:216 config/sol2-c.c:223
+#, gcc-internal-format
+msgid "malformed %<#pragma fini%>, ignoring"
+msgstr "лоше формирано %<#pragma fini%>, игноришем"
+
+#: config/sol2-c.c:246 config/sol2-c.c:258
+#, gcc-internal-format
+msgid "malformed %<#pragma fini%>"
+msgstr "лоше формирано %<#pragma fini%>"
+
+#: config/sol2-c.c:253
+#, gcc-internal-format
+msgid "junk at end of %<#pragma fini%>"
+msgstr "Ñмеће на крају %<#pragma fini%>"
+
+#: config/sol2.c:54
+#, gcc-internal-format
+msgid "ignoring %<#pragma align%> for explicitly aligned %q+D"
+msgstr "игноришем %<#pragma align%> за екÑплицитно поравнато %q+D"
+
+#. Mach-O supports 'weak imports', and 'weak definitions' in coalesced
+#. sections. machopic_select_section ensures that weak variables go in
+#. 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:395
+#, gcc-internal-format
+msgid "alias definitions not supported in Mach-O; ignored"
+msgstr "дефиниције алијаÑа ниÑу подржане у Маху-О, игноришем"
+
+#. No profiling.
+#: config/vx-common.h:83
+#, gcc-internal-format
+msgid "profiler support for VxWorks"
+msgstr "подршка профилиÑања за ВикÑВоркÑ"
+
+#: config/windiss.h:37
+#, gcc-internal-format
+msgid "profiler support for WindISS"
+msgstr "подршка профилиÑања за ВиндИСС"
+
+#: config/alpha/alpha.c:231 config/rs6000/rs6000.c:1579
+#, gcc-internal-format
+msgid "bad value %qs for -mtls-size switch"
+msgstr "лоша вредноÑÑ‚ %qs за прекидач -mtls-size"
+
+#: config/alpha/alpha.c:285
+#, gcc-internal-format
+msgid "-f%s ignored for Unicos/Mk (not supported)"
+msgstr "-f%s игнориÑано за УникоÑ/Мк (није подржано)"
+
+#: config/alpha/alpha.c:309
+#, gcc-internal-format
+msgid "-mieee not supported on Unicos/Mk"
+msgstr "-mieee није подржано на УникоÑу/Мк"
+
+#: config/alpha/alpha.c:320
+#, gcc-internal-format
+msgid "-mieee-with-inexact not supported on Unicos/Mk"
+msgstr "-mieee-with-inexact није подржано на УникоÑу/Мк"
+
+#: config/alpha/alpha.c:337
+#, gcc-internal-format
+msgid "bad value %qs for -mtrap-precision switch"
+msgstr "лоша вредноÑÑ‚ %qs за прекидач -mtrap-precision"
+
+#: config/alpha/alpha.c:351
+#, gcc-internal-format
+msgid "bad value %qs for -mfp-rounding-mode switch"
+msgstr "лоша вредноÑÑ‚ %qs за прекидач -mfp-rounding-mode"
+
+#: config/alpha/alpha.c:366
+#, gcc-internal-format
+msgid "bad value %qs for -mfp-trap-mode switch"
+msgstr "лоша вредноÑÑ‚ %qs за прекидач -mfp-trap-mode"
+
+#: config/alpha/alpha.c:380 config/alpha/alpha.c:392
+#, gcc-internal-format
+msgid "bad value %qs for -mcpu switch"
+msgstr "лоша вредноÑÑ‚ %qs за прекидач -mcpu"
+
+#: config/alpha/alpha.c:399
+#, gcc-internal-format
+msgid "trap mode not supported on Unicos/Mk"
+msgstr "режим клопки није подржан на УникоÑу/Мк"
+
+#: config/alpha/alpha.c:406
+#, gcc-internal-format
+msgid "fp software completion requires -mtrap-precision=i"
+msgstr "ФП ÑофтверÑко довршавање захтева -mtrap-precision=i"
+
+#: config/alpha/alpha.c:422
+#, gcc-internal-format
+msgid "rounding mode not supported for VAX floats"
+msgstr "режим заокруживања није подржан за Ð’ÐКСове реалне"
+
+#: config/alpha/alpha.c:427
+#, gcc-internal-format
+msgid "trap mode not supported for VAX floats"
+msgstr "режим клопки није подржан за Ð’ÐКСове реалне"
+
+#: config/alpha/alpha.c:431
+#, gcc-internal-format
+msgid "128-bit long double not supported for VAX floats"
+msgstr "128-битни дуги реални није подржан за Ð’ÐКСове реалне"
+
+#: config/alpha/alpha.c:459
+#, gcc-internal-format
+msgid "L%d cache latency unknown for %s"
+msgstr "Кашњење L%d оÑтаве непознато за %s"
+
+#: config/alpha/alpha.c:474
+#, gcc-internal-format
+msgid "bad value %qs for -mmemory-latency"
+msgstr "лоша вредноÑÑ‚ %qs за -mmemory-latency"
+
+#: config/alpha/alpha.c:6569 config/alpha/alpha.c:6572 config/s390/s390.c:8111
+#: config/s390/s390.c:8114
+#, gcc-internal-format
+msgid "bad builtin fcode"
+msgstr "лош уграђени fcode"
+
+#: config/arc/arc.c:390
+#, gcc-internal-format
+msgid "argument of %qs attribute is not a string constant"
+msgstr "аргумент атрибута %qs није конÑтантна ниÑка"
+
+#: config/arc/arc.c:398
+#, gcc-internal-format
+msgid "argument of %qs attribute is not \"ilink1\" or \"ilink2\""
+msgstr "аргумент атрибута %qs није „ilink1“ или „ilink2“"
+
+#: config/arm/arm.c:912
+#, gcc-internal-format
+msgid "switch -mcpu=%s conflicts with -march= switch"
+msgstr "прекидач -mcpu=%s коÑи Ñе Ñа -march="
+
+#: config/arm/arm.c:922 config/rs6000/rs6000.c:1231 config/sparc/sparc.c:706
+#, gcc-internal-format
+msgid "bad value (%s) for %s switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач %s"
+
+#: config/arm/arm.c:1032
+#, gcc-internal-format
+msgid "target CPU does not support interworking"
+msgstr "циљни ЦПУ не подржава интерворкинг"
+
+#: config/arm/arm.c:1038
+#, gcc-internal-format
+msgid "target CPU does not support THUMB instructions"
+msgstr "циљни ЦПУ не подржава инÑтрукције Тамба"
+
+#: config/arm/arm.c:1056
+#, gcc-internal-format
+msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
+msgstr "укључивање подршке за контраход има ÑмиÑла Ñамо када Ñе компилује за Тамб"
+
+#: config/arm/arm.c:1059
+#, gcc-internal-format
+msgid "enabling callee interworking support is only meaningful when compiling for the Thumb"
+msgstr "укључивање подршке за интерворкинг позваних има ÑмиÑла Ñамо када Ñе компилује за Тамб"
+
+#: config/arm/arm.c:1062
+#, gcc-internal-format
+msgid "enabling caller interworking support is only meaningful when compiling for the Thumb"
+msgstr "укључивање подршке за интерворкинг позивача има ÑмиÑла Ñамо када Ñе компилује за Тамб"
+
+#: config/arm/arm.c:1066
+#, gcc-internal-format
+msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
+msgstr "-mapcs-stack-check није ÑаглаÑно Ñа -mno-apcs-frame"
+
+#: config/arm/arm.c:1074
+#, gcc-internal-format
+msgid "-fpic and -mapcs-reent are incompatible"
+msgstr "-fpic и -mapcs-reent ниÑу ÑаглаÑни"
+
+#: config/arm/arm.c:1077
+#, gcc-internal-format
+msgid "APCS reentrant code not supported. Ignored"
+msgstr "Вишеулазни кôд ÐПЦСа није подржан, игноришем"
+
+#: config/arm/arm.c:1085
+#, gcc-internal-format
+msgid "-g with -mno-apcs-frame may not give sensible debugging"
+msgstr "-g уз -mno-apcs-frame може дати беÑмиÑлено иÑправљање"
+
+#: config/arm/arm.c:1093
+#, gcc-internal-format
+msgid "passing floating point arguments in fp regs not yet supported"
+msgstr "проÑлеђивање аргумената у покретном зарезу у ФП региÑтрима још увек није подржано"
+
+#: config/arm/arm.c:1135
+#, gcc-internal-format
+msgid "invalid ABI option: -mabi=%s"
+msgstr "неиÑправна опција ÐБИја: -mabi=%s"
+
+#: config/arm/arm.c:1141
+#, gcc-internal-format
+msgid "iwmmxt requires an AAPCS compatible ABI for proper operation"
+msgstr "iWMMXt захтева ÐÐПЦС-ÑаглаÑан ÐБИ за правилан рад"
+
+#: config/arm/arm.c:1144
+#, gcc-internal-format
+msgid "iwmmxt abi requires an iwmmxt capable cpu"
+msgstr "iWMMXt ÐБИ захтева iWMMXt-ÑпоÑобан ЦПУ"
+
+#: config/arm/arm.c:1154
+#, gcc-internal-format
+msgid "invalid floating point emulation option: -mfpe=%s"
+msgstr "неиÑправна опција емулације покретног зареза: -mfpe=%s"
+
+#: config/arm/arm.c:1171
+#, gcc-internal-format
+msgid "invalid floating point option: -mfpu=%s"
+msgstr "неиÑправна опција покретног зареза: -mfpu=%s"
+
+#: config/arm/arm.c:1211
+#, gcc-internal-format
+msgid "invalid floating point abi: -mfloat-abi=%s"
+msgstr "неиÑправан ÐБИ покретног зареза: -mfloat-abi=%s"
+
+#: config/arm/arm.c:1218
+#, gcc-internal-format
+msgid "-mfloat-abi=hard and VFP"
+msgstr "-mfloat-abi=hard и ВФП"
+
+#: config/arm/arm.c:1224
+#, gcc-internal-format
+msgid "iWMMXt and hardware floating point"
+msgstr "iWMMXt и хардверÑки покретан зарез"
+
+#: config/arm/arm.c:1247
+#, gcc-internal-format
+msgid "invalid thread pointer option: -mtp=%s"
+msgstr "неиÑправна опција показивача нити: -mtp=%s"
+
+#: config/arm/arm.c:1260
+#, gcc-internal-format
+msgid "can not use -mtp=cp15 with -mthumb"
+msgstr "не може Ñе кориÑтити -mtp=cp15 уз -mthumb"
+
+#: config/arm/arm.c:1274
+#, gcc-internal-format
+msgid "structure size boundary can only be set to %s"
+msgstr "граница величине Ñтруктура може бити поÑтављена Ñамо на %s"
+
+#: config/arm/arm.c:1283
+#, gcc-internal-format
+msgid "-mpic-register= is useless without -fpic"
+msgstr "-mpic-register= је беÑкориÑно без -fpic"
+
+#: config/arm/arm.c:1290
+#, gcc-internal-format
+msgid "unable to use '%s' for PIC register"
+msgstr "не могу да кориÑтим „%s“ за ПИЦ региÑтар"
+
+#: config/arm/arm.c:2864 config/arm/arm.c:2882 config/avr/avr.c:4676
+#: config/bfin/bfin.c:2731 config/c4x/c4x.c:4076 config/h8300/h8300.c:5258
+#: config/i386/i386.c:2030 config/m68hc11/m68hc11.c:1155
+#: config/m68k/m68k.c:376 config/mcore/mcore.c:3032 config/mt/mt.c:1274
+#: config/rs6000/rs6000.c:17402 config/sh/sh.c:7568 config/sh/sh.c:7589
+#: config/sh/sh.c:7612 config/stormy16/stormy16.c:2241 config/v850/v850.c:2111
+#, gcc-internal-format
+msgid "%qs attribute only applies to functions"
+msgstr "атрибут %qs примењује Ñе Ñамо на функције"
+
+#: config/arm/arm.c:12004
+#, gcc-internal-format
+msgid "unable to compute real location of stacked parameter"
+msgstr "не могу да Ñрачунам Ñтварну локацију параметра на Ñтеку"
+
+#. @@@ better error message
+#: config/arm/arm.c:12649 config/arm/arm.c:12686
+#, gcc-internal-format
+msgid "selector must be an immediate"
+msgstr "Ñелектор мора бити непоÑредни"
+
+#. @@@ better error message
+#: config/arm/arm.c:12729 config/i386/i386.c:15504 config/i386/i386.c:15538
+#, gcc-internal-format
+msgid "mask must be an immediate"
+msgstr "маÑка мора бити непоÑредна"
+
+#: config/arm/arm.c:13388
+#, gcc-internal-format
+msgid "no low registers available for popping high registers"
+msgstr "нема доÑтупних ниÑких региÑтара за подизање виÑоких региÑтара"
+
+#: config/arm/arm.c:13612
+#, gcc-internal-format
+msgid "interrupt Service Routines cannot be coded in Thumb mode"
+msgstr "ÑервиÑне рутине прекида не могу бити кодиране у режиму Тамба"
+
+#: config/arm/pe.c:165 config/mcore/mcore.c:2898
+#, gcc-internal-format
+msgid "initialized variable %q+D is marked dllimport"
+msgstr "уÑпоÑтављена променљива %q+D означена је као dllimport"
+
+#: config/arm/pe.c:174
+#, gcc-internal-format
+msgid "static variable %q+D is marked dllimport"
+msgstr "Ñтатичка променљива %q+D означена је као dllimport"
+
+#: config/avr/avr.c:531
+#, gcc-internal-format
+msgid "large frame pointer change (%d) with -mtiny-stack"
+msgstr "велика промена (%d) показивача оквира уз -mtiny-stack"
+
+#: config/avr/avr.c:4649
+#, gcc-internal-format
+msgid "only initialized variables can be placed into program memory area"
+msgstr "Ñамо уÑпоÑтављене променљиве могу Ñе ÑмеÑтити у меморијÑку облаÑÑ‚ програма"
+
+#: config/avr/avr.c:4693
+#, gcc-internal-format
+msgid "%qs appears to be a misspelled interrupt handler"
+msgstr "%qs изгледа као погрешно напиÑан руковалац прекидима"
+
+#: config/avr/avr.c:4701
+#, gcc-internal-format
+msgid "%qs appears to be a misspelled signal handler"
+msgstr "%qs изгледа као погрешно напиÑан руковалац Ñигналима"
+
+#: config/avr/avr.c:4770
+#, gcc-internal-format
+msgid "only uninitialized variables can be placed in the .noinit section"
+msgstr "Ñамо неуÑпоÑтављене променљиве могу Ñе ÑмеÑтити у одељак .noint"
+
+#: config/avr/avr.c:4784
+#, gcc-internal-format
+msgid "MCU %qs supported for assembler only"
+msgstr "МЦУ %qs подржан Ñамо за аÑемблер"
+
+#: config/avr/avr.h:713
+#, gcc-internal-format
+msgid "trampolines not supported"
+msgstr "трамполине ниÑу подржане"
+
+#: config/bfin/bfin.c:1813 config/m68k/m68k.c:294
+#, gcc-internal-format
+msgid "-mshared-library-id=%s is not between 0 and %d"
+msgstr "-mshared-library-id=%s није између 0 и %d"
+
+#: config/bfin/bfin.c:1833
+#, gcc-internal-format
+msgid "-mshared-library-id= specified without -mid-shared-library"
+msgstr "-mshared-library-id= наведено без -mid-shared-library"
+
+#: config/bfin/bfin.c:2736
+#, gcc-internal-format
+msgid "multiple function type attributes specified"
+msgstr "наведени вишеÑтруки атрибути типа функције"
+
+#: config/bfin/bfin.c:2792
+#, gcc-internal-format
+msgid "`%s' attribute only applies to functions"
+msgstr "атрибут „%s“ примењив је Ñамо на функције"
+
+#: config/bfin/bfin.c:2803
+#, gcc-internal-format
+msgid "can't apply both longcall and shortcall attributes to the same function"
+msgstr "не могу Ñе на иÑту функцију применити атрибути и longcall и shortcall"
+
+#: config/c4x/c4x-c.c:72
+#, gcc-internal-format
+msgid "missing '(' after '#pragma %s' - ignored"
+msgstr "недоÑтаје „(“ поÑле „#pragma %s“, игноришем"
+
+#: config/c4x/c4x-c.c:75
+#, gcc-internal-format
+msgid "missing function name in '#pragma %s' - ignored"
+msgstr "недоÑтаје име функције у „#pragma %s“, игноришем"
+
+#: config/c4x/c4x-c.c:80
+#, gcc-internal-format
+msgid "malformed '#pragma %s' - ignored"
+msgstr "лоше формирано „#pragma %s“, игноришем"
+
+#: config/c4x/c4x-c.c:82
+#, gcc-internal-format
+msgid "missing section name in '#pragma %s' - ignored"
+msgstr "недоÑтаје име одељка у „#pragma %s“, игноришем"
+
+#: config/c4x/c4x-c.c:87
+#, gcc-internal-format
+msgid "missing ')' for '#pragma %s' - ignored"
+msgstr "недоÑтаје „)“ за „#pragma %s“, игноришем"
+
+#: config/c4x/c4x-c.c:90
+#, gcc-internal-format
+msgid "junk at end of '#pragma %s'"
+msgstr "Ñмеће на крају „#pragma %s“"
+
+#: config/c4x/c4x.c:860
+#, gcc-internal-format
+msgid "ISR %s requires %d words of local vars, max is 32767"
+msgstr "ИСР %s захтева %d речи локалних променљивих, највише 32767"
+
+#. This function is for retrieving a part of an instruction name for
+#. an operator, for immediate output. If that ever happens for
+#. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure
+#. we notice.
+#: config/cris/cris.c:435
+#, gcc-internal-format
+msgid "MULT case in cris_op_str"
+msgstr "MULT Ñлучај у cris_op_str"
+
+#: config/cris/cris.c:813
+#, gcc-internal-format
+msgid "invalid use of ':' modifier"
+msgstr "неиÑправна употреба модификатора „:“"
+
+#: config/cris/cris.c:986
+#, gcc-internal-format
+msgid "internal error: bad register: %d"
+msgstr "унутрашња грешка: лош региÑтар %d"
+
+#: config/cris/cris.c:1528
+#, gcc-internal-format
+msgid "internal error: sideeffect-insn affecting main effect"
+msgstr "унутрашња грешка: ија за Ñпоредни ефекат утиче на главни ефекат"
+
+#: config/cris/cris.c:1552
+#, gcc-internal-format
+msgid "unknown cc_attr value"
+msgstr "непозната вредноÑÑ‚ cc_attr"
+
+#. If we get here, the caller got its initial tests wrong.
+#: config/cris/cris.c:1903
+#, gcc-internal-format
+msgid "internal error: cris_side_effect_mode_ok with bad operands"
+msgstr "унутрашња грешка: cris_side_effect_mode_ok Ñа лошим операндима"
+
+#: config/cris/cris.c:2106
+#, gcc-internal-format
+msgid "-max-stackframe=%d is not usable, not between 0 and %d"
+msgstr "-max-stackframe=%d није употребљиво, није између 0 и %d"
+
+#: config/cris/cris.c:2134
+#, gcc-internal-format
+msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
+msgstr "непозната одредница верзије КРИСа у -march= или -mcpu= : %s"
+
+#: config/cris/cris.c:2170
+#, gcc-internal-format
+msgid "unknown CRIS cpu version specification in -mtune= : %s"
+msgstr "непозната одредница верзије КРИСа у -mtune= : %s"
+
+#: config/cris/cris.c:2188
+#, gcc-internal-format
+msgid "-fPIC and -fpic are not supported in this configuration"
+msgstr "-fPIC и -fpic ниÑу подржани у овој конфигурацији"
+
+#: config/cris/cris.c:2203
+#, gcc-internal-format
+msgid "that particular -g option is invalid with -maout and -melinux"
+msgstr "та конкретна опција -g није иÑправна уз -maout и -melinux"
+
+#: config/cris/cris.c:2416
+#, gcc-internal-format
+msgid "Unknown src"
+msgstr "Ðепознат извор"
+
+#: config/cris/cris.c:2477
+#, gcc-internal-format
+msgid "Unknown dest"
+msgstr "Ðепознато одредиште"
+
+#: config/cris/cris.c:2762
+#, gcc-internal-format
+msgid "stackframe too big: %d bytes"
+msgstr "оквир Ñтека превелик: %d бајтова"
+
+#: config/cris/cris.c:3214 config/cris/cris.c:3241
+#, gcc-internal-format
+msgid "expand_binop failed in movsi got"
+msgstr "expand_binop није уÑпело у movsi got"
+
+#: config/cris/cris.c:3322
+#, gcc-internal-format
+msgid "emitting PIC operand, but PIC register isn't set up"
+msgstr "емитује Ñе ПИЦ операнд, али ПИЦ региÑтар није поÑтављен"
+
+#. Definitions for GCC. Part of the machine description for CRIS.
+#. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+#. Free Software Foundation, Inc.
+#. Contributed by Axis Communications. Written by Hans-Peter Nilsson.
+#.
+#. 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, 51 Franklin Street, Fifth Floor,
+#. Boston, MA 02110-1301, USA.
+#. After the first "Node:" comment comes all preprocessor directives and
+#. attached declarations described in the info files, the "Using and
+#. Porting GCC" manual (uapgcc), in the same order as found in the "Target
+#. macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not
+#. really, but needs an update anyway.
+#.
+#. There is no generic copy-of-uapgcc comment, you'll have to see uapgcc
+#. for that. If applicable, there is a CRIS-specific comment. The order
+#. of macro definitions follow the order in the manual. Every section in
+#. the manual (node in the info pages) has an introductory `Node:
+#. <subchapter>' comment. If no macros are defined for a section, only
+#. the section-comment is present.
+#. Note that other header files (e.g. config/elfos.h, config/linux.h,
+#. config/cris/linux.h and config/cris/aout.h) are responsible for lots of
+#. settings not repeated below. This file contains general CRIS
+#. definitions and definitions for the cris-*-elf subtarget.
+#. We don't want to use gcc_assert for everything, as that can be
+#. compiled out.
+#: config/cris/cris.h:44
+#, gcc-internal-format
+msgid "CRIS-port assertion failed: "
+msgstr "Тврдња КРИС-порта није прошла: "
+
+#. Node: Caller Saves
+#. (no definitions)
+#. Node: Function entry
+#. See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and
+#. TARGET_ASM_FUNCTION_EPILOGUE.
+#. Node: Profiling
+#: config/cris/cris.h:871
+#, gcc-internal-format
+msgid "no FUNCTION_PROFILER for CRIS"
+msgstr "недоÑтаје FUNCTION_PROFILER за КРИС"
+
+#: config/crx/crx.h:355
+#, gcc-internal-format
+msgid "Profiler support for CRX"
+msgstr "Подршка профилиÑања за ЦРИкÑ"
+
+#: config/crx/crx.h:366
+#, gcc-internal-format
+msgid "Trampoline support for CRX"
+msgstr "Подршка трамполина за ЦРИкÑ"
+
+#: config/frv/frv.c:8623
+#, gcc-internal-format
+msgid "accumulator is not a constant integer"
+msgstr "акумулатор није целобројна конÑтанта"
+
+#: config/frv/frv.c:8628
+#, gcc-internal-format
+msgid "accumulator number is out of bounds"
+msgstr "број акумулатора је ван граница"
+
+#: config/frv/frv.c:8639
+#, gcc-internal-format
+msgid "inappropriate accumulator for %qs"
+msgstr "неодговарајући акумулатор за %qs"
+
+#: config/frv/frv.c:8717
+#, gcc-internal-format
+msgid "invalid IACC argument"
+msgstr "неодговарајући аргумент за IACC"
+
+#: config/frv/frv.c:8740
+#, gcc-internal-format
+msgid "%qs expects a constant argument"
+msgstr "%qs очекује конÑтантан аргумент"
+
+#: config/frv/frv.c:8745
+#, gcc-internal-format
+msgid "constant argument out of range for %qs"
+msgstr "конÑтантан аргумент ван опÑега за %qs"
+
+#: config/frv/frv.c:9227
+#, gcc-internal-format
+msgid "media functions are not available unless -mmedia is used"
+msgstr "медијÑке функције ниÑу доÑтупне ако Ñе не укључи -mmedia"
+
+#: config/frv/frv.c:9239
+#, gcc-internal-format
+msgid "this media function is only available on the fr500"
+msgstr "ова медијÑка функција доÑтупна је Ñамо на Ñ„Ñ€500"
+
+#: config/frv/frv.c:9267
+#, gcc-internal-format
+msgid "this media function is only available on the fr400 and fr550"
+msgstr "ова медијÑка функција доÑтупна је Ñамо на Ñ„Ñ€400 и Ñ„Ñ€550"
+
+#: config/frv/frv.c:9286
+#, gcc-internal-format
+msgid "this builtin function is only available on the fr405 and fr450"
+msgstr "ова уграђена функција доÑтупна је Ñамо на Ñ„Ñ€405 и Ñ„Ñ€450"
+
+#: config/frv/frv.c:9295
+#, gcc-internal-format
+msgid "this builtin function is only available on the fr500 and fr550"
+msgstr "ова уграђена функција доÑтупна је Ñамо на Ñ„Ñ€500 и Ñ„Ñ€550"
+
+#: config/frv/frv.c:9307
+#, gcc-internal-format
+msgid "this builtin function is only available on the fr450"
+msgstr "ова уграђена функција доÑтупна је Ñамо на Ñ„Ñ€450"
+
+#: config/h8300/h8300.c:331
+#, gcc-internal-format
+msgid "-ms2600 is used without -ms"
+msgstr "-ms2600 Ñе кориÑти без -ms"
+
+#: config/h8300/h8300.c:337
+#, gcc-internal-format
+msgid "-mn is used without -mh or -ms"
+msgstr "-mn Ñе кориÑти без -mh или -ms"
+
+#: config/i386/host-cygwin.c:65
+#, gcc-internal-format
+msgid "can't extend PCH file: %m"
+msgstr "не могу да проширим ПЦХ датотеку: %m"
+
+#: config/i386/host-cygwin.c:76
+#, gcc-internal-format
+msgid "can't set position in PCH file: %m"
+msgstr "не могу да поÑтавим положај у ПЦХ датотеци: %m"
+
+#: config/i386/i386.c:1322
+#, gcc-internal-format
+msgid "code model %s not supported in PIC mode"
+msgstr "модела кôда %s није подржан у ПИЦ режиму"
+
+#: config/i386/i386.c:1330 config/sparc/sparc.c:670
+#, gcc-internal-format
+msgid "bad value (%s) for -mcmodel= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -mcmodel="
+
+#: config/i386/i386.c:1346
+#, gcc-internal-format
+msgid "bad value (%s) for -masm= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -masm="
+
+#: config/i386/i386.c:1349
+#, gcc-internal-format
+msgid "code model %qs not supported in the %s bit mode"
+msgstr "модела кôда %qs није подржан у %s-битном режиму"
+
+#: config/i386/i386.c:1352
+#, gcc-internal-format
+msgid "code model %<large%> not supported yet"
+msgstr "модела кôда %<large%> још увек није подржан"
+
+#: config/i386/i386.c:1354
+#, gcc-internal-format
+msgid "%i-bit mode not compiled in"
+msgstr "%i-битни режим није укомпилован"
+
+#: config/i386/i386.c:1384 config/i386/i386.c:1408
+#, gcc-internal-format
+msgid "CPU you selected does not support x86-64 instruction set"
+msgstr "ЦПУ који Ñте изабрали не подржава Ñкуп инÑтрукција икÑ86-64"
+
+#: config/i386/i386.c:1390 config/mt/mt.c:803
+#, gcc-internal-format
+msgid "bad value (%s) for -march= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -march="
+
+#: config/i386/i386.c:1421
+#, gcc-internal-format
+msgid "bad value (%s) for -mtune= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -mtune="
+
+#: config/i386/i386.c:1438
+#, gcc-internal-format
+msgid "-mregparm=%d is not between 0 and %d"
+msgstr "-mregparm=%d није између 0 и %d"
+
+#: config/i386/i386.c:1451
+#, gcc-internal-format
+msgid "-malign-loops is obsolete, use -falign-loops"
+msgstr "-malign-loops је заÑтарело, кориÑтите -falign-loops"
+
+#: config/i386/i386.c:1456 config/i386/i386.c:1469 config/i386/i386.c:1482
+#, gcc-internal-format
+msgid "-malign-loops=%d is not between 0 and %d"
+msgstr "-malign-loops=%d није између 0 и %d"
+
+#: config/i386/i386.c:1464
+#, gcc-internal-format
+msgid "-malign-jumps is obsolete, use -falign-jumps"
+msgstr "-malign-jumps је заÑтарело, кориÑтите -falign-jumps"
+
+#: config/i386/i386.c:1477
+#, gcc-internal-format
+msgid "-malign-functions is obsolete, use -falign-functions"
+msgstr "-malign-functions је заÑтарело, кориÑтите -falign-functions"
+
+#: config/i386/i386.c:1515
+#, gcc-internal-format
+msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
+msgstr "-mpreferred-stack-boundary=%d није између %d и 12"
+
+#: config/i386/i386.c:1527
+#, gcc-internal-format
+msgid "-mbranch-cost=%d is not between 0 and 5"
+msgstr "-mbranch-cost=%d није између 0 и 5"
+
+#: config/i386/i386.c:1535
+#, gcc-internal-format
+msgid "-mlarge-data-threshold=%d is negative"
+msgstr "-mlarge-data-threshold=%d је негативно"
+
+#: config/i386/i386.c:1547
+#, gcc-internal-format
+msgid "bad value (%s) for -mtls-dialect= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -mtls-dialect="
+
+#: config/i386/i386.c:1594
+#, gcc-internal-format
+msgid "-malign-double makes no sense in the 64bit mode"
+msgstr "-malign-double нема ÑмиÑла у 64-битном режиму"
+
+#: config/i386/i386.c:1596
+#, gcc-internal-format
+msgid "-mrtd calling convention not supported in the 64bit mode"
+msgstr "конвенција позивања -mrtd није подржана у 64-битном режиму"
+
+#: config/i386/i386.c:1616
+#, gcc-internal-format
+msgid "-msseregparm used without SSE enabled"
+msgstr "-msseregparm употребљено без укључених ССЕ инÑтрукција"
+
+#: config/i386/i386.c:1628 config/i386/i386.c:1639
+#, gcc-internal-format
+msgid "SSE instruction set disabled, using 387 arithmetics"
+msgstr "Ñкуп ССЕ инÑтрукција иÑкључен, кориÑтим 387 аритметику"
+
+#: config/i386/i386.c:1644
+#, gcc-internal-format
+msgid "387 instruction set disabled, using SSE arithmetics"
+msgstr "Ñкуп 387 инÑтрукција иÑкључен, кориÑтим ССЕ аритметику"
+
+#: config/i386/i386.c:1651
+#, gcc-internal-format
+msgid "bad value (%s) for -mfpmath= switch"
+msgstr "лоша вредноÑÑ‚ (%s) за прекидач -mfpmath="
+
+#: config/i386/i386.c:1673
+#, gcc-internal-format
+msgid "unwind tables currently require either a frame pointer or -maccumulate-outgoing-args for correctness"
+msgstr "табеле одмотавања тренутно захтевају или показивач оквира или -maccumulate-outgoing-args за иÑправноÑÑ‚"
+
+#: config/i386/i386.c:2043 config/i386/i386.c:2085
+#, gcc-internal-format
+msgid "fastcall and regparm attributes are not compatible"
+msgstr "атрибути fastcall и regparm ниÑу ÑаглаÑни"
+
+#: config/i386/i386.c:2050
+#, gcc-internal-format
+msgid "%qs attribute requires an integer constant argument"
+msgstr "атрибут %qs захтева целобројну конÑтанту као аргумент"
+
+#: config/i386/i386.c:2056
+#, gcc-internal-format
+msgid "argument to %qs attribute larger than %d"
+msgstr "аргумент за атрибут %qs већи од %d"
+
+#: config/i386/i386.c:2077 config/i386/i386.c:2112
+#, gcc-internal-format
+msgid "fastcall and cdecl attributes are not compatible"
+msgstr "атрибути fastcall и cdecl ниÑу ÑаглаÑни"
+
+#: config/i386/i386.c:2081
+#, gcc-internal-format
+msgid "fastcall and stdcall attributes are not compatible"
+msgstr "атрибути fastcall и stdcall ниÑу ÑаглаÑни"
+
+#: config/i386/i386.c:2095 config/i386/i386.c:2108
+#, gcc-internal-format
+msgid "stdcall and cdecl attributes are not compatible"
+msgstr "атрибути stdcall и cdecl ниÑу ÑаглаÑни"
+
+#: config/i386/i386.c:2099
+#, gcc-internal-format
+msgid "stdcall and fastcall attributes are not compatible"
+msgstr "атрибути stdcall и fastcall ниÑу ÑаглаÑни"
+
+#: config/i386/i386.c:2234
+#, gcc-internal-format
+msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled"
+msgstr "Позивање %qD Ñа атрибутом sseregparm без укључених ССЕ/ССЕ2"
+
+#: config/i386/i386.c:2237
+#, gcc-internal-format
+msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled"
+msgstr "Позивање %qT Ñа атрибутом sseregparm без укључених ССЕ/ССЕ2"
+
+#: config/i386/i386.c:2965
+#, gcc-internal-format
+msgid "SSE register return with SSE disabled"
+msgstr "ССЕ враћање региÑтра уз иÑкључене ССЕ"
+
+#: config/i386/i386.c:2967
+#, gcc-internal-format
+msgid "SSE register argument with SSE disabled"
+msgstr "ССЕ региÑтарÑки аргумент уз иÑкључене ССЕ"
+
+#: config/i386/i386.c:3282
+#, gcc-internal-format
+msgid "SSE vector argument without SSE enabled changes the ABI"
+msgstr "ССЕ векторÑки аргумент без укључених ССЕ мења ÐБИ"
+
+#: config/i386/i386.c:3299
+#, gcc-internal-format
+msgid "MMX vector argument without MMX enabled changes the ABI"
+msgstr "ÐœÐœÐ˜ÐºÑ Ð²ÐµÐºÑ‚Ð¾Ñ€Ñки аргумент без укључених ÐœÐœÐ˜ÐºÑ Ð¼ÐµÑšÐ° ÐБИ"
+
+#: config/i386/i386.c:3565
+#, gcc-internal-format
+msgid "SSE vector return without SSE enabled changes the ABI"
+msgstr "ССЕ векторÑко враћање без укључених ССЕ мења ÐБИ"
+
+#: config/i386/i386.c:3575
+#, gcc-internal-format
+msgid "MMX vector return without MMX enabled changes the ABI"
+msgstr "ÐœÐœÐ˜ÐºÑ Ð²ÐµÐºÑ‚Ð¾Ñ€Ñко враћање без укључених ÐœÐœÐ˜ÐºÑ Ð¼ÐµÑšÐ° ÐБИ"
+
+#: config/i386/i386.c:6959
+#, gcc-internal-format
+msgid "extended registers have no high halves"
+msgstr "проширени региÑтри немају виÑоке половине"
+
+#: config/i386/i386.c:6974
+#, gcc-internal-format
+msgid "unsupported operand size for extended register"
+msgstr "неподржана величина операнда за проширени региÑтар"
+
+#: config/i386/i386.c:15232 config/rs6000/rs6000.c:7171
+#, gcc-internal-format
+msgid "selector must be an integer constant in the range 0..%wi"
+msgstr "Ñелектор мора бити целобројна конÑтанта у опÑегу 0..%wi"
+
+#: config/i386/i386.c:15570
+#, gcc-internal-format
+msgid "shift must be an immediate"
+msgstr "помак мора бити непоÑредни"
+
+#: config/i386/i386.c:16737
+#, gcc-internal-format
+msgid "%qs incompatible attribute ignored"
+msgstr "%qs неÑаглаÑан атрибут игнориÑан"
+
+#: config/i386/winnt-cxx.c:74
+#, gcc-internal-format
+msgid "key method %q+D of dllimport'd class defined"
+msgstr "кључни метод %q+D dllimport клаÑе дефиниÑан"
+
+#: config/i386/winnt-cxx.c:95 config/sh/symbian.c:173
+#, gcc-internal-format
+msgid "definition of static data member %q+D of dllimport'd class"
+msgstr "дефиниција Ñтатичког чланÑког податка %q+D dllimport клаÑе"
+
+#: config/i386/winnt.c:74
+#, gcc-internal-format
+msgid "%qs attribute only applies to variables"
+msgstr "атрибут %qs примењује Ñе Ñамо на променљиве"
+
+#: config/i386/winnt.c:103
+#, gcc-internal-format
+msgid "%qs attribute applies only to initialized variables with external linkage"
+msgstr "атрибут %qs примењује Ñе Ñамо на уÑпоÑтављене променљиве Ñа Ñпољашњом повезивошћу"
+
+#: config/i386/winnt.c:214
+#, gcc-internal-format
+msgid "inconsistent dll linkage for %q+D, dllexport assumed"
+msgstr "неуÑаглашена повезивоÑÑ‚ ДЛЛа за %q+D, претпоÑтављам dllexport"
+
+#: config/i386/winnt.c:254 config/sh/symbian.c:273
+#, gcc-internal-format
+msgid "%qs declared as both exported to and imported from a DLL"
+msgstr "%qs деклариÑано и као извезено и као увезено у ДЛЛу"
+
+#: config/i386/winnt.c:549
+#, gcc-internal-format
+msgid "%q+D causes a section type conflict"
+msgstr "%q+D доводи до Ñукоба типова одељка"
+
+#: config/i386/cygming.h:166
+#, gcc-internal-format
+msgid "-f%s ignored for target (all code is position independent)"
+msgstr "-f%s игнориÑано за циљ (Ñав кôд је завиÑан од положаја)"
+
+#: config/i386/djgpp.h:181
+#, gcc-internal-format
+msgid "-mbnu210 is ignored (option is obsolete)"
+msgstr "-mbnu210 Ñе игнорише (опција је заÑтарела)"
+
+#: config/i386/i386-interix.h:257
+#, gcc-internal-format
+msgid "ms-bitfields not supported for objc"
+msgstr "МСова битÑка поља ниÑу подржана за објективни Ц"
+
+#: config/ia64/ia64-c.c:52
+#, gcc-internal-format
+msgid "malformed #pragma builtin"
+msgstr "лоше формирано уграђено #pragma"
+
+#: config/ia64/ia64.c:502 config/m32r/m32r.c:373
+#, gcc-internal-format
+msgid "invalid argument of %qs attribute"
+msgstr "неиÑправан аргумент за атрибут %qs"
+
+#: config/ia64/ia64.c:514
+#, gcc-internal-format
+msgid "%Jan address area attribute cannot be specified for local variables"
+msgstr "%Jатрибут адреÑне облаÑти не може бити наведен за локалне променљиве"
+
+#: config/ia64/ia64.c:521
+#, gcc-internal-format
+msgid "address area of %q+D conflicts with previous declaration"
+msgstr "адреÑна облаÑÑ‚ за %q+D коÑи Ñе Ñа претходном декларацијом"
+
+#: config/ia64/ia64.c:528
+#, gcc-internal-format
+msgid "%Jaddress area attribute cannot be specified for functions"
+msgstr "%JадреÑна облаÑÑ‚ атрибута не може бити наведена за функције"
+
+#: config/ia64/ia64.c:5029 config/pa/pa.c:327
+#, gcc-internal-format
+msgid "value of -mfixed-range must have form REG1-REG2"
+msgstr "вредноÑÑ‚ уз -mfixed-range мора бити облика РЕГ1-РЕГ2"
+
+#: config/ia64/ia64.c:5056 config/pa/pa.c:354
+#, gcc-internal-format
+msgid "%s-%s is an empty range"
+msgstr "%s-%s је празан опÑег"
+
+#: config/ia64/ia64.c:5084
+#, gcc-internal-format
+msgid "bad value %<%s%> for -mtls-size= switch"
+msgstr "лоша вредноÑÑ‚ %<%s%> за прекидач -mtls-size="
+
+#: config/ia64/ia64.c:5112
+#, gcc-internal-format
+msgid "bad value %<%s%> for -mtune= switch"
+msgstr "лоша вредноÑÑ‚ %<%s%> за прекидач -mtune="
+
+#: config/ia64/ia64.c:5131
+#, gcc-internal-format
+msgid "not yet implemented: latency-optimized inline square root"
+msgstr "још није имплементирано: уткани квадратни корен оптимизован за кашњење"
+
+#: config/iq2000/iq2000.c:1808
+#, gcc-internal-format
+msgid "gp_offset (%ld) or end_offset (%ld) is less than zero"
+msgstr "gp_offset (%ld) или end_offset (%ld) мањи је од нуле"
+
+#: config/iq2000/iq2000.c:2589
+#, gcc-internal-format
+msgid "argument %qd is not a constant"
+msgstr "аргумент %qd није конÑтанта"
+
+#: config/iq2000/iq2000.c:2892 config/mt/mt.c:348 config/xtensa/xtensa.c:1773
+#, gcc-internal-format
+msgid "PRINT_OPERAND_ADDRESS, null pointer"
+msgstr "PRINT_OPERAND_ADDRESS, нулти показивач"
+
+#: config/iq2000/iq2000.c:3047
+#, gcc-internal-format
+msgid "PRINT_OPERAND: Unknown punctuation '%c'"
+msgstr "PRINT_OPERAND: Ðепозната интерпункција „%c“"
+
+#: config/iq2000/iq2000.c:3056 config/mips/mips.c:5393
+#: config/xtensa/xtensa.c:1627
+#, gcc-internal-format
+msgid "PRINT_OPERAND null pointer"
+msgstr "PRINT_OPERAND нулти показивач"
+
+#: config/m32c/m32c-pragma.c:64
+#, gcc-internal-format
+msgid "junk at end of #pragma GCC memregs [0..16]"
+msgstr "Ñмеће на крају #pragma GCC memregs [0..16]"
+
+#: config/m32c/m32c-pragma.c:71
+#, gcc-internal-format
+msgid "#pragma GCC memregs must precede any function decls"
+msgstr "#pragma GCC memregs мора претходити Ñвим декларацијама функција"
+
+#: config/m32c/m32c-pragma.c:82 config/m32c/m32c-pragma.c:89
+#, gcc-internal-format
+msgid "#pragma GCC memregs takes a number [0..16]"
+msgstr "#pragma GCC memregs узима број из [0..16]"
+
+#: config/m32c/m32c.c:412
+#, gcc-internal-format
+msgid "invalid target memregs value '%d'"
+msgstr "неиÑрпавна вредноÑÑ‚ „%d“ за memregs"
+
+#: config/m68hc11/m68hc11.c:279
+#, gcc-internal-format
+msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
+msgstr "-f%s игнориÑано код 68ХЦ11/68ХЦ12 (није подржано)"
+
+#: config/m68hc11/m68hc11.c:1240
+#, gcc-internal-format
+msgid "%<trap%> and %<far%> attributes are not compatible, ignoring %<far%>"
+msgstr "атрибути %<trap%> и %<far%> ниÑу ÑаглаÑни, игноришем %<far%>"
+
+#: config/m68hc11/m68hc11.c:1247
+#, gcc-internal-format
+msgid "%<trap%> attribute is already used"
+msgstr "атрибут %<trap%> је већ употребљен"
+
+#: config/m68k/m68k.c:321
+#, gcc-internal-format
+msgid "cannot specify both -msep-data and -mid-shared-library"
+msgstr "не могу Ñе навеÑти и -msep-data и -mid-shared-library"
+
+#: config/m68k/m68k.c:333
+#, gcc-internal-format
+msgid "-fPIC is not currently supported on the 68000 or 68010"
+msgstr "-fPIC тренутно није подржано на 68000 и 68010"
+
+#: config/m68k/m68k.c:640 config/rs6000/rs6000.c:13666
+#, gcc-internal-format
+msgid "stack limit expression is not supported"
+msgstr "израз ограничења Ñтека није подржан"
+
+#: config/mips/mips.c:4582
+#, gcc-internal-format
+msgid "-%s conflicts with the other architecture options, which specify a %s processor"
+msgstr "-%s Ñе коÑи Ñа оÑталим опцијама архитектуре, које наводе процеÑор %s"
+
+#: config/mips/mips.c:4598
+#, gcc-internal-format
+msgid "-march=%s is not compatible with the selected ABI"
+msgstr "-march=%s није ÑаглаÑно Ñа изабраним ÐБИјем"
+
+#: config/mips/mips.c:4616
+#, gcc-internal-format
+msgid "-mgp64 used with a 32-bit processor"
+msgstr "-mgp64 употребљено Ñа 32-битним процеÑором"
+
+#: config/mips/mips.c:4618
+#, gcc-internal-format
+msgid "-mgp32 used with a 64-bit ABI"
+msgstr "-mgp32 употребљено Ñа 64-битним ÐБИјем"
+
+#: config/mips/mips.c:4620
+#, gcc-internal-format
+msgid "-mgp64 used with a 32-bit ABI"
+msgstr "-mgp64 употребљено Ñа 32-битним ÐБИјем"
+
+#: config/mips/mips.c:4638 config/mips/mips.c:4640 config/mips/mips.c:4642
+#: config/mips/mips.c:4718
+#, gcc-internal-format
+msgid "unsupported combination: %s"
+msgstr "неподржана комбинација: %s"
+
+#: config/mips/mips.c:4713
+#, gcc-internal-format
+msgid "generation of Branch Likely instructions enabled, but not supported by architecture"
+msgstr "Ñтварање инÑтрукција за извеÑно гранање укључено, али их архитектура не подржава"
+
+#: config/mips/mips.c:4730
+#, gcc-internal-format
+msgid "-G is incompatible with PIC code which is the default"
+msgstr "-G није ÑаглаÑно Ñа ПИЦ кôдом, који је подразумеван"
+
+#: config/mips/mips.c:4797
+#, gcc-internal-format
+msgid "-mips3d requires -mpaired-single"
+msgstr "-mips3d захтева -mpaired-single"
+
+#: config/mips/mips.c:4806
+#, gcc-internal-format
+msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float"
+msgstr "-mips3d и -mpaired-single морају бити употребљени Ñа -mfp64 -mhard-float"
+
+#: config/mips/mips.c:4811
+#, gcc-internal-format
+msgid "-mips3d/-mpaired-single must be used with -mips64"
+msgstr "-mips3d и -mpaired-single морају бити употребљени Ñа -mips64"
+
+#: config/mips/mips.c:4814
+#, gcc-internal-format
+msgid "-mips16 and -mdsp cannot be used together"
+msgstr "-mips16 и -mdsp не могу бити употребљени заједно"
+
+#: config/mips/mips.c:5330
+#, gcc-internal-format
+msgid "internal error: %%) found without a %%( in assembler pattern"
+msgstr "унутрашња грешка: нађено %%) без %%( у шеми аÑемблера"
+
+#: config/mips/mips.c:5344
+#, gcc-internal-format
+msgid "internal error: %%] found without a %%[ in assembler pattern"
+msgstr "унутрашња грешка: нађено %%] без %%[ у шеми аÑемблера"
+
+#: config/mips/mips.c:5357
+#, gcc-internal-format
+msgid "internal error: %%> found without a %%< in assembler pattern"
+msgstr "унутрашња грешка: нађено %%> без %%< у шеми аÑемблера"
+
+#: config/mips/mips.c:5370
+#, gcc-internal-format
+msgid "internal error: %%} found without a %%{ in assembler pattern"
+msgstr "унутрашња грешка: нађено %%} без %%{ у шеми аÑемблера"
+
+#: config/mips/mips.c:5384
+#, gcc-internal-format
+msgid "PRINT_OPERAND: unknown punctuation '%c'"
+msgstr "PRINT_OPERAND: непозната интерпункција „%c“"
+
+#: config/mips/mips.c:8147
+#, gcc-internal-format
+msgid "cannot handle inconsistent calls to %qs"
+msgstr "не могу да обрадим неуÑаглашене позиве за %qs"
+
+#: config/mips/mips.c:9546
+#, gcc-internal-format
+msgid "the cpu name must be lower case"
+msgstr "име ЦПУа мора бити малим Ñловима"
+
+#: config/mips/mips.c:10212
+#, gcc-internal-format
+msgid "invalid argument to builtin function"
+msgstr "неиÑправан аргумент за уграђену функцију"
+
+#. Output assembler code to FILE to increment profiler label # LABELNO
+#. for profiling a function entry.
+#: config/mips/mips.h:2108
+#, gcc-internal-format
+msgid "mips16 function profiling"
+msgstr "профилиÑање функција мипÑа16"
+
+#: config/mmix/mmix.c:227
+#, gcc-internal-format
+msgid "-f%s not supported: ignored"
+msgstr "-f%s није подржано, игноришем"
+
+#: config/mmix/mmix.c:655
+#, gcc-internal-format
+msgid "support for mode %qs"
+msgstr "подршка за режим %qs"
+
+#: config/mmix/mmix.c:669
+#, gcc-internal-format
+msgid "too large function value type, needs %d registers, have only %d registers for this"
+msgstr "превелик тип вредноÑти функције, захтева %d региÑтара, а имам их Ñамо %d за ово"
+
+#: config/mmix/mmix.c:839
+#, gcc-internal-format
+msgid "function_profiler support for MMIX"
+msgstr "function_profiler подршка за ММИИкÑ"
+
+#: config/mmix/mmix.c:861
+#, gcc-internal-format
+msgid "MMIX Internal: Last named vararg would not fit in a register"
+msgstr "ММИИкÑ-унутрашње: ПоÑледње именовано варарг није могло да Ñтане у региÑтар"
+
+#: config/mmix/mmix.c:1476 config/mmix/mmix.c:1500 config/mmix/mmix.c:1616
+#, gcc-internal-format
+msgid "MMIX Internal: Bad register: %d"
+msgstr "ММИИкÑ-унутрашње: Лош региÑтар: %d"
+
+#. Presumably there's a missing case above if we get here.
+#: config/mmix/mmix.c:1608
+#, gcc-internal-format
+msgid "MMIX Internal: Missing %qc case in mmix_print_operand"
+msgstr "ММИИкÑ-унутрашње: ÐедоÑтаје Ñлучај %qc у mmix_print_operand"
+
+#: config/mmix/mmix.c:1894
+#, gcc-internal-format
+msgid "stack frame not a multiple of 8 bytes: %wd"
+msgstr "оквир Ñтека није умножак 8 бајтова: %wd"
+
+#: config/mmix/mmix.c:2130
+#, gcc-internal-format
+msgid "stack frame not a multiple of octabyte: %wd"
+msgstr "оквир Ñтека није умножак октабајта: %wd"
+
+#: config/mmix/mmix.c:2470 config/mmix/mmix.c:2534
+#, gcc-internal-format
+msgid "MMIX Internal: %s is not a shiftable int"
+msgstr "ММИИкÑ-унутрашње: %s није помицљив целобројни"
+
+#: config/mt/mt.c:311
+#, gcc-internal-format
+msgid "info pointer NULL"
+msgstr "инфопоказивач нулти"
+
+#: config/pa/pa.c:459
+#, gcc-internal-format
+msgid "PIC code generation is not supported in the portable runtime model"
+msgstr "Ñтварање ПИЦ кôда није подржано преноÑивим моделом извршавања"
+
+#: config/pa/pa.c:464
+#, gcc-internal-format
+msgid "PIC code generation is not compatible with fast indirect calls"
+msgstr "Ñтварање ПИЦ кôда није ÑаглаÑно Ñа брзим поÑредним позивима"
+
+#: config/pa/pa.c:469
+#, gcc-internal-format
+msgid "-g is only supported when using GAS on this processor,"
+msgstr "-g је подржано Ñамо када Ñе кориÑти ГÐС на овом процеÑору,"
+
+#: config/pa/pa.c:470
+#, gcc-internal-format
+msgid "-g option disabled"
+msgstr "опција -g иÑкључена"
+
+#: config/pa/pa.c:8016
+#, gcc-internal-format
+msgid "alignment (%u) for %s exceeds maximum alignment for global common data. Using %u"
+msgstr "равнање (%u) за %s премашује највеће равнање за глобалне заједничке податке. КориÑтим %u"
+
+#: config/pa/pa-hpux11.h:85
+#, gcc-internal-format
+msgid "-munix=98 option required for C89 Amendment 1 features.\n"
+msgstr "опција -munix=98 потребна за могућноÑти из амандмана 1 Ц-а 89.\n"
+
+#: config/rs6000/host-darwin.c:52
+#, gcc-internal-format
+msgid "Segmentation Fault (code)"
+msgstr "Сегментна грешка (кôд)"
+
+#: config/rs6000/host-darwin.c:121
+#, gcc-internal-format
+msgid "Segmentation Fault"
+msgstr "Сегментна грешка"
+
+#: config/rs6000/host-darwin.c:135
+#, gcc-internal-format
+msgid "While setting up signal stack: %m"
+msgstr "При поÑтављању Ñтека Ñигнала: %m"
+
+#: config/rs6000/host-darwin.c:141
+#, gcc-internal-format
+msgid "While setting up signal handler: %m"
+msgstr "При поÑтављању руковаоца Ñигналима: %m"
+
+#. Handle the machine specific pragma longcall. Its syntax is
+#.
+#. # pragma longcall ( TOGGLE )
+#.
+#. where TOGGLE is either 0 or 1.
+#.
+#. rs6000_default_long_calls is set to the value of TOGGLE, changing
+#. whether or not new function declarations receive a longcall
+#. attribute by default.
+#: config/rs6000/rs6000-c.c:53
+#, gcc-internal-format
+msgid "ignoring malformed #pragma longcall"
+msgstr "игноришем лоше формирано #pragma longcall"
+
+#: config/rs6000/rs6000-c.c:66
+#, gcc-internal-format
+msgid "missing open paren"
+msgstr "недоÑтаје отворена заграда"
+
+#: config/rs6000/rs6000-c.c:68
+#, gcc-internal-format
+msgid "missing number"
+msgstr "недоÑтаје број"
+
+#: config/rs6000/rs6000-c.c:70
+#, gcc-internal-format
+msgid "missing close paren"
+msgstr "недоÑтаје затворена заграда"
+
+#: config/rs6000/rs6000-c.c:73
+#, gcc-internal-format
+msgid "number must be 0 or 1"
+msgstr "број мора бити 0 или 1"
+
+#: config/rs6000/rs6000-c.c:76
+#, gcc-internal-format
+msgid "junk at end of #pragma longcall"
+msgstr "Ñмеће на крају #pragma longcall"
+
+#: config/rs6000/rs6000-c.c:2530
+#, gcc-internal-format
+msgid "passing arg %d of %qE discards qualifiers frompointer target type"
+msgstr "проÑлеђивање арга %d за %qE одбацује одредбе типа показивачког циља"
+
+#: config/rs6000/rs6000-c.c:2573
+#, gcc-internal-format
+msgid "invalid parameter combination for AltiVec intrinsic"
+msgstr "неиÑправна комбинација параметара за алтивек ÑопÑтвену"
+
+#: config/rs6000/rs6000.c:1255
+#, gcc-internal-format
+msgid "-mmultiple is not supported on little endian systems"
+msgstr "-mmultiple није подржано на ÑиÑтемима мале крајноÑти"
+
+#: config/rs6000/rs6000.c:1262
+#, gcc-internal-format
+msgid "-mstring is not supported on little endian systems"
+msgstr "-mstring није подржано на ÑиÑтемима мале крајноÑти"
+
+#: config/rs6000/rs6000.c:1276
+#, gcc-internal-format
+msgid "unknown -mdebug-%s switch"
+msgstr "непознат прекидач -mdebug-%s"
+
+#: config/rs6000/rs6000.c:1288
+#, gcc-internal-format
+msgid "unknown -mtraceback arg %qs; expecting %<full%>, %<partial%> or %<none%>"
+msgstr "непознат арг %qs за -mtraceback; очекивах %<full%>, %<partial%> или %<none%>"
+
+#: config/rs6000/rs6000.c:1334
+#, gcc-internal-format
+msgid "AltiVec and E500 instructions cannot coexist"
+msgstr "алтивек и Е500 инÑтрукције не могу Ñе кориÑтити заједно"
+
+#: config/rs6000/rs6000.c:1562
+#, gcc-internal-format
+msgid "unknown -m%s= option specified: '%s'"
+msgstr "непозната опција типа -m%s=: „%s“"
+
+#: config/rs6000/rs6000.c:1772
+#, gcc-internal-format
+msgid "not configured for ABI: '%s'"
+msgstr "није подешено за ÐБИ: „%s“"
+
+#: config/rs6000/rs6000.c:1785
+#, gcc-internal-format
+msgid "Using darwin64 ABI"
+msgstr "КориÑтим ÐБИ Дарвина64"
+
+#: config/rs6000/rs6000.c:1790
+#, gcc-internal-format
+msgid "Using old darwin ABI"
+msgstr "КориÑтим Ñтари ÐБИ Дарвина"
+
+#: config/rs6000/rs6000.c:1797
+#, gcc-internal-format
+msgid "Using IBM extended precision long double"
+msgstr "КориÑтим ИБМов дугачки двоÑтруки проширене тачноÑти"
+
+#: config/rs6000/rs6000.c:1803
+#, gcc-internal-format
+msgid "Using IEEE extended precision long double"
+msgstr "КориÑтим ИЕЕЕ дугачки двоÑтруки проширене тачноÑти"
+
+#: config/rs6000/rs6000.c:1808
+#, gcc-internal-format
+msgid "unknown ABI specified: '%s'"
+msgstr "наведен непознат ÐБИ: „%s“"
+
+#: config/rs6000/rs6000.c:1835
+#, gcc-internal-format
+msgid "invalid option for -mfloat-gprs: '%s'"
+msgstr "неиÑправна опција за -mfloat-gprs: „%s“"
+
+#: config/rs6000/rs6000.c:1845
+#, gcc-internal-format
+msgid "Unknown switch -mlong-double-%s"
+msgstr "Ðепознат прекицач -mlong-double-%s"
+
+#: config/rs6000/rs6000.c:1866
+#, gcc-internal-format
+msgid "-malign-power is not supported for 64-bit Darwin; it is incompatible with the installed C and C++ libraries"
+msgstr "-malign-power није подржано на 64-битном Дарвину; није ÑаглаÑно Ñа инÑталираним Ц и Ц++ библиотекама"
+
+#: config/rs6000/rs6000.c:1874
+#, gcc-internal-format
+msgid "unknown -malign-XXXXX option specified: '%s'"
+msgstr "наведена непозната опција -malign-XXXXX: „%s“"
+
+#: config/rs6000/rs6000.c:4239
+#, gcc-internal-format
+msgid "GCC vector returned by reference: non-standard ABI extension with no compatibility guarantee"
+msgstr "ГЦЦ вектор враћен упућивачем: неÑтандарно проширење ÐБИја, без јемÑтва ÑаглаÑноÑти"
+
+#: config/rs6000/rs6000.c:4312
+#, gcc-internal-format
+msgid "cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them"
+msgstr "вредноÑÑ‚ Ñе не може вратити у векторÑком региÑтру јер Ñу алтивек инÑтрукције иÑкључене; употребите -maltivec да их укључите"
+
+#: config/rs6000/rs6000.c:4558
+#, gcc-internal-format
+msgid "cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them"
+msgstr "вредноÑÑ‚ Ñе не може проÑледити у векторÑком региÑтру јер Ñу алтивек инÑтрукције иÑкључене; употребите -maltivec да их укључите"
+
+#: config/rs6000/rs6000.c:5414
+#, gcc-internal-format
+msgid "GCC vector passed by reference: non-standard ABI extension with no compatibility guarantee"
+msgstr "ГЦЦ вектор проÑлеђен упућивачем: неÑтандарно проширење ÐБИја, без јемÑтва ÑаглаÑноÑти"
+
+#: config/rs6000/rs6000.c:6585
+#, gcc-internal-format
+msgid "argument 1 must be a 5-bit signed literal"
+msgstr "аргумент 1 мора бити петобитна означена конÑтанта"
+
+#: config/rs6000/rs6000.c:6688 config/rs6000/rs6000.c:7482
+#, gcc-internal-format
+msgid "argument 2 must be a 5-bit unsigned literal"
+msgstr "аргумент 2 мора бити петобитна неозначена конÑтанта"
+
+#: config/rs6000/rs6000.c:6728
+#, gcc-internal-format
+msgid "argument 1 of __builtin_altivec_predicate must be a constant"
+msgstr "аргумент 1 за __builtin_altivec_predicate мора бити конÑтанта"
+
+#: config/rs6000/rs6000.c:6781
+#, gcc-internal-format
+msgid "argument 1 of __builtin_altivec_predicate is out of range"
+msgstr "аргумент 1 за __builtin_altivec_predicate ван опÑега"
+
+#: config/rs6000/rs6000.c:6943
+#, gcc-internal-format
+msgid "argument 3 must be a 4-bit unsigned literal"
+msgstr "аргумент 3 мора бити четворобитна неозначена конÑтанта"
+
+#: config/rs6000/rs6000.c:7115
+#, gcc-internal-format
+msgid "argument to %qs must be a 2-bit unsigned literal"
+msgstr "аргумент за %qs мора бити двобитна неозначена конÑтанта"
+
+#: config/rs6000/rs6000.c:7259
+#, gcc-internal-format
+msgid "unresolved overload for Altivec builtin %qF"
+msgstr "неразрешено препуњавање за алтивек уграђено %qF"
+
+#: config/rs6000/rs6000.c:7341
+#, gcc-internal-format
+msgid "argument to dss must be a 2-bit unsigned literal"
+msgstr "аргумент за dss мора бити двобитна неозначена конÑтанта"
+
+#: config/rs6000/rs6000.c:7602
+#, gcc-internal-format
+msgid "argument 1 of __builtin_spe_predicate must be a constant"
+msgstr "аргумент 1 за __builtin_spe_predicate мора бити конÑтанта"
+
+#: config/rs6000/rs6000.c:7674
+#, gcc-internal-format
+msgid "argument 1 of __builtin_spe_predicate is out of range"
+msgstr "аргумент 1 за __builtin_spe_predicate ван опÑега"
+
+#: config/rs6000/rs6000.c:13629
+#, gcc-internal-format
+msgid "stack frame too large"
+msgstr "оквир Ñтека превелик"
+
+#: config/rs6000/rs6000.c:16188
+#, gcc-internal-format
+msgid "no profiling of 64-bit code for this ABI"
+msgstr "нема профилиÑања 64-битног кôда за овај ÐБИ"
+
+#: config/rs6000/rs6000.c:17297
+#, gcc-internal-format
+msgid "use of %<long%> in AltiVec types is invalid for 64-bit code"
+msgstr "употреба %<long%> у алтивек типовима није иÑправна у 64-битном кôду"
+
+#: config/rs6000/rs6000.c:17299
+#, gcc-internal-format
+msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>"
+msgstr "превазиђена употреба %<long%> у алтивек; кориÑтите %<int%>"
+
+#: config/rs6000/rs6000.c:17303
+#, gcc-internal-format
+msgid "use of %<long long%> in AltiVec types is invalid"
+msgstr "употреба %<long long%> у алтивек типовима није иÑправна"
+
+#: config/rs6000/rs6000.c:17305
+#, gcc-internal-format
+msgid "use of %<double%> in AltiVec types is invalid"
+msgstr "употреба %<double%> у алтивек типовима није иÑправна"
+
+#: config/rs6000/rs6000.c:17307
+#, gcc-internal-format
+msgid "use of %<long double%> in AltiVec types is invalid"
+msgstr "употреба %<long double%> у алтивек типовима није иÑправна"
+
+#: config/rs6000/rs6000.c:17309
+#, gcc-internal-format
+msgid "use of boolean types in AltiVec types is invalid"
+msgstr "употреба логичких типова у алтивек типовима није иÑправна"
+
+#: config/rs6000/rs6000.c:17311
+#, gcc-internal-format
+msgid "use of %<complex%> in AltiVec types is invalid"
+msgstr "употреба %<complex%> у алтивек типовима није иÑправна"
+
+#: config/rs6000/aix43.h:39 config/rs6000/aix51.h:38 config/rs6000/aix52.h:38
+#, gcc-internal-format
+msgid "-maix64 and POWER architecture are incompatible"
+msgstr "-maix64 и архитектура Пауера ниÑу ÑаглаÑни"
+
+#: config/rs6000/aix43.h:44 config/rs6000/aix51.h:43 config/rs6000/aix52.h:43
+#, gcc-internal-format
+msgid "-maix64 requires PowerPC64 architecture remain enabled"
+msgstr "-maix64 захтева да архитектура ПауерПЦ-64 оÑтане укључена"
+
+#: config/rs6000/aix43.h:50 config/rs6000/aix52.h:49
+#, gcc-internal-format
+msgid "soft-float and long-double-128 are incompatible"
+msgstr "soft-float и long-double-128 ниÑу ÑаглаÑни"
+
+#: config/rs6000/aix43.h:54 config/rs6000/aix51.h:47 config/rs6000/aix52.h:53
+#, gcc-internal-format
+msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
+msgstr "потребно је -maix64: 64-битно рачунање Ñа 32-битним адреÑама још увек није подржано"
+
+#. The Darwin ABI always includes AltiVec, can't be (validly) turned
+#. off.
+#: config/rs6000/darwin.h:75
+#, gcc-internal-format
+msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
+msgstr "-mdynamic-no-pic потиÑкује -fpic и -fPIC"
+
+#. Darwin doesn't support -fpic.
+#: config/rs6000/darwin.h:81
+#, gcc-internal-format
+msgid "-fpic is not supported; -fPIC assumed"
+msgstr "-fpic није подржано; претпоÑтављам -fPIC"
+
+#: config/rs6000/darwin.h:88
+#, gcc-internal-format
+msgid "-m64 requires PowerPC64 architecture, enabling"
+msgstr "-m64 захтева архитектуру ПауерПЦ-64, укључујем"
+
+#. See note below.
+#. if (!rs6000_explicit_options.long_double)
+#. rs6000_long_double_type_size = 128;
+#: config/rs6000/eabispe.h:45 config/rs6000/linuxspe.h:62
+#, gcc-internal-format
+msgid "-m64 not supported in this configuration"
+msgstr "-m64 није подржано у овој конфигурацији"
+
+#: config/rs6000/linux64.h:109
+#, gcc-internal-format
+msgid "-m64 requires a PowerPC64 cpu"
+msgstr "-m64 захтева ЦПУ типа ПауерПЦ-64"
+
+#. Definitions for __builtin_return_address and __builtin_frame_address.
+#. __builtin_return_address (0) should give link register (65), enable
+#. this.
+#. This should be uncommented, so that the link register is used, but
+#. currently this would result in unmatched insns and spilling fixed
+#. registers so we'll leave it for another day. When these problems are
+#. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX.
+#. (mrs)
+#. #define RETURN_ADDR_IN_PREVIOUS_FRAME
+#. 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:1590
+#, gcc-internal-format
+msgid "RETURN_ADDRESS_OFFSET not supported"
+msgstr "RETURN_ADDRESS_OFFSET није подржано"
+
+#. Sometimes certain combinations of command options do not make sense
+#. on a particular target machine. You can define a macro
+#. `OVERRIDE_OPTIONS' to take account of this. This macro, if
+#. defined, is executed once just after all the command options have
+#. been parsed.
+#.
+#. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to
+#. get control.
+#: config/rs6000/sysv4.h:130
+#, gcc-internal-format
+msgid "bad value for -mcall-%s"
+msgstr "лоша вредноÑÑ‚ за -mcall-%s"
+
+#: config/rs6000/sysv4.h:146
+#, gcc-internal-format
+msgid "bad value for -msdata=%s"
+msgstr "лоша вредноÑÑ‚ за -msdata=%s"
+
+#: config/rs6000/sysv4.h:163
+#, gcc-internal-format
+msgid "-mrelocatable and -msdata=%s are incompatible"
+msgstr "-mrelocatable и -msdata=%s ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:172
+#, gcc-internal-format
+msgid "-f%s and -msdata=%s are incompatible"
+msgstr "-f%s и -msdata=%s ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:181
+#, gcc-internal-format
+msgid "-msdata=%s and -mcall-%s are incompatible"
+msgstr "-msdata=%s и -mcall-%s ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:190
+#, gcc-internal-format
+msgid "-mrelocatable and -mno-minimal-toc are incompatible"
+msgstr "-mrelocatable и -mno-minimal-toc ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:196
+#, gcc-internal-format
+msgid "-mrelocatable and -mcall-%s are incompatible"
+msgstr "-mrelocatable и -mcall-%s ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:203
+#, gcc-internal-format
+msgid "-fPIC and -mcall-%s are incompatible"
+msgstr "-fPIC и -mcall-%s ниÑу ÑаглаÑни"
+
+#: config/rs6000/sysv4.h:210
+#, gcc-internal-format
+msgid "-mcall-aixdesc must be big endian"
+msgstr "-mcall-aixdesc мора бити велике крајноÑти"
+
+#: config/rs6000/sysv4.h:215
+#, gcc-internal-format
+msgid "-msecure-plt not supported by your assembler"
+msgstr "ваш аÑемблер на подржава -msecure-plt"
+
+#: config/rs6000/sysv4.h:220
+#, gcc-internal-format
+msgid "-msoft-float and -mlong-double-128 not supported"
+msgstr "-msoft-float и -mlong-double-128 ниÑу подржани"
+
+#: config/rs6000/sysv4.h:234
+#, gcc-internal-format
+msgid "-m%s not supported in this configuration"
+msgstr "-m%s није подржано у овој конфигурацији"
+
+#: config/s390/s390.c:1339
+#, gcc-internal-format
+msgid "stack guard value must be an exact power of 2"
+msgstr "вредноÑÑ‚ браника Ñтека мора бити тачан Ñтепен двојке"
+
+#: config/s390/s390.c:1346
+#, gcc-internal-format
+msgid "stack size must be an exact power of 2"
+msgstr "величина Ñтека мора бити тачан Ñтепен двојке"
+
+#: config/s390/s390.c:1391
+#, gcc-internal-format
+msgid "z/Architecture mode not supported on %s"
+msgstr "режим з/Ðрхитектуре није подржан на %s"
+
+#: config/s390/s390.c:1393
+#, gcc-internal-format
+msgid "64-bit ABI not supported in ESA/390 mode"
+msgstr "64-битни ÐБИ није подржан у режиму ЕСЕ/390"
+
+#: config/s390/s390.c:1404
+#, gcc-internal-format
+msgid "-mbackchain -mpacked-stack -mhard-float are not supported in combination"
+msgstr "-mbackchain -mpacked-stack -mhard-float ниÑу подржани у комбинацији"
+
+#: config/s390/s390.c:1410
+#, gcc-internal-format
+msgid "-mstack-size implies use of -mstack-guard"
+msgstr "-mstack-size имплицира коришћење -mstack-guard"
+
+#: config/s390/s390.c:1412
+#, gcc-internal-format
+msgid "stack size must be greater than the stack guard value"
+msgstr "величина Ñтека мора бити већа од вредноÑти браника Ñтека"
+
+#: config/s390/s390.c:1414
+#, gcc-internal-format
+msgid "stack size must not be greater than 64k"
+msgstr "величина Ñтека не Ñме бити већа од 64k"
+
+#: config/s390/s390.c:1417
+#, gcc-internal-format
+msgid "-mstack-guard implies use of -mstack-size"
+msgstr "-mstack-guard имплицира коришћење -mstack-size"
+
+#: config/s390/s390.c:6568
+#, gcc-internal-format
+msgid "total size of local variables exceeds architecture limit"
+msgstr "укупна величина локалних променљивих премашује ограничење архитектуре"
+
+#: config/s390/s390.c:7155
+#, gcc-internal-format
+msgid "frame size of %qs is "
+msgstr "величина оквира за %qs је "
+
+#: config/s390/s390.c:7155
+#, gcc-internal-format
+msgid " bytes"
+msgstr " бајтова"
+
+#: config/s390/s390.c:7159
+#, gcc-internal-format
+msgid "%qs uses dynamic stack allocation"
+msgstr "%qs кориÑти динамичко резервиÑање Ñтека"
+
+#: config/sh/sh.c:6483
+#, gcc-internal-format
+msgid "__builtin_saveregs not supported by this subtarget"
+msgstr "__builtin_saveregs није подржано овим подциљем"
+
+#: config/sh/sh.c:7488
+#, gcc-internal-format
+msgid "%qs attribute only applies to interrupt functions"
+msgstr "атрибут %qs примењив је Ñамо на функције прекида"
+
+#: config/sh/sh.c:7574
+#, gcc-internal-format
+msgid "attribute interrupt_handler is not compatible with -m5-compact"
+msgstr "атрибут interrupt_handler није ÑаглаÑан Ñа -m5-compact"
+
+#. The argument must be a constant string.
+#: config/sh/sh.c:7596
+#, gcc-internal-format
+msgid "%qs attribute argument not a string constant"
+msgstr "аргумент атрибута %qs није конÑтантна ниÑка"
+
+#. The argument must be a constant integer.
+#: config/sh/sh.c:7621
+#, gcc-internal-format
+msgid "%qs attribute argument not an integer constant"
+msgstr "аргумент атрибута %qs није целобројна конÑтанта"
+
+#: config/sh/sh.c:9673
+#, gcc-internal-format
+msgid "r0 needs to be available as a call-clobbered register"
+msgstr "r0 мора бити доÑтупан као позивом продрман региÑтар"
+
+#: config/sh/sh.c:9694
+#, gcc-internal-format
+msgid "Need a second call-clobbered general purpose register"
+msgstr "Потребан је други позивом продрман региÑтар опште намене"
+
+#: config/sh/sh.c:9702
+#, gcc-internal-format
+msgid "Need a call-clobbered target register"
+msgstr "Потребан је позивом продрман циљни региÑтар"
+
+#: config/sh/symbian.c:147
+#, gcc-internal-format
+msgid "function %q+D is defined after prior declaration as dllimport: attribute ignored"
+msgstr "функција %q+D је дефиниÑана поÑле претходне декларације као dllimport: игноришем атрибут"
+
+#: config/sh/symbian.c:159
+#, gcc-internal-format
+msgid "inline function %q+D is declared as dllimport: attribute ignored"
+msgstr "уткана функција %q+D је деклариÑана као dllimport: игноришем атрибут"
+
+#: config/sh/symbian.c:280
+#, gcc-internal-format
+msgid "failure in redeclaration of %q+D: dllimport'd symbol lacks external linkage"
+msgstr "крах у поновљеној декларацији %q+D: увезеном Ñимболу недоÑтаје Ñпољашња повезивоÑÑ‚"
+
+#: config/sh/symbian.c:326
+#, gcc-internal-format
+msgid "%s %q+D %s after being referenced with dllimport linkage"
+msgstr "%s %q+D %s пошто је поменута Ñа dllimport повезивошћу"
+
+#: config/sh/symbian.c:892 cp/tree.c:2335
+#, gcc-internal-format
+msgid "lang_* check: failed in %s, at %s:%d"
+msgstr "провера lang_*: крах у %s, код %s:%d"
+
+#. FIXME
+#: config/sh/netbsd-elf.h:95
+#, gcc-internal-format
+msgid "unimplemented-shmedia profiling"
+msgstr "неимплементирано профилиÑање СХмедије"
+
+#. There are no delay slots on SHmedia.
+#. Relaxation isn't yet supported for SHmedia
+#. After reload, if conversion does little good but can cause ICEs: - find_if_block doesn't do anything for SH because we don't have conditional execution patterns. (We use conditional move patterns, which are handled differently, and only before reload). - find_cond_trap doesn't do anything for the SH because we #. don't have conditional traps. - find_if_case_1 uses redirect_edge_and_branch_force in the only path that does an optimization, and this causes an ICE when branch targets are in registers. - find_if_case_2 doesn't do anything for the SHmedia after reload except when it can redirect a tablejump - and that's rather rare.
+#. -fprofile-arcs needs a working libgcov . In unified tree configurations with newlib, this requires to configure with --with-newlib --with-headers. But there is no way to check here we have a working libgcov, so just assume that we have.
+#: config/sh/sh.h:611
+#, gcc-internal-format
+msgid "profiling is still experimental for this target"
+msgstr "профилиÑање је још увек опитно за овај циљ"
+
+#. Only the sh64-elf assembler fully supports .quad properly.
+#. User supplied - leave it alone.
+#. The debugging information is sufficient, but gdb doesn't implement this yet
+#. Never run scheduling before reload, since that can break global alloc, and generates slower code anyway due to the pressure on R0.
+#. Enable sched1 for SH4; ready queue will be reordered by the target hooks when pressure is high. We can not do this for SH3 and lower as they give spill failures for R0.
+#. ??? Current exception handling places basic block boundaries after call_insns. It causes the high pressure on R0 and gives spill failures for R0 in reload. See PR 22553 and the thread on gcc-patches <http://gcc.gnu.org/ml/gcc-patches/2005-10/msg00816.html>.
+#: config/sh/sh.h:676
+#, gcc-internal-format
+msgid "ignoring -fschedule-insns because of exception handling bug"
+msgstr "игноришем -fschedule-insns због грешке у руковању изузецима"
+
+#: config/sparc/sparc.c:643
+#, gcc-internal-format
+msgid "%s is not supported by this configuration"
+msgstr "%s није подржано овом конфигурацијом"
+
+#: config/sparc/sparc.c:650
+#, gcc-internal-format
+msgid "-mlong-double-64 not allowed with -m64"
+msgstr "-mlong-double-64 није дозвољено уз -m64"
+
+#: config/sparc/sparc.c:675
+#, gcc-internal-format
+msgid "-mcmodel= is not supported on 32 bit systems"
+msgstr "-mcmodel= није подржано на 32-битним ÑиÑтемима"
+
+#: config/stormy16/stormy16.c:497
+#, gcc-internal-format
+msgid "constant halfword load operand out of range"
+msgstr "конÑтантан операнд учитавања полу-речи ван опÑега"
+
+#: config/stormy16/stormy16.c:507
+#, gcc-internal-format
+msgid "constant arithmetic operand out of range"
+msgstr "конÑтантан аритметички операнд ван опÑега"
+
+#: config/stormy16/stormy16.c:1108
+#, gcc-internal-format
+msgid "local variable memory requirements exceed capacity"
+msgstr "потребна меморија за локалне променљиве премашује капацитете"
+
+#: config/stormy16/stormy16.c:1274
+#, gcc-internal-format
+msgid "function_profiler support"
+msgstr "function_profiler подршка"
+
+#: config/stormy16/stormy16.c:1363
+#, gcc-internal-format
+msgid "cannot use va_start in interrupt function"
+msgstr "не може Ñе кориÑтити va_start у функцији прекида"
+
+#: config/stormy16/stormy16.c:1895
+#, gcc-internal-format
+msgid "switch statement of size %lu entries too large"
+msgstr "наредба прекидача Ñа %lu уноÑа је превелика"
+
+#: config/stormy16/stormy16.c:2263
+#, gcc-internal-format
+msgid "%<__BELOW100__%> attribute only applies to variables"
+msgstr "атрибут %<__BELOW100__%> примењује Ñе Ñамо на променљиве"
+
+#: config/stormy16/stormy16.c:2270
+#, gcc-internal-format
+msgid "__BELOW100__ attribute not allowed with auto storage class"
+msgstr "атрибут __BELOW100__ није дозвољен Ñа аутом. Ñкладишном клаÑом"
+
+#: config/v850/v850-c.c:67
+#, gcc-internal-format
+msgid "#pragma GHS endXXXX found without previous startXXX"
+msgstr "нађена #pragma GHS endXXXX без претходне startXXX"
+
+#: config/v850/v850-c.c:70
+#, gcc-internal-format
+msgid "#pragma GHS endXXX does not match previous startXXX"
+msgstr "#pragma GHS endXXXX не поклапа Ñе Ñа претходним startXXX"
+
+#: config/v850/v850-c.c:96
+#, gcc-internal-format
+msgid "cannot set interrupt attribute: no current function"
+msgstr "не могу да поÑтавим атрибут прекида: нема текуће функције"
+
+#: config/v850/v850-c.c:104
+#, gcc-internal-format
+msgid "cannot set interrupt attribute: no such identifier"
+msgstr "не могу да поÑтавим атрибут прекида: нема таквог идентификатора"
+
+#: config/v850/v850-c.c:149
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs section"
+msgstr "Ñмеће на крају #pragma ghs section"
+
+#: config/v850/v850-c.c:166
+#, gcc-internal-format
+msgid "unrecognized section name \"%s\""
+msgstr "непрепознато име одељка „%s“"
+
+#: config/v850/v850-c.c:181
+#, gcc-internal-format
+msgid "malformed #pragma ghs section"
+msgstr "лоше формирано #pragma ghs section"
+
+#: config/v850/v850-c.c:200
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs interrupt"
+msgstr "Ñмеће на крају #pragma ghs interrupt"
+
+#: config/v850/v850-c.c:211
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs starttda"
+msgstr "Ñмеће на крају #pragma ghs starttda"
+
+#: config/v850/v850-c.c:222
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs startsda"
+msgstr "Ñмеће на крају #pragma ghs startsda"
+
+#: config/v850/v850-c.c:233
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs startzda"
+msgstr "Ñмеће на крају #pragma ghs startzda"
+
+#: config/v850/v850-c.c:244
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs endtda"
+msgstr "Ñмеће на крају #pragma ghs endtda"
+
+#: config/v850/v850-c.c:255
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs endsda"
+msgstr "Ñмеће на крају #pragma ghs endsda"
+
+#: config/v850/v850-c.c:266
+#, gcc-internal-format
+msgid "junk at end of #pragma ghs endzda"
+msgstr "Ñмеће на крају #pragma ghs endzda"
+
+#: config/v850/v850.c:172
+#, gcc-internal-format
+msgid "value passed to %<-m%s%> is too large"
+msgstr "вредноÑÑ‚ проÑлеђена уз %<-m%s%> превелика"
+
+#: config/v850/v850.c:2147
+#, gcc-internal-format
+msgid "%Jdata area attributes cannot be specified for local variables"
+msgstr "%Jатрибути облаÑти података не могу Ñе навеÑти за локалне променљиве"
+
+#: config/v850/v850.c:2158
+#, gcc-internal-format
+msgid "data area of %q+D conflicts with previous declaration"
+msgstr "облаÑта података за %q+D коÑи Ñе Ñа претходном декларацијом"
+
+#: config/v850/v850.c:2288
+#, gcc-internal-format
+msgid "bogus JR construction: %d"
+msgstr "лоша конÑтрукција JR: %d"
+
+#: config/v850/v850.c:2306 config/v850/v850.c:2415
+#, gcc-internal-format
+msgid "bad amount of stack space removal: %d"
+msgstr "лоша количина уклањања проÑтора на Ñтеку: %d"
+
+#: config/v850/v850.c:2395
+#, gcc-internal-format
+msgid "bogus JARL construction: %d\n"
+msgstr "лоша конÑтрукција JARL: %d\n"
+
+#: config/v850/v850.c:2694
+#, gcc-internal-format
+msgid "bogus DISPOSE construction: %d"
+msgstr "лоша конÑтрукција DISPOSE: %d"
+
+#: config/v850/v850.c:2713
+#, gcc-internal-format
+msgid "too much stack space to dispose of: %d"
+msgstr "превише проÑтора на Ñтеку за бацити: %d"
+
+#: config/v850/v850.c:2815
+#, gcc-internal-format
+msgid "bogus PREPEARE construction: %d"
+msgstr "лоша конÑтрукција PREPARE: %d"
+
+#: config/v850/v850.c:2834
+#, gcc-internal-format
+msgid "too much stack space to prepare: %d"
+msgstr "превише проÑтора на Ñтеку за Ñпремити: %d"
+
+#: config/xtensa/xtensa.c:1505
+#, gcc-internal-format
+msgid "boolean registers required for the floating-point option"
+msgstr "потребни Ñу логички региÑтри за опцију покретног зареза"
+
+#: config/xtensa/xtensa.c:1551
+#, gcc-internal-format
+msgid "-f%s is not supported with CONST16 instructions"
+msgstr "-f%s није подржано КОÐСТ16 инÑтрукцијама"
+
+#: config/xtensa/xtensa.c:1556
+#, gcc-internal-format
+msgid "PIC is required but not supported with CONST16 instructions"
+msgstr "ПИЦ је потребан али није подржан КОÐСТ16 инÑтрукцијама"
+
+#: config/xtensa/xtensa.c:2414
+#, gcc-internal-format
+msgid "only uninitialized variables can be placed in a .bss section"
+msgstr "Ñамо неуÑпоÑтављене променљиве могу бити Ñмештене у одељак .bss"
+
+#: ada/misc.c:262
+#, gcc-internal-format
+msgid "missing argument to \"-%s\""
+msgstr "недоÑтаје аргумент за -%s"
+
+#: ada/misc.c:303
+#, gcc-internal-format
+msgid "%<-gnat%> misspelled as %<-gant%>"
+msgstr "%<-gnat%> погрешно упиÑано као %<-gant%>"
+
+#: cp/call.c:286
+#, gcc-internal-format
+msgid "unable to call pointer to member function here"
+msgstr "не могу овде позвати показивач на чланÑку функцију"
+
+#: cp/call.c:2389
+#, gcc-internal-format
+msgid "%s %D(%T, %T, %T) <built-in>"
+msgstr "%s %D(%T, %T, %T) <уграђено>"
+
+#: cp/call.c:2394
+#, gcc-internal-format
+msgid "%s %D(%T, %T) <built-in>"
+msgstr "%s %D(%T, %T) <уграђено>"
+
+#: cp/call.c:2398
+#, gcc-internal-format
+msgid "%s %D(%T) <built-in>"
+msgstr "%s %D(%T) <уграђено>"
+
+#: cp/call.c:2402
+#, gcc-internal-format
+msgid "%s %T <conversion>"
+msgstr "%s %T <претварање>"
+
+#: cp/call.c:2404
+#, gcc-internal-format
+msgid "%s %+#D <near match>"
+msgstr "%s %+#D <приближно поклапање>"
+
+#: cp/call.c:2406 cp/pt.c:1327
+#, gcc-internal-format
+msgid "%s %+#D"
+msgstr "%s %+#D"
+
+#: cp/call.c:2628
+#, gcc-internal-format
+msgid "conversion from %qT to %qT is ambiguous"
+msgstr "двоÑмиÑлено претварање из %qT у %qT"
+
+#: cp/call.c:2779 cp/call.c:2797 cp/call.c:2855
+#, gcc-internal-format
+msgid "no matching function for call to %<%D(%A)%>"
+msgstr "нема одговарајуће функције за позив %<%D(%A)%>"
+
+#: cp/call.c:2800 cp/call.c:2858
+#, gcc-internal-format
+msgid "call of overloaded %<%D(%A)%> is ambiguous"
+msgstr "двоÑмиÑлен позив препуњене %<%D(%A)%> "
+
+#. It's no good looking for an overloaded operator() on a
+#. pointer-to-member-function.
+#: cp/call.c:2926
+#, gcc-internal-format
+msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*"
+msgstr "показивач на чланÑку функцију %E не може бити позван без објекта; покушајте помоћу .* или ->*"
+
+#: cp/call.c:3000
+#, gcc-internal-format
+msgid "no match for call to %<(%T) (%A)%>"
+msgstr "нема поклапања за позив %<(%T) (%A)%>"
+
+#: cp/call.c:3009
+#, gcc-internal-format
+msgid "call of %<(%T) (%A)%> is ambiguous"
+msgstr "двоÑмиÑлен позив %<(%T) (%A)%>"
+
+#: cp/call.c:3047
+#, gcc-internal-format
+msgid "%s for ternary %<operator?:%> in %<%E ? %E : %E%>"
+msgstr "%s за тернарно %<operator?:%> у %<%E ? %E : %E%>"
+
+#: cp/call.c:3053
+#, gcc-internal-format
+msgid "%s for %<operator%s%> in %<%E%s%>"
+msgstr "%s за %<operator%s%> у %<%E%s%>"
+
+#: cp/call.c:3057
+#, gcc-internal-format
+msgid "%s for %<operator[]%> in %<%E[%E]%>"
+msgstr "%s за %<operator[]%> у %<%E[%E]%>"
+
+#: cp/call.c:3062
+#, gcc-internal-format
+msgid "%s for %qs in %<%s %E%>"
+msgstr "%s за %qs у %<%s %E%>"
+
+#: cp/call.c:3067
+#, gcc-internal-format
+msgid "%s for %<operator%s%> in %<%E %s %E%>"
+msgstr "%s за %<operator%s%> у %<%E %s %E%>"
+
+#: cp/call.c:3070
+#, gcc-internal-format
+msgid "%s for %<operator%s%> in %<%s%E%>"
+msgstr "%s за %<operator%s%> у %<%s%E%>"
+
+#: cp/call.c:3162
+#, gcc-internal-format
+msgid "ISO C++ forbids omitting the middle term of a ?: expression"
+msgstr "ИСО Ц++ забрањује изоÑтављање Ñредњег члана израза ?:"
+
+#: cp/call.c:3239
+#, gcc-internal-format
+msgid "%qE has type %<void%> and is not a throw-expression"
+msgstr "%qE је типа %<void%> и није израз у бацању"
+
+#: cp/call.c:3278 cp/call.c:3488
+#, gcc-internal-format
+msgid "operands to ?: have different types"
+msgstr "операнди у ?: различитих Ñу типова"
+
+#: cp/call.c:3442
+#, gcc-internal-format
+msgid "enumeral mismatch in conditional expression: %qT vs %qT"
+msgstr "неÑлагање набројивих у уÑловном изразу: %qT пр. %qT"
+
+#: cp/call.c:3449
+#, gcc-internal-format
+msgid "enumeral and non-enumeral type in conditional expression"
+msgstr "набројиви и ненабројиви тип у уÑловном изразу"
+
+#: cp/call.c:3743
+#, gcc-internal-format
+msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
+msgstr "%<%D(int)%> није деклариÑано за поÑтфикÑно %qs, покушавам Ñмену префикÑним оператором"
+
+#: cp/call.c:3816
+#, gcc-internal-format
+msgid "comparison between %q#T and %q#T"
+msgstr "поређење између %q#T и %q#T"
+
+#: cp/call.c:4075
+#, gcc-internal-format
+msgid "no suitable %<operator %s%> for %qT"
+msgstr "нема погодног %<operator %s%> за %qT"
+
+#: cp/call.c:4092
+#, gcc-internal-format
+msgid "%q+#D is private"
+msgstr "%q+#D је приватно"
+
+#: cp/call.c:4094
+#, gcc-internal-format
+msgid "%q+#D is protected"
+msgstr "%q+#D је заштићено"
+
+#: cp/call.c:4096
+#, gcc-internal-format
+msgid "%q+#D is inaccessible"
+msgstr "%q+#D није приÑтупно"
+
+#: cp/call.c:4097
+#, gcc-internal-format
+msgid "within this context"
+msgstr "у овом контекÑту"
+
+#: cp/call.c:4186 cp/cvt.c:264
+#, gcc-internal-format
+msgid "invalid conversion from %qT to %qT"
+msgstr "неиÑправно претварање из %qT у %qT"
+
+#: cp/call.c:4188
+#, gcc-internal-format
+msgid " initializing argument %P of %qD"
+msgstr " уÑпоÑтављање аргумента %P од %qD"
+
+#: cp/call.c:4200
+#, gcc-internal-format
+msgid "passing NULL to non-pointer argument %P of %qD"
+msgstr "проÑлеђивање NULL непоказивачком аргументу %P од %qD"
+
+#: cp/call.c:4203
+#, gcc-internal-format
+msgid "converting to non-pointer type %qT from NULL"
+msgstr "претварање у непоказивачки тип %qT из NULL"
+
+#: cp/call.c:4211
+#, gcc-internal-format
+msgid "passing %qT for argument %P to %qD"
+msgstr "проÑлеђивање %qT као аргумента %P од %qD"
+
+#: cp/call.c:4214
+#, gcc-internal-format
+msgid "converting to %qT from %qT"
+msgstr "претварање у %qT из %qT"
+
+#: cp/call.c:4353
+#, gcc-internal-format
+msgid "cannot bind bitfield %qE to %qT"
+msgstr "не може Ñе повезати битÑко поље %qE Ñа %qT"
+
+#: cp/call.c:4356 cp/call.c:4372
+#, gcc-internal-format
+msgid "cannot bind packed field %qE to %qT"
+msgstr "не може Ñе повезати паковано поље %qE Ñа %qT"
+
+#: cp/call.c:4359
+#, gcc-internal-format
+msgid "cannot bind rvalue %qE to %qT"
+msgstr "не може Ñе повезати д-вредноÑÑ‚ %qE Ñа %qT"
+
+#: cp/call.c:4473
+#, gcc-internal-format
+msgid "cannot pass objects of non-POD type %q#T through %<...%>; call will abort at runtime"
+msgstr "не могу Ñе проÑледити објекти не-ПОД типа %q#T кроз %<...%>; позив ће иÑкочити при извршавању"
+
+#. Undefined behavior [expr.call] 5.2.2/7.
+#: cp/call.c:4499
+#, gcc-internal-format
+msgid "cannot receive objects of non-POD type %q#T through %<...%>; call will abort at runtime"
+msgstr "не могу Ñе примати објекти не-ПОД типа %q#T кроз %<...%>; позив ће иÑкочити при извршавању"
+
+#: cp/call.c:4542
+#, gcc-internal-format
+msgid "the default argument for parameter %d of %qD has not yet been parsed"
+msgstr "подразумевани аргумент за параметер %d у %qD још увек није рашчлањен"
+
+#: cp/call.c:4621
+#, gcc-internal-format
+msgid "argument of function call might be a candidate for a format attribute"
+msgstr "аргумент позива функције може бити кандидат за форматÑки атрибут"
+
+#: cp/call.c:4758
+#, gcc-internal-format
+msgid "passing %qT as %<this%> argument of %q#D discards qualifiers"
+msgstr "проÑлеђивање %qT као аргумента %<this%> у %q#D одбацује одредбе"
+
+#: cp/call.c:4777
+#, gcc-internal-format
+msgid "%qT is not an accessible base of %qT"
+msgstr "%qT није приÑтупна оÑнова од %qT"
+
+#: cp/call.c:5027
+#, gcc-internal-format
+msgid "could not find class$ field in java interface type %qT"
+msgstr "не могу да нађем поље class$ у јаванÑком типу Ñучеља %qT"
+
+#: cp/call.c:5264
+#, gcc-internal-format
+msgid "call to non-function %qD"
+msgstr "позив не-функције %qD"
+
+#: cp/call.c:5386
+#, gcc-internal-format
+msgid "no matching function for call to %<%T::%s(%A)%#V%>"
+msgstr "нема одговарајуће функције за позив %<%T::%s(%A)%#V%>"
+
+#: cp/call.c:5404
+#, gcc-internal-format
+msgid "call of overloaded %<%s(%A)%> is ambiguous"
+msgstr "двоÑмиÑлен позив препуњене %<%s(%A)%>"
+
+#: cp/call.c:5428
+#, gcc-internal-format
+msgid "cannot call member function %qD without object"
+msgstr "чланÑка функција %qD не може Ñе позвати без објекта"
+
+#: cp/call.c:6033
+#, gcc-internal-format
+msgid "passing %qT chooses %qT over %qT"
+msgstr "проÑлеђивање %qT бира %qT пре него %qT"
+
+#: cp/call.c:6035 cp/name-lookup.c:4257
+#, gcc-internal-format
+msgid " in call to %qD"
+msgstr " у позиву %qD"
+
+#: cp/call.c:6092
+#, gcc-internal-format
+msgid "choosing %qD over %qD"
+msgstr "бирам %qD пре него %qD"
+
+#: cp/call.c:6093
+#, gcc-internal-format
+msgid " for conversion from %qT to %qT"
+msgstr " за претварање из %qT у %qT"
+
+#: cp/call.c:6095
+#, gcc-internal-format
+msgid " because conversion sequence for the argument is better"
+msgstr " зато што је низ претварања за аргумент бољи"
+
+#: cp/call.c:6209
+#, gcc-internal-format
+msgid "ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:"
+msgstr "ИСО Ц++ каже да је ово двоÑмиÑлено, чак иако је најгоре претварање првог боље од најгорег претварања другог:"
+
+#: cp/call.c:6353
+#, gcc-internal-format
+msgid "could not convert %qE to %qT"
+msgstr "не могу да претворим %qE у %qT"
+
+#: cp/call.c:6478
+#, gcc-internal-format
+msgid "invalid initialization of non-const reference of type %qT from a temporary of type %qT"
+msgstr "неиÑправно уÑпоÑтављање неконÑтантног упућивача типа %qT привременим типа %qT"
+
+#: cp/call.c:6482
+#, gcc-internal-format
+msgid "invalid initialization of reference of type %qT from expression of type %qT"
+msgstr "неиÑправно уÑпоÑтављање упућивача типа %qT изразом типа %qT"
+
+#: cp/class.c:281
+#, gcc-internal-format
+msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
+msgstr "не може Ñе претворити из оÑнове %qT у изведени тип %qT преко виртуелне оÑнове %qT"
+
+#: cp/class.c:945
+#, gcc-internal-format
+msgid "Java class %qT cannot have a destructor"
+msgstr "јаванÑка клаÑа %qT не може имати деÑтруктор"
+
+#: cp/class.c:947
+#, gcc-internal-format
+msgid "Java class %qT cannot have an implicit non-trivial destructor"
+msgstr "јаванÑка клаÑа %qT не може имати имплицитни нетривијални деÑтруктор"
+
+#: cp/class.c:1054
+#, gcc-internal-format
+msgid "repeated using declaration %q+D"
+msgstr "поновљена декларација коришћења %q+D"
+
+#: cp/class.c:1056
+#, gcc-internal-format
+msgid "using declaration %q+D conflicts with a previous using declaration"
+msgstr "декларација коришћења %q+D коÑи Ñе Ñа претходном декларацијом коришћења"
+
+#: cp/class.c:1061
+#, gcc-internal-format
+msgid "%q+#D cannot be overloaded"
+msgstr "%q+#D не може бити препуњено"
+
+#: cp/class.c:1062
+#, gcc-internal-format
+msgid "with %q+#D"
+msgstr "Ñа %q+#D"
+
+#: cp/class.c:1124
+#, gcc-internal-format
+msgid "conflicting access specifications for method %q+D, ignored"
+msgstr "Ñукобљене одреднице приÑтупа за метод %q+D, игноришем"
+
+#: cp/class.c:1127
+#, gcc-internal-format
+msgid "conflicting access specifications for field %qE, ignored"
+msgstr "Ñукобљене одреднице приÑтупа за поље %qE, игноришем"
+
+#: cp/class.c:1188 cp/class.c:1196
+#, gcc-internal-format
+msgid "%q+D invalid in %q#T"
+msgstr "%q+D неиÑправно у %q#T"
+
+#: cp/class.c:1189
+#, gcc-internal-format
+msgid " because of local method %q+#D with same name"
+msgstr " због иÑтоименог локалног метода %q+#D"
+
+#: cp/class.c:1197
+#, gcc-internal-format
+msgid " because of local member %q+#D with same name"
+msgstr " због иÑтоименог локалног члана %q+#D"
+
+#: cp/class.c:1239
+#, gcc-internal-format
+msgid "base class %q#T has a non-virtual destructor"
+msgstr "оÑновна клаÑа %q#T има не-виртуелни деÑтруктор"
+
+#: cp/class.c:1553
+#, gcc-internal-format
+msgid "all member functions in class %qT are private"
+msgstr "Ñве чланÑке функције у клаÑи %qT Ñу приватне"
+
+#: cp/class.c:1564
+#, gcc-internal-format
+msgid "%q#T only defines a private destructor and has no friends"
+msgstr "%q#T дефинише Ñамо приватни деÑтруктор и нема пријатељâ"
+
+#: cp/class.c:1607
+#, gcc-internal-format
+msgid "%q#T only defines private constructors and has no friends"
+msgstr "%q#T дефинише Ñамо приватне конÑтрукторе и нема пријатељâ"
+
+#: cp/class.c:2000
+#, gcc-internal-format
+msgid "no unique final overrider for %qD in %qT"
+msgstr "нема јединÑтвеног коначног потиÑкивача за %qD у %qT"
+
+#. Here we know it is a hider, and no overrider exists.
+#: cp/class.c:2419
+#, gcc-internal-format
+msgid "%q+D was hidden"
+msgstr "%q+D је Ñакривено"
+
+#: cp/class.c:2420
+#, gcc-internal-format
+msgid " by %q+D"
+msgstr " овим %q+D"
+
+#: cp/class.c:2461 cp/decl2.c:1072
+#, gcc-internal-format
+msgid "%q+#D invalid; an anonymous union can only have non-static data members"
+msgstr "%q+#D није иÑправно; анонимна унија може имати Ñамо неÑтатичке чланÑке податке"
+
+#: cp/class.c:2467 cp/decl2.c:1078
+#, gcc-internal-format
+msgid "private member %q+#D in anonymous union"
+msgstr "приватни члан %q+#D у анонимној унији"
+
+#: cp/class.c:2469 cp/decl2.c:1080
+#, gcc-internal-format
+msgid "protected member %q+#D in anonymous union"
+msgstr "заштићени члан %q+#D у анонимној унији"
+
+#: cp/class.c:2635
+#, gcc-internal-format
+msgid "bit-field %q+#D with non-integral type"
+msgstr "битÑко поље %q+#D неинтегралног типа"
+
+#: cp/class.c:2652
+#, gcc-internal-format
+msgid "bit-field %q+D width not an integer constant"
+msgstr "ширина битÑког поља %q+D није целобројна конÑтанта"
+
+#: cp/class.c:2657
+#, gcc-internal-format
+msgid "negative width in bit-field %q+D"
+msgstr "негативна ширина у биÑтком пољу %q+D"
+
+#: cp/class.c:2662
+#, gcc-internal-format
+msgid "zero width for bit-field %q+D"
+msgstr "нулта ширина за битÑко поље %q+D"
+
+#: cp/class.c:2668
+#, gcc-internal-format
+msgid "width of %q+D exceeds its type"
+msgstr "ширина %q+D премашује Ñвој тип"
+
+#: cp/class.c:2677
+#, gcc-internal-format
+msgid "%q+D is too small to hold all values of %q#T"
+msgstr "%q+D је премало да Ñадржи Ñве вредноÑти за %q#T"
+
+#: cp/class.c:2736
+#, gcc-internal-format
+msgid "member %q+#D with constructor not allowed in union"
+msgstr "члан %q+#D Ñа конÑтруктором није дозвољен у унији"
+
+#: cp/class.c:2739
+#, gcc-internal-format
+msgid "member %q+#D with destructor not allowed in union"
+msgstr "члан %q+#D Ñа деÑтруктором није дозвољен у унији"
+
+#: cp/class.c:2741
+#, gcc-internal-format
+msgid "member %q+#D with copy assignment operator not allowed in union"
+msgstr "члан %q+#D Ñа оператором копирања-доделе није дозвољен у унији"
+
+#: cp/class.c:2764
+#, gcc-internal-format
+msgid "multiple fields in union %qT initialized"
+msgstr "уÑпоÑтављена вишеÑтрука поља у унији %qT"
+
+#: cp/class.c:2826
+#, gcc-internal-format
+msgid "ignoring packed attribute on unpacked non-POD field %q+#D"
+msgstr "игноришем атрибут паковања на непакованом не-ПОД пољу %q+#D"
+
+#: cp/class.c:2886
+#, gcc-internal-format
+msgid "%q+D may not be static because it is a member of a union"
+msgstr "%q+D не може бити Ñтатичко зато што је члан уније"
+
+#: cp/class.c:2891
+#, gcc-internal-format
+msgid "%q+D may not have reference type %qT because it is a member of a union"
+msgstr "%q+D не може имати тип упућивача %qT зато што је члан уније"
+
+#: cp/class.c:2900
+#, gcc-internal-format
+msgid "field %q+D in local class cannot be static"
+msgstr "поље %q+D у локалној клаÑи не може бити Ñтатичко"
+
+#: cp/class.c:2906
+#, gcc-internal-format
+msgid "field %q+D invalidly declared function type"
+msgstr "поље %q+D неиÑправно деклариÑан функцијÑки тип"
+
+#: cp/class.c:2912
+#, gcc-internal-format
+msgid "field %q+D invalidly declared method type"
+msgstr "поље %q+D неиÑправно деклариÑан методÑки тип"
+
+#: cp/class.c:2944
+#, gcc-internal-format
+msgid "non-static reference %q+#D in class without a constructor"
+msgstr "неÑтатички упућивач %q+#D у клаÑи без конÑтруктора"
+
+#: cp/class.c:2991
+#, gcc-internal-format
+msgid "non-static const member %q+#D in class without a constructor"
+msgstr "неÑтатчики конÑтантни члан %q+#D у клаÑи без конÑтруктора"
+
+#: cp/class.c:3006
+#, gcc-internal-format
+msgid "field %q+#D with same name as class"
+msgstr "поље %q+#D иÑтог имена као и клаÑа"
+
+#: cp/class.c:3039
+#, gcc-internal-format
+msgid "%q#T has pointer data members"
+msgstr "%q#T има показивачке чланÑке податке"
+
+#: cp/class.c:3043
+#, gcc-internal-format
+msgid " but does not override %<%T(const %T&)%>"
+msgstr " али не потиÑкује %<%T(const %T&)%>"
+
+#: cp/class.c:3045
+#, gcc-internal-format
+msgid " or %<operator=(const %T&)%>"
+msgstr " или %<operator=(const %T&)%>"
+
+#: cp/class.c:3048
+#, gcc-internal-format
+msgid " but does not override %<operator=(const %T&)%>"
+msgstr " али не потиÑкује %<operator=(const %T&)%>"
+
+#: cp/class.c:3504
+#, gcc-internal-format
+msgid "offset of empty base %qT may not be ABI-compliant and maychange in a future version of GCC"
+msgstr "помак празне оÑнове %qT можда не поштује ÐБИ и може Ñе изменити у будућим верзијама ГЦЦа"
+
+#: cp/class.c:3616
+#, gcc-internal-format
+msgid "class %qT will be considered nearly empty in a future version of GCC"
+msgstr "клаÑа %qT ће бити Ñматрана Ñкоро празном у будућим верзијама ГЦЦа"
+
+#: cp/class.c:3698
+#, gcc-internal-format
+msgid "initializer specified for non-virtual method %q+D"
+msgstr "уÑпоÑтављач наведен за невиртуелни метод %q+D"
+
+#: cp/class.c:4360
+#, gcc-internal-format
+msgid "offset of virtual base %qT is not ABI-compliant and may change in a future version of GCC"
+msgstr "помак виртуелне оÑнове %qT не поштује ÐБИ и може Ñе изменити у будућим верзијама ГЦЦа"
+
+#: cp/class.c:4459
+#, gcc-internal-format
+msgid "direct base %qT inaccessible in %qT due to ambiguity"
+msgstr "непоÑредна оÑнова %qT није доÑтупна у %qT уÑлед двоÑмиÑленоÑти"
+
+#: cp/class.c:4471
+#, gcc-internal-format
+msgid "virtual base %qT inaccessible in %qT due to ambiguity"
+msgstr "виртуелна оÑнова %qT није доÑтупна у %qT уÑлед двоÑмиÑленоÑти"
+
+#: cp/class.c:4648
+#, gcc-internal-format
+msgid "size assigned to %qT may not be ABI-compliant and may change in a future version of GCC"
+msgstr "величина додељена %qT можда не поштује ÐБИ и може Ñе изменити у будућим верзијама ГЦЦа"
+
+#. Versions of G++ before G++ 3.4 did not reset the
+#. DECL_MODE.
+#: cp/class.c:4687
+#, gcc-internal-format
+msgid "the offset of %qD may not be ABI-compliant and may change in a future version of GCC"
+msgstr "помак за %qD можда не поштује ÐБИ и може Ñе изменити у будућим верзијама ГЦЦа"
+
+#: cp/class.c:4715
+#, gcc-internal-format
+msgid "offset of %q+D is not ABI-compliant and may change in a future version of GCC"
+msgstr "помак за %q+D можда не поштује ÐБИ и може Ñе изменити у будућим верзијама ГЦЦа"
+
+#: cp/class.c:4724
+#, gcc-internal-format
+msgid "%q+D contains empty classes which may cause base classes to be placed at different locations in a future version of GCC"
+msgstr "%q+D Ñадржи празне клаÑе које могу довеÑти до Ñмештања оÑновних клаÑа на различитој локацији у будућим верзијама ГЦЦа"
+
+#: cp/class.c:4783
+#, gcc-internal-format
+msgid "layout of classes derived from empty class %qT may change in a future version of GCC"
+msgstr "раÑпоред клаÑа изведених из празне клаÑе %qT може бити промењен у будућим верзијама ГЦЦа"
+
+#: cp/class.c:4929 cp/parser.c:13263
+#, gcc-internal-format
+msgid "redefinition of %q#T"
+msgstr "поновна дефиниција %q#T"
+
+#: cp/class.c:5079
+#, gcc-internal-format
+msgid "%q#T has virtual functions but non-virtual destructor"
+msgstr "%q#T има виртуелне функције, али невиртуелни деÑтруктор"
+
+#: cp/class.c:5181
+#, gcc-internal-format
+msgid "trying to finish struct, but kicked out due to previous parse errors"
+msgstr "у покушају да довршим Ñтруктуру, али избачен уÑлед претходних грешака у рашчлањивању"
+
+#: cp/class.c:5628
+#, gcc-internal-format
+msgid "language string %<\"%E\"%> not recognized"
+msgstr "језичка ниÑка %<\"%E\"%> није препозната"
+
+#: cp/class.c:5714
+#, gcc-internal-format
+msgid "cannot resolve overloaded function %qD based on conversion to type %qT"
+msgstr "не могу да разрешим препуњену функцију %qD на оÑнову претварања у тип %qT"
+
+#: cp/class.c:5841
+#, gcc-internal-format
+msgid "no matches converting function %qD to type %q#T"
+msgstr "нема поклапања за претварање функције %qD у тип %q#T"
+
+#: cp/class.c:5864
+#, gcc-internal-format
+msgid "converting overloaded function %qD to type %q#T is ambiguous"
+msgstr "двоÑмиÑлено претварање препуњене функције %qD у тип %q#T"
+
+#: cp/class.c:5890
+#, gcc-internal-format
+msgid "assuming pointer to member %qD"
+msgstr "претпоÑтављам показивач на члан %qD"
+
+#: cp/class.c:5893
+#, gcc-internal-format
+msgid "(a pointer to member can only be formed with %<&%E%>)"
+msgstr "(показивач на члан може бити формиран Ñамо помоћу %<&%E%>)"
+
+#: cp/class.c:5938 cp/class.c:5969 cp/class.c:6121 cp/class.c:6128
+#, gcc-internal-format
+msgid "not enough type information"
+msgstr "нема довољно података о типу"
+
+#: cp/class.c:5955
+#, gcc-internal-format
+msgid "argument of type %qT does not match %qT"
+msgstr "аргумент типа %qT не поклапа Ñе Ñа %qT"
+
+#: cp/class.c:6105
+#, gcc-internal-format
+msgid "invalid operation on uninstantiated type"
+msgstr "неиÑправна радња на неизведеном типу"
+
+#. [basic.scope.class]
+#.
+#. 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:6342 cp/decl.c:1133 cp/name-lookup.c:508
+#, gcc-internal-format
+msgid "declaration of %q#D"
+msgstr "декларација %q#D"
+
+#: cp/class.c:6343
+#, gcc-internal-format
+msgid "changes meaning of %qD from %q+#D"
+msgstr "мења значење за %qD Ñа %q+#D"
+
+#: cp/cp-gimplify.c:120
+#, gcc-internal-format
+msgid "continue statement not within loop or switch"
+msgstr "наредба наÑтављања није у оквиру петље или прекидача"
+
+#: cp/cp-gimplify.c:365
+#, gcc-internal-format
+msgid "statement with no effect"
+msgstr "наредба без ефекта"
+
+#: cp/cvt.c:91
+#, gcc-internal-format
+msgid "can't convert from incomplete type %qT to %qT"
+msgstr "не може Ñе претворити из непотпуног типа %qT у %qT"
+
+#: cp/cvt.c:100
+#, gcc-internal-format
+msgid "conversion of %qE from %qT to %qT is ambiguous"
+msgstr "двоÑмиÑлено претварање %qE из %qT у %qT"
+
+#: cp/cvt.c:169 cp/cvt.c:238 cp/cvt.c:285
+#, gcc-internal-format
+msgid "cannot convert %qE from type %qT to type %qT"
+msgstr "не може Ñе претворити %qE из типа %qT у тип %qT"
+
+#: cp/cvt.c:198 cp/cvt.c:202
+#, gcc-internal-format
+msgid "pointer to member cast from %qT to %qT is via virtual base"
+msgstr "показивач на члан претопљен из %qT у %qT је преко виртуелне оÑнове"
+
+#: cp/cvt.c:499
+#, gcc-internal-format
+msgid "conversion from %qT to %qT discards qualifiers"
+msgstr "претварање из %qT у %qT одбацује одредбе"
+
+#: cp/cvt.c:517 cp/typeck.c:4977
+#, gcc-internal-format
+msgid "casting %qT to %qT does not dereference pointer"
+msgstr "претапање %qT у %qT не разрешава показивач"
+
+#: cp/cvt.c:544
+#, gcc-internal-format
+msgid "cannot convert type %qT to type %qT"
+msgstr "не може Ñе претворити из типа %qT у %qT"
+
+#: cp/cvt.c:680
+#, gcc-internal-format
+msgid "conversion from %q#T to %q#T"
+msgstr "претварање из %q#T у %q#T"
+
+#: cp/cvt.c:692 cp/cvt.c:712
+#, gcc-internal-format
+msgid "%q#T used where a %qT was expected"
+msgstr "%q#T употребљено где је %qT очекивано"
+
+#: cp/cvt.c:727
+#, gcc-internal-format
+msgid "%q#T used where a floating point value was expected"
+msgstr "%q#T употребљено где је очекивана вредноÑÑ‚ у покретном зарезу"
+
+#: cp/cvt.c:774
+#, gcc-internal-format
+msgid "conversion from %qT to non-scalar type %qT requested"
+msgstr "захтевано претварање из %qT у неÑкаларни тип %qT"
+
+#: cp/cvt.c:808
+#, gcc-internal-format
+msgid "pseudo-destructor is not called"
+msgstr "пÑеудодеÑтруктор Ñе не позива"
+
+#: cp/cvt.c:867
+#, gcc-internal-format
+msgid "object of incomplete type %qT will not be accessed in %s"
+msgstr "објекту непотпуног типа %qT неће Ñе приÑтупити у %s"
+
+#: cp/cvt.c:870
+#, gcc-internal-format
+msgid "object of type %qT will not be accessed in %s"
+msgstr "објекту типа %qT неће Ñе приÑтупити у %s"
+
+#: cp/cvt.c:886
+#, gcc-internal-format
+msgid "object %qE of incomplete type %qT will not be accessed in %s"
+msgstr "објекту %qE непотпуног типа %qT неће Ñе приÑтупити у %s"
+
+#. [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:902
+#, gcc-internal-format
+msgid "%s cannot resolve address of overloaded function"
+msgstr "%s не може да разреши адреÑу препуњене функције"
+
+#. Only warn when there is no &.
+#: cp/cvt.c:908
+#, gcc-internal-format
+msgid "%s is a reference, not call, to function %qE"
+msgstr "%s је упућивач, а не позив, за функцију %qE"
+
+#: cp/cvt.c:922
+#, gcc-internal-format
+msgid "%s has no effect"
+msgstr "%s нема ефекта"
+
+#: cp/cvt.c:954
+#, gcc-internal-format
+msgid "value computed is not used"
+msgstr "израчуната вредноÑÑ‚ Ñе не кориÑти"
+
+#: cp/cvt.c:1062
+#, gcc-internal-format
+msgid "converting NULL to non-pointer type"
+msgstr "претварање NULL у непоказивачки тип"
+
+#: cp/cvt.c:1135
+#, gcc-internal-format
+msgid "ambiguous default type conversion from %qT"
+msgstr "двоÑмиÑлено подразумевано претварање типа из %qT"
+
+#: cp/cvt.c:1137
+#, gcc-internal-format
+msgid " candidate conversions include %qD and %qD"
+msgstr " могућа претварања укључују %qD и %qD"
+
+#: cp/decl.c:999
+#, gcc-internal-format
+msgid "%qD was declared %<extern%> and later %<static%>"
+msgstr "%qD је прво деклариÑано као %<extern%> а каÑније %<static%>"
+
+#: cp/decl.c:1000 cp/decl.c:1505 objc/objc-act.c:2920 objc/objc-act.c:7490
+#, gcc-internal-format
+msgid "previous declaration of %q+D"
+msgstr "претходна декларација %q+D"
+
+#: cp/decl.c:1033
+#, gcc-internal-format
+msgid "declaration of %qF throws different exceptions"
+msgstr "декларација %qF баца различите изузетке"
+
+#: cp/decl.c:1034
+#, gcc-internal-format
+msgid "from previous declaration %q+F"
+msgstr "од претходне декларације %q+F"
+
+#: cp/decl.c:1086
+#, gcc-internal-format
+msgid "function %q+D redeclared as inline"
+msgstr "функција %q+D поново деклариÑана као уткана"
+
+#: cp/decl.c:1088
+#, gcc-internal-format
+msgid "previous declaration of %q+D with attribute noinline"
+msgstr "претходна декларација %q+D Ñа атрибутом неуткане"
+
+#: cp/decl.c:1095
+#, gcc-internal-format
+msgid "function %q+D redeclared with attribute noinline"
+msgstr "функција %q+D поново деклариÑана Ñа атрибутом неуткане"
+
+#: cp/decl.c:1097
+#, gcc-internal-format
+msgid "previous declaration of %q+D was inline"
+msgstr "претходна декларација %q+D била је уткано"
+
+#: cp/decl.c:1120 cp/decl.c:1193
+#, gcc-internal-format
+msgid "shadowing %s function %q#D"
+msgstr "заклањање %s функције %q#D"
+
+#: cp/decl.c:1129
+#, gcc-internal-format
+msgid "library function %q#D redeclared as non-function %q#D"
+msgstr "библиотечка функција %q#D поново деклариÑана као не-функција %q#D"
+
+#: cp/decl.c:1134
+#, gcc-internal-format
+msgid "conflicts with built-in declaration %q#D"
+msgstr "коÑи Ñе Ñа декларацијом уграђеног %q#D"
+
+#: cp/decl.c:1188 cp/decl.c:1297 cp/decl.c:1313
+#, gcc-internal-format
+msgid "new declaration %q#D"
+msgstr "нова декларација %q#D"
+
+#: cp/decl.c:1189
+#, gcc-internal-format
+msgid "ambiguates built-in declaration %q#D"
+msgstr "чини декларацију уграђеног %q#D двоÑмиÑленом"
+
+#: cp/decl.c:1261
+#, gcc-internal-format
+msgid "%q#D redeclared as different kind of symbol"
+msgstr "%q#D поново деклариÑано као другачија врÑта Ñимбола"
+
+#: cp/decl.c:1264
+#, gcc-internal-format
+msgid "previous declaration of %q+#D"
+msgstr "претходна декларација %q+#D"
+
+#: cp/decl.c:1283
+#, gcc-internal-format
+msgid "declaration of template %q#D"
+msgstr "декларација шаблона %q#D"
+
+#: cp/decl.c:1284 cp/name-lookup.c:509
+#, gcc-internal-format
+msgid "conflicts with previous declaration %q+#D"
+msgstr "коÑи Ñе Ñа претходном декларацијом %q+#D"
+
+#: cp/decl.c:1298 cp/decl.c:1314
+#, gcc-internal-format
+msgid "ambiguates old declaration %q+#D"
+msgstr "чини Ñтару декларацију %q+#D двоÑмиÑленом"
+
+#: cp/decl.c:1306
+#, gcc-internal-format
+msgid "declaration of C function %q#D conflicts with"
+msgstr "декларација Ц функције %q#D коÑи Ñе Ñа"
+
+#: cp/decl.c:1308
+#, gcc-internal-format
+msgid "previous declaration %q+#D here"
+msgstr "претходном декларацијом %q+#D овде"
+
+#: cp/decl.c:1321
+#, gcc-internal-format
+msgid "conflicting declaration %q#D"
+msgstr "Ñукобљена декларација %q#D"
+
+#: cp/decl.c:1322
+#, gcc-internal-format
+msgid "%q+D has a previous declaration as %q#D"
+msgstr "%q+D има претходну декларацију као %q#D"
+
+#. [namespace.alias]
+#.
+#. A namespace-name or namespace-alias shall not be declared as
+#. the name of any other entity in the same declarative region.
+#. 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:1374
+#, gcc-internal-format
+msgid "declaration of namespace %qD conflicts with"
+msgstr "декларација именÑког проÑтора %qD коÑи Ñе Ñа"
+
+#: cp/decl.c:1375
+#, gcc-internal-format
+msgid "previous declaration of namespace %q+D here"
+msgstr "претходном декларацијом именÑког проÑтора %q+D овде"
+
+#: cp/decl.c:1386
+#, gcc-internal-format
+msgid "%q+#D previously defined here"
+msgstr "%q+#D претходно дефиниÑано овде"
+
+#: cp/decl.c:1387
+#, gcc-internal-format
+msgid "%q+#D previously declared here"
+msgstr "%q+#D претходно деклариÑано овде"
+
+#. Prototype decl follows defn w/o prototype.
+#: cp/decl.c:1396
+#, gcc-internal-format
+msgid "prototype for %q+#D"
+msgstr "прототип за %q+#D"
+
+#: cp/decl.c:1397
+#, gcc-internal-format
+msgid "%Jfollows non-prototype definition here"
+msgstr "%Jпрати не-прототипÑку дефиницију овде"
+
+#: cp/decl.c:1409
+#, gcc-internal-format
+msgid "previous declaration of %q+#D with %qL linkage"
+msgstr "претходна декларација %q+#D Ñа повезивошћу %qL"
+
+#: cp/decl.c:1411
+#, gcc-internal-format
+msgid "conflicts with new declaration with %qL linkage"
+msgstr "коÑи Ñе Ñа новом декларацијом Ñа повезивошћу %qL"
+
+#: cp/decl.c:1434 cp/decl.c:1440
+#, gcc-internal-format
+msgid "default argument given for parameter %d of %q#D"
+msgstr "подразумевани аргумент дат за параметар %d у %q#D"
+
+#: cp/decl.c:1436 cp/decl.c:1442
+#, gcc-internal-format
+msgid "after previous specification in %q+#D"
+msgstr "поÑле претходног навода у %q+#D"
+
+#: cp/decl.c:1451
+#, gcc-internal-format
+msgid "%q#D was used before it was declared inline"
+msgstr "%q#D је употребљено пре него што је деклариÑано уткано"
+
+#: cp/decl.c:1452
+#, gcc-internal-format
+msgid "%Jprevious non-inline declaration here"
+msgstr "%Jпретходна неуткана декларација овде"
+
+#: cp/decl.c:1504
+#, gcc-internal-format
+msgid "redundant redeclaration of %qD in same scope"
+msgstr "Ñувишна поновна декларација %qD у иÑтом доÑегу"
+
+#. From [temp.expl.spec]:
+#.
+#. If a template, a member template or the member of a class
+#. template is explicitly specialized then that
+#. specialization shall be declared before the first use of
+#. that specialization that would cause an implicit
+#. instantiation to take place, in every translation unit in
+#. which such a use occurs.
+#: cp/decl.c:1756
+#, gcc-internal-format
+msgid "explicit specialization of %qD after first use"
+msgstr "екÑплицитна Ñпецијализација %qD поÑле прве употребе"
+
+#: cp/decl.c:1835
+#, gcc-internal-format
+msgid "%q+D: visibility attribute ignored because it"
+msgstr "%q+D: атрибут видљивоÑти игнориÑан зато што"
+
+#: cp/decl.c:1837
+#, gcc-internal-format
+msgid "%Jconflicts with previous declaration here"
+msgstr "%JÑе коÑи Ñа претходном декларацијом овде"
+
+#: cp/decl.c:2227 cp/decl.c:2249
+#, gcc-internal-format
+msgid "jump to label %qD"
+msgstr "Ñкок на етикету %qD"
+
+#: cp/decl.c:2229 cp/decl.c:2251
+#, gcc-internal-format
+msgid "jump to case label"
+msgstr "Ñкок на етикету Ñлучаја"
+
+#: cp/decl.c:2232 cp/decl.c:2254
+#, gcc-internal-format
+msgid "%H from here"
+msgstr "%H одавде"
+
+#: cp/decl.c:2237
+#, gcc-internal-format
+msgid " crosses initialization of %q+#D"
+msgstr " преÑеца уÑпоÑтављање %q+#D"
+
+#: cp/decl.c:2239 cp/decl.c:2353
+#, gcc-internal-format
+msgid " enters scope of non-POD %q+#D"
+msgstr " улази у доÑег не-ПОД %q+#D"
+
+#: cp/decl.c:2258 cp/decl.c:2357
+#, gcc-internal-format
+msgid " enters try block"
+msgstr " улази у блок покушаја"
+
+#: cp/decl.c:2260 cp/decl.c:2359
+#, gcc-internal-format
+msgid " enters catch block"
+msgstr " улази у блок хватања"
+
+#: cp/decl.c:2337
+#, gcc-internal-format
+msgid "jump to label %q+D"
+msgstr "Ñкок на етикету %q+D"
+
+#: cp/decl.c:2338
+#, gcc-internal-format
+msgid " from here"
+msgstr " одавде"
+
+#. Can't skip init of __exception_info.
+#: cp/decl.c:2349
+#, gcc-internal-format
+msgid "%J enters catch block"
+msgstr "%J улази у блок хватања"
+
+#: cp/decl.c:2351
+#, gcc-internal-format
+msgid " skips initialization of %q+#D"
+msgstr " преÑкаче уÑпоÑтављање %q+#D"
+
+#: cp/decl.c:2385
+#, gcc-internal-format
+msgid "label named wchar_t"
+msgstr "етикета по имену wchar_t"
+
+#: cp/decl.c:2388
+#, gcc-internal-format
+msgid "duplicate label %qD"
+msgstr "удвоÑтручена етикета %qD"
+
+#: cp/decl.c:2644 cp/parser.c:3654
+#, gcc-internal-format
+msgid "%qD used without template parameters"
+msgstr "%qD употребљено без параметара шаблона"
+
+#: cp/decl.c:2661 cp/decl.c:2752
+#, gcc-internal-format
+msgid "no class template named %q#T in %q#T"
+msgstr "нема шаблона клаÑе по имену %q#T у %q#T"
+
+#: cp/decl.c:2682 cp/decl.c:2692 cp/decl.c:2712
+#, gcc-internal-format
+msgid "no type named %q#T in %q#T"
+msgstr "нема типа по имену %q#T у %q#T"
+
+#: cp/decl.c:2761
+#, gcc-internal-format
+msgid "template parameters do not match template"
+msgstr "параметри шаблона Ñе не поклапају Ñа шаблоном"
+
+#: cp/decl.c:2762 cp/friend.c:317 cp/friend.c:325
+#, gcc-internal-format
+msgid "%q+D declared here"
+msgstr "%q+D деклариÑано овде"
+
+#: cp/decl.c:3433
+#, gcc-internal-format
+msgid "%Jan anonymous union cannot have function members"
+msgstr "%Jанонимна унија не може имати чланÑке функције"
+
+#: cp/decl.c:3451
+#, gcc-internal-format
+msgid "member %q+#D with constructor not allowed in anonymous aggregate"
+msgstr "члан %q+#D Ñа конÑтруктором није дозвољен у анонимној Ñкупини"
+
+#: cp/decl.c:3454
+#, gcc-internal-format
+msgid "member %q+#D with destructor not allowed in anonymous aggregate"
+msgstr "члан %q+#D Ñа деÑтруктором није дозвољен у анонимној Ñкупини"
+
+#: cp/decl.c:3457
+#, gcc-internal-format
+msgid "member %q+#D with copy assignment operator not allowed in anonymous aggregate"
+msgstr "члан %q+#D Ñа оператором копирања-доделе није дозвољен у анонимној Ñкупини"
+
+#: cp/decl.c:3482
+#, gcc-internal-format
+msgid "multiple types in one declaration"
+msgstr "вишеÑтруки типови у једној декларацији"
+
+#: cp/decl.c:3486
+#, gcc-internal-format
+msgid "redeclaration of C++ built-in type %qT"
+msgstr "поновљена декларација Ц++ уграђеног типа %qT"
+
+#: cp/decl.c:3523
+#, gcc-internal-format
+msgid "missing type-name in typedef-declaration"
+msgstr "недоÑтаје име типа у наредби typedef"
+
+#: cp/decl.c:3531
+#, gcc-internal-format
+msgid "ISO C++ prohibits anonymous structs"
+msgstr "ИСО Ц++ забрањује анонимне Ñтруктуре"
+
+#: cp/decl.c:3538
+#, gcc-internal-format
+msgid "%qs can only be specified for functions"
+msgstr "%qs може бити наведено Ñамо за функције"
+
+#: cp/decl.c:3544
+#, gcc-internal-format
+msgid "%<friend%> can only be specified inside a class"
+msgstr "%<friend%> може бити наведено Ñамо унутар клаÑе"
+
+#: cp/decl.c:3546
+#, gcc-internal-format
+msgid "%<explicit%> can only be specified for constructors"
+msgstr "%<explicit%> може бити наведено Ñамо за конÑтрукторе"
+
+#: cp/decl.c:3548
+#, gcc-internal-format
+msgid "a storage class can only be specified for objects and functions"
+msgstr "Ñкладишна клаÑа може бити наведена Ñамо за објекте и функције"
+
+#: cp/decl.c:3554
+#, gcc-internal-format
+msgid "qualifiers can only be specified for objects and functions"
+msgstr "одредбе могу бити наведене Ñамо за објекте и функције"
+
+#: cp/decl.c:3584
+#, gcc-internal-format
+msgid "attribute ignored in declaration of %q+#T"
+msgstr "атрибут игнориÑан у декларацији %q+#T"
+
+#: cp/decl.c:3585
+#, gcc-internal-format
+msgid "attribute for %q+#T must follow the %qs keyword"
+msgstr "атрибут за %q+#T мора пратити кључну реч %qs"
+
+#: cp/decl.c:3705
+#, gcc-internal-format
+msgid "function %q#D is initialized like a variable"
+msgstr "функција %q#D уÑпоÑтављена као променљива"
+
+#: cp/decl.c:3717
+#, gcc-internal-format
+msgid "declaration of %q#D has %<extern%> and is initialized"
+msgstr "декларација %q#D има %<extern%> и ипак је уÑпоÑтављена"
+
+#: cp/decl.c:3747
+#, gcc-internal-format
+msgid "%q#D is not a static member of %q#T"
+msgstr "%q#D није Ñтатички члан у %q#T"
+
+#: cp/decl.c:3753
+#, gcc-internal-format
+msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>"
+msgstr "ИСО Ц++ не дозвољава да %<%T::%D%> буде дефиниÑано као %<%T::%D%>"
+
+#: cp/decl.c:3762
+#, gcc-internal-format
+msgid "template header not allowed in member definition of explicitly specialized class"
+msgstr "заглавље шаблона није дозвољено у дефиницији члана екÑплицитно Ñпецијализоване клаÑе"
+
+#: cp/decl.c:3771
+#, gcc-internal-format
+msgid "duplicate initialization of %qD"
+msgstr "двоÑтруко уÑпоÑтављање %qD"
+
+#: cp/decl.c:3810
+#, gcc-internal-format
+msgid "declaration of %q#D outside of class is not definition"
+msgstr "декларација %q#D изван клаÑе није дефиниција"
+
+#: cp/decl.c:3859
+#, gcc-internal-format
+msgid "variable %q#D has initializer but incomplete type"
+msgstr "променљива %q#D има уÑпоÑтављач али је непотпуног типа"
+
+#: cp/decl.c:3866 cp/decl.c:4564
+#, gcc-internal-format
+msgid "elements of array %q#D have incomplete type"
+msgstr "елементи низа %q#D имају непотпун тип"
+
+#: cp/decl.c:3882
+#, gcc-internal-format
+msgid "aggregate %q#D has incomplete type and cannot be defined"
+msgstr "Ñкупина %q#D има непотпун тип и не може Ñе дефиниÑати"
+
+#: cp/decl.c:3932
+#, gcc-internal-format
+msgid "%qD declared as reference but not initialized"
+msgstr "%qD деклариÑано као упућивач али није уÑпоÑтављено"
+
+#: cp/decl.c:3938
+#, gcc-internal-format
+msgid "ISO C++ forbids use of initializer list to initialize reference %qD"
+msgstr "ИСО Ц++ забрањује употребу лиÑте уÑпоÑтављача за уÑпоÑтављање упућивача %qD"
+
+#: cp/decl.c:3964
+#, gcc-internal-format
+msgid "cannot initialize %qT from %qT"
+msgstr "%qT Ñе не може уÑпоÑтавити из %qT"
+
+#: cp/decl.c:3997
+#, gcc-internal-format
+msgid "initializer fails to determine size of %qD"
+msgstr "уÑпоÑтављач не одређује величину %qD"
+
+#: cp/decl.c:4002
+#, gcc-internal-format
+msgid "array size missing in %qD"
+msgstr "недоÑтаје величина низа у %qD"
+
+#: cp/decl.c:4012
+#, gcc-internal-format
+msgid "zero-size array %qD"
+msgstr "низ %qD нулте величине"
+
+#. 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:4048
+#, gcc-internal-format
+msgid "storage size of %qD isn't known"
+msgstr "величина Ñкладиштења за %qD није позната"
+
+#: cp/decl.c:4070
+#, gcc-internal-format
+msgid "storage size of %qD isn't constant"
+msgstr "величина Ñкладиштења за %qD није конÑтанта"
+
+#: cp/decl.c:4125
+#, gcc-internal-format
+msgid "sorry: semantics of inline function static data %q+#D are wrong (you'll wind up with multiple copies)"
+msgstr "извините: Ñемантика Ñтатичких података уткане функције %q+#D је погрешна (доћи ће до вишеÑтруких копија)"
+
+#: cp/decl.c:4128
+#, gcc-internal-format
+msgid "%J you can work around this by removing the initializer"
+msgstr "%J можете ово заобићи уклањањем уÑпоÑтављача"
+
+#: cp/decl.c:4155
+#, gcc-internal-format
+msgid "uninitialized const %qD"
+msgstr "неуÑпоÑтављена конÑтанта %qD"
+
+#: cp/decl.c:4230
+#, gcc-internal-format
+msgid "name %qD used in a GNU-style designated initializer for an array"
+msgstr "име %qD употребљено у уÑпоÑтављачу низа утврђеном као Гну-Ñтил"
+
+#: cp/decl.c:4276
+#, gcc-internal-format
+msgid "invalid type %qT as initializer for a vector of type %qT"
+msgstr "неиÑправан тип %qT као уÑпоÑтављач за вектор типа %qT"
+
+#: cp/decl.c:4318
+#, gcc-internal-format
+msgid "initializer for %qT must be brace-enclosed"
+msgstr "уÑпоÑтављач за %qT мора бити у витичаÑтим заградама"
+
+#: cp/decl.c:4333
+#, gcc-internal-format
+msgid "ISO C++ does not allow designated initializers"
+msgstr "ИСО Ц++ не дозвољава утврђене уÑпоÑтављаче"
+
+#: cp/decl.c:4338
+#, gcc-internal-format
+msgid "%qT has no non-static data member named %qD"
+msgstr "%qT нема неÑтатички чланÑки податак по имену %qD"
+
+#: cp/decl.c:4387
+#, gcc-internal-format
+msgid "braces around scalar initializer for type %qT"
+msgstr "витичаÑте заграде око Ñкаларног уÑпоÑтављача за тип %qT"
+
+#: cp/decl.c:4465
+#, gcc-internal-format
+msgid "missing braces around initializer for %qT"
+msgstr "недоÑтају витичаÑте заграде око уÑпоÑтављача за %qT"
+
+#: cp/decl.c:4520
+#, gcc-internal-format
+msgid "too many initializers for %qT"
+msgstr "превише уÑпоÑтављача за %qT"
+
+#: cp/decl.c:4558
+#, gcc-internal-format
+msgid "variable-sized object %qD may not be initialized"
+msgstr "објекат %qD променљиве величине не може Ñе уÑпоÑтављати"
+
+#: cp/decl.c:4569
+#, gcc-internal-format
+msgid "%qD has incomplete type"
+msgstr "%qD има непотпун тип"
+
+#: cp/decl.c:4615
+#, gcc-internal-format
+msgid "%qD must be initialized by constructor, not by %<{...}%>"
+msgstr "%qD мора бити уÑпоÑтављен конÑтруктором, не помоћу %<{...}%>"
+
+#: cp/decl.c:4651
+#, gcc-internal-format
+msgid "array %qD initialized by parenthesized string literal %qE"
+msgstr "низ %qD уÑпоÑтављен заграђеном конÑтантном ниÑком %qE"
+
+#: cp/decl.c:4666
+#, gcc-internal-format
+msgid "structure %qD with uninitialized const members"
+msgstr "Ñтруктура %qD Ñа неуÑпоÑтављеним конÑтантним члановима"
+
+#: cp/decl.c:4668
+#, gcc-internal-format
+msgid "structure %qD with uninitialized reference members"
+msgstr "Ñтруктура %qD Ñа неуÑпоÑтављеним упућивачким члановима"
+
+#: cp/decl.c:4875
+#, gcc-internal-format
+msgid "assignment (not initialization) in declaration"
+msgstr "додела (не уÑпоÑтављање) у декларацији"
+
+#: cp/decl.c:4892
+#, gcc-internal-format
+msgid "cannot initialize %qD to namespace %qD"
+msgstr "%qD Ñе не може уÑпоÑтављати именÑким проÑтором %qD"
+
+#: cp/decl.c:4942
+#, gcc-internal-format
+msgid "shadowing previous type declaration of %q#D"
+msgstr "заклањање претходне декларације типа за %q#D"
+
+#: cp/decl.c:4972
+#, gcc-internal-format
+msgid "%qD cannot be thread-local because it has non-POD type %qT"
+msgstr "%qD не може бити нитно-локално зато што је не-ПОД типа %qT"
+
+#: cp/decl.c:4997
+#, gcc-internal-format
+msgid "%qD is thread-local and so cannot be dynamically initialized"
+msgstr "%qD је нитно-локално и Ñтога Ñе не може динамички уÑпоÑтављати"
+
+#: cp/decl.c:5015
+#, gcc-internal-format
+msgid "%qD cannot be initialized by a non-constant expression when being declared"
+msgstr "%qD Ñе не може уÑпоÑтављати не-конÑтантним изразом када Ñе декларише"
+
+#: cp/decl.c:5605
+#, gcc-internal-format
+msgid "destructor for alien class %qT cannot be a member"
+msgstr "деÑтруктор за туђинÑку клаÑу %qT не може бити члан"
+
+#: cp/decl.c:5607
+#, gcc-internal-format
+msgid "constructor for alien class %qT cannot be a member"
+msgstr "конÑтруктор за туђинÑку клаÑу %qT не може бити члан"
+
+#: cp/decl.c:5628
+#, gcc-internal-format
+msgid "%qD declared as a %<virtual%> %s"
+msgstr "%qD деклариÑано као %<virtual%> %s"
+
+#: cp/decl.c:5630
+#, gcc-internal-format
+msgid "%qD declared as an %<inline%> %s"
+msgstr "%qD деклариÑано као %<inline%> %s"
+
+#: cp/decl.c:5632
+#, gcc-internal-format
+msgid "%<const%> and %<volatile%> function specifiers on %qD invalid in %s declaration"
+msgstr "наводиоци функције %<const%> и %<volatile%> за %qD ниÑу иÑправни у декларацији %s"
+
+#: cp/decl.c:5636
+#, gcc-internal-format
+msgid "%q+D declared as a friend"
+msgstr "%q+D деклариÑано као пријатељ"
+
+#: cp/decl.c:5642
+#, gcc-internal-format
+msgid "%q+D declared with an exception specification"
+msgstr "%q+D деклариÑано Ñа одредницом изузетака"
+
+#: cp/decl.c:5676
+#, gcc-internal-format
+msgid "definition of %qD is not in namespace enclosing %qT"
+msgstr "дефиниција %qD није у именÑком проÑтору који обухвата %qT"
+
+#: cp/decl.c:5736
+#, gcc-internal-format
+msgid "defining explicit specialization %qD in friend declaration"
+msgstr "дефиниција екÑплицитне Ñпецијализације %qD у декларацији пријатеља"
+
+#. Something like `template <class T> friend void f<T>()'.
+#: cp/decl.c:5746
+#, gcc-internal-format
+msgid "invalid use of template-id %qD in declaration of primary template"
+msgstr "неиÑправна употреба ид. шаблона %qD у декларацији примарног шаблона"
+
+#: cp/decl.c:5776
+#, gcc-internal-format
+msgid "default arguments are not allowed in declaration of friend template specialization %qD"
+msgstr "подразумевани аргументи ниÑу дозвољени у декларацији пријатељÑке Ñпецијализације шаблона %qD"
+
+#: cp/decl.c:5784
+#, gcc-internal-format
+msgid "%<inline%> is not allowed in declaration of friend template specialization %qD"
+msgstr "%<inline%> није дозвољено у декларацији пријатељÑке Ñпецијализације шаблона %qD"
+
+#: cp/decl.c:5827
+#, gcc-internal-format
+msgid "cannot declare %<::main%> to be a template"
+msgstr "%<::main%> Ñе не може деклариÑати као шаблон"
+
+#: cp/decl.c:5829
+#, gcc-internal-format
+msgid "cannot declare %<::main%> to be inline"
+msgstr "%<::main%> Ñе не може деклариÑати као уткано"
+
+#: cp/decl.c:5831
+#, gcc-internal-format
+msgid "cannot declare %<::main%> to be static"
+msgstr "%<::main%> Ñе не може деклариÑати као Ñтатичко"
+
+#: cp/decl.c:5837
+#, gcc-internal-format
+msgid "%<::main%> must return %<int%>"
+msgstr "%<::main%> мора враћати %<int%>"
+
+#: cp/decl.c:5869
+#, gcc-internal-format
+msgid "non-local function %q#D uses anonymous type"
+msgstr "не-локална функција %q#D кориÑти анониман тип"
+
+#: cp/decl.c:5872 cp/decl.c:6142
+#, gcc-internal-format
+msgid "%q+#D does not refer to the unqualified type, so it is not used for linkage"
+msgstr "%q+#D не упућује на неодређени тип, тако да Ñе не кориÑти за повезивоÑÑ‚"
+
+#: cp/decl.c:5878
+#, gcc-internal-format
+msgid "non-local function %q#D uses local type %qT"
+msgstr "не-локална функција %q#D кориÑти локални тип %qT"
+
+#: cp/decl.c:5901
+#, gcc-internal-format
+msgid "%smember function %qD cannot have cv-qualifier"
+msgstr "%sчланÑка функција %qD не може имати кн-одредбу"
+
+#: cp/decl.c:5970
+#, gcc-internal-format
+msgid "definition of implicitly-declared %qD"
+msgstr "дефиниција имплицитно деклариÑаног %qD"
+
+#: cp/decl.c:5990 cp/decl2.c:704
+#, gcc-internal-format
+msgid "no %q#D member function declared in class %qT"
+msgstr "чланÑка функција %q#D није деклариÑана у клаÑи %qT"
+
+#. 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:6139
+#, gcc-internal-format
+msgid "non-local variable %q#D uses anonymous type"
+msgstr "не-локална променљива %q#D кориÑти анониман тип"
+
+#: cp/decl.c:6148
+#, gcc-internal-format
+msgid "non-local variable %q#D uses local type %qT"
+msgstr "не-локална променљива %q#D кориÑти локални тип %qT"
+
+#: cp/decl.c:6265
+#, gcc-internal-format
+msgid "invalid in-class initialization of static data member of non-integral type %qT"
+msgstr "неиÑправно уÑпоÑтављање унутар клаÑе Ñтатичког чланÑког податка неинтегралног типа %qT"
+
+#: cp/decl.c:6275
+#, gcc-internal-format
+msgid "ISO C++ forbids in-class initialization of non-const static member %qD"
+msgstr "ИСО Ц++ забрањује уÑпоÑтављање унутар клаÑе неконÑтантног Ñтатичког члана %qD"
+
+#: cp/decl.c:6279
+#, gcc-internal-format
+msgid "ISO C++ forbids initialization of member constant %qD of non-integral type %qT"
+msgstr "ИСО Ц++ забрањује уÑпоÑтављање чланÑке конÑтанте %qD неинтегралног типа %qT"
+
+#: cp/decl.c:6303
+#, gcc-internal-format
+msgid "size of array %qD has non-integral type %qT"
+msgstr "величина низа %qD има неинтегрални тип %qT"
+
+#: cp/decl.c:6305
+#, gcc-internal-format
+msgid "size of array has non-integral type %qT"
+msgstr "величина низа има неинтегрални тип %qT"
+
+#: cp/decl.c:6341
+#, gcc-internal-format
+msgid "size of array %qD is negative"
+msgstr "негативна величина низа %qD"
+
+#: cp/decl.c:6343
+#, gcc-internal-format
+msgid "size of array is negative"
+msgstr "негативна величина низа"
+
+#: cp/decl.c:6351
+#, gcc-internal-format
+msgid "ISO C++ forbids zero-size array %qD"
+msgstr "ИСО Ц++ забрањује низ нулте величине %qD"
+
+#: cp/decl.c:6353
+#, gcc-internal-format
+msgid "ISO C++ forbids zero-size array"
+msgstr "ИСО Ц++ забрањује низ нулте величине"
+
+#: cp/decl.c:6360
+#, gcc-internal-format
+msgid "size of array %qD is not an integral constant-expression"
+msgstr "величина низа %qD није интегралан конÑтатан израз"
+
+#: cp/decl.c:6363
+#, gcc-internal-format
+msgid "size of array is not an integral constant-expression"
+msgstr "величина низа није интегралан конÑтатан израз"
+
+#: cp/decl.c:6369
+#, gcc-internal-format
+msgid "ISO C++ forbids variable-size array %qD"
+msgstr "ИСО Ц++ забрањује низ променљиве величине %qD"
+
+#: cp/decl.c:6371
+#, gcc-internal-format
+msgid "ISO C++ forbids variable-size array"
+msgstr "ИСО Ц++ забрањује низ променљиве величине"
+
+#: cp/decl.c:6401
+#, gcc-internal-format
+msgid "overflow in array dimension"
+msgstr "преливање у димензији низа"
+
+#: cp/decl.c:6475
+#, gcc-internal-format
+msgid "declaration of %qD as %s"
+msgstr "декларација %qD као %s"
+
+#: cp/decl.c:6477
+#, gcc-internal-format
+msgid "creating %s"
+msgstr "прави %s"
+
+#: cp/decl.c:6489
+#, gcc-internal-format
+msgid "declaration of %qD as multidimensional array must have bounds for all dimensions except the first"
+msgstr "декларација %qD као вишедимензионог низа мора имати границе за Ñве димензије оÑим прве"
+
+#: cp/decl.c:6493
+#, gcc-internal-format
+msgid "multidimensional array must have bounds for all dimensions except the first"
+msgstr "вишедимензиони низ мора имати границе за Ñве димензије оÑим прве"
+
+#: cp/decl.c:6528
+#, gcc-internal-format
+msgid "return type specification for constructor invalid"
+msgstr "навод повратног типа за конÑтруктор није иÑправан"
+
+#: cp/decl.c:6538
+#, gcc-internal-format
+msgid "return type specification for destructor invalid"
+msgstr "навод повратног типа за деÑтруктор није иÑправан"
+
+#: cp/decl.c:6551
+#, gcc-internal-format
+msgid "operator %qT declared to return %qT"
+msgstr "оператор %qT деклариÑан да враћа %qT"
+
+#: cp/decl.c:6553
+#, gcc-internal-format
+msgid "return type specified for %<operator %T%>"
+msgstr "наведен повратни тип за %<operator %T%>"
+
+#: cp/decl.c:6575
+#, gcc-internal-format
+msgid "unnamed variable or field declared void"
+msgstr "неименована променљива или поље деклариÑано празним"
+
+#: cp/decl.c:6579
+#, gcc-internal-format
+msgid "variable or field %qE declared void"
+msgstr "променљива или поље %qE деклариÑано празним"
+
+#: cp/decl.c:6582
+#, gcc-internal-format
+msgid "variable or field declared void"
+msgstr "променљива или поље деклариÑано празним"
+
+#: cp/decl.c:6737
+#, gcc-internal-format
+msgid "type %qT is not derived from type %qT"
+msgstr "тип %qT није изведен из типа %qT"
+
+#: cp/decl.c:6753 cp/decl.c:6841 cp/decl.c:7929
+#, gcc-internal-format
+msgid "declaration of %qD as non-function"
+msgstr "декларација %qD као не-функције"
+
+#: cp/decl.c:6759
+#, gcc-internal-format
+msgid "declaration of %qD as non-member"
+msgstr "декларација %qD као не-члана"
+
+#: cp/decl.c:6790
+#, gcc-internal-format
+msgid "declarator-id missing; using reserved word %qD"
+msgstr "недоÑтаје ид. декларатора; кориÑти Ñе резервиÑана реч %qD"
+
+#: cp/decl.c:6874
+#, gcc-internal-format
+msgid "two or more data types in declaration of %qs"
+msgstr "два или више типова података у декларацији %qs"
+
+#: cp/decl.c:6938 cp/decl.c:6940
+#, gcc-internal-format
+msgid "ISO C++ forbids declaration of %qs with no type"
+msgstr "ИСО Ц++ забрањује декларацију %qs без типа"
+
+#: cp/decl.c:6965
+#, gcc-internal-format
+msgid "short, signed or unsigned invalid for %qs"
+msgstr "short, signed или unsigned неиÑправни за %qs"
+
+#: cp/decl.c:6967
+#, gcc-internal-format
+msgid "long, short, signed or unsigned invalid for %qs"
+msgstr "long, short, signed или unsigned неиÑправни за %qs"
+
+#: cp/decl.c:6969
+#, gcc-internal-format
+msgid "long and short specified together for %qs"
+msgstr "long и short наведени заједно за %qs"
+
+#: cp/decl.c:6971
+#, gcc-internal-format
+msgid "long or short specified with char for %qs"
+msgstr "long или short наведено уз char за %qs"
+
+#: cp/decl.c:6973
+#, gcc-internal-format
+msgid "long or short specified with floating type for %qs"
+msgstr "long или short наведени Ñа реалним типом за %qs"
+
+#: cp/decl.c:6975
+#, gcc-internal-format
+msgid "signed and unsigned given together for %qs"
+msgstr "signed и unsigned дати заједно за %qs"
+
+#: cp/decl.c:6981
+#, gcc-internal-format
+msgid "long, short, signed or unsigned used invalidly for %qs"
+msgstr "long, short, signed или unsigned употребљени неиÑправно за %qs"
+
+#: cp/decl.c:7046
+#, gcc-internal-format
+msgid "complex invalid for %qs"
+msgstr "complex неиÑправно за %qs"
+
+#: cp/decl.c:7075
+#, gcc-internal-format
+msgid "qualifiers are not allowed on declaration of %<operator %T%>"
+msgstr "одредбе ниÑу дозвољене уз декларацију %<operator %T%>"
+
+#: cp/decl.c:7087 cp/typeck.c:6633
+#, gcc-internal-format
+msgid "ignoring %qV qualifiers added to function type %qT"
+msgstr "игнориÑање %qV одредбе додате функцијÑком типу %qT"
+
+#: cp/decl.c:7110
+#, gcc-internal-format
+msgid "member %qD cannot be declared both virtual and static"
+msgstr "члан %qD не може бити деклариÑан и као виртуелни и као Ñтатички"
+
+#: cp/decl.c:7118
+#, gcc-internal-format
+msgid "%<%T::%D%> is not a valid declarator"
+msgstr "%<%T::%D%> није иÑправан декларатор"
+
+#: cp/decl.c:7126
+#, gcc-internal-format
+msgid "typedef declaration invalid in parameter declaration"
+msgstr "декларација typedef није иÑправна у декларацији параметра"
+
+#: cp/decl.c:7130
+#, gcc-internal-format
+msgid "storage class specifiers invalid in parameter declarations"
+msgstr "наводиоци Ñкладишне клаÑе ниÑу иÑправни у декларацијама параметара"
+
+#: cp/decl.c:7137
+#, gcc-internal-format
+msgid "virtual outside class declaration"
+msgstr "virtual изван декларације клаÑе"
+
+#: cp/decl.c:7151 cp/decl.c:7160
+#, gcc-internal-format
+msgid "multiple storage classes in declaration of %qs"
+msgstr "вишеÑтруке Ñкладишне клаÑе у декларацији %qs"
+
+#: cp/decl.c:7183
+#, gcc-internal-format
+msgid "storage class specified for %qs"
+msgstr "Ñкладишна клаÑа наведена за %qs"
+
+#: cp/decl.c:7217
+#, gcc-internal-format
+msgid "top-level declaration of %qs specifies %<auto%>"
+msgstr "декларација %qs на највишем нивоу наводи %<auto%>"
+
+#: cp/decl.c:7229
+#, gcc-internal-format
+msgid "storage class specifiers invalid in friend function declarations"
+msgstr "наводиоци Ñкладишне клаÑе ниÑу иÑправни у декларацијама пријатељÑких функција"
+
+#: cp/decl.c:7346
+#, gcc-internal-format
+msgid "destructor cannot be static member function"
+msgstr "деÑтруктор не може бити Ñтатичка чланÑка функција"
+
+#: cp/decl.c:7349
+#, gcc-internal-format
+msgid "destructors may not be cv-qualified"
+msgstr "деÑтруктори не могу бити кн-одређени"
+
+#: cp/decl.c:7369
+#, gcc-internal-format
+msgid "constructor cannot be static member function"
+msgstr "конÑтруктор не може бити Ñтатичка чланÑка функција"
+
+#: cp/decl.c:7372
+#, gcc-internal-format
+msgid "constructors cannot be declared virtual"
+msgstr "конÑтруктор не може бити виртуелан"
+
+#: cp/decl.c:7377
+#, gcc-internal-format
+msgid "constructors may not be cv-qualified"
+msgstr "конÑтруктори не могу бити кн-одређени"
+
+#: cp/decl.c:7397
+#, gcc-internal-format
+msgid "can't initialize friend function %qs"
+msgstr "не може Ñе уÑпоÑтављати пријатељÑка функција %qs"
+
+#. Cannot be both friend and virtual.
+#: cp/decl.c:7401
+#, gcc-internal-format
+msgid "virtual functions cannot be friends"
+msgstr "виртуелне функције не могу бити пријатељи"
+
+#: cp/decl.c:7405
+#, gcc-internal-format
+msgid "friend declaration not in class definition"
+msgstr "декларација пријатеља није у дефиницији клаÑе"
+
+#: cp/decl.c:7407
+#, gcc-internal-format
+msgid "can't define friend function %qs in a local class definition"
+msgstr "не може Ñе дефиниÑати пријатељÑка функција %qs у дефиницији локалне клаÑе"
+
+#: cp/decl.c:7420
+#, gcc-internal-format
+msgid "destructors may not have parameters"
+msgstr "деÑтруктори не могу имати параметре"
+
+#: cp/decl.c:7439 cp/decl.c:7446
+#, gcc-internal-format
+msgid "cannot declare reference to %q#T"
+msgstr "не може Ñе деклариÑати упућивач на %q#T"
+
+#: cp/decl.c:7440
+#, gcc-internal-format
+msgid "cannot declare pointer to %q#T"
+msgstr "не може Ñе деклариÑати показивач на %q#T"
+
+#: cp/decl.c:7448
+#, gcc-internal-format
+msgid "cannot declare pointer to %q#T member"
+msgstr "не може Ñе деклариÑати показивач на члан %q#T"
+
+#: cp/decl.c:7487 cp/parser.c:11686
+#, gcc-internal-format
+msgid "%qD is a namespace"
+msgstr "%qD је именÑки проÑтор"
+
+#: cp/decl.c:7526
+#, gcc-internal-format
+msgid "template-id %qD used as a declarator"
+msgstr "ид. шаблона %qD употребљен као декларатор"
+
+#: cp/decl.c:7576
+#, gcc-internal-format
+msgid "member functions are implicitly friends of their class"
+msgstr "чланÑке функције Ñу имплицитно пријатељи Ñвојих клаÑа"
+
+#: cp/decl.c:7578
+#, gcc-internal-format
+msgid "extra qualification %<%T::%> on member %qs"
+msgstr "Ñувишна одредба %<%T::%> на члану %qs"
+
+#: cp/decl.c:7589
+#, gcc-internal-format
+msgid "cannot define member function %<%T::%s%> within %<%T%>"
+msgstr "не може Ñе дефиниÑати чланÑка функција %<%T::%s%> унутар %<%T%>"
+
+#: cp/decl.c:7590
+#, gcc-internal-format
+msgid "cannot declare member function %<%T::%s%> within %<%T%>"
+msgstr "не може Ñе деклариÑати функција %<%T::%s%> унутар %<%T%>"
+
+#: cp/decl.c:7617
+#, gcc-internal-format
+msgid "cannot declare member %<%T::%s%> within %qT"
+msgstr "не може Ñе деклариÑати члан %<%T::%s%> унутар %qT"
+
+#: cp/decl.c:7657
+#, gcc-internal-format
+msgid "data member may not have variably modified type %qT"
+msgstr "чланÑки податак не може имати променљиво измењив тип %qT"
+
+#: cp/decl.c:7659
+#, gcc-internal-format
+msgid "parameter may not have variably modified type %qT"
+msgstr "параметар не може имати променљиво измењив тип %qT"
+
+#. [dcl.fct.spec] The explicit specifier shall only be used in
+#. declarations of constructors within a class definition.
+#: cp/decl.c:7667
+#, gcc-internal-format
+msgid "only declarations of constructors can be %<explicit%>"
+msgstr "Ñамо декларације конÑтруктора могу имати %<explicit%>"
+
+#: cp/decl.c:7675
+#, gcc-internal-format
+msgid "non-member %qs cannot be declared %<mutable%>"
+msgstr "не-члан %qs не може бити деклариÑан %<mutable%>"
+
+#: cp/decl.c:7680
+#, gcc-internal-format
+msgid "non-object member %qs cannot be declared %<mutable%>"
+msgstr "не-објектни члан %qs не може бити деклариÑан %<mutable%>"
+
+#: cp/decl.c:7686
+#, gcc-internal-format
+msgid "function %qs cannot be declared %<mutable%>"
+msgstr "функција %qs не може бити деклариÑана %<mutable%>"
+
+#: cp/decl.c:7691
+#, gcc-internal-format
+msgid "static %qs cannot be declared %<mutable%>"
+msgstr "Ñтатичко %qs не може бити деклариÑано %<mutable%>"
+
+#: cp/decl.c:7696
+#, gcc-internal-format
+msgid "const %qs cannot be declared %<mutable%>"
+msgstr "конÑтантно %qs не може бити деклариÑано %<mutable%>"
+
+#: cp/decl.c:7716
+#, gcc-internal-format
+msgid "%Jtypedef name may not be a nested-name-specifier"
+msgstr "%Jиме за дефиницију типа не може бити угњеждени-именÑки-наводилац"
+
+#: cp/decl.c:7732
+#, gcc-internal-format
+msgid "ISO C++ forbids nested type %qD with same name as enclosing class"
+msgstr "ИСО Ц++ забрањује угњеждени тип %qD иÑтог имена као и обухватна клаÑа"
+
+#: cp/decl.c:7831
+#, gcc-internal-format
+msgid "qualified function types cannot be used to declare %s functions"
+msgstr "одређени функцијÑки типови не могу бити коришћени за декларацију %s функција"
+
+#: cp/decl.c:7857
+#, gcc-internal-format
+msgid "type qualifiers specified for friend class declaration"
+msgstr "одредбе типа наведене уз декларацију пријатељÑке клаÑе"
+
+#: cp/decl.c:7862
+#, gcc-internal-format
+msgid "%<inline%> specified for friend class declaration"
+msgstr "%<inline%> наведено уз декларацију пријатељÑке клаÑе"
+
+#: cp/decl.c:7870
+#, gcc-internal-format
+msgid "template parameters cannot be friends"
+msgstr "шаблонÑки параметри не могу бити пријатељи"
+
+#: cp/decl.c:7872
+#, gcc-internal-format
+msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>"
+msgstr "декларација пријатеља захтева реч class, тј. %<friend class %T::%D%>"
+
+#: cp/decl.c:7876
+#, gcc-internal-format
+msgid "friend declaration requires class-key, i.e. %<friend %#T%>"
+msgstr "декларација пријатеља захтева реч class, тј. %<friend %#T%>"
+
+#: cp/decl.c:7889
+#, gcc-internal-format
+msgid "trying to make class %qT a friend of global scope"
+msgstr "покушај да Ñе клаÑа %qT учини пријатељем глобалног доÑега"
+
+#: cp/decl.c:7900
+#, gcc-internal-format
+msgid "invalid qualifiers on non-member function type"
+msgstr "неиÑправне одредбе уз тип не-чланÑке функције"
+
+#: cp/decl.c:7919
+#, gcc-internal-format
+msgid "abstract declarator %qT used as declaration"
+msgstr "апÑтрактни декларатор %qT употребљен као декларација"
+
+#: cp/decl.c:7944
+#, gcc-internal-format
+msgid "cannot use %<::%> in parameter declaration"
+msgstr "не може Ñе кориÑтити %<::%> у декларацији параметра"
+
+#. Something like struct S { int N::j; };
+#: cp/decl.c:7989
+#, gcc-internal-format
+msgid "invalid use of %<::%>"
+msgstr "неиÑправна употреба %<::%>"
+
+#: cp/decl.c:8004
+#, gcc-internal-format
+msgid "can't make %qD into a method -- not in a class"
+msgstr "%qD Ñе не може направити методом — није у клаÑи"
+
+#: cp/decl.c:8013
+#, gcc-internal-format
+msgid "function %qD declared virtual inside a union"
+msgstr "функција %qD деклариÑана виртуелном унутар уније"
+
+#: cp/decl.c:8022
+#, gcc-internal-format
+msgid "%qD cannot be declared virtual, since it is always static"
+msgstr "%qD не може бити деклариÑана виртуелном, јер је увек Ñтатичка"
+
+#: cp/decl.c:8040
+#, gcc-internal-format
+msgid "expected qualified name in friend declaration for destructor %qD"
+msgstr "очекивано одређено име у декларацији пријатеља за деÑтруктор %qD"
+
+#: cp/decl.c:8050
+#, gcc-internal-format
+msgid "declaration of %qD as member of %qT"
+msgstr "декларација %qD као члана %qT"
+
+#: cp/decl.c:8126
+#, gcc-internal-format
+msgid "field %qD has incomplete type"
+msgstr "поље %qD има непотпун тип"
+
+#: cp/decl.c:8128
+#, gcc-internal-format
+msgid "name %qT has incomplete type"
+msgstr "име %qT има непотпун тип"
+
+#: cp/decl.c:8137
+#, gcc-internal-format
+msgid " in instantiation of template %qT"
+msgstr " у извођењу шаблона %qT"
+
+#: cp/decl.c:8147
+#, gcc-internal-format
+msgid "%qE is neither function nor member function; cannot be declared friend"
+msgstr "%qE није ни функција ни чланÑка функција; не може Ñе деклариÑати пријатељем"
+
+#. An attempt is being made to initialize a non-static
+#. member. But, from [class.mem]:
+#.
+#. 4 A member-declarator can contain a
+#. constant-initializer only if it declares a static
+#. member (_class.static_) of integral or enumeration
+#. type, see _class.static.data_.
+#.
+#. This used to be relatively common practice, but
+#. 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:8198
+#, gcc-internal-format
+msgid "ISO C++ forbids initialization of member %qD"
+msgstr "ИСО Ц++ забрањује уÑпоÑтављање члана %qD"
+
+#: cp/decl.c:8200
+#, gcc-internal-format
+msgid "making %qD static"
+msgstr "чини %qD Ñтатичним"
+
+#: cp/decl.c:8269
+#, gcc-internal-format
+msgid "storage class %<auto%> invalid for function %qs"
+msgstr "Ñкладишна клаÑа %<auto%> неиÑправна за функцију %qs"
+
+#: cp/decl.c:8271
+#, gcc-internal-format
+msgid "storage class %<register%> invalid for function %qs"
+msgstr "Ñкладишна клаÑа %<register%> неиÑправна за функцију %qs"
+
+#: cp/decl.c:8273
+#, gcc-internal-format
+msgid "storage class %<__thread%> invalid for function %qs"
+msgstr "Ñкладишна клаÑа %<__thread%> неиÑправна за функцију %qs"
+
+#: cp/decl.c:8284
+#, gcc-internal-format
+msgid "%<static%> specified invalid for function %qs declared out of global scope"
+msgstr "%<static%> неиÑправно наведено за функцију %qs деклариÑану изван глобалног доÑега"
+
+#: cp/decl.c:8287
+#, gcc-internal-format
+msgid "%<inline%> specifier invalid for function %qs declared out of global scope"
+msgstr "наводилац %<inline%> није иÑправан за функцију %qs деклариÑану изван глобалног доÑега"
+
+#: cp/decl.c:8295
+#, gcc-internal-format
+msgid "virtual non-class function %qs"
+msgstr "виртуелна не-клаÑна функција %qs"
+
+#: cp/decl.c:8326
+#, gcc-internal-format
+msgid "cannot declare member function %qD to have static linkage"
+msgstr "не може Ñе деклариÑати Ñтатичка повезивоÑÑ‚ за чланÑку функцију %qD"
+
+#. FIXME need arm citation
+#: cp/decl.c:8333
+#, gcc-internal-format
+msgid "cannot declare static function inside another function"
+msgstr "не може Ñе деклариÑати Ñтатичка функција унутар друге функције"
+
+#: cp/decl.c:8362
+#, gcc-internal-format
+msgid "%<static%> may not be used when defining (as opposed to declaring) a static data member"
+msgstr "%<static%> не може бити употребљено при дефиниÑању (наÑупрот деклариÑања) Ñтатичког чланÑког податка"
+
+#: cp/decl.c:8369
+#, gcc-internal-format
+msgid "static member %qD declared %<register%>"
+msgstr "Ñтатички члан %qD деклариÑан као %<register%>"
+
+#: cp/decl.c:8374
+#, gcc-internal-format
+msgid "cannot explicitly declare member %q#D to have extern linkage"
+msgstr "не може Ñе екÑплицитно деклариÑати Ñпољашња повезивоÑÑ‚ за члан %q#D"
+
+#: cp/decl.c:8512
+#, gcc-internal-format
+msgid "default argument for %q#D has type %qT"
+msgstr "подразумевани аргумент за %q#D има тип %qT"
+
+#: cp/decl.c:8515
+#, gcc-internal-format
+msgid "default argument for parameter of type %qT has type %qT"
+msgstr "подразумевани аргумент за параметар типа %qT има тип %qT"
+
+#: cp/decl.c:8532
+#, gcc-internal-format
+msgid "default argument %qE uses local variable %qD"
+msgstr "подразумевани аргумент %qE кориÑти локалну променљиву %qD"
+
+#: cp/decl.c:8600
+#, gcc-internal-format
+msgid "parameter %qD invalidly declared method type"
+msgstr "параметар %qD неиÑправно декларише тип метода"
+
+#: cp/decl.c:8624
+#, gcc-internal-format
+msgid "parameter %qD includes %s to array of unknown bound %qT"
+msgstr "параметар %qD укључује %s у низ непознатих граница %qT"
+
+#. [class.copy]
+#.
+#. A declaration of a constructor for a class X is ill-formed if
+#. its first parameter is of type (optionally cv-qualified) X
+#. and either there are no other parameters or else all other
+#. parameters have default arguments.
+#.
+#. We *don't* complain about member template instantiations that
+#. have this form, though; they can occur as we try to decide
+#. what constructor to use during overload resolution. Since
+#. overload resolution will never prefer such a constructor to
+#. the non-template copy constructor (which is either explicitly
+#. 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:8787
+#, gcc-internal-format
+msgid "invalid constructor; you probably meant %<%T (const %T&)%>"
+msgstr "неиÑправан конÑтруктор; вероватно Ñте миÑлили %<%T (const %T&)%>"
+
+#: cp/decl.c:8908
+#, gcc-internal-format
+msgid "%qD may not be declared within a namespace"
+msgstr "%qD не може бити деклариÑано унутар именÑког проÑтора"
+
+#: cp/decl.c:8910
+#, gcc-internal-format
+msgid "%qD may not be declared as static"
+msgstr "%qD не може бити деклариÑано Ñтатичко"
+
+#: cp/decl.c:8931
+#, gcc-internal-format
+msgid "%qD must be a nonstatic member function"
+msgstr "%qD мора бити неÑтатичка чланÑка функција"
+
+#: cp/decl.c:8940
+#, gcc-internal-format
+msgid "%qD must be either a non-static member function or a non-member function"
+msgstr "%qD мора бити или неÑтатичка чланÑка функција или не-чланÑка функција"
+
+#: cp/decl.c:8963
+#, gcc-internal-format
+msgid "%qD must have an argument of class or enumerated type"
+msgstr "%qD мора имати аргумент клаÑног или набројивог типа"
+
+#: cp/decl.c:9004
+#, gcc-internal-format
+msgid "conversion to %s%s will never use a type conversion operator"
+msgstr "претварање у %s%s никад неће кориÑтити оператор претварања типа"
+
+#. 13.4.0.3
+#: cp/decl.c:9012
+#, gcc-internal-format
+msgid "ISO C++ prohibits overloading operator ?:"
+msgstr "ИСО Ц++ забрањује препуњавање оператора ?:"
+
+#: cp/decl.c:9015
+#, gcc-internal-format
+msgid "%qD must not have variable number of arguments"
+msgstr "%qD не може имати променљив број аргумената"
+
+#: cp/decl.c:9064
+#, gcc-internal-format
+msgid "postfix %qD must take %<int%> as its argument"
+msgstr "поÑтфикÑно %qD мора узимати %<int%> као аргумент"
+
+#: cp/decl.c:9068
+#, gcc-internal-format
+msgid "postfix %qD must take %<int%> as its second argument"
+msgstr "поÑтфикÑно %qD мора узимати %<int%> као други аргумент"
+
+#: cp/decl.c:9075
+#, gcc-internal-format
+msgid "%qD must take either zero or one argument"
+msgstr "%qD мора узимати ниједан или један аргумент"
+
+#: cp/decl.c:9077
+#, gcc-internal-format
+msgid "%qD must take either one or two arguments"
+msgstr "%qD мора узимати један или два аргумента"
+
+#: cp/decl.c:9098
+#, gcc-internal-format
+msgid "prefix %qD should return %qT"
+msgstr "префикÑно %qD треба да враћа %qT"
+
+#: cp/decl.c:9104
+#, gcc-internal-format
+msgid "postfix %qD should return %qT"
+msgstr "поÑтфикÑно %qD треба да враћа %qT"
+
+#: cp/decl.c:9113
+#, gcc-internal-format
+msgid "%qD must take %<void%>"
+msgstr "%qD мора узимати %<void%>"
+
+#: cp/decl.c:9115 cp/decl.c:9123
+#, gcc-internal-format
+msgid "%qD must take exactly one argument"
+msgstr "%qD мора узимати тачно један аргумент"
+
+#: cp/decl.c:9125
+#, gcc-internal-format
+msgid "%qD must take exactly two arguments"
+msgstr "%qD мора узимати тачно два аргумента"
+
+#: cp/decl.c:9133
+#, gcc-internal-format
+msgid "user-defined %qD always evaluates both arguments"
+msgstr "кориÑнички дефиниÑано %qD увек израчунава оба аргумента"
+
+#: cp/decl.c:9147
+#, gcc-internal-format
+msgid "%qD should return by value"
+msgstr "%qD треба да враћа по вредноÑÑ‚"
+
+#: cp/decl.c:9159 cp/decl.c:9162
+#, gcc-internal-format
+msgid "%qD cannot have default arguments"
+msgstr "%qD не може имати подразумеване аргументе"
+
+#: cp/decl.c:9219
+#, gcc-internal-format
+msgid "using template type parameter %qT after %qs"
+msgstr "употреба параметра шаблонÑког типа %qT поÑле %qs"
+
+#: cp/decl.c:9234
+#, gcc-internal-format
+msgid "using typedef-name %qD after %qs"
+msgstr "употреба typedef-имена %qD поÑле %qs"
+
+#: cp/decl.c:9235
+#, gcc-internal-format
+msgid "%q+D has a previous declaration here"
+msgstr "%q+D има претходну декларацију овде"
+
+#: cp/decl.c:9243
+#, gcc-internal-format
+msgid "%qT referred to as %qs"
+msgstr "%qT Ñе помиње као %qs"
+
+#: cp/decl.c:9244 cp/decl.c:9251
+#, gcc-internal-format
+msgid "%q+T has a previous declaration here"
+msgstr "%q+T има претходну декларацију овде"
+
+#: cp/decl.c:9250
+#, gcc-internal-format
+msgid "%qT referred to as enum"
+msgstr "%qT Ñе помиње као набрајање"
+
+#. If a class template appears as elaborated type specifier
+#. without a template header such as:
+#.
+#. template <class T> class C {};
+#. void f(class C); // No template header here
+#.
+#. then the required template argument is missing.
+#: cp/decl.c:9265
+#, gcc-internal-format
+msgid "template argument required for %<%s %T%>"
+msgstr "потребан шаблонÑки аргумент за %<%s %T%>"
+
+#: cp/decl.c:9313 cp/name-lookup.c:2627
+#, gcc-internal-format
+msgid "%qD has the same name as the class in which it is declared"
+msgstr "%qD има иÑто име као и клаÑа у којој је деклариÑано"
+
+#: cp/decl.c:9451
+#, gcc-internal-format
+msgid "use of enum %q#D without previous declaration"
+msgstr "употреба набрајања %q#D без претходне декларације"
+
+#: cp/decl.c:9469
+#, gcc-internal-format
+msgid "redeclaration of %qT as a non-template"
+msgstr "поновљена декларација %qT као не-шаблона"
+
+#: cp/decl.c:9576
+#, gcc-internal-format
+msgid "derived union %qT invalid"
+msgstr "неиÑправна изведена унија %qT"
+
+#: cp/decl.c:9582
+#, gcc-internal-format
+msgid "Java class %qT cannot have multiple bases"
+msgstr "јаванÑка клаÑа %qT не може имати вишеÑтруке оÑнове"
+
+#: cp/decl.c:9590
+#, gcc-internal-format
+msgid "Java class %qT cannot have virtual bases"
+msgstr "јаванÑка клаÑа %qT не може имати виртуелне оÑнове"
+
+#: cp/decl.c:9609
+#, gcc-internal-format
+msgid "base type %qT fails to be a struct or class type"
+msgstr "тип оÑнове %qT није клаÑа или Ñтруктура"
+
+#: cp/decl.c:9642
+#, gcc-internal-format
+msgid "recursive type %qT undefined"
+msgstr "недефиниÑан рекурзивни тип %qT"
+
+#: cp/decl.c:9644
+#, gcc-internal-format
+msgid "duplicate base type %qT invalid"
+msgstr "неиÑправан удвоÑтручен тип оÑнове %qT"
+
+#: cp/decl.c:9714
+#, gcc-internal-format
+msgid "multiple definition of %q#T"
+msgstr "вишеÑтруке дефиниције %q#T"
+
+#: cp/decl.c:9715
+#, gcc-internal-format
+msgid "%Jprevious definition here"
+msgstr "%Jпретходна дефиниција је овде"
+
+#. DR 377
+#.
+#. IF no integral type can represent all the enumerator values, the
+#. enumeration is ill-formed.
+#: cp/decl.c:9854
+#, gcc-internal-format
+msgid "no integral type can represent all of the enumerator values for %qT"
+msgstr "ниједан интегрални тип не може предÑтављати Ñве вредноÑти набрајача за %qT"
+
+#: cp/decl.c:9965
+#, gcc-internal-format
+msgid "enumerator value for %qD not integer constant"
+msgstr "вредноÑÑ‚ набрајача за %qD није целобројна конÑтанта"
+
+#: cp/decl.c:9993
+#, gcc-internal-format
+msgid "overflow in enumeration values at %qD"
+msgstr "преливање у вредноÑтима набрајача код %qD"
+
+#: cp/decl.c:10068
+#, gcc-internal-format
+msgid "return type %q#T is incomplete"
+msgstr "повратни тип %q#T није потпун"
+
+#: cp/decl.c:10178 cp/typeck.c:6380
+#, gcc-internal-format
+msgid "%<operator=%> should return a reference to %<*this%>"
+msgstr "%<operator=%> треба да враћа упућивач на %<*this%>"
+
+#: cp/decl.c:10544
+#, gcc-internal-format
+msgid "parameter %qD declared void"
+msgstr "параметар %qD деклариÑан празним"
+
+#: cp/decl.c:11050
+#, gcc-internal-format
+msgid "invalid member function declaration"
+msgstr "неиÑправна декларација чланÑке функције"
+
+#: cp/decl.c:11065
+#, gcc-internal-format
+msgid "%qD is already defined in class %qT"
+msgstr "%qD је већ дефиниÑано у клаÑи %qT"
+
+#: cp/decl.c:11275
+#, gcc-internal-format
+msgid "static member function %q#D declared with type qualifiers"
+msgstr "Ñтатичка чланÑка функција %q#D деклариÑана Ñа одредбама типа"
+
+#: cp/decl2.c:271
+#, gcc-internal-format
+msgid "name missing for member function"
+msgstr "недоÑтаје име за чланÑку функцију"
+
+#: cp/decl2.c:364 cp/decl2.c:378
+#, gcc-internal-format
+msgid "ambiguous conversion for array subscript"
+msgstr "двоÑмиÑлено претварање за Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð°"
+
+#: cp/decl2.c:372
+#, gcc-internal-format
+msgid "invalid types %<%T[%T]%> for array subscript"
+msgstr "неиÑправни типови %<%T[%T]%> за Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ð·Ð°"
+
+#: cp/decl2.c:415
+#, gcc-internal-format
+msgid "deleting array %q#D"
+msgstr "брише низ %q#D"
+
+#: cp/decl2.c:421
+#, gcc-internal-format
+msgid "type %q#T argument given to %<delete%>, expected pointer"
+msgstr "аргумент типа %q#T дат наредби %<delete%>, очекиван је показивач"
+
+#: cp/decl2.c:433
+#, gcc-internal-format
+msgid "cannot delete a function. Only pointer-to-objects are valid arguments to %<delete%>"
+msgstr "не може Ñе обриÑати функција. Само показивачи на објекте Ñу иÑправни аргументи за %<delete%>"
+
+#: cp/decl2.c:441
+#, gcc-internal-format
+msgid "deleting %qT is undefined"
+msgstr "бриÑање %qT није дефиниÑано"
+
+#. 14.5.2.2 [temp.mem]
+#.
+#. A local class shall not have member templates.
+#: cp/decl2.c:477
+#, gcc-internal-format
+msgid "invalid declaration of member template %q#D in local class"
+msgstr "неиÑправна декларација чланÑког шаблона %q#D у локалној клаÑи"
+
+#: cp/decl2.c:486
+#, gcc-internal-format
+msgid "invalid use of %<virtual%> in template declaration of %q#D"
+msgstr "неиÑправна употреба %<virtual%> у декларацији шаблона %q#D"
+
+#: cp/decl2.c:496 cp/pt.c:3024
+#, gcc-internal-format
+msgid "template declaration of %q#D"
+msgstr "декларација шаблона %q#D"
+
+#: cp/decl2.c:545
+#, gcc-internal-format
+msgid "Java method %qD has non-Java return type %qT"
+msgstr "јаванÑки метод %qD има не-јаванÑки повратни тип %qT"
+
+#: cp/decl2.c:561
+#, gcc-internal-format
+msgid "Java method %qD has non-Java parameter type %qT"
+msgstr "јаванÑки метод %qD има не-јаванÑки параметарÑки тип %qT"
+
+#: cp/decl2.c:666
+#, gcc-internal-format
+msgid "prototype for %q#D does not match any in class %qT"
+msgstr "прототип за %q#D не одговара ниједном у клаÑи %qT"
+
+#: cp/decl2.c:763
+#, gcc-internal-format
+msgid "local class %q#T shall not have static data member %q#D"
+msgstr "локална клаÑа %q#T неће имати Ñтатички чланÑки податак %q#D"
+
+#: cp/decl2.c:771
+#, gcc-internal-format
+msgid "initializer invalid for static member with constructor"
+msgstr "уÑпоÑтављач неиÑправан за Ñтатички члан Ñа конÑтруктором"
+
+#: cp/decl2.c:774
+#, gcc-internal-format
+msgid "(an out of class initialization is required)"
+msgstr "(потребно је уÑпоÑтављање изван клаÑе)"
+
+#: cp/decl2.c:842
+#, gcc-internal-format
+msgid "member %qD conflicts with virtual function table field name"
+msgstr "члан %qD коÑи Ñе Ñа именом поља у табели виртуелних функција"
+
+#: cp/decl2.c:861
+#, gcc-internal-format
+msgid "applying attributes to template parameters is not implemented"
+msgstr "примењивање атрибута на шаблонÑке параметре није имплементирано"
+
+#: cp/decl2.c:871
+#, gcc-internal-format
+msgid "%qD is already defined in %qT"
+msgstr "%qD је већ дефиниÑано у %qT"
+
+#: cp/decl2.c:892
+#, gcc-internal-format
+msgid "initializer specified for static member function %qD"
+msgstr "наведен уÑпоÑтављач за Ñтатичку чланÑку функцију %qD"
+
+#: cp/decl2.c:915
+#, gcc-internal-format
+msgid "field initializer is not constant"
+msgstr "уÑпоÑтављач поља није конÑтанта"
+
+#: cp/decl2.c:942
+#, gcc-internal-format
+msgid "%<asm%> specifiers are not permitted on non-static data members"
+msgstr "наводилац %<asm%> није дозвољен за неÑтатичке чланÑке податке"
+
+#: cp/decl2.c:990
+#, gcc-internal-format
+msgid "cannot declare %qD to be a bit-field type"
+msgstr "%qD Ñе не може деклариÑати као тип битÑког поља"
+
+#: cp/decl2.c:1000
+#, gcc-internal-format
+msgid "cannot declare bit-field %qD with function type"
+msgstr "не може Ñе деклариÑати битÑко поље %qD Ñа функцијÑким типом"
+
+#: cp/decl2.c:1007
+#, gcc-internal-format
+msgid "%qD is already defined in the class %qT"
+msgstr "%qD је већ дефиниÑано у клаÑи %qT"
+
+#: cp/decl2.c:1014
+#, gcc-internal-format
+msgid "static member %qD cannot be a bit-field"
+msgstr "Ñтатички члан %qD не може бити битÑко поље"
+
+#: cp/decl2.c:1059
+#, gcc-internal-format
+msgid "anonymous struct not inside named type"
+msgstr "анонимна Ñтруктура није унутар именованог типа"
+
+#: cp/decl2.c:1142
+#, gcc-internal-format
+msgid "namespace-scope anonymous aggregates must be static"
+msgstr "анонимне Ñкупине у доÑегу именÑког проÑтора морају бити Ñтатичке"
+
+#: cp/decl2.c:1149
+#, gcc-internal-format
+msgid "anonymous union with no members"
+msgstr "анонимна унија без чланова"
+
+#: cp/decl2.c:1185
+#, gcc-internal-format
+msgid "%<operator new%> must return type %qT"
+msgstr "%<operator new%> мора враћати тип %qT"
+
+#: cp/decl2.c:1194
+#, gcc-internal-format
+msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter"
+msgstr "%<operator new%> узима тип %<size_t%> (%qT) као први параметар"
+
+#: cp/decl2.c:1223
+#, gcc-internal-format
+msgid "%<operator delete%> must return type %qT"
+msgstr "%<operator delete%> мора враћати тип %qT"
+
+#: cp/decl2.c:1232
+#, gcc-internal-format
+msgid "%<operator delete%> takes type %qT as first parameter"
+msgstr "%<operator delete%> узима тип %<size_t%> (%qT) као први параметар"
+
+#: cp/decl2.c:3065
+#, gcc-internal-format
+msgid "inline function %q+D used but never defined"
+msgstr "уткана функција %q+D употребљена али недефиниÑана"
+
+#: cp/decl2.c:3219
+#, gcc-internal-format
+msgid "default argument missing for parameter %P of %q+#D"
+msgstr "недоÑтаје подразумевани аргумент за параметар %P од %q+#D"
+
+#. Can't throw a reference.
+#: cp/except.c:267
+#, gcc-internal-format
+msgid "type %qT is disallowed in Java %<throw%> or %<catch%>"
+msgstr "тип %qT је забрањен у јаванÑким %<throw%> и %<catch%>"
+
+#: cp/except.c:278
+#, gcc-internal-format
+msgid "call to Java %<catch%> or %<throw%> with %<jthrowable%> undefined"
+msgstr "позив јаванÑког %<catch%> или %<throw%> без дефиниÑаног %<jthrowable%>"
+
+#. Thrown object must be a Throwable.
+#: cp/except.c:285
+#, gcc-internal-format
+msgid "type %qT is not derived from %<java::lang::Throwable%>"
+msgstr "тип %qT није изведен из %<java::lang::Throwable%>"
+
+#: cp/except.c:348
+#, gcc-internal-format
+msgid "mixing C++ and Java catches in a single translation unit"
+msgstr "мешање Ц++ и јаванÑких хватања у једној иÑтој преводилачкој јединици"
+
+#: cp/except.c:608
+#, gcc-internal-format
+msgid "throwing NULL, which has integral, not pointer type"
+msgstr "баца Ñе NULL, које има интегрални, а не показивачки тип"
+
+#: cp/except.c:631 cp/init.c:1929
+#, gcc-internal-format
+msgid "%qD should never be overloaded"
+msgstr "%qD не треба никада препуњавати"
+
+#: cp/except.c:698
+#, gcc-internal-format
+msgid " in thrown expression"
+msgstr " у баченом изразу"
+
+#: cp/except.c:846
+#, gcc-internal-format
+msgid "expression %qE of abstract class type %qT cannot be used in throw-expression"
+msgstr "израз %qE апÑтрактног клаÑног типа %qT не може Ñе употребити у изразу за бацање"
+
+#: cp/except.c:931
+#, gcc-internal-format
+msgid "%Hexception of type %qT will be caught"
+msgstr "%Hбиће ухваћен изузетак типа %qT"
+
+#: cp/except.c:933
+#, gcc-internal-format
+msgid "%H by earlier handler for %qT"
+msgstr "%H дејÑтвом ранијег руковаоца за %qT"
+
+#: cp/except.c:963
+#, gcc-internal-format
+msgid "%H%<...%> handler must be the last handler for its try block"
+msgstr "%Hруковалац %<...%> мора бити поÑледњи у Ñвом блоку покушаја"
+
+#: cp/friend.c:152
+#, gcc-internal-format
+msgid "%qD is already a friend of class %qT"
+msgstr "%qD је већ пријатељÑка клаÑи %qT"
+
+#: cp/friend.c:228
+#, gcc-internal-format
+msgid "invalid type %qT declared %<friend%>"
+msgstr "неиÑправан тип %qT деклариÑан пријатељÑким"
+
+#. [temp.friend]
+#. Friend declarations shall not declare partial
+#. specializations.
+#. template <class U> friend class T::X<U>;
+#. [temp.friend]
+#. Friend declarations shall not declare partial
+#. specializations.
+#: cp/friend.c:244 cp/friend.c:274
+#, gcc-internal-format
+msgid "partial specialization %qT declared %<friend%>"
+msgstr "делимична Ñпецијализација %qT деклариÑана пријатељÑком"
+
+#: cp/friend.c:252
+#, gcc-internal-format
+msgid "class %qT is implicitly friends with itself"
+msgstr "клаÑа %qT је имплицитно Ñама Ñеби пријатељÑка"
+
+#: cp/friend.c:310
+#, gcc-internal-format
+msgid "%qT is not a member of %qT"
+msgstr "%qT није члан из %qT"
+
+#: cp/friend.c:315
+#, gcc-internal-format
+msgid "%qT is not a member class template of %qT"
+msgstr "%qT није чланÑки шаблон клаÑе из %qT"
+
+#: cp/friend.c:323
+#, gcc-internal-format
+msgid "%qT is not a nested class of %qT"
+msgstr "%qT није угњеждена клаÑа у %qT"
+
+#. template <class T> friend class T;
+#: cp/friend.c:336
+#, gcc-internal-format
+msgid "template parameter type %qT declared %<friend%>"
+msgstr "шаблонÑки параметарÑки тип %qT деклариÑан пријатељÑким"
+
+#. template <class T> friend class A; where A is not a template
+#: cp/friend.c:342
+#, gcc-internal-format
+msgid "%q#T is not a template"
+msgstr "%q#T није шаблон"
+
+#: cp/friend.c:364
+#, gcc-internal-format
+msgid "%qD is already a friend of %qT"
+msgstr "%qD је већ пријатељ од %qT"
+
+#: cp/friend.c:373
+#, gcc-internal-format
+msgid "%qT is already a friend of %qT"
+msgstr "%qT је већ пријатељ од %qT"
+
+#: cp/friend.c:497
+#, gcc-internal-format
+msgid "member %qD declared as friend before type %qT defined"
+msgstr "члан %qD деклариÑан као пријатељ пре него што је тип %qT дефиниÑан"
+
+#: cp/friend.c:553
+#, gcc-internal-format
+msgid "friend declaration %q#D declares a non-template function"
+msgstr "декларација пријатеља %q#D декларише нешаблонÑку функцију"
+
+#: cp/friend.c:557
+#, gcc-internal-format
+msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning"
+msgstr "(ако ниÑте ово намеравали, проверите да ли је шаблон функције већ деклариÑан, и додајте овде <> поÑле имена функције) -Wno-non-template-friend иÑкључује ово упозорење"
+
+#: cp/init.c:327
+#, gcc-internal-format
+msgid "%J%qD should be initialized in the member initialization list"
+msgstr "%J%qD треба да Ñе уÑпоÑтави у лиÑти уÑпоÑтављања чланова"
+
+#: cp/init.c:375
+#, gcc-internal-format
+msgid "%Jdefault-initialization of %q#D, which has reference type"
+msgstr "%Jподразумевано уÑпоÑтављање %q#D, које је упућивачког типа"
+
+#: cp/init.c:381
+#, gcc-internal-format
+msgid "%Juninitialized reference member %qD"
+msgstr "%JнеуÑпоÑтављени упућивачки члан %qD"
+
+#: cp/init.c:384
+#, gcc-internal-format
+msgid "%Juninitialized member %qD with %<const%> type %qT"
+msgstr "%JнеуÑпоÑтављени члан %qD Ñа %<const%> типом %qT"
+
+#: cp/init.c:527
+#, gcc-internal-format
+msgid "%q+D will be initialized after"
+msgstr "%q+D ће бити уÑпоÑтављено поÑле"
+
+#: cp/init.c:530
+#, gcc-internal-format
+msgid "base %qT will be initialized after"
+msgstr "оÑновно %qT ће бити уÑпоÑтављено поÑле"
+
+#: cp/init.c:533
+#, gcc-internal-format
+msgid " %q+#D"
+msgstr " %q+#D"
+
+#: cp/init.c:535
+#, gcc-internal-format
+msgid " base %qT"
+msgstr " оÑновног %qT"
+
+#: cp/init.c:536
+#, gcc-internal-format
+msgid "%J when initialized here"
+msgstr "%J када Ñе уÑпоÑтави овде"
+
+#: cp/init.c:552
+#, gcc-internal-format
+msgid "%Jmultiple initializations given for %qD"
+msgstr "%JвишеÑтрука уÑпоÑтављања дата за %qD"
+
+#: cp/init.c:555
+#, gcc-internal-format
+msgid "%Jmultiple initializations given for base %qT"
+msgstr "%JвишеÑтрука уÑпоÑтављања дата за оÑновно %qT"
+
+#: cp/init.c:622
+#, gcc-internal-format
+msgid "%Jinitializations for multiple members of %qT"
+msgstr "%JуÑпоÑтављања за више чланова из %qT"
+
+#: cp/init.c:684
+#, gcc-internal-format
+msgid "%Jbase class %q#T should be explicitly initialized in the copy constructor"
+msgstr "%JоÑновна клаÑа %q#T треба да Ñе екÑплицитно уÑпоÑтави у копи-конÑтруктору"
+
+#: cp/init.c:908 cp/init.c:927
+#, gcc-internal-format
+msgid "class %qT does not have any field named %qD"
+msgstr "клаÑа %qT нема поље по имену %qD"
+
+#: cp/init.c:914
+#, gcc-internal-format
+msgid "%q#D is a static data member; it can only be initialized at its definition"
+msgstr "%q#D је Ñтатички чланÑки податак; може Ñе уÑпоÑтављати Ñамо при дефиниÑању"
+
+#: cp/init.c:921
+#, gcc-internal-format
+msgid "%q#D is not a non-static data member of %qT"
+msgstr "%q#D је неÑтатички чланÑки податак у %qT"
+
+#: cp/init.c:960
+#, gcc-internal-format
+msgid "unnamed initializer for %qT, which has no base classes"
+msgstr "неименовани уÑпоÑтављач за %qT, која нема оÑновних клаÑа"
+
+#: cp/init.c:968
+#, gcc-internal-format
+msgid "unnamed initializer for %qT, which uses multiple inheritance"
+msgstr "неименовани уÑпоÑтављач за %qT, која кориÑти вишеÑтруко наÑлеђивање"
+
+#: cp/init.c:1014
+#, gcc-internal-format
+msgid "%qD is both a direct base and an indirect virtual base"
+msgstr "%qD је и непоÑредна оÑнова и поÑредна виртуелна оÑнова"
+
+#: cp/init.c:1022
+#, gcc-internal-format
+msgid "type %qT is not a direct or virtual base of %qT"
+msgstr "тип %qT није непоÑредна или виртуелна оÑнова од %qT"
+
+#: cp/init.c:1025
+#, gcc-internal-format
+msgid "type %qT is not a direct base of %qT"
+msgstr "тип %qT није непоÑредна оÑнова од %qT"
+
+#: cp/init.c:1105
+#, gcc-internal-format
+msgid "bad array initializer"
+msgstr "лош уÑпоÑтављач низа"
+
+#: cp/init.c:1304
+#, gcc-internal-format
+msgid "%qT is not an aggregate type"
+msgstr "%qT није ÑкупинÑки тип"
+
+#: cp/init.c:1398
+#, gcc-internal-format
+msgid "qualified type %qT does not match destructor name %<~%T%>"
+msgstr "одређени тип %qT не одговара имену деÑтруктора %<~%T%>"
+
+#: cp/init.c:1406
+#, gcc-internal-format
+msgid "incomplete type %qT does not have member %qD"
+msgstr "непотпун тип %qT нема члан %qD"
+
+#: cp/init.c:1425
+#, gcc-internal-format
+msgid "%qD is not a member of type %qT"
+msgstr "%qD није члан типа %qT"
+
+#: cp/init.c:1444
+#, gcc-internal-format
+msgid "invalid pointer to bit-field %qD"
+msgstr "неиÑправан показивач на битÑко поље %qD"
+
+#: cp/init.c:1546
+#, gcc-internal-format
+msgid "invalid use of non-static member function %qD"
+msgstr "неиÑправна употреба неÑтатичке чланÑке функције %qD"
+
+#: cp/init.c:1552
+#, gcc-internal-format
+msgid "invalid use of non-static data member %qD"
+msgstr "неиÑправна употреба неÑтатичког чланÑког податка %qD"
+
+#: cp/init.c:1687
+#, gcc-internal-format
+msgid "size in array new must have integral type"
+msgstr "величина у низовном new мора бити интегралног типа"
+
+#: cp/init.c:1690
+#, gcc-internal-format
+msgid "zero size array reserves no space"
+msgstr "низ нулте величине не резервише проÑтор"
+
+#: cp/init.c:1698
+#, gcc-internal-format
+msgid "new cannot be applied to a reference type"
+msgstr "new Ñе не може применити на упућивачки тип"
+
+#: cp/init.c:1704
+#, gcc-internal-format
+msgid "new cannot be applied to a function type"
+msgstr "new Ñе не може применити на функцијиÑки тип"
+
+#: cp/init.c:1736
+#, gcc-internal-format
+msgid "call to Java constructor, while %<jclass%> undefined"
+msgstr "позив јаванÑком конÑтруктору док је %<jclass%> недефиниÑано"
+
+#: cp/init.c:1752
+#, gcc-internal-format
+msgid "can't find class$"
+msgstr "не могу да нађем class$"
+
+#: cp/init.c:1880
+#, gcc-internal-format
+msgid "invalid type %<void%> for new"
+msgstr "неиÑправан тип %<void%> за new"
+
+#: cp/init.c:1890
+#, gcc-internal-format
+msgid "uninitialized const in %<new%> of %q#T"
+msgstr "неуÑпоÑтављена конÑтанта у %<new%> за %q#T"
+
+#: cp/init.c:1924
+#, gcc-internal-format
+msgid "call to Java constructor with %qs undefined"
+msgstr "позив јаванÑком конÑтруктору док је %qs недефиниÑано"
+
+#: cp/init.c:1964
+#, gcc-internal-format
+msgid "no suitable %qD found in class %qT"
+msgstr "ниједно погодно %qD није нађено у клаÑи %qT"
+
+#: cp/init.c:1969
+#, gcc-internal-format
+msgid "request for member %qD is ambiguous"
+msgstr "двоÑмиÑлен захтев за чланом %qD"
+
+#: cp/init.c:2109
+#, gcc-internal-format
+msgid "ISO C++ forbids initialization in array new"
+msgstr "ИСО Ц++ забрањује уÑпоÑтављање у низовном new"
+
+#: cp/init.c:2597
+#, gcc-internal-format
+msgid "initializer ends prematurely"
+msgstr "уÑпоÑтављач Ñе прерано окончава"
+
+#: cp/init.c:2652
+#, gcc-internal-format
+msgid "cannot initialize multi-dimensional array with initializer"
+msgstr "у уÑпоÑтављачу Ñе не могу уÑпоÑтављати вишедимензиони низови"
+
+#: cp/init.c:2813
+#, gcc-internal-format
+msgid "possible problem detected in invocation of delete operator:"
+msgstr "откривен могућ проблем у позиву оператора delete:"
+
+#: cp/init.c:2816
+#, gcc-internal-format
+msgid "neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined."
+msgstr "ни деÑтруктор, ни клаÑи поÑебан оператор delete неће бити позван, чак и ако Ñу деклариÑани када Ñе клаÑа дефинише."
+
+#: cp/init.c:2837
+#, gcc-internal-format
+msgid "unknown array size in delete"
+msgstr "непозната величина низа за delete"
+
+#: cp/init.c:3070
+#, gcc-internal-format
+msgid "type to vector delete is neither pointer or array type"
+msgstr "тип уз векторÑко delete није ни показивачки ни низовни"
+
+#: cp/lex.c:468
+#, gcc-internal-format
+msgid "junk at end of #pragma %s"
+msgstr "Ñмеће на крају #pragma %s"
+
+#: cp/lex.c:475
+#, gcc-internal-format
+msgid "invalid #pragma %s"
+msgstr "неиÑправна #pragma %s"
+
+#: cp/lex.c:483
+#, gcc-internal-format
+msgid "#pragma vtable no longer supported"
+msgstr "#pragma vtable више није подржано"
+
+#: cp/lex.c:562
+#, gcc-internal-format
+msgid "#pragma implementation for %qs appears after file is included"
+msgstr "#pragma implementation за %qs појављује Ñе пошто је датотека укључена"
+
+#: cp/lex.c:587
+#, gcc-internal-format
+msgid "junk at end of #pragma GCC java_exceptions"
+msgstr "Ñмеће на крају #pragma GCC java_exceptions"
+
+#: cp/lex.c:601
+#, gcc-internal-format
+msgid "%qD not defined"
+msgstr "%qD није дефиниÑано"
+
+#: cp/lex.c:605
+#, gcc-internal-format
+msgid "%qD was not declared in this scope"
+msgstr "%qD није деклариÑано у овом доÑегу"
+
+#. In a template, it is invalid to write "f()" or "f(3)" if no
+#. declaration of "f" is available. Historically, G++ and most
+#. other compilers accepted that usage since they deferred all name
+#. lookup until instantiation time rather than doing unqualified
+#. name lookup at template definition time; explain to the user what
+#. is going wrong.
+#.
+#. Note that we have the exact wording of the following message in
+#. the manual (trouble.texi, node "Name lookup"), so they need to
+#. be kept in synch.
+#: cp/lex.c:642
+#, gcc-internal-format
+msgid "there are no arguments to %qD that depend on a template parameter, so a declaration of %qD must be available"
+msgstr "%qD нема аргументе који завиÑе од шаблонÑког параметра, тако да декларација %qD мора бити доÑтупна"
+
+#: cp/lex.c:651
+#, gcc-internal-format
+msgid "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the use of an undeclared name is deprecated)"
+msgstr "(ако употребите %<-fpermissive%>, Г++ ће прихватити овакав кôд, али дозвољавање недеклариÑаног имена је превазиђено)"
+
+#: cp/mangle.c:2139
+#, gcc-internal-format
+msgid "call_expr cannot be mangled due to a defect in the C++ ABI"
+msgstr "call_expr не може бити запетљано уÑлед мане у ÐБИју Ц++а"
+
+#: cp/mangle.c:2147
+#, gcc-internal-format
+msgid "zero-operand casts cannot be mangled due to a defect in the C++ ABI"
+msgstr "претапања без операнада не могу бити запетљана уÑлед мане у ÐБИју Ц++а"
+
+#: cp/mangle.c:2197
+#, gcc-internal-format
+msgid "omitted middle operand to %<?:%> operand cannot be mangled"
+msgstr "изоÑтављени Ñредњи операнд у %<?:%> не може бити запетљан"
+
+#: cp/mangle.c:2507
+#, gcc-internal-format
+msgid "the mangled name of %qD will change in a future version of GCC"
+msgstr "запетљано име за %qD биће измењено у будућим верзијама ГЦЦа"
+
+#: cp/method.c:457
+#, gcc-internal-format
+msgid "generic thunk code fails for method %q#D which uses %<...%>"
+msgstr "генерички кôд Ñмрза не пролази за метод %q#D који кориÑти %<...%>"
+
+#: cp/method.c:693
+#, gcc-internal-format
+msgid "non-static const member %q#D, can't use default assignment operator"
+msgstr "неÑтатички конÑтантни члан %q#D, не може Ñе кориÑтити подразумевани оператор доделе"
+
+#: cp/method.c:699
+#, gcc-internal-format
+msgid "non-static reference member %q#D, can't use default assignment operator"
+msgstr "неÑтатички упућивачки члан %q#D, не може Ñе кориÑтити подразумевани оператор доделе"
+
+#: cp/method.c:811
+#, gcc-internal-format
+msgid "%Hsynthesized method %qD first required here "
+msgstr "%HÑамоÑачињени метод %qD прво захтеван овде "
+
+#: cp/method.c:1140
+#, gcc-internal-format
+msgid "vtable layout for class %qT may not be ABI-compliantand may change in a future version of GCC due to implicit virtual destructor"
+msgstr "раÑпоред в-табеле за клаÑу %qT можда не поштује ÐБИ, и може Ñе изменити у будућим верзијама ГЦЦа уÑлед имплицитног виртуелног деÑтруктора"
+
+#: cp/name-lookup.c:697
+#, gcc-internal-format
+msgid "redeclaration of %<wchar_t%> as %qT"
+msgstr "поновљена декларација %<wchar_t%> као %qT"
+
+#. A redeclaration of main, but not a duplicate of the
+#. previous one.
+#.
+#. [basic.start.main]
+#.
+#. This function shall not be overloaded.
+#: cp/name-lookup.c:727
+#, gcc-internal-format
+msgid "invalid redeclaration of %q+D"
+msgstr "неиÑправна поновљена декларација %q+D"
+
+#: cp/name-lookup.c:728
+#, gcc-internal-format
+msgid "as %qD"
+msgstr "као %qD"
+
+#: cp/name-lookup.c:816
+#, gcc-internal-format
+msgid "type mismatch with previous external decl of %q#D"
+msgstr "неÑлагање типа Ñа претходном Ñпољашњом декларацијом %q#D"
+
+#: cp/name-lookup.c:817
+#, gcc-internal-format
+msgid "previous external decl of %q+#D"
+msgstr "претходна Ñпољашња декларација %q+#D"
+
+#: cp/name-lookup.c:908
+#, gcc-internal-format
+msgid "extern declaration of %q#D doesn't match"
+msgstr "Ñпољашња декларација %q#D не Ñлаже Ñе"
+
+#: cp/name-lookup.c:909
+#, gcc-internal-format
+msgid "global declaration %q+#D"
+msgstr "глобална декларација %q+#D"
+
+#: cp/name-lookup.c:946 cp/name-lookup.c:953
+#, gcc-internal-format
+msgid "declaration of %q#D shadows a parameter"
+msgstr "декларација %q#D заклања параметар"
+
+#. Location of previous decl is not useful in this case.
+#: cp/name-lookup.c:978
+#, gcc-internal-format
+msgid "declaration of %qD shadows a member of 'this'"
+msgstr "декларација %qD заклања члан у „this“"
+
+#: cp/name-lookup.c:984
+#, gcc-internal-format
+msgid "declaration of %qD shadows a previous local"
+msgstr "декларација %qD заклања претходну локалну"
+
+#: cp/name-lookup.c:991
+#, gcc-internal-format
+msgid "declaration of %qD shadows a global declaration"
+msgstr "декларација %qD заклања глобалну декларацију"
+
+#: cp/name-lookup.c:1114
+#, gcc-internal-format
+msgid "name lookup of %qD changed"
+msgstr "измењена потрага имена за %qD"
+
+#: cp/name-lookup.c:1115
+#, gcc-internal-format
+msgid " matches this %q+D under ISO standard rules"
+msgstr " одговара овом %q+D по правилима ИСО Ñтандарда"
+
+#: cp/name-lookup.c:1117
+#, gcc-internal-format
+msgid " matches this %q+D under old rules"
+msgstr " одговара овом %q+D по Ñтарим правилима"
+
+#: cp/name-lookup.c:1135 cp/name-lookup.c:1143
+#, gcc-internal-format
+msgid "name lookup of %qD changed for new ISO %<for%> scoping"
+msgstr "измењена потрага %qD према новом доÑезању ИСО %<for%>"
+
+#: cp/name-lookup.c:1137
+#, gcc-internal-format
+msgid " cannot use obsolete binding at %q+D because it has a destructor"
+msgstr " не може Ñе кориÑтити заÑтарело везивање код %q+D јер има деÑтруктор"
+
+#: cp/name-lookup.c:1145
+#, gcc-internal-format
+msgid " using obsolete binding at %q+D"
+msgstr " кориÑти Ñе заÑтарело везивање код %q+D"
+
+#: cp/name-lookup.c:1198
+#, gcc-internal-format
+msgid "%s %s(%E) %p %d\n"
+msgstr "%s %s(%E) %p %d\n"
+
+#: cp/name-lookup.c:1201
+#, gcc-internal-format
+msgid "%s %s %p %d\n"
+msgstr "%s %s %p %d\n"
+
+#: cp/name-lookup.c:1327
+#, gcc-internal-format
+msgid "XXX is_class_level != (current_scope == class_scope)\n"
+msgstr "XXX is_class_level != (current_scope == class_scope)\n"
+
+#: cp/name-lookup.c:1885
+#, gcc-internal-format
+msgid "%q#D hides constructor for %q#T"
+msgstr "%q#D Ñкрива конÑтруктор за %q#T"
+
+#: cp/name-lookup.c:1901
+#, gcc-internal-format
+msgid "%q#D conflicts with previous using declaration %q#D"
+msgstr "%q#D Ñе коÑи Ñа претходном декларацијом употребе %q#D"
+
+#: cp/name-lookup.c:1921
+#, gcc-internal-format
+msgid "previous non-function declaration %q+#D"
+msgstr "претходна нефункцијÑка декларација %q+#D"
+
+#: cp/name-lookup.c:1922
+#, gcc-internal-format
+msgid "conflicts with function declaration %q#D"
+msgstr "коÑи Ñе Ñа функцијÑком декларацијом %q#D"
+
+#. It's a nested name with template parameter dependent scope.
+#. This can only be using-declaration for class member.
+#: cp/name-lookup.c:2000 cp/name-lookup.c:2025
+#, gcc-internal-format
+msgid "%qT is not a namespace"
+msgstr "%qT није именÑки проÑтор"
+
+#. 7.3.3/5
+#. A using-declaration shall not name a template-id.
+#: cp/name-lookup.c:2010
+#, gcc-internal-format
+msgid "a using-declaration cannot specify a template-id. Try %<using %D%>"
+msgstr "декларација употребе не може навеÑти ид. шаблона. Покушајте %<using %D%>"
+
+#: cp/name-lookup.c:2017
+#, gcc-internal-format
+msgid "namespace %qD not allowed in using-declaration"
+msgstr "именÑки проÑтор %qD није дозвоље у декларацији употребе"
+
+#: cp/name-lookup.c:2053
+#, gcc-internal-format
+msgid "%qD not declared"
+msgstr "%qD није деклариÑано"
+
+#: cp/name-lookup.c:2074 cp/name-lookup.c:2111 cp/name-lookup.c:2145
+#, gcc-internal-format
+msgid "%qD is already declared in this scope"
+msgstr "%qD је већ деклариÑано у овом доÑегу"
+
+#: cp/name-lookup.c:2151
+#, gcc-internal-format
+msgid "using declaration %qD introduced ambiguous type %qT"
+msgstr "декларација употребе %qD уводи двоÑмиÑлен тип %qT"
+
+#: cp/name-lookup.c:2743
+#, gcc-internal-format
+msgid "using-declaration for non-member at class scope"
+msgstr "декларација употребе за не-члан у доÑегу клаÑе"
+
+#: cp/name-lookup.c:2750
+#, gcc-internal-format
+msgid "%<%T::%D%> names destructor"
+msgstr "%<%T::%D%> именује деÑтруктор"
+
+#: cp/name-lookup.c:2755
+#, gcc-internal-format
+msgid "%<%T::%D%> names constructor"
+msgstr "%<%T::%D%> именује конÑтруктор"
+
+#: cp/name-lookup.c:2760
+#, gcc-internal-format
+msgid "%<%T::%D%> names constructor in %qT"
+msgstr "%<%T::%D%> именује конÑтруктор у %qT"
+
+#: cp/name-lookup.c:2809
+#, gcc-internal-format
+msgid "no members matching %<%T::%D%> in %q#T"
+msgstr "нема члана који одговара %<%T::%D%> у %q#T"
+
+#: cp/name-lookup.c:2877
+#, gcc-internal-format
+msgid "declaration of %qD not in a namespace surrounding %qD"
+msgstr "декларација %qD није у именÑком проÑтору који окружује %qD"
+
+#: cp/name-lookup.c:2885
+#, gcc-internal-format
+msgid "explicit qualification in declaration of %qD"
+msgstr "екÑплицитна одредба у декларацији %qD"
+
+#: cp/name-lookup.c:2925
+#, gcc-internal-format
+msgid "%qD should have been declared inside %qD"
+msgstr "%qD треба да је деклариÑано унутар %qD"
+
+#: cp/name-lookup.c:2987
+#, gcc-internal-format
+msgid "namespace alias %qD not allowed here, assuming %qD"
+msgstr "Ð°Ð»Ð¸Ñ˜Ð°Ñ Ð¸Ð¼ÐµÐ½Ñког проÑтора %qD није дозвољен овде, претпоÑтављам %qD"
+
+#: cp/name-lookup.c:3294
+#, gcc-internal-format
+msgid "strong using only meaningful at namespace scope"
+msgstr "јако using има ÑмиÑла Ñамо у доÑегу именÑког проÑтора"
+
+#: cp/name-lookup.c:3301
+#, gcc-internal-format
+msgid "%qD attribute directive ignored"
+msgstr "атрибутÑка директива %qD игнориÑана"
+
+#: cp/name-lookup.c:3451
+#, gcc-internal-format
+msgid "%qD denotes an ambiguous type"
+msgstr "%qD означава двоÑмиÑлен тип"
+
+#: cp/name-lookup.c:3452
+#, gcc-internal-format
+msgid "%J first type here"
+msgstr "%J први тип овде"
+
+#: cp/name-lookup.c:3453
+#, gcc-internal-format
+msgid "%J other type here"
+msgstr "%J други тип овде"
+
+#. This happens for A::B where B is a template, and there are no
+#. template arguments.
+#: cp/name-lookup.c:3563 cp/parser.c:4497 cp/typeck.c:1807
+#, gcc-internal-format
+msgid "invalid use of %qD"
+msgstr "неиÑправна употреба %qD"
+
+#: cp/name-lookup.c:3603
+#, gcc-internal-format
+msgid "%<%D::%D%> is not a template"
+msgstr "%<%D::%D%> није шаблон"
+
+#: cp/name-lookup.c:3618
+#, gcc-internal-format
+msgid "%qD undeclared in namespace %qD"
+msgstr "%qD није деклариÑано у именÑком проÑтору %qD"
+
+#: cp/name-lookup.c:4255
+#, gcc-internal-format
+msgid "%q+D is not a function,"
+msgstr "%q+D није функција,"
+
+#: cp/name-lookup.c:4256
+#, gcc-internal-format
+msgid " conflict with %q+D"
+msgstr " коÑи Ñе Ñа %q+D"
+
+#: cp/name-lookup.c:5090
+#, gcc-internal-format
+msgid "XXX entering pop_everything ()\n"
+msgstr "XXX entering pop_everything ()\n"
+
+#: cp/name-lookup.c:5099
+#, gcc-internal-format
+msgid "XXX leaving pop_everything ()\n"
+msgstr "XXX leaving pop_everything ()\n"
+
+#: cp/parser.c:1875
+#, gcc-internal-format
+msgid "minimum/maximum operators are deprecated"
+msgstr "оператори минимума/макÑимума Ñу превазиђени"
+
+#: cp/parser.c:1895
+#, gcc-internal-format
+msgid "%<#pragma%> is not allowed here"
+msgstr "%<#pragma%> није дозвољена овде"
+
+#: cp/parser.c:1924
+#, gcc-internal-format
+msgid "%<%D::%D%> has not been declared"
+msgstr "%<%D::%D%> није деклариÑано"
+
+#: cp/parser.c:1927 cp/semantics.c:2405
+#, gcc-internal-format
+msgid "%<::%D%> has not been declared"
+msgstr "%<::%D%> није деклариÑано"
+
+#: cp/parser.c:1930
+#, gcc-internal-format
+msgid "request for member %qD in non-class type %qT"
+msgstr "захтев за члан %qD у неклаÑном типу %qT"
+
+#: cp/parser.c:1933
+#, gcc-internal-format
+msgid "%<%T::%D%> has not been declared"
+msgstr "%<%T::%D%> није деклариÑано"
+
+#: cp/parser.c:1936
+#, gcc-internal-format
+msgid "%qD has not been declared"
+msgstr "%qD није деклариÑано"
+
+#: cp/parser.c:1939
+#, gcc-internal-format
+msgid "%<%D::%D%> %s"
+msgstr "%<%D::%D%> %s"
+
+#: cp/parser.c:1941
+#, gcc-internal-format
+msgid "%<::%D%> %s"
+msgstr "%<::%D%> %s"
+
+#: cp/parser.c:1943
+#, gcc-internal-format
+msgid "%qD %s"
+msgstr "%qD %s"
+
+#: cp/parser.c:1995
+#, gcc-internal-format
+msgid "new types may not be defined in a return type"
+msgstr "не могу Ñе дефиниÑати нови типови у повратном типу"
+
+#: cp/parser.c:1996
+#, gcc-internal-format
+msgid "(perhaps a semicolon is missing after the definition of %qT)"
+msgstr "(можда недоÑтаје тачка-зарез поÑле дефиниције %qT)"
+
+#: cp/parser.c:2015 cp/parser.c:3698 cp/pt.c:4402
+#, gcc-internal-format
+msgid "%qT is not a template"
+msgstr "%qT није шаблон"
+
+#: cp/parser.c:2017
+#, gcc-internal-format
+msgid "%qE is not a template"
+msgstr "%qE није шаблон"
+
+#: cp/parser.c:2019
+#, gcc-internal-format
+msgid "invalid template-id"
+msgstr "неиÑправан ид. шаблона"
+
+#: cp/parser.c:2048
+#, gcc-internal-format
+msgid "%s cannot appear in a constant-expression"
+msgstr "%s не може да Ñе јави у конÑтантном изразу"
+
+#: cp/parser.c:2073
+#, gcc-internal-format
+msgid "invalid use of template-name %qE without an argument list"
+msgstr "неиÑправна употреба шаблонÑког имена %qE без лиÑте аргумената"
+
+#. Issue an error message.
+#: cp/parser.c:2078
+#, gcc-internal-format
+msgid "%qE does not name a type"
+msgstr "%qE не именује тип"
+
+#: cp/parser.c:2110
+#, gcc-internal-format
+msgid "(perhaps %<typename %T::%E%> was intended)"
+msgstr "(можда је намера била %<typename %T::%E%>)"
+
+#: cp/parser.c:2125
+#, gcc-internal-format
+msgid "%qE in namespace %qE does not name a type"
+msgstr "%qE у именÑком проÑтору %qE не именује тип"
+
+#: cp/parser.c:2128
+#, gcc-internal-format
+msgid "%qE in class %qT does not name a type"
+msgstr "%qE у клаÑи %qT не именује тип"
+
+#: cp/parser.c:2848
+#, gcc-internal-format
+msgid "ISO C++ forbids braced-groups within expressions"
+msgstr "ИСО Ц++ забрањује витичаÑто заграђене групе унутар израза"
+
+#: cp/parser.c:2857
+#, gcc-internal-format
+msgid "statement-expressions are allowed only inside functions"
+msgstr "наредбени изрази дозвољени Ñу Ñамо унутар функција"
+
+#: cp/parser.c:2908
+#, gcc-internal-format
+msgid "%<this%> may not be used in this context"
+msgstr "%<this%> Ñе не може употребити у овом контекÑту"
+
+#: cp/parser.c:3059
+#, gcc-internal-format
+msgid "local variable %qD may not appear in this context"
+msgstr "локална променљива %qD не може Ñе појавити у овом контекÑту"
+
+#: cp/parser.c:3435
+#, gcc-internal-format
+msgid "declaration of %<~%T%> as member of %qT"
+msgstr "декларација %<~%T%> као члана у %qT"
+
+#: cp/parser.c:3448
+#, gcc-internal-format
+msgid "typedef-name %qD used as destructor declarator"
+msgstr "typedef-име %qD употребљено као декларатор деÑтруктора"
+
+#: cp/parser.c:3657 cp/parser.c:12711 cp/parser.c:14842
+#, gcc-internal-format
+msgid "reference to %qD is ambiguous"
+msgstr "двоÑмиÑлено упућивање на %qD"
+
+#: cp/parser.c:3699 cp/typeck.c:1878 cp/typeck.c:1898
+#, gcc-internal-format
+msgid "%qD is not a template"
+msgstr "%qD није шаблон"
+
+#: cp/parser.c:4090
+#, gcc-internal-format
+msgid "ISO C++ forbids compound-literals"
+msgstr "ИСО Ц++ забрањује Ñложене конÑтанте"
+
+#: cp/parser.c:4422
+#, gcc-internal-format
+msgid "%qE does not have class type"
+msgstr "%qE нема клаÑни тип"
+
+#: cp/parser.c:5021
+#, gcc-internal-format
+msgid "array bound forbidden after parenthesized type-id"
+msgstr "граница низа забрањена је поÑле заграђеног ид. типа"
+
+#: cp/parser.c:5022
+#, gcc-internal-format
+msgid "try removing the parentheses around the type-id"
+msgstr "покушајте да уклоните заграде око ид. типа"
+
+#: cp/parser.c:5224
+#, gcc-internal-format
+msgid "expression in new-declarator must have integral or enumeration type"
+msgstr "израз у декларатору new мора имати интегрални или набројиви тип"
+
+#: cp/parser.c:5413
+#, gcc-internal-format
+msgid "use of old-style cast"
+msgstr "употреба ÑтаровремÑког претапања"
+
+#: cp/parser.c:6197
+#, gcc-internal-format
+msgid "case label %qE not within a switch statement"
+msgstr "етикета Ñлучаја %qE ван наредбе пребацивања"
+
+#: cp/parser.c:6746
+#, gcc-internal-format
+msgid "ISO C++ forbids computed gotos"
+msgstr "ИСО Ц++ забрањује рачунÑко goto"
+
+#: cp/parser.c:6871
+#, gcc-internal-format
+msgid "extra %<;%>"
+msgstr "Ñувишно %<;%>"
+
+#: cp/parser.c:7205
+#, gcc-internal-format
+msgid "mixing declarations and function-definitions is forbidden"
+msgstr "забрањено је мешање декларација и дефиниција функција"
+
+#: cp/parser.c:7514
+#, gcc-internal-format
+msgid "ISO C++ does not support %<long long%>"
+msgstr "ИСО Ц++ не подржава %<long long%>"
+
+#: cp/parser.c:7534
+#, gcc-internal-format
+msgid "duplicate %qs"
+msgstr "удвоÑтручено %qs"
+
+#: cp/parser.c:7541
+#, gcc-internal-format
+msgid "class definition may not be declared a friend"
+msgstr "дефиниција клаÑе не може бити деклариÑана пријатељем"
+
+#: cp/parser.c:7855
+#, gcc-internal-format
+msgid "only constructors take base initializers"
+msgstr "Ñамо конÑтруктори узимају уÑпоÑтављаче оÑнове"
+
+#: cp/parser.c:7907
+#, gcc-internal-format
+msgid "anachronistic old-style base class initializer"
+msgstr "анахрониÑтични ÑтаровремÑки уÑпоÑтављач оÑновне клаÑе"
+
+#: cp/parser.c:7951
+#, gcc-internal-format
+msgid "keyword %<typename%> not allowed in this context (a qualified member initializer is implicitly a type)"
+msgstr "кључна реч %<typename%> није дозвољена у овом контекÑту (уÑпоÑтављач одређеног члана имплицитно је тип)"
+
+#. Warn that we do not support `export'.
+#: cp/parser.c:8317
+#, gcc-internal-format
+msgid "keyword %<export%> not implemented, and will be ignored"
+msgstr "кључна реч %<export%> није имплементирана, игнорише Ñе"
+
+#. Otherwise, emit an error about the invalid digraph, but continue
+#. parsing because we got our argument list.
+#: cp/parser.c:8694
+#, gcc-internal-format
+msgid "%<<::%> cannot begin a template-argument list"
+msgstr "%<<::%> не може започети лиÑту шаблонÑких аргумената"
+
+#: cp/parser.c:8695
+#, gcc-internal-format
+msgid "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> and %<::%>"
+msgstr "%<<:%> је другачије напиÑано %<[%>. Убаците размак између %<<%> и %<::%>"
+
+#: cp/parser.c:8702
+#, gcc-internal-format
+msgid "(if you use -fpermissive G++ will accept your code)"
+msgstr "(Г++ ће прихватити ово ако задате -fpermissive)"
+
+#: cp/parser.c:8766
+#, gcc-internal-format
+msgid "parse error in template argument list"
+msgstr "грешка у рашчлањивању лиÑте шаблонÑких аргумената"
+
+#. Explain what went wrong.
+#: cp/parser.c:8879
+#, gcc-internal-format
+msgid "non-template %qD used as template"
+msgstr "%qD употребљено као шаблон, а није"
+
+#: cp/parser.c:8880
+#, gcc-internal-format
+msgid "use %<%T::template %D%> to indicate that it is a template"
+msgstr "употребите %<%T::template %D%> да назначите да је шаблон"
+
+#: cp/parser.c:9393
+#, gcc-internal-format
+msgid "template specialization with C linkage"
+msgstr "Ñпецијализација шаблона Ñа Ц повезивошћу"
+
+#: cp/parser.c:9500 cp/parser.c:15498
+#, gcc-internal-format
+msgid "template declaration of %qs"
+msgstr "декларација шаблона %qs"
+
+#: cp/parser.c:9973
+#, gcc-internal-format
+msgid "using %<typename%> outside of template"
+msgstr "употреба %<typename%> изван шаблона"
+
+#: cp/parser.c:10170
+#, gcc-internal-format
+msgid "type attributes are honored only at type definition"
+msgstr "атрибути типа поштују Ñе Ñамо при дефиницији типа"
+
+#: cp/parser.c:10372
+#, gcc-internal-format
+msgid "%qD is not a namespace-name"
+msgstr "%qD није име именÑког проÑтора"
+
+#. [namespace.udecl]
+#.
+#. A using declaration shall not name a template-id.
+#: cp/parser.c:10562
+#, gcc-internal-format
+msgid "a template-id may not appear in a using-declaration"
+msgstr "ид. шаблона не може да Ñе јави у декларацији употребе"
+
+#: cp/parser.c:10901
+#, gcc-internal-format
+msgid "an asm-specification is not allowed on a function-definition"
+msgstr "навод asm није дозвољен на дефиницији функције"
+
+#: cp/parser.c:10903
+#, gcc-internal-format
+msgid "attributes are not allowed on a function-definition"
+msgstr "атрибути ниÑу дозвољени на дефиницији функције"
+
+#: cp/parser.c:11050
+#, gcc-internal-format
+msgid "attributes after parenthesized initializer ignored"
+msgstr "игноришу Ñе атрибути поÑле заграђеног уÑпоÑтављача"
+
+#: cp/parser.c:11430
+#, gcc-internal-format
+msgid "array bound is not an integer constant"
+msgstr "граница низа није целобројна конÑтанта"
+
+#: cp/parser.c:11501
+#, gcc-internal-format
+msgid "%<%T::%D%> is not a type"
+msgstr "%<%T::%D%> није тип"
+
+#: cp/parser.c:11526
+#, gcc-internal-format
+msgid "invalid use of constructor as a template"
+msgstr "неиÑправна употреба конÑтруктора као шаблона"
+
+#: cp/parser.c:11527
+#, gcc-internal-format
+msgid "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified name"
+msgstr "употреба %<%T::%D%> умеÑто %<%T::%D%> за именовање конÑтруктора у одређеном имену"
+
+#: cp/parser.c:11761
+#, gcc-internal-format
+msgid "duplicate cv-qualifier"
+msgstr "удвоÑтручена кн-одредба"
+
+#: cp/parser.c:12297
+#, gcc-internal-format
+msgid "file ends in default argument"
+msgstr "датотека Ñе завршава подразумеваним аргументом"
+
+#: cp/parser.c:12370
+#, gcc-internal-format
+msgid "deprecated use of default argument for parameter of non-function"
+msgstr "превазиђена употреба подразумеваног аргумента као параметра не-функције"
+
+#: cp/parser.c:12373
+#, gcc-internal-format
+msgid "default arguments are only permitted for function parameters"
+msgstr "подразумевани аргументи Ñу дозвољени Ñамо за параметре функција"
+
+#: cp/parser.c:13136
+#, gcc-internal-format
+msgid "invalid class name in declaration of %qD"
+msgstr "неиÑправно име клаÑе у декларацији %qD"
+
+#: cp/parser.c:13147
+#, gcc-internal-format
+msgid "declaration of %qD in %qD which does not enclose %qD"
+msgstr "декларација %qD у %qD која не обухвата %qD"
+
+#: cp/parser.c:13160
+#, gcc-internal-format
+msgid "extra qualification ignored"
+msgstr "Ñувишне одредбе Ñе игноришу"
+
+#: cp/parser.c:13171
+#, gcc-internal-format
+msgid "an explicit specialization must be preceded by %<template <>%>"
+msgstr "екÑплицитној Ñпецијализацији мора претходити %<template <>%>"
+
+#: cp/parser.c:13264
+#, gcc-internal-format
+msgid "previous definition of %q+#T"
+msgstr "претходна дефиниција %q+#T"
+
+#: cp/parser.c:13495
+#, gcc-internal-format
+msgid "%Hextra %<;%>"
+msgstr "%HÑувишно %<;%>"
+
+#: cp/parser.c:13513
+#, gcc-internal-format
+msgid "a class-key must be used when declaring a friend"
+msgstr "при декларацији пријатеља мора бити употребљена кључна реч class"
+
+#: cp/parser.c:13527
+#, gcc-internal-format
+msgid "friend declaration does not name a class or function"
+msgstr "декларација пријатеља не именује ни клаÑу ни функцију"
+
+#: cp/parser.c:13705
+#, gcc-internal-format
+msgid "pure-specifier on function-definition"
+msgstr "наводилац pure на дефиницији функције"
+
+#: cp/parser.c:13978
+#, gcc-internal-format
+msgid "keyword %<typename%> not allowed outside of templates"
+msgstr "кључна реч %<typename%> није дозвољена изван шаблона"
+
+#: cp/parser.c:13980
+#, gcc-internal-format
+msgid "keyword %<typename%> not allowed in this context (the base class is implicitly a type)"
+msgstr "кључна реч %<typename%> није дозвољена у овом контекÑту (оÑновна клаÑа је имплицитно тип)"
+
+#: cp/parser.c:14255
+#, gcc-internal-format
+msgid "invalid catch parameter"
+msgstr "неиÑправан параметар хватања"
+
+#: cp/parser.c:15011
+#, gcc-internal-format
+msgid "too few template-parameter-lists"
+msgstr "премало лиÑта параметара шаблона"
+
+#. Otherwise, there are too many template parameter lists. We have
+#. something like:
+#.
+#. template <class T> template <class U> void S::f();
+#: cp/parser.c:15026
+#, gcc-internal-format
+msgid "too many template-parameter-lists"
+msgstr "превише лиÑта шаблонÑких параметера"
+
+#. Skip the entire function.
+#: cp/parser.c:15250
+#, gcc-internal-format
+msgid "invalid function declaration"
+msgstr "неиÑправна декларација функције"
+
+#. Issue an error message.
+#: cp/parser.c:15287
+#, gcc-internal-format
+msgid "named return values are no longer supported"
+msgstr "именоване повратне вредноÑти ниÑу више подржане"
+
+#: cp/parser.c:15352
+#, gcc-internal-format
+msgid "template with C linkage"
+msgstr "шаблон Ñа Ц повезивошћу"
+
+#: cp/parser.c:15715
+#, gcc-internal-format
+msgid "%H%<>>%> should be %<> >%> within a nested template argument list"
+msgstr "%H%<>>%> треба да је %<> >%> унутар угњеждене лиÑте шаблонÑких аргумената"
+
+#: cp/parser.c:15730
+#, gcc-internal-format
+msgid "spurious %<>>%>, use %<>%> to terminate a template argument list"
+msgstr "Ñувишно %<>>%>, кориÑтите %<>%> за затварање лиÑте шаблонÑких аргумената"
+
+#: cp/parser.c:16290
+#, gcc-internal-format
+msgid "%qs tag used in naming %q#T"
+msgstr "ознака %qs употребљена при именовању %q#T"
+
+#: cp/parser.c:16311
+#, gcc-internal-format
+msgid "%qD redeclared with different access"
+msgstr "%qD поново деклариÑано Ñа другачијим приÑтупом"
+
+#: cp/parser.c:16328
+#, gcc-internal-format
+msgid "%<template%> (as a disambiguator) is only allowed within templates"
+msgstr "%<template%> (као разјашњење двоÑмиÑленоÑти) дозвољено је Ñамо унутар шаблона"
+
+#: cp/parser.c:16565 cp/parser.c:17488 cp/parser.c:17619
+#, gcc-internal-format
+msgid "misplaced %<@%D%> Objective-C++ construct"
+msgstr "конÑтрукција %<@%D%> објективног Ц++а на погрешном меÑту"
+
+#: cp/parser.c:16706
+#, gcc-internal-format
+msgid "%<@encode%> must specify a type as an argument"
+msgstr "%<@encode%> мора навеÑти тип као аргумент"
+
+#: cp/parser.c:17021
+#, gcc-internal-format
+msgid "invalid Objective-C++ selector name"
+msgstr "неиÑправно име Ñелектора објективног Ц++а"
+
+#: cp/parser.c:17352
+#, gcc-internal-format
+msgid "identifier expected after %<@protocol%>"
+msgstr "очекиван је идентификатор поÑле %<@protocol%>"
+
+#: cp/parser.c:17642
+#, gcc-internal-format
+msgid "inter-module optimizations not implemented for C++"
+msgstr "унутармодулÑке оптимизације ниÑу имплеметиране за Ц++"
+
+#: cp/pt.c:239
+#, gcc-internal-format
+msgid "data member %qD cannot be a member template"
+msgstr "чланÑки податак %qD не може бити чланÑки шаблон"
+
+#: cp/pt.c:251
+#, gcc-internal-format
+msgid "invalid member template declaration %qD"
+msgstr "неиÑправна декларација чланÑког шаблона %qD"
+
+#: cp/pt.c:573
+#, gcc-internal-format
+msgid "explicit specialization in non-namespace scope %qD"
+msgstr "екÑплицитна Ñпецијализација у не-именÑкопроÑторном доÑегу %qD"
+
+#: cp/pt.c:584
+#, gcc-internal-format
+msgid "enclosing class templates are not explicitly specialized"
+msgstr "обухватајући шаблони клаÑа не бивају екÑплицитно Ñпецијализовани"
+
+#: cp/pt.c:668
+#, gcc-internal-format
+msgid "specialization of %qD in different namespace"
+msgstr "Ñпецијализација %qD у различитом именÑком проÑтору"
+
+#: cp/pt.c:669 cp/pt.c:759
+#, gcc-internal-format
+msgid " from definition of %q+#D"
+msgstr " из дефиниције %q+#D"
+
+#: cp/pt.c:686
+#, gcc-internal-format
+msgid "explicit instantiation of %qD in namespace %qD (which does not enclose namespace %qD)"
+msgstr "екÑплицитно извођење %qD у именÑком проÑтору %qD (који не обухвата проÑтор %qD)"
+
+#: cp/pt.c:726
+#, gcc-internal-format
+msgid "specialization of %qT after instantiation"
+msgstr "Ñпецијализација %qT поÑле извођења"
+
+#: cp/pt.c:758
+#, gcc-internal-format
+msgid "specializing %q#T in different namespace"
+msgstr "Ñпецијализација %q#T у различитом именÑком проÑтору"
+
+#: cp/pt.c:773
+#, gcc-internal-format
+msgid "specialization %qT after instantiation %qT"
+msgstr "Ñпецијализација %qT поÑле извођења %qT"
+
+#: cp/pt.c:785
+#, gcc-internal-format
+msgid "explicit specialization of non-template %qT"
+msgstr "екÑплицитна Ñпецијализација не-шаблонÑког %qT"
+
+#: cp/pt.c:1179
+#, gcc-internal-format
+msgid "specialization of %qD after instantiation"
+msgstr "Ñпецијализација %qD поÑле извођења"
+
+#: cp/pt.c:1383
+#, gcc-internal-format
+msgid "%qD is not a function template"
+msgstr "%qD није шаблон функције"
+
+#: cp/pt.c:1577
+#, gcc-internal-format
+msgid "template-id %qD for %q+D does not match any template declaration"
+msgstr "ид. шаблона %qD за %q+D не одговара ниједној декларацији шаблона"
+
+#: cp/pt.c:1585
+#, gcc-internal-format
+msgid "ambiguous template specialization %qD for %q+D"
+msgstr "двоÑмиÑлена Ñпецијализација шаблона %qD за %q+D"
+
+#. This case handles bogus declarations like template <>
+#. template <class T> void f<int>();
+#: cp/pt.c:1816 cp/pt.c:1870
+#, gcc-internal-format
+msgid "template-id %qD in declaration of primary template"
+msgstr "ид. шаблона %qD у декларацији примарног шаблона"
+
+#: cp/pt.c:1829
+#, gcc-internal-format
+msgid "template parameter list used in explicit instantiation"
+msgstr "лиÑта шаблонÑких параметара употребљена у екÑплицитном извођењу"
+
+#: cp/pt.c:1835
+#, gcc-internal-format
+msgid "definition provided for explicit instantiation"
+msgstr "дефиниција дата за екÑплицитно извођење"
+
+#: cp/pt.c:1843
+#, gcc-internal-format
+msgid "too many template parameter lists in declaration of %qD"
+msgstr "превише лиÑта шаблонÑких параметара у декларацији %qD"
+
+#: cp/pt.c:1846
+#, gcc-internal-format
+msgid "too few template parameter lists in declaration of %qD"
+msgstr "премало лиÑта шаблонÑких параметара у декларацији %qD"
+
+#: cp/pt.c:1848
+#, gcc-internal-format
+msgid "explicit specialization of %qD must be introduced by %<template <>%>"
+msgstr "екÑплицитна Ñпецијализација %qD мора бити уведена помоћу %<template <>%>"
+
+#: cp/pt.c:1867
+#, gcc-internal-format
+msgid "function template partial specialization %qD is not allowed"
+msgstr "делимична Ñпецијализација шаблона функције %qD није дозвољена"
+
+#: cp/pt.c:1899
+#, gcc-internal-format
+msgid "default argument specified in explicit specialization"
+msgstr "наведен подразумевани аргумент у екÑплицитној Ñпецијализацији"
+
+#: cp/pt.c:1928
+#, gcc-internal-format
+msgid "%qD is not a template function"
+msgstr "%qD није шаблонÑка функција"
+
+#. From [temp.expl.spec]:
+#.
+#. If such an explicit specialization for the member
+#. of a class template names an implicitly-declared
+#. special member function (clause _special_), the
+#. program is ill-formed.
+#.
+#. Similar language is found in [temp.explicit].
+#: cp/pt.c:1990
+#, gcc-internal-format
+msgid "specialization of implicitly-declared special member function"
+msgstr "Ñпецијализација имплицитно деклариÑане поÑебне чланÑке функције"
+
+#: cp/pt.c:2034
+#, gcc-internal-format
+msgid "no member function %qD declared in %qT"
+msgstr "нема чланÑке функције %qD деклариÑане у %qT"
+
+#: cp/pt.c:2258
+#, gcc-internal-format
+msgid "declaration of %q+#D"
+msgstr "декларација %q+#D"
+
+#: cp/pt.c:2259
+#, gcc-internal-format
+msgid " shadows template parm %q+#D"
+msgstr " заклања шаблонÑки параметар %q+#D"
+
+#: cp/pt.c:2662
+#, gcc-internal-format
+msgid "template parameters not used in partial specialization:"
+msgstr "шаблонÑки параметри неиÑкоришћени у делимичној Ñпецијализацији:"
+
+#: cp/pt.c:2666
+#, gcc-internal-format
+msgid " %qD"
+msgstr " %qD"
+
+#: cp/pt.c:2677
+#, gcc-internal-format
+msgid "partial specialization %qT does not specialize any template arguments"
+msgstr "делимична Ñпецијализација %qT не Ñпецијализује ниједан шаблонÑки аргумент"
+
+#: cp/pt.c:2702
+#, gcc-internal-format
+msgid "template argument %qE involves template parameter(s)"
+msgstr "шаблонÑки аргумент %qE уплиће шаблонÑке параметре"
+
+#: cp/pt.c:2746
+#, gcc-internal-format
+msgid "type %qT of template argument %qE depends on template parameter(s)"
+msgstr "тип %qT шаблонÑког аргумента %qE завиÑи од шаблонÑких параметара"
+
+#: cp/pt.c:2833
+#, gcc-internal-format
+msgid "no default argument for %qD"
+msgstr "нема подразумеваног аргумента за %qD"
+
+#: cp/pt.c:2992
+#, gcc-internal-format
+msgid "template class without a name"
+msgstr "шаблонÑка клаÑа без имена"
+
+#. [temp.mem]
+#.
+#. A destructor shall not be a member template.
+#: cp/pt.c:3000
+#, gcc-internal-format
+msgid "destructor %qD declared as member template"
+msgstr "деÑтруктор %qD деклариÑан као чланÑки шаблон"
+
+#. [basic.stc.dynamic.allocation]
+#.
+#. An allocation function can be a function
+#. template. ... Template allocation functions shall
+#. have two or more parameters.
+#: cp/pt.c:3015
+#, gcc-internal-format
+msgid "invalid template declaration of %qD"
+msgstr "неиÑправна декларација шаблона %qD"
+
+#: cp/pt.c:3095
+#, gcc-internal-format
+msgid "%qD does not declare a template type"
+msgstr "%qD не декларише шаблонÑки тип"
+
+#: cp/pt.c:3101
+#, gcc-internal-format
+msgid "template definition of non-template %q#D"
+msgstr "шаблонÑка дефиниција нешаблонÑког %q#D"
+
+#: cp/pt.c:3144
+#, gcc-internal-format
+msgid "expected %d levels of template parms for %q#D, got %d"
+msgstr "очекивах %d нивоа шаблонÑких параметара за %q#D, добих %d"
+
+#: cp/pt.c:3156
+#, gcc-internal-format
+msgid "got %d template parameters for %q#D"
+msgstr "добих %d шаблонÑких параметара за %q#D"
+
+#: cp/pt.c:3159
+#, gcc-internal-format
+msgid "got %d template parameters for %q#T"
+msgstr "добих %d шаблонÑких параметара за %q#T"
+
+#: cp/pt.c:3161
+#, gcc-internal-format
+msgid " but %d required"
+msgstr " а потребно је %d"
+
+#: cp/pt.c:3258
+#, gcc-internal-format
+msgid "%qT is not a template type"
+msgstr "%qT није шаблонÑки тип"
+
+#: cp/pt.c:3271
+#, gcc-internal-format
+msgid "template specifiers not specified in declaration of %qD"
+msgstr "наводиоци шаблона ниÑу задати у декларацији %qD"
+
+#: cp/pt.c:3281
+#, gcc-internal-format
+msgid "previous declaration %q+D"
+msgstr "претходна декларација %q+D"
+
+#: cp/pt.c:3282
+#, gcc-internal-format
+msgid "used %d template parameter(s) instead of %d"
+msgstr "употребљено је %d шаблонÑких параметара умеÑто %d"
+
+#: cp/pt.c:3301
+#, gcc-internal-format
+msgid "template parameter %q+#D"
+msgstr "шаблонÑки параметар %q+#D"
+
+#: cp/pt.c:3302
+#, gcc-internal-format
+msgid "redeclared here as %q#D"
+msgstr "поново деклариÑано овде као %q#D"
+
+#. We have in [temp.param]:
+#.
+#. A template-parameter may not be given default arguments
+#. by two different declarations in the same scope.
+#: cp/pt.c:3312
+#, gcc-internal-format
+msgid "redefinition of default argument for %q#D"
+msgstr "поновљена дефиниција подразумеваног аргумента за %q#D"
+
+#: cp/pt.c:3313
+#, gcc-internal-format
+msgid "%J original definition appeared here"
+msgstr "%J првобитна дефиниција налази Ñе овде"
+
+#: cp/pt.c:3409
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because function %qD has not external linkage"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер функција %qD нема Ñпољашњу повезивоÑÑ‚"
+
+#: cp/pt.c:3450
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because string literals can never be used in this context"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер Ñе конÑтантне ниÑке не могу кориÑтити у овом контекÑту"
+
+#: cp/pt.c:3527
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because it is a non-constant expression"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер није конÑтантан израз"
+
+#: cp/pt.c:3577
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because it is not a constant pointer"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер није конÑтантан показивач"
+
+#: cp/pt.c:3597
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because of conflicts in cv-qualification"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер Ñе коÑи Ñа кн-одредбом"
+
+#: cp/pt.c:3604
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because it is not a lvalue"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер није л-вредноÑÑ‚"
+
+#: cp/pt.c:3617
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because object %qD has not external linkage"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер објекат %qD нема Ñпољашњу повезивоÑÑ‚"
+
+#: cp/pt.c:3657
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because it is a pointer"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер је показивач"
+
+#: cp/pt.c:3659
+#, gcc-internal-format
+msgid "try using %qE instead"
+msgstr "покушајте Ñа %qE умеÑто тога"
+
+#: cp/pt.c:3694
+#, gcc-internal-format
+msgid "%qE is not a valid template argument for type %qT because it is of type %qT"
+msgstr "%qE није иÑправан шаблонÑки аргумент за тип %qT јер је типа %qT"
+
+#: cp/pt.c:3697
+#, gcc-internal-format
+msgid "standard conversions are not allowed in this context"
+msgstr "Ñтандардна претварања ниÑу дозвољена у овом контекÑту"
+
+#: cp/pt.c:3866
+#, gcc-internal-format
+msgid "to refer to a type member of a template parameter, use %<typename %E%>"
+msgstr "да упутите на тип шаблонÑког параметра, употребите %<typename %E%>"
+
+#: cp/pt.c:3881 cp/pt.c:3900 cp/pt.c:3940
+#, gcc-internal-format
+msgid "type/value mismatch at argument %d in template parameter list for %qD"
+msgstr "неÑлагање типа/вредноÑти код аргумента %d у лиÑти шаблонÑких параметара за %qD"
+
+#: cp/pt.c:3885
+#, gcc-internal-format
+msgid " expected a constant of type %qT, got %qT"
+msgstr " очекивах конÑтанту типа %qT, добих %qT"
+
+#: cp/pt.c:3889
+#, gcc-internal-format
+msgid " expected a class template, got %qE"
+msgstr " очекивах шаблон клаÑе, добих %qE"
+
+#: cp/pt.c:3891
+#, gcc-internal-format
+msgid " expected a type, got %qE"
+msgstr " очекивах тип, добих %qE"
+
+#: cp/pt.c:3904
+#, gcc-internal-format
+msgid " expected a type, got %qT"
+msgstr " очекивах тип, добих %qT"
+
+#: cp/pt.c:3906
+#, gcc-internal-format
+msgid " expected a class template, got %qT"
+msgstr " очекивах шаблон клаÑе, добих %qT"
+
+#: cp/pt.c:3943
+#, gcc-internal-format
+msgid " expected a template of type %qD, got %qD"
+msgstr " очекивах шаблон типа %qD, добих %qD"
+
+#: cp/pt.c:3986
+#, gcc-internal-format
+msgid "could not convert template argument %qE to %qT"
+msgstr "ниÑам могао да претворим шаблонÑки аргумент %qE у %qT"
+
+#: cp/pt.c:4025
+#, gcc-internal-format
+msgid "wrong number of template arguments (%d, should be %d)"
+msgstr "погрешан број шаблонÑких аргумената ((%d, а треба %d)"
+
+#: cp/pt.c:4029
+#, gcc-internal-format
+msgid "provided for %q+D"
+msgstr "дат за %q+D"
+
+#: cp/pt.c:4059
+#, gcc-internal-format
+msgid "template argument %d is invalid"
+msgstr "неиÑправан шаблонÑки аргумент %d"
+
+#: cp/pt.c:4414
+#, gcc-internal-format
+msgid "non-template type %qT used as a template"
+msgstr "нешаблонÑки тип %qT употребљен као шаблон"
+
+#: cp/pt.c:4416
+#, gcc-internal-format
+msgid "for template declaration %q+D"
+msgstr "за декларацију шаблона %q+D"
+
+#: cp/pt.c:5066
+#, gcc-internal-format
+msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating %qD"
+msgstr "дубина извођења шаблона премашује макÑимум од %d (употребите -ftemplate-depth-NN да повећате дубину) извођења %qD"
+
+#: cp/pt.c:6621
+#, gcc-internal-format
+msgid "instantiation of %q+D as type %qT"
+msgstr "извођење %q+D је типа %qT"
+
+#: cp/pt.c:6800
+#, gcc-internal-format
+msgid "invalid parameter type %qT"
+msgstr "неиÑправан тип параметра %qT"
+
+#: cp/pt.c:6802
+#, gcc-internal-format
+msgid "in declaration %q+D"
+msgstr "у декларацији %q+D"
+
+#: cp/pt.c:6875
+#, gcc-internal-format
+msgid "function returning an array"
+msgstr "функција враћа низ"
+
+#: cp/pt.c:6877
+#, gcc-internal-format
+msgid "function returning a function"
+msgstr "функција враћа функцију"
+
+#: cp/pt.c:6904
+#, gcc-internal-format
+msgid "creating pointer to member function of non-class type %qT"
+msgstr "Ñтварање показивача на чланÑку функцију неклаÑног типа %qT"
+
+#: cp/pt.c:7085
+#, gcc-internal-format
+msgid "creating array with negative size (%qE)"
+msgstr "Ñтварање низа негативне величине (%qE)"
+
+#: cp/pt.c:7302
+#, gcc-internal-format
+msgid "forming reference to void"
+msgstr "обликовање упућивача на празно"
+
+#: cp/pt.c:7304
+#, gcc-internal-format
+msgid "forming %s to reference type %qT"
+msgstr "обликовање %s на тип упућивача %qT"
+
+#: cp/pt.c:7341
+#, gcc-internal-format
+msgid "creating pointer to member of non-class type %qT"
+msgstr "Ñтварање показивача на члан неклаÑног типа %qT"
+
+#: cp/pt.c:7347
+#, gcc-internal-format
+msgid "creating pointer to member reference type %qT"
+msgstr "Ñтварање показивача на члан упућивачког типа %qT"
+
+#: cp/pt.c:7353
+#, gcc-internal-format
+msgid "creating pointer to member of type void"
+msgstr "Ñтварање показивача на члан празног типа"
+
+#: cp/pt.c:7420
+#, gcc-internal-format
+msgid "creating array of %qT"
+msgstr "Ñтварање низа типа %qT"
+
+#: cp/pt.c:7426
+#, gcc-internal-format
+msgid "creating array of %qT, which is an abstract class type"
+msgstr "Ñтварање низа типа %qT, који је апÑтрактна клаÑа"
+
+#: cp/pt.c:7470
+#, gcc-internal-format
+msgid "%qT is not a class, struct, or union type"
+msgstr "%qT није тип клаÑе, Ñтруктуре, нити уније"
+
+#: cp/pt.c:7505
+#, gcc-internal-format
+msgid "%qT resolves to %qT, which is not an enumeration type"
+msgstr "%qT Ñе разрешава до %qT, што није набројиви тип"
+
+#: cp/pt.c:7508
+#, gcc-internal-format
+msgid "%qT resolves to %qT, which is is not a class type"
+msgstr "%qT Ñе разрешава до %qT, што није клаÑни тип"
+
+#: cp/pt.c:7570
+#, gcc-internal-format
+msgid "use of %qs in template"
+msgstr "употреба %qs у шаблону"
+
+#: cp/pt.c:7702
+#, gcc-internal-format
+msgid "dependent-name %qE is parsed as a non-type, but instantiation yields a type"
+msgstr "завиÑно име %qE рашчлањује Ñе као не-тип, али извођење производи тип"
+
+#: cp/pt.c:7704
+#, gcc-internal-format
+msgid "say %<typename %E%> if a type is meant"
+msgstr "Ñтавите %<typename %E%> ако миÑлите на тип"
+
+#: cp/pt.c:7827
+#, gcc-internal-format
+msgid "using invalid field %qD"
+msgstr "употреба неиÑправног поља %qD"
+
+#: cp/pt.c:8933
+#, gcc-internal-format
+msgid "%qT is not a class or namespace"
+msgstr "%qT није ни клаÑа ни именÑки проÑтор"
+
+#: cp/pt.c:8936
+#, gcc-internal-format
+msgid "%qD is not a class or namespace"
+msgstr "%qD није ни клаÑа ни именÑки проÑтор"
+
+#: cp/pt.c:9085
+#, gcc-internal-format
+msgid "%qT is/uses anonymous type"
+msgstr "%qT јеÑте/кориÑти анонимни тип"
+
+#: cp/pt.c:9087
+#, gcc-internal-format
+msgid "%qT uses local type %qT"
+msgstr "%qT кориÑти локални тип %qT"
+
+#: cp/pt.c:9096
+#, gcc-internal-format
+msgid "%qT is a variably modified type"
+msgstr "%qT је променљиво измењив тип"
+
+#: cp/pt.c:9107
+#, gcc-internal-format
+msgid "integral expression %qE is not constant"
+msgstr "интегрални израз %qE није конÑтанта"
+
+#: cp/pt.c:9112
+#, gcc-internal-format
+msgid " trying to instantiate %qD"
+msgstr " покушај извођења %qD"
+
+#: cp/pt.c:11103
+#, gcc-internal-format
+msgid "ambiguous class template instantiation for %q#T"
+msgstr "двоÑмиÑлено извођење шаблона клаÑе за %q#T"
+
+#: cp/pt.c:11106
+#, gcc-internal-format
+msgid "%s %+#T"
+msgstr "%s %+#T"
+
+#: cp/pt.c:11129 cp/pt.c:11200
+#, gcc-internal-format
+msgid "explicit instantiation of non-template %q#D"
+msgstr "екÑплицитно извођење не-шаблона %q#D"
+
+#: cp/pt.c:11145 cp/pt.c:11195
+#, gcc-internal-format
+msgid "no matching template for %qD found"
+msgstr "поклапајући шаблон за %qD није нађен"
+
+#: cp/pt.c:11151
+#, gcc-internal-format
+msgid "explicit instantiation of %q#D"
+msgstr "екÑплицитно извођење %q#D"
+
+#: cp/pt.c:11187
+#, gcc-internal-format
+msgid "duplicate explicit instantiation of %q#D"
+msgstr "удвоÑтручено екÑплицитно извођење %q#D"
+
+#: cp/pt.c:11209
+#, gcc-internal-format
+msgid "ISO C++ forbids the use of %<extern%> on explicit instantiations"
+msgstr "ИСО Ц++ забрањује употребу %<extern%> на екÑплицитним извођењима"
+
+#: cp/pt.c:11214 cp/pt.c:11307
+#, gcc-internal-format
+msgid "storage class %qD applied to template instantiation"
+msgstr "Ñкладишна клаÑа %qD примењена на извођење шаблона"
+
+#: cp/pt.c:11279
+#, gcc-internal-format
+msgid "explicit instantiation of non-template type %qT"
+msgstr "екÑплицитно извођење нешаблонÑког типа %qT"
+
+#: cp/pt.c:11288
+#, gcc-internal-format
+msgid "explicit instantiation of %q#T before definition of template"
+msgstr "екÑплицитно извођење %q#T пре дефиниције шаблона"
+
+#: cp/pt.c:11296
+#, gcc-internal-format
+msgid "ISO C++ forbids the use of %qE on explicit instantiations"
+msgstr "ИСО Ц++ забрањује употребу %qE на екÑплицитним извођењима"
+
+#: cp/pt.c:11341
+#, gcc-internal-format
+msgid "duplicate explicit instantiation of %q#T"
+msgstr "удвоÑтручено екÑплицитно извођење %q#T"
+
+#: cp/pt.c:11754
+#, gcc-internal-format
+msgid "explicit instantiation of %qD but no definition available"
+msgstr "екÑплицитно извођење %qD али дефиниција није доÑтупна"
+
+#: cp/pt.c:11901
+#, gcc-internal-format
+msgid "template instantiation depth exceeds maximum of %d instantiating %q+D, possibly from virtual table generation (use -ftemplate-depth-NN to increase the maximum)"
+msgstr "дубина извођења шаблона премашује макÑимум од %d извођења %q+D, могуће уÑлед Ñтварања виртуелних табела (употребите -ftemplate-depth-NN да повећате макÑимум)"
+
+#: cp/pt.c:12174
+#, gcc-internal-format
+msgid "%q#T is not a valid type for a template constant parameter"
+msgstr "%q#T није иÑправан тип за шаблонÑки конÑтантан параметар"
+
+#: cp/repo.c:113
+#, gcc-internal-format
+msgid "-frepo must be used with -c"
+msgstr "-frepo мора бити коришћено уз -c"
+
+#: cp/repo.c:201
+#, gcc-internal-format
+msgid "mysterious repository information in %s"
+msgstr "миÑтериозни подаци Ñкладишта у %s"
+
+#: cp/repo.c:215
+#, gcc-internal-format
+msgid "can't create repository information file %qs"
+msgstr "не могу да направим датотеку Ñа подацима Ñкладишта %qs"
+
+#: cp/rtti.c:270
+#, gcc-internal-format
+msgid "cannot use typeid with -fno-rtti"
+msgstr "не може Ñе кориÑтити ид. типова уз -fno-rtti"
+
+#: cp/rtti.c:276
+#, gcc-internal-format
+msgid "must #include <typeinfo> before using typeid"
+msgstr "пре коришћења ид. типова, мора Ñе #include <typeinfo>"
+
+#: cp/rtti.c:348
+#, gcc-internal-format
+msgid "cannot create type information for type %qT because its size is variable"
+msgstr "не могу Ñе Ñтворити подаци о типу за %qT, је му је величина променљива"
+
+#: cp/rtti.c:598 cp/rtti.c:612
+#, gcc-internal-format
+msgid "dynamic_cast of %q#D to %q#T can never succeed"
+msgstr "динамичко претапање из %q#D у %q#T не може никако уÑпети"
+
+#: cp/rtti.c:691
+#, gcc-internal-format
+msgid "cannot dynamic_cast %qE (of type %q#T) to type %q#T (%s)"
+msgstr "не може Ñе динамички претопити %qE (типа %q#T) у тип %q#T (%s)"
+
+#: cp/search.c:257
+#, gcc-internal-format
+msgid "%qT is an ambiguous base of %qT"
+msgstr "%qT је двоÑмиÑлена оÑнова за %qT"
+
+#: cp/search.c:275
+#, gcc-internal-format
+msgid "%qT is an inaccessible base of %qT"
+msgstr "%qT је неприÑтупачна оÑнова за %qT"
+
+#: cp/search.c:1847
+#, gcc-internal-format
+msgid "deprecated covariant return type for %q+#D"
+msgstr "превазиђен коваријантни повратни тип за %q+#D"
+
+#: cp/search.c:1849 cp/search.c:1864 cp/search.c:1869
+#, gcc-internal-format
+msgid " overriding %q+#D"
+msgstr " потиÑкивање %q+#D"
+
+#: cp/search.c:1863
+#, gcc-internal-format
+msgid "invalid covariant return type for %q+#D"
+msgstr "неиÑправан коваријантни повратни тип за %q+#D"
+
+#: cp/search.c:1868
+#, gcc-internal-format
+msgid "conflicting return type specified for %q+#D"
+msgstr "Ñукобљен повратни тип наведен за %q+#D"
+
+#: cp/search.c:1878
+#, gcc-internal-format
+msgid "looser throw specifier for %q+#F"
+msgstr "губитнички наводилац бацања за %q+#F"
+
+#: cp/search.c:1879
+#, gcc-internal-format
+msgid " overriding %q+#F"
+msgstr " потиÑкивање %q+#F"
+
+#. A static member function cannot match an inherited
+#. virtual member function.
+#: cp/search.c:1972
+#, gcc-internal-format
+msgid "%q+#D cannot be declared"
+msgstr "%q+#D Ñе не може деклариÑати"
+
+#: cp/search.c:1973
+#, gcc-internal-format
+msgid " since %q+#D declared in base class"
+msgstr " пошто је %q+#D деклариÑано у оÑновној клаÑи"
+
+#: cp/semantics.c:1248
+#, gcc-internal-format
+msgid "type of asm operand %qE could not be determined"
+msgstr "тип asm-операнда %qE не може бити одређен"
+
+#: cp/semantics.c:1367
+#, gcc-internal-format
+msgid "invalid use of member %q+D in static member function"
+msgstr "неиÑправна употреба члана %q+D у Ñтатичкој чланÑкој функцији"
+
+#: cp/semantics.c:1369
+#, gcc-internal-format
+msgid "invalid use of non-static data member %q+D"
+msgstr "неиÑправна употреба неÑтатичког чланÑког податка %q+D"
+
+#: cp/semantics.c:1370 cp/semantics.c:1409
+#, gcc-internal-format
+msgid "from this location"
+msgstr "на овој локацији"
+
+#: cp/semantics.c:1408
+#, gcc-internal-format
+msgid "object missing in reference to %q+D"
+msgstr "недоÑтаје објекат у упућивачу на %q+D"
+
+#: cp/semantics.c:1874
+#, gcc-internal-format
+msgid "arguments to destructor are not allowed"
+msgstr "аргументи ниÑу дозвољени у деÑтруктору"
+
+#: cp/semantics.c:1925
+#, gcc-internal-format
+msgid "%<this%> is unavailable for static member functions"
+msgstr "%<this%> није доÑтупно за Ñтатичке чланÑке функције"
+
+#: cp/semantics.c:1931
+#, gcc-internal-format
+msgid "invalid use of %<this%> in non-member function"
+msgstr "неиÑправна употреба %<this%> у нечланÑкој функцији"
+
+#: cp/semantics.c:1933
+#, gcc-internal-format
+msgid "invalid use of %<this%> at top level"
+msgstr "неиÑправна употреба %<this%> на највишем нивоу"
+
+#: cp/semantics.c:1957
+#, gcc-internal-format
+msgid "invalid qualifying scope in pseudo-destructor name"
+msgstr "неиÑправан одредбени доÑег у имену пÑеудодеÑтруктора"
+
+#: cp/semantics.c:1977
+#, gcc-internal-format
+msgid "%qE is not of type %qT"
+msgstr "%qE није типа %qT"
+
+#: cp/semantics.c:2080
+#, gcc-internal-format
+msgid "template type parameters must use the keyword %<class%> or %<typename%>"
+msgstr "типÑки параметри шаблона морају кориÑтити кључну реч %<class%> или %<typename%>"
+
+#: cp/semantics.c:2124
+#, gcc-internal-format
+msgid "invalid use of type %qT as a default value for a template template-parameter"
+msgstr "неиÑправна употреба типа %qT као подразумеване вредноÑти за шаблонÑки шаблонÑки параметар"
+
+#: cp/semantics.c:2127
+#, gcc-internal-format
+msgid "invalid use of %qD as a default value for a template template-parameter"
+msgstr "неиÑправна употреба %qD као подразумеване вредноÑти за шаблонÑки шаблонÑки параметар"
+
+#: cp/semantics.c:2131
+#, gcc-internal-format
+msgid "invalid default argument for a template template parameter"
+msgstr "неиÑправан подразумевани аргумент за шаблонÑки шаблонÑки параметар"
+
+#: cp/semantics.c:2148
+#, gcc-internal-format
+msgid "definition of %q#T inside template parameter list"
+msgstr "дефиниција %q#T унутар лиÑте шаблонÑких параметара"
+
+#: cp/semantics.c:2159
+#, gcc-internal-format
+msgid "invalid definition of qualified type %qT"
+msgstr "неиÑправна дефиниција одређеног типа %qT"
+
+#: cp/semantics.c:2362
+#, gcc-internal-format
+msgid "invalid base-class specification"
+msgstr "неиÑправан навод оÑновне клаÑе"
+
+#: cp/semantics.c:2371
+#, gcc-internal-format
+msgid "base class %qT has cv qualifiers"
+msgstr "оÑновна клаÑа %qT има кн-одредбе"
+
+#: cp/semantics.c:2393
+#, gcc-internal-format
+msgid "incomplete type %qT used in nested name specifier"
+msgstr "непотпун тип %qT употребљен у угњежденом наводиоцу имена"
+
+#: cp/semantics.c:2396
+#, gcc-internal-format
+msgid "reference to %<%T::%D%> is ambiguous"
+msgstr "двоÑмиÑлено упућивање на %<%T::%D%>"
+
+#: cp/semantics.c:2400 cp/typeck.c:1642
+#, gcc-internal-format
+msgid "%qD is not a member of %qT"
+msgstr "%qD није члан у %qT"
+
+#: cp/semantics.c:2403
+#, gcc-internal-format
+msgid "%qD is not a member of %qD"
+msgstr "%qD није члан у %qD"
+
+#: cp/semantics.c:2517
+#, gcc-internal-format
+msgid "use of %<auto%> variable from containing function"
+msgstr "употреба %<auto%> променљиве из обухватајуће функције"
+
+#: cp/semantics.c:2518
+#, gcc-internal-format
+msgid "use of parameter from containing function"
+msgstr "употреба параметра из обухватајуће вункције"
+
+#: cp/semantics.c:2519
+#, gcc-internal-format
+msgid " %q+#D declared here"
+msgstr " %q+#D деклариÑано овде"
+
+#: cp/semantics.c:2557
+#, gcc-internal-format
+msgid "template parameter %qD of type %qT is not allowed in an integral constant expression because it is not of integral or enumeration type"
+msgstr "шаблонÑки параметар %qD типа %qT није дозвољен у интегралном конÑтантном изразу јер није интегралног или набројивог типа"
+
+#: cp/semantics.c:2723
+#, gcc-internal-format
+msgid "%qD cannot appear in a constant-expression"
+msgstr "%qD Ñе не може јавити у конÑтантном изразу"
+
+#: cp/semantics.c:2731
+#, gcc-internal-format
+msgid "use of namespace %qD as expression"
+msgstr "употреба именÑког проÑтора %qD као израза"
+
+#: cp/semantics.c:2736
+#, gcc-internal-format
+msgid "use of class template %qT as expression"
+msgstr "употреба шаблона клаÑе %qT као израза"
+
+#. Ambiguous reference to base members.
+#: cp/semantics.c:2742
+#, gcc-internal-format
+msgid "request for member %qD is ambiguous in multiple inheritance lattice"
+msgstr "захтев за члан %qD двоÑмиÑлен је у вишеÑтруком Ñнопу наÑлеђивања"
+
+#: cp/semantics.c:2854
+#, gcc-internal-format
+msgid "type of %qE is unknown"
+msgstr "тип за %qE није познат"
+
+#: cp/tree.c:560
+#, gcc-internal-format
+msgid "%qV qualifiers cannot be applied to %qT"
+msgstr "%qV одредбе не могу Ñе применити на %qT"
+
+#: cp/tree.c:1783
+#, gcc-internal-format
+msgid "%qE attribute can only be applied to Java class definitions"
+msgstr "атрибут %qE може Ñе применити Ñамо на јаванÑке дефиниције клаÑа"
+
+#: cp/tree.c:1812
+#, gcc-internal-format
+msgid "%qE attribute can only be applied to class definitions"
+msgstr "атрибут %qE може Ñе применити Ñамо на дефиниције клаÑа"
+
+#: cp/tree.c:1818
+#, gcc-internal-format
+msgid "%qE is obsolete; g++ vtables are now COM-compatible by default"
+msgstr "%qE је заÑтарело; в-табеле Ñу Ñада подразумевано ÑаглаÑне Ñа КОМом"
+
+#: cp/tree.c:1842
+#, gcc-internal-format
+msgid "requested init_priority is not an integer constant"
+msgstr "захтевано init_priority није целобројна конÑтанта"
+
+#: cp/tree.c:1863
+#, gcc-internal-format
+msgid "can only use %qE attribute on file-scope definitions of objects of class type"
+msgstr "атрибут %qE може Ñе кориÑтити Ñамо уз дефиниције објеката клаÑног типа у датотечном доÑегу"
+
+#: cp/tree.c:1871
+#, gcc-internal-format
+msgid "requested init_priority is out of range"
+msgstr "захтевано init_priority је ван опÑега"
+
+#: cp/tree.c:1881
+#, gcc-internal-format
+msgid "requested init_priority is reserved for internal use"
+msgstr "захтевано init_priority резервиÑано је за унутрашњу употребу"
+
+#: cp/tree.c:1892
+#, gcc-internal-format
+msgid "%qE attribute is not supported on this platform"
+msgstr "атрибут %qE није подржан на овој платформи"
+
+#: cp/typeck.c:435 cp/typeck.c:449 cp/typeck.c:549
+#, gcc-internal-format
+msgid "%s between distinct pointer types %qT and %qT lacks a cast"
+msgstr "недоÑтаје претапање за %s између различитих типова показивача %qT и %qT"
+
+#: cp/typeck.c:511
+#, gcc-internal-format
+msgid "ISO C++ forbids %s between pointer of type %<void *%> and pointer-to-function"
+msgstr "ИСО Ц++ забрањује %s између показивача типа %<void *%> и показивача-на-функцију"
+
+#: cp/typeck.c:569
+#, gcc-internal-format
+msgid "%s between distinct pointer-to-member types %qT and %qT lacks a cast"
+msgstr "недоÑтаје претапање за %s између различитих типова показивача-на-члан %qT и %qT"
+
+#: cp/typeck.c:1258
+#, gcc-internal-format
+msgid "invalid application of %qs to a member function"
+msgstr "неиÑправна примена %qs на чланÑку функцију"
+
+#: cp/typeck.c:1293
+#, gcc-internal-format
+msgid "invalid application of %qs to a bit-field"
+msgstr "неиÑправна примена %qs на битÑко поље"
+
+#: cp/typeck.c:1298
+#, gcc-internal-format
+msgid "ISO C++ forbids applying %qs to an expression of function type"
+msgstr "ИСО Ц++ забрањује примену %qs на израз функцијÑког типа"
+
+#: cp/typeck.c:1335
+#, gcc-internal-format
+msgid "invalid use of non-static member function"
+msgstr "неиÑправна употреба неÑтатичке чланÑке функције"
+
+#: cp/typeck.c:1502
+#, gcc-internal-format
+msgid "deprecated conversion from string constant to %qT'"
+msgstr "превазиђено претварање из конÑтантне ниÑке у %qT'"
+
+#: cp/typeck.c:1613 cp/typeck.c:1961
+#, gcc-internal-format
+msgid "request for member %qD in %qE, which is of non-class type %qT"
+msgstr "захтев за члан %qD у %qE, које је не-клаÑног типа %qT"
+
+#: cp/typeck.c:1640
+#, gcc-internal-format
+msgid "invalid use of nonstatic data member %qE"
+msgstr "неиÑправна употреба неÑтатичког чланÑког податка %qE"
+
+#: cp/typeck.c:1692 cp/typeck.c:1720
+#, gcc-internal-format
+msgid "invalid access to non-static data member %qD of NULL object"
+msgstr "неиÑправан приÑтуп неÑтатичком чланÑком податку %qD нултог објекта"
+
+#: cp/typeck.c:1695 cp/typeck.c:1722
+#, gcc-internal-format
+msgid "(perhaps the %<offsetof%> macro was used incorrectly)"
+msgstr "(можда је макро %<offsetof%> погрешно употребљен)"
+
+#: cp/typeck.c:1833
+#, gcc-internal-format
+msgid "qualified type %qT does not match destructor name ~%qT"
+msgstr "одређени тип %qT не поклапа Ñе Ñа именом деÑтруктора ~%qT"
+
+#: cp/typeck.c:1839
+#, gcc-internal-format
+msgid "the type being destroyed is %qT, but the destructor refers to %qT"
+msgstr "тип који Ñе уништава је %qT, али деÑтруктор упућује на %qT"
+
+#: cp/typeck.c:1999
+#, gcc-internal-format
+msgid "%<%D::%D%> is not a member of %qT"
+msgstr "%<%D::%D%> није члан у %qT"
+
+#: cp/typeck.c:2014
+#, gcc-internal-format
+msgid "%qT is not a base of %qT"
+msgstr "%qT није оÑнова за %qT"
+
+#: cp/typeck.c:2033
+#, gcc-internal-format
+msgid "%qD has no member named %qE"
+msgstr "%qD нема члан по имену %qE"
+
+#: cp/typeck.c:2048
+#, gcc-internal-format
+msgid "%qD is not a member template function"
+msgstr "%qD није чланÑка шаблонÑка функција"
+
+#. A pointer to incomplete type (other than cv void) can be
+#. dereferenced [expr.unary.op]/1
+#: cp/typeck.c:2168
+#, gcc-internal-format
+msgid "%qT is not a pointer-to-object type"
+msgstr "%qT није типа показивач-на-објекат"
+
+#: cp/typeck.c:2193
+#, gcc-internal-format
+msgid "invalid use of %qs on pointer to member"
+msgstr "неиÑправна употреба %qs на показивачу-на-члан"
+
+#: cp/typeck.c:2199
+#, gcc-internal-format
+msgid "invalid type argument"
+msgstr "неиÑправан типÑки аргумент"
+
+#: cp/typeck.c:2222
+#, gcc-internal-format
+msgid "subscript missing in array reference"
+msgstr "недоÑтаје Ð¸Ð½Ð´ÐµÐºÑ Ñƒ упућивачу низа"
+
+#: cp/typeck.c:2304
+#, gcc-internal-format
+msgid "ISO C++ forbids subscripting non-lvalue array"
+msgstr "ИСО Ц++ забрањује индекÑирање не-л-вредноÑног низа"
+
+#: cp/typeck.c:2315
+#, gcc-internal-format
+msgid "subscripting array declared %<register%>"
+msgstr "индекÑирање низа деклариÑаног као %<register%>"
+
+#: cp/typeck.c:2398
+#, gcc-internal-format
+msgid "object missing in use of %qE"
+msgstr "недоÑтаје објекат у употреби %qE"
+
+#: cp/typeck.c:2512
+#, gcc-internal-format
+msgid "ISO C++ forbids calling %<::main%> from within program"
+msgstr "ИСО Ц++ забрањује звање %<::main%> унутар програма"
+
+#: cp/typeck.c:2537
+#, gcc-internal-format
+msgid "must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E (...)%>"
+msgstr "мора Ñе употребити или %<.*%> или %<->*%> за позив показивача на чланÑку функцију у %<%E (...)%>"
+
+#: cp/typeck.c:2551
+#, gcc-internal-format
+msgid "%qE cannot be used as a function"
+msgstr "%qE не може бити употребљено као функција"
+
+#: cp/typeck.c:2631
+#, gcc-internal-format
+msgid "too many arguments to %s %q+#D"
+msgstr "превише аргумената за %s %q+#D"
+
+#: cp/typeck.c:2632 cp/typeck.c:2734
+#, gcc-internal-format
+msgid "at this point in file"
+msgstr "на овом меÑту у датотеци"
+
+#: cp/typeck.c:2635
+#, gcc-internal-format
+msgid "too many arguments to function"
+msgstr "превише аргумената за функцију"
+
+#: cp/typeck.c:2669
+#, gcc-internal-format
+msgid "parameter %P of %qD has incomplete type %qT"
+msgstr "параметар %P за %qD непотпуног је типа %qT"
+
+#: cp/typeck.c:2672
+#, gcc-internal-format
+msgid "parameter %P has incomplete type %qT"
+msgstr "параметар %P непотпуног је типа %qT"
+
+#: cp/typeck.c:2733
+#, gcc-internal-format
+msgid "too few arguments to %s %q+#D"
+msgstr "премало аргумената за %s %q+#D"
+
+#: cp/typeck.c:2737
+#, gcc-internal-format
+msgid "too few arguments to function"
+msgstr "превише аргумената за функцију"
+
+#: cp/typeck.c:2885 cp/typeck.c:2895
+#, gcc-internal-format
+msgid "assuming cast to type %qT from overloaded function"
+msgstr "претпоÑтавља Ñе претапање у тип %qT из препуњене функције"
+
+#: cp/typeck.c:2963
+#, gcc-internal-format
+msgid "division by zero in %<%E / 0%>"
+msgstr "дељење нулом у %<%E / 0%>"
+
+#: cp/typeck.c:2965
+#, gcc-internal-format
+msgid "division by zero in %<%E / 0.%>"
+msgstr "дељење нулом у %<%E / 0.%>"
+
+#: cp/typeck.c:3000
+#, gcc-internal-format
+msgid "division by zero in %<%E %% 0%>"
+msgstr "дељење нулом у %<%E %% 0%>"
+
+#: cp/typeck.c:3002
+#, gcc-internal-format
+msgid "division by zero in %<%E %% 0.%>"
+msgstr "дељење нулом у %<%E %% 0.%>"
+
+#: cp/typeck.c:3082
+#, gcc-internal-format
+msgid "%s rotate count is negative"
+msgstr "негативно ротирање %s"
+
+#: cp/typeck.c:3085
+#, gcc-internal-format
+msgid "%s rotate count >= width of type"
+msgstr "ротирање %s >= ширина типа"
+
+#: cp/typeck.c:3119 cp/typeck.c:3124 cp/typeck.c:3220 cp/typeck.c:3225
+#, gcc-internal-format
+msgid "ISO C++ forbids comparison between pointer and integer"
+msgstr "ИСО Ц++ забрањује поређење показивача и целобројног"
+
+#: cp/typeck.c:3239
+#, gcc-internal-format
+msgid "unordered comparison on non-floating point argument"
+msgstr "неуређено поређење Ñа не-реалним аргументом"
+
+#: cp/typeck.c:3277
+#, gcc-internal-format
+msgid "invalid operands of types %qT and %qT to binary %qO"
+msgstr "неиÑправни операнди типова %qT и %qT за бинарно %qO"
+
+#: cp/typeck.c:3441
+#, gcc-internal-format
+msgid "comparison between types %q#T and %q#T"
+msgstr "поређење између типова %q#T и %q#T"
+
+#: cp/typeck.c:3477
+#, gcc-internal-format
+msgid "comparison between signed and unsigned integer expressions"
+msgstr "поређење означених и неозначених целобројних израза"
+
+#. Some sort of arithmetic operation involving NULL was
+#. performed. Note that pointer-difference and pointer-addition
+#. have already been handled above, and so we don't end up here in
+#. that case.
+#: cp/typeck.c:3556
+#, gcc-internal-format
+msgid "NULL used in arithmetic"
+msgstr "NULL употребљено аритметички"
+
+#: cp/typeck.c:3614
+#, gcc-internal-format
+msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction"
+msgstr "ИСО Ц++ забрањује употребу показивача типа %<void *%> у одузимању"
+
+#: cp/typeck.c:3616
+#, gcc-internal-format
+msgid "ISO C++ forbids using pointer to a function in subtraction"
+msgstr "ИСО Ц++ забрањује употребу показивача на функцију у одузимању"
+
+#: cp/typeck.c:3618
+#, gcc-internal-format
+msgid "ISO C++ forbids using pointer to a method in subtraction"
+msgstr "ИСО Ц++ забрањује употребу показивача на метод у одузимању"
+
+#: cp/typeck.c:3630
+#, gcc-internal-format
+msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
+msgstr "неиÑправна употреба показивача на непотпун тип у аритметици Ñа показивачима"
+
+#: cp/typeck.c:3690
+#, gcc-internal-format
+msgid "invalid use of %qE to form a pointer-to-member-function"
+msgstr "неиÑправна употреба %qE за добијање показивача-на-чланÑку-функцију"
+
+#: cp/typeck.c:3693
+#, gcc-internal-format
+msgid " a qualified-id is required"
+msgstr " неопходан је одређен ид."
+
+#: cp/typeck.c:3698
+#, gcc-internal-format
+msgid "parenthesis around %qE cannot be used to form a pointer-to-member-function"
+msgstr "заграде око %qE не могу бити коришћене за добијање показивача-на-чланÑку-функцију"
+
+#: cp/typeck.c:3721
+#, gcc-internal-format
+msgid "taking address of temporary"
+msgstr "узимање адреÑе привременог"
+
+#: cp/typeck.c:3965
+#, gcc-internal-format
+msgid "ISO C++ forbids %sing an enum"
+msgstr "ИСО Ц++ забрањује %s-вање набрајања"
+
+#: cp/typeck.c:3976
+#, gcc-internal-format
+msgid "cannot %s a pointer to incomplete type %qT"
+msgstr "не може Ñе %s показивач на непотпуни тип %qT"
+
+#: cp/typeck.c:3982
+#, gcc-internal-format
+msgid "ISO C++ forbids %sing a pointer of type %qT"
+msgstr "ИСО Ц++ забрањује %s-вање показивача типа %qT"
+
+#: cp/typeck.c:4007
+#, gcc-internal-format
+msgid "cast to non-reference type used as lvalue"
+msgstr "претапање у не-упућивачки тип употребљено као л-вредноÑÑ‚"
+
+#: cp/typeck.c:4042
+#, gcc-internal-format
+msgid "invalid use of %<--%> on bool variable %qD"
+msgstr "неиÑправна употреба %<--%> на логичкој променљивој %qD"
+
+#. ARM $3.4
+#: cp/typeck.c:4071
+#, gcc-internal-format
+msgid "ISO C++ forbids taking address of function %<::main%>"
+msgstr "ИСО Ц++ забрањује узимање адреÑе функције %<::main%>"
+
+#. An expression like &memfn.
+#: cp/typeck.c:4125
+#, gcc-internal-format
+msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>"
+msgstr "ИСО Ц++ забрањује узимање адреÑе неодређене или заграћене неÑтатичке чланÑке функције, за добијање показивача на чланÑку функцију. Употребите %<&%T::%D%>"
+
+#: cp/typeck.c:4130
+#, gcc-internal-format
+msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say %<&%T::%D%>"
+msgstr "ИСО Ц++ забрањује узимање адреÑе везане чланÑке функције за добијање показивача на чланÑку функцију. Употребите %<&%T::%D%>"
+
+#: cp/typeck.c:4158
+#, gcc-internal-format
+msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
+msgstr "ИСО Ц++ забрањује узимање адреÑе претапања у не-л-вредноÑни израз"
+
+#: cp/typeck.c:4178
+#, gcc-internal-format
+msgid "cannot create pointer to reference member %qD"
+msgstr "не може Ñе Ñтворити показивач на упућивачки члан %qD"
+
+#: cp/typeck.c:4410
+#, gcc-internal-format
+msgid "cannot take the address of %<this%>, which is an rvalue expression"
+msgstr "не може Ñе узети адреÑа од %<this%>, јер је д-вредноÑни израз"
+
+#: cp/typeck.c:4433
+#, gcc-internal-format
+msgid "address of explicit register variable %qD requested"
+msgstr "затражена је адреÑа екÑплицитне региÑтарÑке променљиве %qD"
+
+#: cp/typeck.c:4438
+#, gcc-internal-format
+msgid "address requested for %qD, which is declared %<register%>"
+msgstr "затражена је адреÑа од %qD, а деклариÑано је као %<register%>"
+
+#: cp/typeck.c:4504
+#, gcc-internal-format
+msgid "%s expression list treated as compound expression"
+msgstr "лиÑта израза %s узима Ñе као Ñложени израз"
+
+#: cp/typeck.c:4898
+#, gcc-internal-format
+msgid "invalid static_cast from type %qT to type %qT"
+msgstr "неиÑправно Ñтатичко претапање из типа %qT у тип %qT"
+
+#: cp/typeck.c:4920
+#, gcc-internal-format
+msgid "converting from %qT to %qT"
+msgstr "претварање из %qT у %qT"
+
+#: cp/typeck.c:4965
+#, gcc-internal-format
+msgid "invalid cast of an rvalue expression of type %qT to type %qT"
+msgstr "неиÑправно претапање д-вредноÑног израза типа %qT у тип %qT"
+
+#: cp/typeck.c:5024
+#, gcc-internal-format
+msgid "cast from %qT to %qT loses precision"
+msgstr "претапање из %qT у %qT губи на тачноÑти"
+
+#: cp/typeck.c:5051
+#, gcc-internal-format
+msgid "cast from %qT to %qT increases required alignment of target type"
+msgstr "претапање из %qT у %qT повећава неопходно равнање циљног типа"
+
+#. Only issue a warning, as we have always supported this
+#. where possible, and it is necessary in some cases. DR 195
+#. addresses this issue, but as of 2004/10/26 is still in
+#. drafting.
+#: cp/typeck.c:5070
+#, gcc-internal-format
+msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
+msgstr "ИСО Ц++ забрањује претапање између показивача на функцију и показивача на објекат"
+
+#: cp/typeck.c:5081
+#, gcc-internal-format
+msgid "invalid cast from type %qT to type %qT"
+msgstr "неиÑправно претапање из типа %qT у тип %qT"
+
+#: cp/typeck.c:5137
+#, gcc-internal-format
+msgid "invalid use of const_cast with type %qT, which is not a pointer, reference, nor a pointer-to-data-member type"
+msgstr "неиÑправна употреба конÑтантног претапања Ñа типом %qT, који није показивач, нити показивач на чланÑки податак"
+
+#: cp/typeck.c:5146
+#, gcc-internal-format
+msgid "invalid use of const_cast with type %qT, which is a pointer or reference to a function type"
+msgstr "неиÑправна употреба конÑтантног претапања Ñа типом %qT, који је показивач или упућивач на функцијÑки тип"
+
+#: cp/typeck.c:5168
+#, gcc-internal-format
+msgid "invalid const_cast of an rvalue of type %qT to type %qT"
+msgstr "неиÑправно конÑтантно претапање д-вредноÑти типа %qT у тип %qT"
+
+#: cp/typeck.c:5219
+#, gcc-internal-format
+msgid "invalid const_cast from type %qT to type %qT"
+msgstr "неиÑправно конÑтантно претапање из типа %qT у тип %qT"
+
+#: cp/typeck.c:5287 cp/typeck.c:5292
+#, gcc-internal-format
+msgid "ISO C++ forbids casting to an array type %qT"
+msgstr "ИСО Ц++ забрањује претапање у низовни тип %qT"
+
+#: cp/typeck.c:5300
+#, gcc-internal-format
+msgid "invalid cast to function type %qT"
+msgstr "неиÑправно претапање у функцијÑки тип %qT"
+
+#: cp/typeck.c:5516
+#, gcc-internal-format
+msgid " in evaluation of %<%Q(%#T, %#T)%>"
+msgstr " у израчунавању %<%Q(%#T, %#T)%>"
+
+#: cp/typeck.c:5585
+#, gcc-internal-format
+msgid "incompatible types in assignment of %qT to %qT"
+msgstr "неÑаглаÑни типови у додели %qT у %qT"
+
+#: cp/typeck.c:5592
+#, gcc-internal-format
+msgid "ISO C++ forbids assignment of arrays"
+msgstr "ИСО Ц++ забрањује доделу низова"
+
+#: cp/typeck.c:5716
+#, gcc-internal-format
+msgid " in pointer to member function conversion"
+msgstr " у претварању показивача на чланÑку функцију"
+
+#: cp/typeck.c:5727 cp/typeck.c:5753
+#, gcc-internal-format
+msgid "pointer to member cast via virtual base %qT"
+msgstr "претапање показивача на члан преко виртуелне оÑнове %qT"
+
+#: cp/typeck.c:5730
+#, gcc-internal-format
+msgid "pointer to member conversion via virtual base %qT"
+msgstr "претварање показивача на члан преко виртуелне оÑнове %qT"
+
+#: cp/typeck.c:5739
+#, gcc-internal-format
+msgid " in pointer to member conversion"
+msgstr " у претварању показивача на члан"
+
+#: cp/typeck.c:5829
+#, gcc-internal-format
+msgid "invalid conversion to type %qT from type %qT"
+msgstr "неиÑправно претварање у тип %qT из типа %qT"
+
+#: cp/typeck.c:6073
+#, gcc-internal-format
+msgid "cannot convert %qT to %qT for argument %qP to %qD"
+msgstr "не може Ñе претворити %qT у %qT као аргумент %qP за %qD"
+
+#: cp/typeck.c:6076
+#, gcc-internal-format
+msgid "cannot convert %qT to %qT in %s"
+msgstr "не може Ñе претворити %qT у %qT у %s"
+
+#: cp/typeck.c:6087
+#, gcc-internal-format
+msgid "%s might be a candidate for a format attribute"
+msgstr "%s може бити кандидат за форматÑки атрибут"
+
+#: cp/typeck.c:6160 cp/typeck.c:6162
+#, gcc-internal-format
+msgid "in passing argument %P of %q+D"
+msgstr "у проÑлеђивању аргумента %P за %q+D"
+
+#: cp/typeck.c:6212
+#, gcc-internal-format
+msgid "returning reference to temporary"
+msgstr "враћање упућивача на привремени"
+
+#: cp/typeck.c:6219
+#, gcc-internal-format
+msgid "reference to non-lvalue returned"
+msgstr "враћање упућивача на не-л-вредноÑÑ‚"
+
+#: cp/typeck.c:6231
+#, gcc-internal-format
+msgid "reference to local variable %q+D returned"
+msgstr "враћање упућивача на локалну променљиву %q+D"
+
+#: cp/typeck.c:6234
+#, gcc-internal-format
+msgid "address of local variable %q+D returned"
+msgstr "враћање адреÑе локалне променљиве %q+D"
+
+#: cp/typeck.c:6268
+#, gcc-internal-format
+msgid "returning a value from a destructor"
+msgstr "враћање вредноÑти из деÑтруктора"
+
+#. If a return statement appears in a handler of the
+#. function-try-block of a constructor, the program is ill-formed.
+#: cp/typeck.c:6276
+#, gcc-internal-format
+msgid "cannot return from a handler of a function-try-block of a constructor"
+msgstr "не може Ñе враћати из руковаоца у блоку покушаја у конÑтруктору"
+
+#. You can't return a value from a constructor.
+#: cp/typeck.c:6279
+#, gcc-internal-format
+msgid "returning a value from a constructor"
+msgstr "враћање вредноÑти из конÑтруктора"
+
+#: cp/typeck.c:6302
+#, gcc-internal-format
+msgid "return-statement with no value, in function returning %qT"
+msgstr "наредба враћања без вредноÑти, у функцији која враћа %qT"
+
+#: cp/typeck.c:6323
+#, gcc-internal-format
+msgid "return-statement with a value, in function returning 'void'"
+msgstr "наредба враћања Ñа вредношћу, у функцији која враћа ‘void’"
+
+#: cp/typeck.c:6354
+#, gcc-internal-format
+msgid "%<operator new%> must not return NULL unless it is declared %<throw()%> (or -fcheck-new is in effect)"
+msgstr "%<operator new%> не Ñме вратити NULL, оÑим ако је деклариÑан уз %<throw()%> (или је задато -fcheck-new)"
+
+#: cp/typeck2.c:54
+#, gcc-internal-format
+msgid "type %qT is not a base type for type %qT"
+msgstr "тип %qT није оÑновни тип за тип %qT"
+
+#: cp/typeck2.c:294
+#, gcc-internal-format
+msgid "cannot declare variable %q+D to be of abstract type %qT"
+msgstr "не може Ñе деклариÑати променљива %q+D апÑтрактног типа %qT"
+
+#: cp/typeck2.c:297
+#, gcc-internal-format
+msgid "cannot declare parameter %q+D to be of abstract type %qT"
+msgstr "не може Ñе деклариÑати параметар %q+D апÑтрактног типа %qT"
+
+#: cp/typeck2.c:300
+#, gcc-internal-format
+msgid "cannot declare field %q+D to be of abstract type %qT"
+msgstr "не може Ñе деклариÑати поље %q+D апÑтрактног типа %qT"
+
+#: cp/typeck2.c:304
+#, gcc-internal-format
+msgid "invalid abstract return type for member function %q+#D"
+msgstr "неиÑправан апÑтрактни повратни тип за чланÑку функцију %q+#D"
+
+#: cp/typeck2.c:306
+#, gcc-internal-format
+msgid "invalid abstract return type for function %q+#D"
+msgstr "неиÑправан апÑтрактни повратни тип за функцију %q+#D"
+
+#. Here we do not have location information.
+#: cp/typeck2.c:309
+#, gcc-internal-format
+msgid "invalid abstract type %qT for %qE"
+msgstr "неиÑправан апÑтрактни тип %qT за %qE"
+
+#: cp/typeck2.c:311
+#, gcc-internal-format
+msgid "invalid abstract type for %q+D"
+msgstr "неиÑправан апÑтрактни тип за %q+D"
+
+#: cp/typeck2.c:314
+#, gcc-internal-format
+msgid "cannot allocate an object of abstract type %qT"
+msgstr "не може Ñе резервиÑати објекат апÑтрактног типа %qT"
+
+#: cp/typeck2.c:322
+#, gcc-internal-format
+msgid "%J because the following virtual functions are pure within %qT:"
+msgstr "%J јер Ñу Ñледеће виртуелне функције чиÑте у оквиру %qT:"
+
+#: cp/typeck2.c:326
+#, gcc-internal-format
+msgid "\t%+#D"
+msgstr "\t%+#D"
+
+#: cp/typeck2.c:333
+#, gcc-internal-format
+msgid "%J since type %qT has pure virtual functions"
+msgstr "%J пошто тип %qT има чиÑте виртуелне функције"
+
+#: cp/typeck2.c:588
+#, gcc-internal-format
+msgid "constructor syntax used, but no constructor declared for type %qT"
+msgstr "употребљена ÑинтакÑа конÑтруктора, али конÑтруктор није деклариÑан за тип %qT"
+
+#: cp/typeck2.c:602
+#, gcc-internal-format
+msgid "cannot initialize arrays using this syntax"
+msgstr "низ Ñе не може уÑпоÑтављати овом ÑинтакÑом"
+
+#: cp/typeck2.c:678
+#, gcc-internal-format
+msgid "int-array initialized from non-wide string"
+msgstr "int-низ уÑпоÑтављен из не-широке ниÑке"
+
+#: cp/typeck2.c:717
+#, gcc-internal-format
+msgid "cannot initialize aggregate of type %qT with a compound literal"
+msgstr "Ñкупина типа %qT не може Ñе уÑпоÑтављати Ñложеном конÑтантном"
+
+#: cp/typeck2.c:791 cp/typeck2.c:911
+#, gcc-internal-format
+msgid "non-trivial designated initializers not supported"
+msgstr "нетривијални утврђени уÑпоÑтављачи ниÑу подржани"
+
+#: cp/typeck2.c:934 cp/typeck2.c:948
+#, gcc-internal-format
+msgid "missing initializer for member %qD"
+msgstr "недоÑтаје уÑпоÑтављач за члан %qD"
+
+#: cp/typeck2.c:939
+#, gcc-internal-format
+msgid "uninitialized const member %qD"
+msgstr "неуÑпоÑтављени конÑтантни члан %qD"
+
+#: cp/typeck2.c:941
+#, gcc-internal-format
+msgid "member %qD with uninitialized const fields"
+msgstr "члан %qD Ñа неуÑпоÑтављеним конÑтантним пољима"
+
+#: cp/typeck2.c:943
+#, gcc-internal-format
+msgid "member %qD is uninitialized reference"
+msgstr "члан %qD је неуÑпоÑтављен упућивач"
+
+#: cp/typeck2.c:998
+#, gcc-internal-format
+msgid "no field %qD found in union being initialized"
+msgstr "поље %qD није нађено у унији која Ñе уÑпоÑтавља"
+
+#: cp/typeck2.c:1007
+#, gcc-internal-format
+msgid "index value instead of field name in union initializer"
+msgstr "индекÑна вредноÑÑ‚ умеÑто имена поља у уÑпоÑтављачу уније"
+
+#: cp/typeck2.c:1020
+#, gcc-internal-format
+msgid "union %qT with no named members cannot be initialized"
+msgstr "унија %qT без именованих чланова не може Ñе уÑпоÑтављати"
+
+#: cp/typeck2.c:1167
+#, gcc-internal-format
+msgid "circular pointer delegation detected"
+msgstr "откривено кружно проÑлеђивање показивача"
+
+#: cp/typeck2.c:1180
+#, gcc-internal-format
+msgid "base operand of %<->%> has non-pointer type %qT"
+msgstr "оÑновни операнд за %<->%> непоказивачког је типа %qT"
+
+#: cp/typeck2.c:1204
+#, gcc-internal-format
+msgid "result of %<operator->()%> yields non-pointer result"
+msgstr "%<operator->()%> производи непоказивачки резултат"
+
+#: cp/typeck2.c:1206
+#, gcc-internal-format
+msgid "base operand of %<->%> is not a pointer"
+msgstr "оÑновни операнд за %<->%> није показивач"
+
+#: cp/typeck2.c:1230
+#, gcc-internal-format
+msgid "%qE cannot be used as a member pointer, since it is of type %qT"
+msgstr "%qE Ñе не може кориÑтити као чланÑки показивач, пошто је типа %qT"
+
+#: cp/typeck2.c:1239
+#, gcc-internal-format
+msgid "cannot apply member pointer %qE to %qE, which is of non-aggregate type %qT"
+msgstr "чланÑки показивач %qE не може Ñе применити на %qE, које је неÑкупинÑког типа %qT"
+
+#: cp/typeck2.c:1261
+#, gcc-internal-format
+msgid "pointer to member type %qT incompatible with object type %qT"
+msgstr "тип показивача на члан %qT није ÑаглаÑан Ñа типом објекта %qT"
+
+#: cp/typeck2.c:1484
+#, gcc-internal-format
+msgid "call to function %qD which throws incomplete type %q#T"
+msgstr "позив функције %qD која баца непотпун тип %q#T"
+
+#: cp/typeck2.c:1487
+#, gcc-internal-format
+msgid "call to function which throws incomplete type %q#T"
+msgstr "позив функције која баца непотпун тип %q#T"
+
+#: fortran/f95-lang.c:266
+#, gcc-internal-format
+msgid "Unexpected type in truthvalue_conversion"
+msgstr "Ðеочекивани тип у претварању иÑтинитоÑне вредноÑти"
+
+#: fortran/f95-lang.c:319
+#, gcc-internal-format
+msgid "can't open input file: %s"
+msgstr "не могу да отворим улазну датотеку: %s"
+
+#: fortran/f95-lang.c:646
+#, gcc-internal-format
+msgid "global register variable %qs used in nested function"
+msgstr "глобална региÑтарÑка променљива %qs употребљена у угњежденој функцији"
+
+#: fortran/f95-lang.c:650
+#, gcc-internal-format
+msgid "register variable %qs used in nested function"
+msgstr "региÑтарÑка променљива %qs употребљена у угњежденој функцији"
+
+#: fortran/f95-lang.c:657
+#, gcc-internal-format
+msgid "address of global register variable %qs requested"
+msgstr "затражена адреÑа глобалне региÑтарÑке променљиве %qs"
+
+#: fortran/f95-lang.c:675
+#, gcc-internal-format
+msgid "address of register variable %qs requested"
+msgstr "затражена адреÑа региÑтарÑке променљиве %qs"
+
+#: fortran/trans-array.c:3136
+#, gcc-internal-format
+msgid "Possible frontend bug: array constructor not expanded"
+msgstr "Могућа грешка у прочељу: конÑтруктор низа није проширен"
+
+#: fortran/trans-array.c:4271
+#, gcc-internal-format
+msgid "Possible frontend bug: Deferred array size without pointer or allocatable attribute."
+msgstr "Могућа грешка у прочељу: Ðиз одложене величине без показивача или атрибута који Ñе може резервиÑати."
+
+#: fortran/trans-array.c:4722
+#, gcc-internal-format
+msgid "bad expression type during walk (%d)"
+msgstr "лош тип израза током хода (%d)"
+
+#: fortran/trans-const.c:334
+#, gcc-internal-format
+msgid "gfc_conv_constant_to_tree(): invalid type: %s"
+msgstr "gfc_conv_constant_to_tree(): неиÑправан тип: %s"
+
+#: fortran/trans-decl.c:901
+#, gcc-internal-format
+msgid "intrinsic variable which isn't a procedure"
+msgstr "ÑопÑтвена променљива која није процедура"
+
+#: fortran/trans-decl.c:2291
+#, gcc-internal-format
+msgid "Function does not return a value"
+msgstr "Функција не враћа вредноÑÑ‚"
+
+#. I don't think this should ever happen.
+#: fortran/trans-decl.c:2401
+#, gcc-internal-format
+msgid "module symbol %s in wrong namespace"
+msgstr "модулÑки Ñимбол %s у погрешном именÑком проÑтору"
+
+#: fortran/trans-decl.c:2420
+#, gcc-internal-format
+msgid "backend decl for module variable %s already exists"
+msgstr "декларација зачеља за модулÑку променљиву %s већ поÑтоји"
+
+#: fortran/trans-decl.c:2502
+#, gcc-internal-format
+msgid "unused parameter %qs"
+msgstr "неупотребљен параметар %qs"
+
+#: fortran/trans-decl.c:2507
+#, gcc-internal-format
+msgid "unused variable %qs"
+msgstr "неупотребљена променљива %qs"
+
+#: fortran/trans-decl.c:2727
+#, gcc-internal-format
+msgid "Function return value not set"
+msgstr "Повратна вредноÑÑ‚ функције није поÑтављена"
+
+#: fortran/trans-expr.c:1052
+#, gcc-internal-format
+msgid "Unknown intrinsic op"
+msgstr "Ðепознат ÑопÑтвени оператор"
+
+#: fortran/trans-intrinsic.c:651
+#, gcc-internal-format
+msgid "Intrinsic function %s(%d) not recognized"
+msgstr "СопÑтвена функција %s(%d) није препозната"
+
+#: fortran/trans-io.c:1738
+#, gcc-internal-format
+msgid "Bad IO basetype (%d)"
+msgstr "Лош У/И оÑновни тип (%d)"
+
+#: fortran/trans-types.c:213
+#, gcc-internal-format
+msgid "integer kind=8 not available for -fdefault-integer-8 option"
+msgstr "целобројна врÑта =8 није доÑтупна уз опцију -fdefault-integer-8"
+
+#: fortran/trans-types.c:225
+#, gcc-internal-format
+msgid "real kind=8 not available for -fdefault-real-8 option"
+msgstr "реална врÑта =8 није доÑтупна уз опцију -fdefault-real-8"
+
+#: fortran/trans-types.c:238
+#, gcc-internal-format
+msgid "Use of -fdefault-double-8 requires -fdefault-real-8"
+msgstr "Употреба -fdefault-double-8 захтева и -fdefault-real-8"
+
+#: fortran/trans-types.c:950
+#, gcc-internal-format
+msgid "Array element size too big"
+msgstr "Величина елемента низа превелика"
+
+#: fortran/trans.c:625
+#, gcc-internal-format
+msgid "gfc_trans_code(): Bad statement code"
+msgstr "gfc_trans_code(): лош кôд наредбе"
+
+#. I changed this from sorry(...) because it should not return.
+#. TODO: Remove gfc_todo_error before releasing version 1.0.
+#: fortran/trans.h:590
+#, gcc-internal-format
+msgid "gfc_todo: Not Implemented: "
+msgstr "gfc_todo: није имплементирано: "
+
+#: java/check-init.c:248
+#, gcc-internal-format
+msgid "Can't reassign a value to the final variable %qs"
+msgstr "Ðе може Ñе поново доделити вредноÑÑ‚ коначној променљивој %qs"
+
+#: java/check-init.c:518 java/check-init.c:531
+#, gcc-internal-format
+msgid "variable %qD may not have been initialized"
+msgstr "променљива %qD можда није уÑпоÑтављена"
+
+#: java/check-init.c:948
+#, gcc-internal-format
+msgid "internal error in check-init: tree code not implemented: %s"
+msgstr "унутрашња грешка у check-init: кôд Ñтабла није имплементиран: %s"
+
+#: java/check-init.c:1021
+#, gcc-internal-format
+msgid "%Jfinal field %qD may not have been initialized"
+msgstr "%Jконачно поље %qD можда није уÑпоÑтављено"
+
+#: java/class.c:766
+#, gcc-internal-format
+msgid "bad method signature"
+msgstr "лош Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð°"
+
+#: java/class.c:811
+#, gcc-internal-format
+msgid "misplaced ConstantValue attribute (not in any field)"
+msgstr "атрибут ConstantValue на погрешном меÑту (ван поља)"
+
+#: java/class.c:814
+#, gcc-internal-format
+msgid "duplicate ConstantValue attribute for field '%s'"
+msgstr "удвоÑтручени атрибут ConstantValue за поље ‘%s’"
+
+#: java/class.c:825
+#, gcc-internal-format
+msgid "ConstantValue attribute of field '%s' has wrong type"
+msgstr "атрибут ConstantValue поља ‘%s’ има погрешан тип"
+
+#: java/class.c:1453
+#, gcc-internal-format
+msgid "%Jabstract method in non-abstract class"
+msgstr "%JапÑтрактан метод у не-апÑтрактној клаÑи"
+
+#: java/class.c:2389
+#, gcc-internal-format
+msgid "non-static method %q+D overrides static method"
+msgstr "неÑтатички метод %q+D потиÑкује Ñтатички метод"
+
+#: java/decl.c:1328
+#, gcc-internal-format
+msgid "%q+D used prior to declaration"
+msgstr "%q+D употребљено пре деклариÑања"
+
+#: java/decl.c:1369
+#, gcc-internal-format
+msgid "declaration of %qs shadows a parameter"
+msgstr "декларација %qs заклања параметар"
+
+#: java/decl.c:1372
+#, gcc-internal-format
+msgid "declaration of %qs shadows a symbol from the parameter list"
+msgstr "декларација %qs заклања Ñимбол у лиÑти параметара"
+
+#: java/decl.c:1833
+#, gcc-internal-format
+msgid "In %+D: overlapped variable and exception ranges at %d"
+msgstr "У %+D: преклопљена променљива и опÑези изузетака код %d"
+
+#: java/decl.c:1896
+#, gcc-internal-format
+msgid "bad type in parameter debug info"
+msgstr "лош тип у иÑправљачким подацима параметара"
+
+#: java/decl.c:1905
+#, gcc-internal-format
+msgid "bad PC range for debug info for local %q+D"
+msgstr "лош опÑег ПЦа за иÑправљачке податке локалног %q+D"
+
+#: java/expr.c:373
+#, gcc-internal-format
+msgid "need to insert runtime check for %s"
+msgstr "треба убацити проверу при извршавању за %s"
+
+#: java/expr.c:502 java/expr.c:549
+#, gcc-internal-format
+msgid "assert: %s is assign compatible with %s"
+msgstr "тврдња: %s је доделом ÑаглаÑно Ñа %s"
+
+#: java/expr.c:669
+#, gcc-internal-format
+msgid "stack underflow - dup* operation"
+msgstr "подливање Ñтека - dup* операција"
+
+#: java/expr.c:1655
+#, gcc-internal-format
+msgid "reference %qs is ambiguous: appears in interface %qs and interface %qs"
+msgstr "двоÑмиÑлен упућивач %qs: појављује Ñе у Ñучељу %qs и Ñучељу %qs"
+
+#: java/expr.c:1683
+#, gcc-internal-format
+msgid "field %qs not found"
+msgstr "поље %qs није нађено"
+
+#: java/expr.c:2092
+#, gcc-internal-format
+msgid "method '%s' not found in class"
+msgstr "метод ‘%s’ није нађен у клаÑи"
+
+#: java/expr.c:2297
+#, gcc-internal-format
+msgid "failed to find class '%s'"
+msgstr "клаÑа ‘%s’ није нађена"
+
+#: java/expr.c:2335
+#, gcc-internal-format
+msgid "class '%s' has no method named '%s' matching signature '%s'"
+msgstr "клаÑа ‘%s’ нема метод по имену ‘%s’ који одговара потпиÑу ‘%s’"
+
+#: java/expr.c:2366
+#, gcc-internal-format
+msgid "invokestatic on non static method"
+msgstr "invokestatic на неÑтатичком методу"
+
+#: java/expr.c:2371
+#, gcc-internal-format
+msgid "invokestatic on abstract method"
+msgstr "invokestatic на апÑтрактном методу"
+
+#: java/expr.c:2379
+#, gcc-internal-format
+msgid "invoke[non-static] on static method"
+msgstr "invoke[non-static] на Ñтатичком методу"
+
+#: java/expr.c:2705
+#, gcc-internal-format
+msgid "missing field '%s' in '%s'"
+msgstr "недоÑтаје поље ‘%s’ у ‘%s’"
+
+#: java/expr.c:2712
+#, gcc-internal-format
+msgid "mismatching signature for field '%s' in '%s'"
+msgstr "неÑлагање потпиÑа за поље ‘%s’ у ‘%s’"
+
+#: java/expr.c:2735
+#, gcc-internal-format
+msgid "assignment to final field %q+D not in field's class"
+msgstr "додела у коначно поље %q+D није у његовој клаÑи"
+
+#: java/expr.c:2740
+#, gcc-internal-format
+msgid "assignment to final static field %q+D not in class initializer"
+msgstr "додела у коначно Ñтатичко поље %q+D није у уÑпоÑтављачу клаÑе"
+
+#: java/expr.c:2749
+#, gcc-internal-format
+msgid "assignment to final field %q+D not in constructor"
+msgstr "додела у коначно поље %q+D није у конÑтруктору"
+
+#: java/expr.c:2939
+#, gcc-internal-format
+msgid "invalid PC in line number table"
+msgstr "неиÑправан ПЦ у табели бројева линија"
+
+#: java/expr.c:2987
+#, gcc-internal-format
+msgid "unreachable bytecode from %d to before %d"
+msgstr "недоÑтижан бајткод од %d до пре %d"
+
+#: java/expr.c:3029
+#, gcc-internal-format
+msgid "unreachable bytecode from %d to the end of the method"
+msgstr "недоÑтижан бајткод од %d до краја метода"
+
+#. duplicate code from LOAD macro
+#: java/expr.c:3329
+#, gcc-internal-format
+msgid "unrecogized wide sub-instruction"
+msgstr "непрепозната широка подинÑтрукција"
+
+#: java/gjavah.c:718
+#, gcc-internal-format
+msgid "static field has same name as method"
+msgstr "Ñтатичко поље иÑтог имена као и метод"
+
+#: java/gjavah.c:1266
+#, gcc-internal-format
+msgid "couldn't find class %s"
+msgstr "не могу да нађем клаÑу %s"
+
+#: java/gjavah.c:1273
+#, gcc-internal-format
+msgid "parse error while reading %s"
+msgstr "грешка у рашчлањивању при читању %s"
+
+#: java/gjavah.c:1499 java/gjavah.c:1601 java/gjavah.c:1676
+#, gcc-internal-format
+msgid "unparseable signature: '%s'"
+msgstr "нерашчлањив потпиÑ: ‘%s’"
+
+#: java/gjavah.c:2066
+#, gcc-internal-format
+msgid "Not a valid Java .class file."
+msgstr "Ðије иÑправна јаванÑка клаÑна датотека."
+
+#: java/gjavah.c:2074 java/jcf-parse.c:756
+#, gcc-internal-format
+msgid "error while parsing constant pool"
+msgstr "грешка при рашчлањивању депоа конÑтанти"
+
+#: java/gjavah.c:2080
+#, gcc-internal-format
+msgid "error in constant pool entry #%d"
+msgstr "грешка у Ñтавци #%d у депоу конÑтанти"
+
+#: java/gjavah.c:2223
+#, gcc-internal-format
+msgid "class is of array type\n"
+msgstr "клаÑа је низовног типа\n"
+
+#: java/gjavah.c:2231
+#, gcc-internal-format
+msgid "base class is of array type"
+msgstr "оÑновна клаÑа је низовног типа"
+
+#: java/gjavah.c:2429 java/gjavah.c:2556
+#, gcc-internal-format
+msgid "no classes specified"
+msgstr "није наведена ниједна клаÑа"
+
+#: java/gjavah.c:2522
+#, gcc-internal-format
+msgid "'-MG' option is unimplemented"
+msgstr "опција -MG није имплементирана"
+
+#: java/gjavah.c:2564
+#, gcc-internal-format
+msgid "can't specify both -o and -MD"
+msgstr "не може Ñе задати и -o и -MD"
+
+#: java/gjavah.c:2587
+#, gcc-internal-format
+msgid "%s: no such class"
+msgstr "%s: нема такве клаÑе"
+
+#: java/jcf-io.c:550
+#, gcc-internal-format
+msgid "source file for class %qs is newer than its matching class file. Source file %qs used instead"
+msgstr "изворна датотека клаÑе %qs новија је од одговарајуће клаÑне датотеке. Стога Ñе кориÑти изворна датотека %qs"
+
+#: java/jcf-parse.c:372
+#, gcc-internal-format
+msgid "bad string constant"
+msgstr "лоша конÑтантна ниÑка"
+
+#: java/jcf-parse.c:390
+#, gcc-internal-format
+msgid "bad value constant type %d, index %d"
+msgstr "лоша вредноÑÑ‚ конÑтанте типа %d, Ð¸Ð½Ð´ÐµÐºÑ %d"
+
+#: java/jcf-parse.c:582
+#, gcc-internal-format
+msgid "can't reopen %s: %m"
+msgstr "не могу поново да отворим %s: %m"
+
+#: java/jcf-parse.c:589
+#, gcc-internal-format
+msgid "can't close %s: %m"
+msgstr "не могу да затворим %s: %m"
+
+#: java/jcf-parse.c:724 java/jcf-parse.c:730
+#, gcc-internal-format
+msgid "cannot find file for class %s"
+msgstr "не могу да нађем датотеку за клаÑу %s"
+
+#: java/jcf-parse.c:753
+#, gcc-internal-format
+msgid "not a valid Java .class file"
+msgstr "није иÑправна јаванÑка клаÑна датотека"
+
+#. FIXME - where was first time
+#: java/jcf-parse.c:771
+#, gcc-internal-format
+msgid "reading class %s for the second time from %s"
+msgstr "читам клаÑу %s по други пут из %s"
+
+#: java/jcf-parse.c:789
+#, gcc-internal-format
+msgid "error while parsing fields"
+msgstr "грешка при рашчлањивању поља"
+
+#: java/jcf-parse.c:792
+#, gcc-internal-format
+msgid "error while parsing methods"
+msgstr "грешка при рашчлањивању метода"
+
+#: java/jcf-parse.c:795
+#, gcc-internal-format
+msgid "error while parsing final attributes"
+msgstr "грешка при рашчлањивању коначних атрибута"
+
+#: java/jcf-parse.c:812
+#, gcc-internal-format
+msgid "the %<java.lang.Object%> that was found in %qs didn't have the special zero-length %<gnu.gcj.gcj-compiled%> attribute. This generally means that your classpath is incorrectly set. Use %<info gcj \"Input Options\"%> to see the info page describing how to set the classpath"
+msgstr "%<java.lang.Object%> која је нађена у %qs нема поÑебан атрибут %<gnu.gcj.gcj-compiled%> нулте дужине. Ово обично значи да је вам је клаÑна путања погрешно поÑтављена. Позовите %<info gcj \"Input Options\"%> за информације о поÑтављању клаÑне путање"
+
+#: java/jcf-parse.c:846
+#, gcc-internal-format
+msgid "%Hduplicate class will only be compiled once"
+msgstr "%HудвоÑтручена клаÑа ће бити компилована Ñамо једном"
+
+#: java/jcf-parse.c:900
+#, gcc-internal-format
+msgid "missing Code attribute"
+msgstr "недоÑтаје атрибут Code"
+
+#: java/jcf-parse.c:1182
+#, gcc-internal-format
+msgid "no input file specified"
+msgstr "није наведена ниједна улазна датотека"
+
+#: java/jcf-parse.c:1217
+#, gcc-internal-format
+msgid "can't close input file %s: %m"
+msgstr "не могу да затворим улазну датотеку %s: %m"
+
+#: java/jcf-parse.c:1264
+#, gcc-internal-format
+msgid "bad zip/jar file %s"
+msgstr "лоша ЗИП/ЈÐР датотека %s"
+
+#: java/jcf-parse.c:1485
+#, gcc-internal-format
+msgid "error while reading %s from zip file"
+msgstr "грешка при читању %s из ЗИП датотеке"
+
+#: java/jcf-write.c:2668
+#, gcc-internal-format
+msgid "internal error in generate_bytecode_insn - tree code not implemented: %s"
+msgstr "унутрашња грешка у generate_bytecode_insn — кôд Ñтабла није имплементиран: %s"
+
+#: java/jcf-write.c:3042
+#, gcc-internal-format
+msgid "field initializer type mismatch"
+msgstr "неÑлагање типа уÑпоÑтављача поља"
+
+#: java/jcf-write.c:3499
+#, gcc-internal-format
+msgid "can't create directory %s: %m"
+msgstr "не могу да направим директоријум %s: %m"
+
+#: java/jcf-write.c:3532
+#, gcc-internal-format
+msgid "can't open %s for writing: %m"
+msgstr "не могу да отворим %s за пиÑање: %m"
+
+#: java/jcf-write.c:3552
+#, gcc-internal-format
+msgid "can't create %s: %m"
+msgstr "не могу да направим %s: %m"
+
+#: java/jv-scan.c:194
+#, gcc-internal-format
+msgid "only one of '--print-main', '--list-class', and '--complexity' allowed"
+msgstr "дозвољено је Ñамо једно од --print-main, --list-class, и --complexity"
+
+#: java/jv-scan.c:197
+#, gcc-internal-format
+msgid "can't open output file '%s'"
+msgstr "не могу да отворим излазну датотеку ‘%s’"
+
+#: java/jv-scan.c:233
+#, gcc-internal-format
+msgid "file not found '%s'"
+msgstr "датотека није нађена ‘%s’"
+
+#: java/jvspec.c:436
+#, gcc-internal-format
+msgid "warning: already-compiled .class files ignored with -C"
+msgstr "упозорење: већ компиловане клаÑне датотеке игноришу Ñе при -C"
+
+#: java/lang.c:626
+#, gcc-internal-format
+msgid "can't do dependency tracking with input from stdin"
+msgstr "не могу Ñе пратити завиÑноÑти при уноÑу Ñа Ñтдул"
+
+#: java/lang.c:642
+#, gcc-internal-format
+msgid "couldn't determine target name for dependency tracking"
+msgstr "ниÑам могао да одредим име циља ради праћења завиÑноÑти"
+
+#: java/lex.c:260
+#, gcc-internal-format
+msgid ""
+"unknown encoding: %qs\n"
+"This might mean that your locale's encoding is not supported\n"
+"by your system's iconv(3) implementation. If you aren't trying\n"
+"to use a particular encoding for your input file, try the\n"
+"%<--encoding=UTF-8%> option"
+msgstr ""
+"непознато кодирање: %qs\n"
+"Ово може значити да кодирање вашег локалитета није подржано\n"
+"ÑиÑтемÑком имплементацијом iconv(3). Ðко не покушавате да\n"
+"кориÑтите неко поÑебно кодирање за улазну датотеку, покушајте\n"
+"Ñа опцијом %<--encoding=UTF-8%>"
+
+#: java/lex.c:631
+#, gcc-internal-format
+msgid "internal error - bad unget"
+msgstr "унутрашња грешка — лоше unget"
+
+#: java/mangle_name.c:140 java/mangle_name.c:210
+#, gcc-internal-format
+msgid "internal error - invalid Utf8 name"
+msgstr "унутрашња грешка - неиÑправно UTF8-ns име"
+
+#: java/typeck.c:531
+#, gcc-internal-format
+msgid "junk at end of signature string"
+msgstr "Ñмеће на крају ниÑке потпиÑа"
+
+#: java/verify-glue.c:387
+#, gcc-internal-format
+msgid "verification failed: %s"
+msgstr "овера није уÑпела: %s"
+
+#: java/verify-glue.c:389
+#, gcc-internal-format
+msgid "verification failed at PC=%d: %s"
+msgstr "овера није уÑпела код ПЦ=%d: %s"
+
+#: java/verify-glue.c:473
+#, gcc-internal-format
+msgid "bad pc in exception_table"
+msgstr "лош ПЦ у табели изузетака"
+
+#: java/parse.h:129
+#, gcc-internal-format
+msgid "%s method can't be abstract"
+msgstr "Метод %s не може бити апÑтрактан"
+
+#: java/parse.h:133
+#, gcc-internal-format
+msgid "Constructor can't be %s"
+msgstr "КонÑтруктор не може бити %s"
+
+#. Standard error messages
+#: java/parse.h:356
+#, gcc-internal-format
+msgid "Incompatible type for %qs. Can't convert %qs to boolean"
+msgstr "ÐеÑаглаÑни типови за %qs. Ðе може Ñе %qs претворити у логичко"
+
+#: java/parse.h:361
+#, gcc-internal-format
+msgid "Incompatible type for %qs. Can't convert %qs to numeric type"
+msgstr "ÐеÑаглаÑни типови за %qs. Ðе може Ñе %qs претворити у бројевни тип"
+
+#: java/parse.h:369
+#, gcc-internal-format
+msgid "Incompatible type for %qs. Explicit cast needed to convert %qs to integral"
+msgstr "ÐеÑаглаÑни типови за %qs. За претварање %qs у интегрално, потребно је екÑплицитно претапање"
+
+#: java/parse.h:374
+#, gcc-internal-format
+msgid "Incompatible type for %qs. Can't convert %qs to integral"
+msgstr "ÐеÑаглаÑни типови за %qs. Ðе може Ñе %qs претворити у интегрално"
+
+#: java/parse.h:381
+#, gcc-internal-format
+msgid "Variable %qs may not have been initialized"
+msgstr "Променљива %qs можда није уÑпоÑтављена"
+
+#: objc/objc-act.c:710
+#, gcc-internal-format
+msgid "%<@end%> must appear in an @implementation context"
+msgstr "%<@end%> Ñе мора јавити у контекÑту @implementation"
+
+#: objc/objc-act.c:739
+#, gcc-internal-format
+msgid "method declaration not in @interface context"
+msgstr "декларација метода није у контекÑту @interface"
+
+#: objc/objc-act.c:750
+#, gcc-internal-format
+msgid "method definition not in @implementation context"
+msgstr "дефиниција метода није у контекÑту @implementation"
+
+#: objc/objc-act.c:1174
+#, gcc-internal-format
+msgid "comparison of distinct Objective-C types lacks a cast"
+msgstr "поређењу различитих типова објективног Ц-а недоÑтаје претапање"
+
+#: objc/objc-act.c:1178
+#, gcc-internal-format
+msgid "initialization from distinct Objective-C type"
+msgstr "уÑпоÑтављање из различитог типа објективног Ц-а"
+
+#: objc/objc-act.c:1182
+#, gcc-internal-format
+msgid "assignment from distinct Objective-C type"
+msgstr "додела из различитог типа објективног Ц-а"
+
+#: objc/objc-act.c:1186
+#, gcc-internal-format
+msgid "distinct Objective-C type in return"
+msgstr "враћање различитог типа објективног Ц-а"
+
+#: objc/objc-act.c:1190
+#, gcc-internal-format
+msgid "passing argument %d of %qE from distinct Objective-C type"
+msgstr "проÑлеђивање аргумента %d за %qE из различитог типа објективног Ц-а"
+
+#: objc/objc-act.c:1345
+#, gcc-internal-format
+msgid "statically allocated instance of Objective-C class %qs"
+msgstr "Ñтатички резервиÑан примерак клаÑе објективног Ц-а %qs"
+
+#: objc/objc-act.c:1416
+#, gcc-internal-format
+msgid "protocol %qs has circular dependency"
+msgstr "протокол %qs има кружну завиÑноÑÑ‚"
+
+#: objc/objc-act.c:1438 objc/objc-act.c:6571
+#, gcc-internal-format
+msgid "cannot find protocol declaration for %qs"
+msgstr "не могу да нађем декларацију протокола за %qs"
+
+#: objc/objc-act.c:1905 objc/objc-act.c:3339 objc/objc-act.c:7183
+#: objc/objc-act.c:7519 objc/objc-act.c:7573 objc/objc-act.c:7598
+#, gcc-internal-format
+msgid "cannot find interface declaration for %qs"
+msgstr "не могу да нађем декларацију Ñучеља за %qs"
+
+#: objc/objc-act.c:1909
+#, gcc-internal-format
+msgid "interface %qs does not have valid constant string layout"
+msgstr "Ñучеље %qs нема иÑправан раÑпоред конÑтантних ниÑки"
+
+#: objc/objc-act.c:1914
+#, gcc-internal-format
+msgid "cannot find reference tag for class %qs"
+msgstr "не могу да нађем ознаку упућивача за клаÑу %qs"
+
+#: objc/objc-act.c:2539
+#, gcc-internal-format
+msgid "%Hcreating selector for nonexistent method %qE"
+msgstr "%Hправи Ñе Ñелектор за непоÑтојећи метод %qE"
+
+#: objc/objc-act.c:2741
+#, gcc-internal-format
+msgid "%qs is not an Objective-C class name or alias"
+msgstr "%qs није име клаÑе или алијаÑа објективног Ц-а"
+
+#: objc/objc-act.c:2867 objc/objc-act.c:2898 objc/objc-act.c:7447
+#: objc/objc-act.c:7748 objc/objc-act.c:7778
+#, gcc-internal-format
+msgid "Objective-C declarations may only appear in global scope"
+msgstr "декларације објективног Ц-а могу Ñе јављати Ñамо у глобалном доÑегу"
+
+#: objc/objc-act.c:2872
+#, gcc-internal-format
+msgid "cannot find class %qs"
+msgstr "не могу да нађем клаÑу %qs"
+
+#: objc/objc-act.c:2874
+#, gcc-internal-format
+msgid "class %qs already exists"
+msgstr "клаÑа %qs већ поÑтоји"
+
+#: objc/objc-act.c:2918 objc/objc-act.c:7488
+#, gcc-internal-format
+msgid "%qs redeclared as different kind of symbol"
+msgstr "%qs поново деклариÑано као различита врÑта Ñимбола"
+
+#: objc/objc-act.c:3192
+#, gcc-internal-format
+msgid "strong-cast assignment has been intercepted"
+msgstr "преÑретнута је додела Ñ Ñ˜Ð°ÐºÐ¸Ð¼ претапањем"
+
+#: objc/objc-act.c:3234
+#, gcc-internal-format
+msgid "strong-cast may possibly be needed"
+msgstr "може бити потребно јако претапање"
+
+#: objc/objc-act.c:3244
+#, gcc-internal-format
+msgid "instance variable assignment has been intercepted"
+msgstr "преÑретнута је додела променљиве примерка"
+
+#: objc/objc-act.c:3263
+#, gcc-internal-format
+msgid "pointer arithmetic for garbage-collected objects not allowed"
+msgstr "није дозвољена показивачка аритметика за објекте над којима Ñе Ñакупља Ñмеће"
+
+#: objc/objc-act.c:3269
+#, gcc-internal-format
+msgid "global/static variable assignment has been intercepted"
+msgstr "преÑретнута је додела глобалне/Ñтатичке променљиве"
+
+#: objc/objc-act.c:3452
+#, gcc-internal-format
+msgid "use %<-fobjc-exceptions%> to enable Objective-C exception syntax"
+msgstr "употребите %<-fobjc-exceptions%> да укључите ÑинтакÑу изузетака објективног Ц-а"
+
+#: objc/objc-act.c:3794
+#, gcc-internal-format
+msgid "@catch parameter is not a known Objective-C class type"
+msgstr "параметар уз @catch није познати тип клаÑе објективног Ц-а"
+
+#: objc/objc-act.c:3810
+#, gcc-internal-format
+msgid "exception of type %<%T%> will be caught"
+msgstr "биће ухваћен изузетак типа %<%T%>"
+
+#: objc/objc-act.c:3812
+#, gcc-internal-format
+msgid "%H by earlier handler for %<%T%>"
+msgstr "%H дејÑтвом ранијег руковаоца за %<%T%>"
+
+#: objc/objc-act.c:3865
+#, gcc-internal-format
+msgid "%<@try%> without %<@catch%> or %<@finally%>"
+msgstr "%<@try%> без %<@catch%> или %<@finally%>"
+
+#: objc/objc-act.c:3913
+#, gcc-internal-format
+msgid "%<@throw%> (rethrow) used outside of a @catch block"
+msgstr "%<@throw%> (поновно) употребљено изван блока @catch"
+
+#: objc/objc-act.c:4311
+#, gcc-internal-format
+msgid "type %q+D does not have a known size"
+msgstr "тип %q+D нема познату величину"
+
+#: objc/objc-act.c:4944
+#, gcc-internal-format
+msgid "%J%s %qs"
+msgstr "%J%s %qs"
+
+#: objc/objc-act.c:4967 objc/objc-act.c:4986
+#, gcc-internal-format
+msgid "inconsistent instance variable specification"
+msgstr "неуÑаглашена одредница променљиве примерка"
+
+#: objc/objc-act.c:5843
+#, gcc-internal-format
+msgid "can not use an object as parameter to a method"
+msgstr "не може Ñе кориÑтити објекат као параметар за метод"
+
+#: objc/objc-act.c:6066
+#, gcc-internal-format
+msgid "multiple %s named %<%c%s%> found"
+msgstr "нађено више %s по имену %<%c%s%>"
+
+#: objc/objc-act.c:6295
+#, gcc-internal-format
+msgid "no super class declared in @interface for %qs"
+msgstr "надклаÑа није деклариÑана у @interface за %qs"
+
+#: objc/objc-act.c:6333
+#, gcc-internal-format
+msgid "found %<-%s%> instead of %<+%s%> in protocol(s)"
+msgstr "у протоколима нађено %<-%s%> умеÑто %<+%s%>"
+
+#: objc/objc-act.c:6392
+#, gcc-internal-format
+msgid "invalid receiver type %qs"
+msgstr "неиÑправан тип примаоца %qs"
+
+#: objc/objc-act.c:6407
+#, gcc-internal-format
+msgid "%<%c%s%> not found in protocol(s)"
+msgstr "%<%c%s%> није нађено у протоколима"
+
+#: objc/objc-act.c:6421
+#, gcc-internal-format
+msgid "%qs may not respond to %<%c%s%>"
+msgstr "%qs можда неће одговорити на %<%c%s%>"
+
+#: objc/objc-act.c:6429
+#, gcc-internal-format
+msgid "no %<%c%s%> method found"
+msgstr "метод %<%c%s%> није нађен"
+
+#: objc/objc-act.c:6435
+#, gcc-internal-format
+msgid "(Messages without a matching method signature"
+msgstr "(За поруке без одговарајућег потпиÑа метода"
+
+#: objc/objc-act.c:6436
+#, gcc-internal-format
+msgid "will be assumed to return %<id%> and accept"
+msgstr "биће Ñматрано да враћају %<id%> и прихватају"
+
+#: objc/objc-act.c:6437
+#, gcc-internal-format
+msgid "%<...%> as arguments.)"
+msgstr "%<...%> за аргументе.)"
+
+#: objc/objc-act.c:6670
+#, gcc-internal-format
+msgid "undeclared selector %qs"
+msgstr "недеклариÑани Ñелектор %qs"
+
+#. Historically, a class method that produced objects (factory
+#. method) would assign `self' to the instance that it
+#. allocated. This would effectively turn the class method into
+#. an instance method. Following this assignment, the instance
+#. variables could be accessed. That practice, while safe,
+#. violates the simple rule that a class method should not refer
+#. to an instance variable. It's better to catch the cases
+#. where this is done unknowingly than to support the above
+#. paradigm.
+#: objc/objc-act.c:6712
+#, gcc-internal-format
+msgid "instance variable %qs accessed in class method"
+msgstr "променљивој примерка %qs приÑтупљено у методу клаÑе"
+
+#: objc/objc-act.c:6944
+#, gcc-internal-format
+msgid "duplicate declaration of method %<%c%s%>"
+msgstr "удвоÑтручена декларација метода %<%c%s%>"
+
+#: objc/objc-act.c:7005
+#, gcc-internal-format
+msgid "duplicate interface declaration for category %<%s(%s)%>"
+msgstr "удвоÑтручена декларација Ñучеља за категорију %<%s(%s)%>"
+
+#: objc/objc-act.c:7032
+#, gcc-internal-format
+msgid "illegal reference type specified for instance variable %qs"
+msgstr "недозвољен тип упућивача наведен за променљиву примерка %qs"
+
+#: objc/objc-act.c:7043
+#, gcc-internal-format
+msgid "instance variable %qs has unknown size"
+msgstr "променљива примерка %qs непознате је величине"
+
+#: objc/objc-act.c:7068
+#, gcc-internal-format
+msgid "type %qs has no default constructor to call"
+msgstr "тип %qs нема подразумевани конÑтруктор за позивање"
+
+#: objc/objc-act.c:7074
+#, gcc-internal-format
+msgid "destructor for %qs shall not be run either"
+msgstr "деÑтруктор за %qs иÑто неће бити извршен"
+
+#. Vtable pointers are Real Bad(tm), since Obj-C cannot
+#. initialize them.
+#: objc/objc-act.c:7086
+#, gcc-internal-format
+msgid "type %qs has virtual member functions"
+msgstr "тип %qs има виртуелне чланÑке функције"
+
+#: objc/objc-act.c:7087
+#, gcc-internal-format
+msgid "illegal aggregate type %qs specified for instance variable %qs"
+msgstr "недозвољен ÑкупинÑки тип %qs наведен за променљиву примерка %qs"
+
+#: objc/objc-act.c:7097
+#, gcc-internal-format
+msgid "type %qs has a user-defined constructor"
+msgstr "тип %qs има кориÑнички дефиниÑан конÑтруктор"
+
+#: objc/objc-act.c:7099
+#, gcc-internal-format
+msgid "type %qs has a user-defined destructor"
+msgstr "тип %qs има кориÑнички дефиниÑан деÑтруктор"
+
+#: objc/objc-act.c:7103
+#, gcc-internal-format
+msgid "C++ constructors and destructors will not be invoked for Objective-C fields"
+msgstr "Ц++ конÑтруктори и деÑтруктори неће бити позивани за поља објективног Ц-а"
+
+#: objc/objc-act.c:7212
+#, gcc-internal-format
+msgid "instance variable %qs is declared private"
+msgstr "променљива примерка %qs деклариÑана је приватном"
+
+#: objc/objc-act.c:7223
+#, gcc-internal-format
+msgid "instance variable %qs is %s; this will be a hard error in the future"
+msgstr "променљива примерка %qs је %s; ово ће у будућноÑти бити тврда грешка"
+
+#: objc/objc-act.c:7230
+#, gcc-internal-format
+msgid "instance variable %qs is declared %s"
+msgstr "променљива примерка %qs деклариÑана је %s"
+
+#: objc/objc-act.c:7256 objc/objc-act.c:7344
+#, gcc-internal-format
+msgid "incomplete implementation of class %qs"
+msgstr "непотпуна имплементација клаÑе %qs"
+
+#: objc/objc-act.c:7260 objc/objc-act.c:7349
+#, gcc-internal-format
+msgid "incomplete implementation of category %qs"
+msgstr "непотпуна имплементација категорије %qs"
+
+#: objc/objc-act.c:7265 objc/objc-act.c:7354
+#, gcc-internal-format
+msgid "method definition for %<%c%s%> not found"
+msgstr "није нађена дефиниција метода за %<%c%s%>"
+
+#: objc/objc-act.c:7395
+#, gcc-internal-format
+msgid "%s %qs does not fully implement the %qs protocol"
+msgstr "%s %qs не имплементира у потпуноÑти протокол %qs"
+
+#: objc/objc-act.c:7453 objc/objc-act.c:9121
+#, gcc-internal-format
+msgid "%<@end%> missing in implementation context"
+msgstr "недоÑтаје %<@end%> у контекÑту имплементације"
+
+#: objc/objc-act.c:7472
+#, gcc-internal-format
+msgid "cannot find interface declaration for %qs, superclass of %qs"
+msgstr "не могу да нађем декларацију Ñучеља за %qs, надклаÑу клаÑе %qs"
+
+#: objc/objc-act.c:7502
+#, gcc-internal-format
+msgid "reimplementation of class %qs"
+msgstr "поновљена имплементација клаÑе %qs"
+
+#: objc/objc-act.c:7534
+#, gcc-internal-format
+msgid "conflicting super class name %qs"
+msgstr "Ñукобљено име надклаÑе %qs"
+
+#: objc/objc-act.c:7536
+#, gcc-internal-format
+msgid "previous declaration of %qs"
+msgstr "претходна декларација %qs"
+
+#: objc/objc-act.c:7550 objc/objc-act.c:7552
+#, gcc-internal-format
+msgid "duplicate interface declaration for class %qs"
+msgstr "удвоÑтручена декларација Ñучеља за клаÑу %qs"
+
+#: objc/objc-act.c:7806
+#, gcc-internal-format
+msgid "duplicate declaration for protocol %qs"
+msgstr "удвоÑтручена декларација за протокол %qs"
+
+#. Add a readable method name to the warning.
+#: objc/objc-act.c:8364
+#, gcc-internal-format
+msgid "%J%s %<%c%s%>"
+msgstr "%J%s %<%c%s%>"
+
+#: objc/objc-act.c:8694
+#, gcc-internal-format
+msgid "no super class declared in interface for %qs"
+msgstr "није деклариÑана надклаÑа у Ñучељу за %qs"
+
+#: objc/objc-act.c:8743
+#, gcc-internal-format
+msgid "[super ...] must appear in a method context"
+msgstr "[super ...] Ñе мора јавити у контекÑту метода"
+
+#: objc/objc-act.c:8783
+#, gcc-internal-format
+msgid "method possibly missing a [super dealloc] call"
+msgstr "методу можда недоÑтаје позив [super dealloc]"
+
+#: objc/objc-act.c:9411
+#, gcc-internal-format
+msgid "local declaration of %qs hides instance variable"
+msgstr "локална декларација %qs Ñакрива променљиву примерка"
+
+#: treelang/tree1.c:278
+#, gcc-internal-format
+msgid "%HDuplicate name %q.*s."
+msgstr "%HУдвоÑтручено име %q.*s."
+
+#: treelang/treetree.c:814
+#, gcc-internal-format
+msgid "Global register variable %qD used in nested function."
+msgstr "Глобална региÑтарÑка променљива %qD употребљена у угњежденој функцији."
+
+#: treelang/treetree.c:818
+#, gcc-internal-format
+msgid "Register variable %qD used in nested function."
+msgstr "РегиÑтарÑка променљива %qD употребљена у угњежденој функцији."
+
+#: treelang/treetree.c:824
+#, gcc-internal-format
+msgid "Address of global register variable %qD requested."
+msgstr "Затражена адреÑа глобалне региÑтарÑке променљиве %qD."
+
+#: treelang/treetree.c:829
+#, gcc-internal-format
+msgid "Address of register variable %qD requested."
+msgstr "Затражена адреÑа региÑтарÑке променљиве %qD."
+
+#: treelang/treetree.c:1214
+#, gcc-internal-format
+msgid "%qD attribute ignored"
+msgstr "атрибут %qD Ñе игнорише"
diff --git a/gcc/predict.c b/gcc/predict.c
index df5d3105953..f8a6a1175f2 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -75,7 +75,6 @@ static sreal real_zero, real_one, real_almost_one, real_br_prob_base,
static void combine_predictions_for_insn (rtx, basic_block);
static void dump_prediction (FILE *, enum br_predictor, int, basic_block, int);
static void predict_paths_leading_to (basic_block, int *, enum br_predictor, enum prediction);
-static bool last_basic_block_p (basic_block);
static void compute_function_frequency (void);
static void choose_function_section (void);
static bool can_predict_insn_p (rtx);
@@ -118,6 +117,13 @@ maybe_hot_bb_p (basic_block bb)
&& (bb->count
< profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
return false;
+ if (!profile_info || !flag_branch_probabilities)
+ {
+ if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
+ return false;
+ if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
+ return true;
+ }
if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
return false;
return true;
@@ -132,6 +138,9 @@ probably_cold_bb_p (basic_block bb)
&& (bb->count
< profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
return true;
+ if ((!profile_info || !flag_branch_probabilities)
+ && cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
+ return true;
if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
return true;
return false;
@@ -143,6 +152,9 @@ probably_never_executed_bb_p (basic_block bb)
{
if (profile_info && flag_branch_probabilities)
return ((bb->count + profile_info->runs / 2) / profile_info->runs) == 0;
+ if ((!profile_info || !flag_branch_probabilities)
+ && cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
+ return true;
return false;
}
@@ -650,6 +662,10 @@ predict_loops (void)
for (j = 0; VEC_iterate (edge, exits, j, ex); j++)
{
tree niter = NULL;
+ HOST_WIDE_INT nitercst;
+ int max = PARAM_VALUE (PARAM_MAX_PREDICTED_ITERATIONS);
+ int probability;
+ enum br_predictor predictor;
if (number_of_iterations_exit (loop, ex, &niter_desc, false))
niter = niter_desc.niter;
@@ -658,20 +674,31 @@ predict_loops (void)
if (TREE_CODE (niter) == INTEGER_CST)
{
- int probability;
- int max = PARAM_VALUE (PARAM_MAX_PREDICTED_ITERATIONS);
if (host_integerp (niter, 1)
&& compare_tree_int (niter, max-1) == -1)
- {
- HOST_WIDE_INT nitercst = tree_low_cst (niter, 1) + 1;
- probability = ((REG_BR_PROB_BASE + nitercst / 2)
- / nitercst);
- }
+ nitercst = tree_low_cst (niter, 1) + 1;
else
- probability = ((REG_BR_PROB_BASE + max / 2) / max);
+ nitercst = max;
+ predictor = PRED_LOOP_ITERATIONS;
+ }
+ /* If we have just one exit and we can derive some information about
+ the number of iterations of the loop from the statements inside
+ the loop, use it to predict this exit. */
+ else if (n_exits == 1)
+ {
+ nitercst = estimated_loop_iterations_int (loop, false);
+ if (nitercst < 0)
+ continue;
+ if (nitercst > max)
+ nitercst = max;
- predict_edge (ex, PRED_LOOP_ITERATIONS, probability);
+ predictor = PRED_LOOP_ITERATIONS_GUESSED;
}
+ else
+ continue;
+
+ probability = ((REG_BR_PROB_BASE + nitercst / 2) / nitercst);
+ predict_edge (ex, predictor, probability);
}
VEC_free (edge, heap, exits);
@@ -706,7 +733,11 @@ predict_loops (void)
/* Loop exit heuristics - predict an edge exiting the loop if the
conditional has no loop header successors as not taken. */
- if (!header_found)
+ if (!header_found
+ /* If we already used more reliable loop exit predictors, do not
+ bother with PRED_LOOP_EXIT. */
+ && !predicted_by_p (bb, PRED_LOOP_ITERATIONS_GUESSED)
+ && !predicted_by_p (bb, PRED_LOOP_ITERATIONS))
{
/* For loop with many exits we don't want to predict all exits
with the pretty large probability, because if all exits are
@@ -1133,7 +1164,7 @@ return_prediction (tree val, enum prediction *prediction)
&& (!integer_zerop (val) && !integer_onep (val)))
{
*prediction = TAKEN;
- return PRED_NEGATIVE_RETURN;
+ return PRED_CONST_RETURN;
}
}
return PRED_NO_PREDICTION;
@@ -1216,6 +1247,7 @@ tree_bb_level_predictions (void)
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
tree stmt = bsi_stmt (bsi);
+ tree decl;
switch (TREE_CODE (stmt))
{
case GIMPLE_MODIFY_STMT:
@@ -1230,6 +1262,12 @@ call_expr:;
if (call_expr_flags (stmt) & ECF_NORETURN)
predict_paths_leading_to (bb, heads, PRED_NORETURN,
NOT_TAKEN);
+ decl = get_callee_fndecl (stmt);
+ if (decl
+ && lookup_attribute ("cold",
+ DECL_ATTRIBUTES (decl)))
+ predict_paths_leading_to (bb, heads, PRED_COLD_FUNCTION,
+ NOT_TAKEN);
break;
default:
break;
@@ -1258,6 +1296,7 @@ tree_estimate_probability (void)
tree_bb_level_predictions ();
mark_irreducible_loops ();
+ record_loop_exits ();
if (current_loops)
predict_loops ();
@@ -1270,20 +1309,41 @@ tree_estimate_probability (void)
{
/* Predict early returns to be probable, as we've already taken
care for error returns and other cases are often used for
- fast paths through function. */
- if (e->dest == EXIT_BLOCK_PTR
- && TREE_CODE (last_stmt (bb)) == RETURN_EXPR
- && !single_pred_p (bb))
+ fast paths through function.
+
+ Since we've already removed the return statments, we are
+ looking for CFG like:
+
+ if (conditoinal)
+ {
+ ..
+ goto return_block
+ }
+ some other blocks
+ return_block:
+ return_stmt. */
+ if (e->dest != bb->next_bb
+ && e->dest != EXIT_BLOCK_PTR
+ && single_succ_p (e->dest)
+ && single_succ_edge (e->dest)->dest == EXIT_BLOCK_PTR
+ && TREE_CODE (last_stmt (e->dest)) == RETURN_EXPR)
{
edge e1;
edge_iterator ei1;
- FOR_EACH_EDGE (e1, ei1, bb->preds)
- if (!predicted_by_p (e1->src, PRED_NULL_RETURN)
- && !predicted_by_p (e1->src, PRED_CONST_RETURN)
- && !predicted_by_p (e1->src, PRED_NEGATIVE_RETURN)
- && !last_basic_block_p (e1->src))
- predict_edge_def (e1, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
+ if (single_succ_p (bb))
+ {
+ FOR_EACH_EDGE (e1, ei1, bb->preds)
+ if (!predicted_by_p (e1->src, PRED_NULL_RETURN)
+ && !predicted_by_p (e1->src, PRED_CONST_RETURN)
+ && !predicted_by_p (e1->src, PRED_NEGATIVE_RETURN))
+ predict_edge_def (e1, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
+ }
+ else
+ if (!predicted_by_p (e->src, PRED_NULL_RETURN)
+ && !predicted_by_p (e->src, PRED_CONST_RETURN)
+ && !predicted_by_p (e->src, PRED_NEGATIVE_RETURN))
+ predict_edge_def (e, PRED_TREE_EARLY_RETURN, NOT_TAKEN);
}
/* Look for block we are guarding (ie we dominate it,
@@ -1333,20 +1393,6 @@ tree_estimate_probability (void)
return 0;
}
-/* Check whether this is the last basic block of function. Commonly
- there is one extra common cleanup block. */
-static bool
-last_basic_block_p (basic_block bb)
-{
- if (bb == EXIT_BLOCK_PTR)
- return false;
-
- return (bb->next_bb == EXIT_BLOCK_PTR
- || (bb->next_bb->next_bb == EXIT_BLOCK_PTR
- && single_succ_p (bb)
- && single_succ (bb)->next_bb == EXIT_BLOCK_PTR));
-}
-
/* Sets branch probabilities according to PREDiction and
FLAGS. HEADS[bb->index] should be index of basic block in that we
need to alter branch predictions (i.e. the first of our dominators
@@ -1759,7 +1805,15 @@ compute_function_frequency (void)
basic_block bb;
if (!profile_info || !flag_branch_probabilities)
- return;
+ {
+ if (lookup_attribute ("cold", DECL_ATTRIBUTES (current_function_decl))
+ != NULL)
+ cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
+ else if (lookup_attribute ("hot", DECL_ATTRIBUTES (current_function_decl))
+ != NULL)
+ cfun->function_frequency = FUNCTION_FREQUENCY_HOT;
+ return;
+ }
cfun->function_frequency = FUNCTION_FREQUENCY_UNLIKELY_EXECUTED;
FOR_EACH_BB (bb)
{
diff --git a/gcc/predict.def b/gcc/predict.def
index 997f4d2cc98..cf31442c175 100644
--- a/gcc/predict.def
+++ b/gcc/predict.def
@@ -52,9 +52,9 @@ DEF_PREDICTOR (PRED_NO_PREDICTION, "no prediction", PROB_ALWAYS, 0)
DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", PROB_ALWAYS,
PRED_FLAG_FIRST_MATCH)
-/* Use number of loop iterations determined by loop unroller to set
- probability. We don't want to use Dempster-Shaffer theory here,
- as the predictions is exact. */
+/* Use number of loop iterations determined by # of iterations
+ analysis to set probability. We don't want to use Dempster-Shaffer
+ theory here, as the predictions is exact. */
DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS,
PRED_FLAG_FIRST_MATCH)
@@ -62,6 +62,10 @@ DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS,
DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY,
PRED_FLAG_FIRST_MATCH)
+/* Use number of loop iterations guessed by the contents of the loop. */
+DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations",
+ PROB_ALWAYS, PRED_FLAG_FIRST_MATCH)
+
/* Branch containing goto is probably not taken. */
DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (56), 0)
@@ -69,54 +73,47 @@ DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (56), 0)
DEF_PREDICTOR (PRED_NORETURN, "noreturn call", HITRATE (99),
PRED_FLAG_FIRST_MATCH)
+/* Branch to basic block containing call marked by cold function attribute. */
+DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", HITRATE (99),
+ PRED_FLAG_FIRST_MATCH)
+
/* Loopback edge is taken. */
-DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (89),
+DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (86),
PRED_FLAG_FIRST_MATCH)
/* Edge causing loop to terminate is probably not taken. */
-DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (90),
+DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (91),
PRED_FLAG_FIRST_MATCH)
-/* Condition emitted by preconditiong code to ensure that variable
- setting number of iterations is greater than initial value of iterator. */
-DEF_PREDICTOR (PRED_LOOP_CONDITION, "loop condition", PROB_VERY_LIKELY, 0)
-
-/* Preconditioning makes linear list of branches. */
-DEF_PREDICTOR (PRED_LOOP_PRECONDITIONING, "loop preconditioning", PROB_VERY_LIKELY, 0)
-
-/* Copied condition for the first iteration of loop is probably true. */
-DEF_PREDICTOR (PRED_LOOP_HEADER, "loop header", HITRATE (64), 0)
-
/* Pointers are usually not NULL. */
-DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (81), 0)
-DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (81), 0)
+DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (85), 0)
+DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (85), 0)
/* NE is probable, EQ not etc... */
DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (79), 0)
DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (71), 0)
DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0)
-DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (79), 0)
-DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (71), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)", HITRATE (70), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)", HITRATE (69), 0)
DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
/* Branch guarding call is probably taken. */
-DEF_PREDICTOR (PRED_CALL, "call", HITRATE (70), 0)
+DEF_PREDICTOR (PRED_CALL, "call", HITRATE (69), 0)
/* Branch causing function to terminate is probably not taken. */
-DEF_PREDICTOR (PRED_EARLY_RETURN, "early return", HITRATE (67), 0)
-DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (67), 0)
+DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (54), 0)
/* Branch containing goto is probably not taken. */
DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (70), 0)
/* Branch ending with return constant is probably not taken. */
-DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (95), 0)
+DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (67), 0)
/* Branch ending with return negative constant is probably not taken. */
DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (96), 0)
/* Branch ending with return; is probably not taken */
-DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (90), 0)
+DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (96), 0)
/* Branches to a mudflap bounds check are extremely unlikely. */
-DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", HITRATE (99), 0)
+DEF_PREDICTOR (PRED_MUDFLAP, "mudflap check", PROB_VERY_LIKELY, 0)
diff --git a/gcc/recog.c b/gcc/recog.c
index a7dc869e7ee..5e1df5cd46c 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1,6 +1,7 @@
/* Subroutines used by or related to instruction recognition.
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
- 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -140,7 +141,7 @@ check_asm_operands (rtx x)
operands = alloca (noperands * sizeof (rtx));
constraints = alloca (noperands * sizeof (char *));
- decode_asm_operands (x, operands, NULL, constraints, NULL);
+ decode_asm_operands (x, operands, NULL, constraints, NULL, NULL);
for (i = 0; i < noperands; i++)
{
@@ -1492,15 +1493,16 @@ asm_noperands (rtx body)
const char *
decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
- const char **constraints, enum machine_mode *modes)
+ const char **constraints, enum machine_mode *modes,
+ location_t *loc)
{
int i;
int noperands;
- const char *template = 0;
+ rtx asmop = 0;
if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) == ASM_OPERANDS)
{
- rtx asmop = SET_SRC (body);
+ asmop = SET_SRC (body);
/* Single output operand: BODY is (set OUTPUT (asm_operands ....)). */
noperands = ASM_OPERANDS_INPUT_LENGTH (asmop) + 1;
@@ -1527,11 +1529,10 @@ decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
constraints[0] = ASM_OPERANDS_OUTPUT_CONSTRAINT (asmop);
if (modes)
modes[0] = GET_MODE (SET_DEST (body));
- template = ASM_OPERANDS_TEMPLATE (asmop);
}
else if (GET_CODE (body) == ASM_OPERANDS)
{
- rtx asmop = body;
+ asmop = body;
/* No output operands: BODY is (asm_operands ....). */
noperands = ASM_OPERANDS_INPUT_LENGTH (asmop);
@@ -1549,17 +1550,18 @@ decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
if (modes)
modes[i] = ASM_OPERANDS_INPUT_MODE (asmop, i);
}
- template = ASM_OPERANDS_TEMPLATE (asmop);
}
else if (GET_CODE (body) == PARALLEL
&& GET_CODE (XVECEXP (body, 0, 0)) == SET
&& GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) == ASM_OPERANDS)
{
- rtx asmop = SET_SRC (XVECEXP (body, 0, 0));
int nparallel = XVECLEN (body, 0); /* Includes CLOBBERs. */
- int nin = ASM_OPERANDS_INPUT_LENGTH (asmop);
+ int nin;
int nout = 0; /* Does not include CLOBBERs. */
+ asmop = SET_SRC (XVECEXP (body, 0, 0));
+ nin = ASM_OPERANDS_INPUT_LENGTH (asmop);
+
/* At least one output, plus some CLOBBERs. */
/* The outputs are in the SETs.
@@ -1591,16 +1593,16 @@ decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
if (modes)
modes[i + nout] = ASM_OPERANDS_INPUT_MODE (asmop, i);
}
-
- template = ASM_OPERANDS_TEMPLATE (asmop);
}
else if (GET_CODE (body) == PARALLEL
&& GET_CODE (XVECEXP (body, 0, 0)) == ASM_OPERANDS)
{
/* No outputs, but some CLOBBERs. */
- rtx asmop = XVECEXP (body, 0, 0);
- int nin = ASM_OPERANDS_INPUT_LENGTH (asmop);
+ int nin;
+
+ asmop = XVECEXP (body, 0, 0);
+ nin = ASM_OPERANDS_INPUT_LENGTH (asmop);
for (i = 0; i < nin; i++)
{
@@ -1614,10 +1616,19 @@ decode_asm_operands (rtx body, rtx *operands, rtx **operand_locs,
modes[i] = ASM_OPERANDS_INPUT_MODE (asmop, i);
}
- template = ASM_OPERANDS_TEMPLATE (asmop);
}
- return template;
+ if (loc)
+ {
+#ifdef USE_MAPPED_LOCATION
+ *loc = ASM_OPERANDS_SOURCE_LOCATION (asmop);
+#else
+ loc->file = ASM_OPERANDS_SOURCE_FILE (asmop);
+ loc->line = ASM_OPERANDS_SOURCE_LINE (asmop);
+#endif
+ }
+
+ return ASM_OPERANDS_TEMPLATE (asmop);
}
/* Check if an asm_operand matches its constraints.
@@ -2086,7 +2097,7 @@ extract_insn (rtx insn)
decode_asm_operands (body, recog_data.operand,
recog_data.operand_loc,
recog_data.constraints,
- recog_data.operand_mode);
+ recog_data.operand_mode, NULL);
if (noperands > 0)
{
const char *p = recog_data.constraints[0];
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index f21d833c00b..0103a2f0475 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -815,9 +815,19 @@ emit_swap_insn (rtx insn, stack regstack, rtx reg)
hard_regno = get_hard_regnum (regstack, reg);
- gcc_assert (hard_regno >= FIRST_STACK_REG);
if (hard_regno == FIRST_STACK_REG)
return;
+ if (hard_regno == -1)
+ {
+ /* Something failed if the register wasn't on the stack. If we had
+ malformed asms, we zapped the instruction itself, but that didn't
+ produce the same pattern of register sets as before. To prevent
+ further failure, adjust REGSTACK to include REG at TOP. */
+ gcc_assert (any_malformed_asm);
+ regstack->reg[++regstack->top] = REGNO (reg);
+ return;
+ }
+ gcc_assert (hard_regno >= FIRST_STACK_REG);
other_reg = regstack->top - (hard_regno - FIRST_STACK_REG);
@@ -1749,7 +1759,7 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
case UNSPEC_FSCALE_FRACT:
case UNSPEC_FPREM_F:
case UNSPEC_FPREM1_F:
- /* These insns operate on the top two stack slots.
+ /* These insns operate on the top two stack slots,
first part of double input, double output insn. */
src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
@@ -1781,22 +1791,12 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
case UNSPEC_FSCALE_EXP:
case UNSPEC_FPREM_U:
case UNSPEC_FPREM1_U:
- /* These insns operate on the top two stack slots./
+ /* These insns operate on the top two stack slots,
second part of double input, double output insn. */
src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
- src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
- src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
-
- /* Inputs should never die, they are
- replaced with outputs. */
- gcc_assert (!src1_note);
- gcc_assert (!src2_note);
-
- swap_to_top (insn, regstack, *src1, *src2);
-
/* Push the result back onto stack. Fill empty slot from
first part of insn and fix top of stack pointer. */
if (STACK_REG_P (*dest))
@@ -1810,6 +1810,17 @@ subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
replace_reg (src2, FIRST_STACK_REG + 1);
break;
+ case UNSPEC_C2_FLAG:
+ /* This insn operates on the top two stack slots,
+ third part of C2 setting double input insn. */
+
+ src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
+ src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
+
+ replace_reg (src1, FIRST_STACK_REG);
+ replace_reg (src2, FIRST_STACK_REG + 1);
+ break;
+
case UNSPEC_SAHF:
/* (unspec [(unspec [(compare)] UNSPEC_FNSTSW)] UNSPEC_SAHF)
The combination matches the PPRO fcomi instruction. */
@@ -3141,7 +3152,8 @@ reg_to_stack (void)
the PIC register hasn't been set up. In that case, fall back
on zero, which we can get from `ldz'. */
- if (flag_pic)
+ if ((flag_pic && !TARGET_64BIT)
+ || ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC)
not_a_num = CONST0_RTX (SFmode);
else
{
diff --git a/gcc/reload.c b/gcc/reload.c
index 21c5ed20026..c297494f119 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -5543,16 +5543,20 @@ find_reloads_address_1 (enum machine_mode mode, rtx x, int context,
auto-modify by a constant then we could try replacing a pseudo
register with its equivalent constant where applicable.
+ We also handle the case where the register was eliminated
+ resulting in a PLUS subexpression.
+
If we later decide to reload the whole PRE_MODIFY or
POST_MODIFY, inc_for_reload might clobber the reload register
before reading the index. The index register might therefore
need to live longer than a TYPE reload normally would, so be
conservative and class it as RELOAD_OTHER. */
- if (REG_P (XEXP (op1, 1)))
- if (!REGNO_OK_FOR_INDEX_P (REGNO (XEXP (op1, 1))))
- find_reloads_address_1 (mode, XEXP (op1, 1), 1, code, SCRATCH,
- &XEXP (op1, 1), opnum, RELOAD_OTHER,
- ind_levels, insn);
+ if ((REG_P (XEXP (op1, 1))
+ && !REGNO_OK_FOR_INDEX_P (REGNO (XEXP (op1, 1))))
+ || GET_CODE (XEXP (op1, 1)) == PLUS)
+ find_reloads_address_1 (mode, XEXP (op1, 1), 1, code, SCRATCH,
+ &XEXP (op1, 1), opnum, RELOAD_OTHER,
+ ind_levels, insn);
gcc_assert (REG_P (XEXP (op1, 0)));
@@ -5733,43 +5737,6 @@ find_reloads_address_1 (enum machine_mode mode, rtx x, int context,
}
return value;
}
-
- else if (MEM_P (XEXP (x, 0)))
- {
- /* This is probably the result of a substitution, by eliminate_regs,
- of an equivalent address for a pseudo that was not allocated to a
- hard register. Verify that the specified address is valid and
- reload it into a register. */
- /* Variable `tem' might or might not be used in FIND_REG_INC_NOTE. */
- rtx tem ATTRIBUTE_UNUSED = XEXP (x, 0);
- rtx link;
- int reloadnum;
-
- /* Since we know we are going to reload this item, don't decrement
- for the indirection level.
-
- Note that this is actually conservative: it would be slightly
- more efficient to use the value of SPILL_INDIRECT_LEVELS from
- reload1.c here. */
- /* We can't use ADDR_TYPE (type) here, because we need to
- write back the value after reading it, hence we actually
- need two registers. */
- find_reloads_address (GET_MODE (x), &XEXP (x, 0),
- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
- opnum, type, ind_levels, insn);
-
- reloadnum = push_reload (x, NULL_RTX, loc, (rtx*) 0,
- context_reg_class,
- GET_MODE (x), VOIDmode, 0, 0, opnum, type);
- rld[reloadnum].inc
- = find_inc_amount (PATTERN (this_insn), XEXP (x, 0));
-
- link = FIND_REG_INC_NOTE (this_insn, tem);
- if (link != 0)
- push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
-
- return 1;
- }
return 0;
case TRUNCATE:
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c86b2bd429f..2aad6b0c15a 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1365,7 +1365,7 @@ maybe_fix_stack_asms (void)
/* Get the operand values and constraints out of the insn. */
decode_asm_operands (pat, recog_data.operand, recog_data.operand_loc,
- constraints, operand_mode);
+ constraints, operand_mode, NULL);
/* For every operand, see what registers are allowed. */
for (i = 0; i < noperands; i++)
@@ -2548,6 +2548,30 @@ eliminate_regs_1 (rtx x, enum machine_mode mem_mode, rtx insn,
case POST_INC:
case PRE_DEC:
case POST_DEC:
+ /* We do not support elimination of a register that is modified.
+ elimination_effects has already make sure that this does not
+ happen. */
+ return x;
+
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ /* We do not support elimination of a register that is modified.
+ elimination_effects has already make sure that this does not
+ happen. The only remaining case we need to consider here is
+ that the increment value may be an eliminable register. */
+ if (GET_CODE (XEXP (x, 1)) == PLUS
+ && XEXP (XEXP (x, 1), 0) == XEXP (x, 0))
+ {
+ rtx new = eliminate_regs_1 (XEXP (XEXP (x, 1), 1), mem_mode,
+ insn, true);
+
+ if (new != XEXP (XEXP (x, 1), 1))
+ return gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (x, 0),
+ gen_rtx_PLUS (GET_MODE (x),
+ XEXP (x, 0), new));
+ }
+ return x;
+
case STRICT_LOW_PART:
case NEG: case NOT:
case SIGN_EXTEND: case ZERO_EXTEND:
@@ -2743,6 +2767,14 @@ elimination_effects (rtx x, enum machine_mode mem_mode)
case POST_DEC:
case POST_MODIFY:
case PRE_MODIFY:
+ /* If we modify the source of an elimination rule, disable it. */
+ for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
+ if (ep->from_rtx == XEXP (x, 0))
+ ep->can_eliminate = 0;
+
+ /* If we modify the target of an elimination rule by adding a constant,
+ update its offset. If we modify the target in any other way, we'll
+ have to disable the rule as well. */
for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
if (ep->to_rtx == XEXP (x, 0))
{
@@ -2757,11 +2789,15 @@ elimination_effects (rtx x, enum machine_mode mem_mode)
ep->offset += size;
else if (code == PRE_INC || code == POST_INC)
ep->offset -= size;
- else if ((code == PRE_MODIFY || code == POST_MODIFY)
- && GET_CODE (XEXP (x, 1)) == PLUS
- && XEXP (x, 0) == XEXP (XEXP (x, 1), 0)
- && CONSTANT_P (XEXP (XEXP (x, 1), 1)))
- ep->offset -= INTVAL (XEXP (XEXP (x, 1), 1));
+ else if (code == PRE_MODIFY || code == POST_MODIFY)
+ {
+ if (GET_CODE (XEXP (x, 1)) == PLUS
+ && XEXP (x, 0) == XEXP (XEXP (x, 1), 0)
+ && CONST_INT_P (XEXP (XEXP (x, 1), 1)))
+ ep->offset -= INTVAL (XEXP (XEXP (x, 1), 1));
+ else
+ ep->can_eliminate = 0;
+ }
}
/* These two aren't unary operators. */
diff --git a/gcc/rtl.def b/gcc/rtl.def
index 7a04d88735c..a49f1649e8a 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -168,15 +168,15 @@ DEF_RTL_EXPR(COND_EXEC, "cond_exec", "ee", RTX_EXTRA)
/* Several operations to be done in parallel (perhaps under COND_EXEC). */
DEF_RTL_EXPR(PARALLEL, "parallel", "E", RTX_EXTRA)
+#ifdef USE_MAPPED_LOCATION
/* A string that is passed through to the assembler as input.
One can obviously pass comments through by using the
assembler comment syntax.
These occur in an insn all by themselves as the PATTERN.
They also appear inside an ASM_OPERANDS
as a convenient way to hold a string. */
-DEF_RTL_EXPR(ASM_INPUT, "asm_input", "s", RTX_EXTRA)
+DEF_RTL_EXPR(ASM_INPUT, "asm_input", "si", RTX_EXTRA)
-#ifdef USE_MAPPED_LOCATION
/* An assembler instruction with operands.
1st operand is the instruction template.
2nd operand is the constraint for the output.
@@ -190,6 +190,14 @@ DEF_RTL_EXPR(ASM_INPUT, "asm_input", "s", RTX_EXTRA)
6th is the source line number. */
DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEi", RTX_EXTRA)
#else
+/* A string that is passed through to the assembler as input.
+ One can obviously pass comments through by using the
+ assembler comment syntax.
+ These occur in an insn all by themselves as the PATTERN.
+ They also appear inside an ASM_OPERANDS
+ as a convenient way to hold a string. */
+DEF_RTL_EXPR(ASM_INPUT, "asm_input", "ssi", RTX_EXTRA)
+
/* An assembler instruction with operands.
1st operand is the instruction template.
2nd operand is the constraint for the output.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 6bf09aa14a9..5b0f8f48d27 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1090,9 +1090,12 @@ do { \
GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS))
#ifdef USE_MAPPED_LOCATION
#define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCUINT (RTX, 5, ASM_OPERANDS)
+#define ASM_INPUT_SOURCE_LOCATION(RTX) XCUINT (RTX, 1, ASM_INPUT)
#else
#define ASM_OPERANDS_SOURCE_FILE(RTX) XCSTR (RTX, 5, ASM_OPERANDS)
#define ASM_OPERANDS_SOURCE_LINE(RTX) XCINT (RTX, 6, ASM_OPERANDS)
+#define ASM_INPUT_SOURCE_FILE(RTX) XCSTR (RTX, 1, ASM_INPUT)
+#define ASM_INPUT_SOURCE_LINE(RTX) XCINT (RTX, 2, ASM_INPUT)
#endif
/* 1 if RTX is a mem that is statically allocated in read-only memory. */
@@ -1672,6 +1675,8 @@ extern int rtx_varies_p (rtx, int);
extern int rtx_addr_varies_p (rtx, int);
extern HOST_WIDE_INT get_integer_term (rtx);
extern rtx get_related_value (rtx);
+extern bool offset_within_block_p (rtx, HOST_WIDE_INT);
+extern void split_const (rtx, rtx *, rtx *);
extern int reg_mentioned_p (rtx, rtx);
extern int count_occurrences (rtx, rtx, int);
extern int reg_referenced_p (rtx, rtx);
@@ -1765,7 +1770,7 @@ extern void free_reg_info (void);
/* recog.c */
extern int asm_noperands (rtx);
extern const char *decode_asm_operands (rtx, rtx *, rtx **, const char **,
- enum machine_mode *);
+ enum machine_mode *, location_t *);
extern enum reg_class reg_preferred_class (int);
extern enum reg_class reg_alternate_class (int);
@@ -1862,7 +1867,17 @@ extern GTY(()) rtx return_address_pointer_rtx;
#ifndef GENERATOR_FILE
#include "genrtl.h"
-#ifndef USE_MAPPED_LOCATION
+#undef gen_rtx_ASM_INPUT
+#ifdef USE_MAPPED_LOCATION
+#define gen_rtx_ASM_INPUT(MODE, ARG0) \
+ gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), 0)
+#define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC) \
+ gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), (LOC))
+#else
+#define gen_rtx_ASM_INPUT(MODE, ARG0) \
+ gen_rtx_fmt_ssi (ASM_INPUT, (MODE), (ARG0), "", 0)
+#define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC) \
+ gen_rtx_fmt_ssi (ASM_INPUT, (MODE), (ARG0), (LOC).file, (LOC).line)
#undef gen_rtx_ASM_OPERANDS
#define gen_rtx_ASM_OPERANDS(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, LOC) \
gen_rtx_fmt_ssiEEsi (ASM_OPERANDS, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (LOC).file, (LOC).line)
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 00a996e4696..cf9fd1d65af 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -37,6 +37,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "real.h"
#include "regs.h"
#include "function.h"
+#include "tree.h"
/* Information about a subreg of a hard register. */
struct subreg_info
@@ -496,6 +497,61 @@ get_related_value (rtx x)
return 0;
}
+/* Return true if SYMBOL is a SYMBOL_REF and OFFSET + SYMBOL points
+ to somewhere in the same object or object_block as SYMBOL. */
+
+bool
+offset_within_block_p (rtx symbol, HOST_WIDE_INT offset)
+{
+ tree decl;
+
+ if (GET_CODE (symbol) != SYMBOL_REF)
+ return false;
+
+ if (offset == 0)
+ return true;
+
+ if (offset > 0)
+ {
+ if (CONSTANT_POOL_ADDRESS_P (symbol)
+ && offset < (int) GET_MODE_SIZE (get_pool_mode (symbol)))
+ return true;
+
+ decl = SYMBOL_REF_DECL (symbol);
+ if (decl && offset < int_size_in_bytes (TREE_TYPE (decl)))
+ return true;
+ }
+
+ if (SYMBOL_REF_HAS_BLOCK_INFO_P (symbol)
+ && SYMBOL_REF_BLOCK (symbol)
+ && SYMBOL_REF_BLOCK_OFFSET (symbol) >= 0
+ && ((unsigned HOST_WIDE_INT) offset + SYMBOL_REF_BLOCK_OFFSET (symbol)
+ < (unsigned HOST_WIDE_INT) SYMBOL_REF_BLOCK (symbol)->size))
+ return true;
+
+ return false;
+}
+
+/* Split X into a base and a constant offset, storing them in *BASE_OUT
+ and *OFFSET_OUT respectively. */
+
+void
+split_const (rtx x, rtx *base_out, rtx *offset_out)
+{
+ if (GET_CODE (x) == CONST)
+ {
+ x = XEXP (x, 0);
+ if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT)
+ {
+ *base_out = XEXP (x, 0);
+ *offset_out = XEXP (x, 1);
+ return;
+ }
+ }
+ *base_out = x;
+ *offset_out = const0_rtx;
+}
+
/* Return the number of places FIND appears within X. If COUNT_DEST is
zero, we do not count occurrences inside the destination of a SET. */
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 9b4e24f4c05..20ce1aa4d50 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1,6 +1,6 @@
/* Expands front end tree to back end RTL for GCC
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
- 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -260,15 +260,16 @@ n_occurrences (int c, const char *s)
insn is volatile; don't optimize it. */
static void
-expand_asm (tree string, int vol)
+expand_asm_loc (tree string, int vol, location_t locus)
{
rtx body;
if (TREE_CODE (string) == ADDR_EXPR)
string = TREE_OPERAND (string, 0);
- body = gen_rtx_ASM_INPUT (VOIDmode,
- ggc_strdup (TREE_STRING_POINTER (string)));
+ body = gen_rtx_ASM_INPUT_loc (VOIDmode,
+ ggc_strdup (TREE_STRING_POINTER (string)),
+ locus);
MEM_VOLATILE_P (body) = vol;
@@ -1094,7 +1095,7 @@ expand_asm_expr (tree exp)
if (ASM_INPUT_P (exp))
{
- expand_asm (ASM_STRING (exp), ASM_VOLATILE_P (exp));
+ expand_asm_loc (ASM_STRING (exp), ASM_VOLATILE_P (exp), input_location);
return;
}
diff --git a/gcc/target-def.h b/gcc/target-def.h
index 27c58838f65..3a17c121543 100644
--- a/gcc/target-def.h
+++ b/gcc/target-def.h
@@ -1,5 +1,5 @@
/* Default initializers for a generic GCC target.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
@@ -97,6 +97,10 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#define TARGET_ASM_FUNCTION_END_PROLOGUE no_asm_to_stream
#define TARGET_ASM_FUNCTION_BEGIN_EPILOGUE no_asm_to_stream
+#ifndef TARGET_ASM_RELOC_RW_MASK
+#define TARGET_ASM_RELOC_RW_MASK default_reloc_rw_mask
+#endif
+
#ifndef TARGET_ASM_SELECT_SECTION
#define TARGET_ASM_SELECT_SECTION default_select_section
#endif
@@ -190,6 +194,7 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#endif
#define TARGET_DWARF_REGISTER_SPAN hook_rtx_rtx_null
+#define TARGET_INIT_DWARF_REG_SIZES_EXTRA hook_void_tree
#ifndef TARGET_ASM_FILE_START
#define TARGET_ASM_FILE_START default_file_start
@@ -270,6 +275,7 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
TARGET_ASM_FUNCTION_EPILOGUE, \
TARGET_ASM_INIT_SECTIONS, \
TARGET_ASM_NAMED_SECTION, \
+ TARGET_ASM_RELOC_RW_MASK, \
TARGET_ASM_SELECT_SECTION, \
TARGET_ASM_SELECT_RTX_SECTION, \
TARGET_ASM_UNIQUE_SECTION, \
@@ -688,6 +694,7 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
TARGET_ADDRESS_COST, \
TARGET_ALLOCATE_INITIAL_VALUE, \
TARGET_DWARF_REGISTER_SPAN, \
+ TARGET_INIT_DWARF_REG_SIZES_EXTRA, \
TARGET_FIXED_CONDITION_CODE_REGS, \
TARGET_CC_MODES_COMPATIBLE, \
TARGET_MACHINE_DEPENDENT_REORG, \
@@ -728,5 +735,8 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
TARGET_ARM_EABI_UNWINDER \
}
+#define TARGET_HANDLE_C_OPTION default_handle_c_option
+#define TARGETCM_INITIALIZER { TARGET_HANDLE_C_OPTION }
+
#include "hooks.h"
#include "targhooks.h"
diff --git a/gcc/target.h b/gcc/target.h
index 80f5a5acef2..476eb8810b1 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -1,5 +1,5 @@
/* Data structure definitions for a generic GCC target.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
@@ -162,6 +162,12 @@ struct gcc_target
which this section is associated. */
void (* named_section) (const char *name, unsigned int flags, tree decl);
+ /* Return a mask describing how relocations should be treated when
+ selecting sections. Bit 1 should be set if global relocations
+ should be placed in a read-write section; bit 0 should be set if
+ local relocations should be placed in a read-write section. */
+ int (*reloc_rw_mask) (void);
+
/* Return a section for EXP. It may be a DECL or a constant. RELOC
is nonzero if runtime relocations must be applied; bit 1 will be
set if the runtime relocations require non-local name resolution.
@@ -601,6 +607,12 @@ struct gcc_target
hook should return NULL_RTX. */
rtx (* dwarf_register_span) (rtx);
+ /* If expand_builtin_init_dwarf_reg_sizes needs to fill in table
+ entries not corresponding directly to registers below
+ FIRST_PSEUDO_REGISTER, this hook should generate the necessary
+ code, given the address of the table. */
+ void (* init_dwarf_reg_sizes_extra) (tree);
+
/* Fetch the fixed register(s) which hold condition codes, for
targets where it makes sense to look for duplicate assignments to
the condition codes. This should return true if there is such a
@@ -886,4 +898,16 @@ struct gcc_target
extern struct gcc_target targetm;
+struct gcc_targetcm {
+ /* Handle target switch CODE (an OPT_* value). ARG is the argument
+ passed to the switch; it is NULL if no argument was. VALUE is the
+ value of ARG if CODE specifies a UInteger option, otherwise it is
+ 1 if the positive form of the switch was used and 0 if the negative
+ form was. Return true if the switch was valid. */
+ bool (*handle_c_option) (size_t code, const char *arg, int value);
+};
+
+/* Each target can provide their own. */
+extern struct gcc_targetcm targetcm;
+
#endif /* GCC_TARGET_H */
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 982fcdb188e..baad65b0cac 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1,5 +1,5 @@
/* Default target hook functions.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -614,4 +614,21 @@ default_narrow_bitfield (void)
return !STRICT_ALIGNMENT;
}
+bool
+default_handle_c_option (size_t code ATTRIBUTE_UNUSED,
+ const char *arg ATTRIBUTE_UNUSED,
+ int value ATTRIBUTE_UNUSED)
+{
+ return false;
+}
+
+/* By default, if flag_pic is true, then neither local nor global relocs
+ should be placed in readonly memory. */
+
+int
+default_reloc_rw_mask (void)
+{
+ return flag_pic ? 3 : 0;
+}
+
#include "gt-targhooks.h"
diff --git a/gcc/targhooks.h b/gcc/targhooks.h
index b6bd7000097..062d4f0b5b4 100644
--- a/gcc/targhooks.h
+++ b/gcc/targhooks.h
@@ -82,3 +82,5 @@ extern enum reg_class default_secondary_reload (bool, rtx, enum reg_class,
enum machine_mode,
secondary_reload_info *);
extern void hook_void_bitmap (bitmap);
+extern bool default_handle_c_option (size_t, const char *, int);
+extern int default_reloc_rw_mask (void);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index acf266dd8d3..27974a93a51 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,664 @@
+2007-03-15 Dirk Mueller <dmueller@suse.de>
+
+ * g++.dg/warn/Wconversion2.C: New.
+
+2007-03-14 Eric Christopher <echristo@apple.com>
+
+ * gcc.dg/ssp-1.c: New.
+ * gcc.dg/ssp-2.c: Ditto.
+
+2007-03-14 Dirk Mueller <dmueller@suse.de>
+
+ * g++.dg/warn/do-empty.C: New.
+ * gcc.dg/do-empty.c: New.
+ * gcc.dg/if-empty-1.c: Update.
+ * gcc.dg/20001116-1.c: Update.
+ * gcc.dg/pr23165.c: Update.
+
+2007-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * gfortran.dg/module_implicit_conversion.f90: New test.
+
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ PR middle-end/31127
+ * gcc.dg/pr31127.c: New.
+
+2007-03-13 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * gcc.dg/tree-ssa/loop-26.c: New test.
+
+2007-03-13 Uros Bizjak <ubizjak@gmail.com>
+
+ * testsuite/gcc.target/i386/cmpxchg16b-1.c: New test.
+
+2007-03-12 Seongbae Park <seongbae.park@gmail.com>
+
+ * gcc.dg/c90-vla-1.c: Reflect the change of the error message.
+ * gcc.dg/c99-vla-1.c: Likewise.
+ * g++.dg/ext/vla1.C: Likewise
+
+2007-03-12 Seongbae Park <seongbae.park@gmail.com>
+
+ * gcc.dg/wvla-1.c: New test
+ * gcc.dg/wvla-2.c: New test
+ * gcc.dg/wvla-3.c: New test
+ * gcc.dg/wvla-4.c: New test
+ * gcc.dg/wvla-5.c: New test
+ * gcc.dg/wvla-6.c: New test
+ * gcc.dg/wvla-7.c: New test
+ * g++.dg/warn/Wvla-1.C: New test
+ * g++.dg/warn/Wvla-2.C: New test
+ * g++.dg/warn/Wvla-3.C: New test
+
+2007-03-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/30108
+ * g++.dg/other/default6.C: New test.
+
+2007-03-12 Richard Sandiford <richard@codesourcery.com>
+
+ * lib/target-supports.exp (check_profiling_available): Return false
+ for VxWorks.
+ (check_effective_target_vxworks_kernel): New procedure.
+ * gcc.dg/20040813-1.c: Extend list of stabless targets to include
+ VxWorks.
+ * gcc.dg/builtins-config.h: Do not define HAVE_C99_RUNTIME on VxWorks.
+ * gcc.dg/intmax_t-1.c: Extend the list of targets without inttypes.h
+ to include VxWorks.
+ * gcc.dg/vxworks/initpri2.c: Require vxworks_kernel.
+
+2007-03-12 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.c-torture/compile/981006-1.c: Use the non-PIC options if
+ PIC is not supported.
+ * gcc.dg/20020103-1.c: Add dg-require-effective-target fpic.
+ * gcc.dg/20020426-2.c: Likewise.
+ * gcc.dg/pr28243.c: Likewise.
+ * gcc.dg/visibility-11.c: Likewise.
+ * gcc.dg/tls/opt-9.c: Likewise.
+ * gcc.dg/tls/opt-10.c: Likewise.
+ * gcc.dg/tls/pic-1.c: Likewise.
+ * gcc.dg/tls/struct-1.c: Likewise.
+ * gcc.target/i386/20000807-1.c: Likewise.
+ * gcc.target/i386/20000904-1.c: Likewise.
+ * gcc.target/i386/20011119-1.c: Likewise.
+ * gcc.target/i386/990213-2.c: Likewise.
+ * gcc.target/i386/990214-1.c: Likewise.
+ * gcc.target/i386/compress-float-387-pic.c: Likewise.
+ * gcc.target/i386/compress-float-sse-pic.c: Likewise.
+ * gcc.target/i386/pic-1.c: Likewise.
+ * gcc.target/i386/pr21518.c: Likewise.
+ * gcc.target/i386/pr23098.c: Likewise.
+ * gcc.target/i386/pr23943.c: Likewise.
+
+2007-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/31038
+ * g++.dg/template/complit2.C: New test.
+
+ PR c++/30328
+ * g++.dg/ext/bitfield1.C: New test.
+
+2007-03-11 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30883
+ * gfortran.dg/interface_11.f90: New test.
+
+2007-03-11 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/31115
+ * gcc.dg/torture/pr31115.c: New testcase.
+
+2007-03-11 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/29925
+ * gcc.dg/vect/fast-math-vect-pr29925.c: New test.
+
+2007-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/30274
+ * g++.dg/expr/bitfield3.C: New test.
+ * g++.dg/expr/bitfield4.C: Likewise.
+ * g++.dg/expr/bitfield5.C: Likewise.
+ * g++.dg/expr/bitfield6.C: Likewise.
+
+ PR c++/30924
+ * g++.dg/template/array18.C: New test.
+
+2007-03-10 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/17946
+ * gcc.dg/Wlogical-op-1.c: Remove duplicated part.
+ * g++.dg/warn/Wlogical-op-1.C: Remove duplicated part.
+
+2007-03-09 Douglas Gregor <doug.gregor@gmail.com>
+
+ PR c++/20599
+ * g++.dg/cpp0x/variadic-bind.C: New.
+ * g++.dg/cpp0x/variadic-function.C: New.
+ * g++.dg/cpp0x/variadic-mem_fn.C: New.
+ * g++.dg/cpp0x/variadic-tuple.C: New.
+ * g++.dg/cpp0x/variadic1.C: New.
+ * g++.dg/cpp0x/variadic2.C: New.
+ * g++.dg/cpp0x/variadic3.C: New.
+ * g++.dg/cpp0x/variadic4.C: New.
+ * g++.dg/cpp0x/variadic5.C: New.
+ * g++.dg/cpp0x/variadic6.C: New.
+ * g++.dg/cpp0x/variadic7.C: New.
+ * g++.dg/cpp0x/variadic8.C: New.
+ * g++.dg/cpp0x/variadic9.C: New.
+ * g++.dg/cpp0x/variadic10.C: New.
+ * g++.dg/cpp0x/variadic11.C: New.
+ * g++.dg/cpp0x/variadic12.C: New.
+ * g++.dg/cpp0x/variadic13.C: New.
+ * g++.dg/cpp0x/variadic14.C: New.
+ * g++.dg/cpp0x/variadic15.C: New.
+ * g++.dg/cpp0x/variadic16.C: New.
+ * g++.dg/cpp0x/variadic17.C: New.
+ * g++.dg/cpp0x/variadic18.C: New.
+ * g++.dg/cpp0x/variadic19.C: New.
+ * g++.dg/cpp0x/variadic20.C: New.
+ * g++.dg/cpp0x/variadic21.C: New.
+ * g++.dg/cpp0x/variadic22.C: New.
+ * g++.dg/cpp0x/variadic23.C: New.
+ * g++.dg/cpp0x/variadic24.C: New.
+ * g++.dg/cpp0x/variadic25.C: New.
+ * g++.dg/cpp0x/variadic26.C: New.
+ * g++.dg/cpp0x/variadic27.C: New.
+ * g++.dg/cpp0x/variadic28.C: New.
+ * g++.dg/cpp0x/variadic29.C: New.
+ * g++.dg/cpp0x/variadic30.C: New.
+ * g++.dg/cpp0x/variadic31.C: New.
+ * g++.dg/cpp0x/variadic32.C: New.
+ * g++.dg/cpp0x/variadic33.C: New.
+ * g++.dg/cpp0x/variadic34.C: New.
+ * g++.dg/cpp0x/variadic35.C: New.
+ * g++.dg/cpp0x/variadic36.C: New.
+ * g++.dg/cpp0x/variadic37.C: New.
+ * g++.dg/cpp0x/variadic38.C: New.
+ * g++.dg/cpp0x/variadic39.C: New.
+ * g++.dg/cpp0x/variadic40.C: New.
+ * g++.dg/cpp0x/variadic41.C: New.
+ * g++.dg/cpp0x/variadic42.C: New.
+ * g++.dg/cpp0x/variadic43.C: New.
+ * g++.dg/cpp0x/variadic44.C: New.
+ * g++.dg/cpp0x/variadic45.C: New.
+ * g++.dg/cpp0x/variadic46.C: New.
+ * g++.dg/cpp0x/variadic47.C: New.
+ * g++.dg/cpp0x/variadic48.C: New.
+ * g++.dg/cpp0x/variadic49.C: New.
+ * g++.dg/cpp0x/variadic50.C: New.
+ * g++.dg/cpp0x/variadic51.C: New.
+ * g++.dg/cpp0x/variadic52.C: New.
+ * g++.dg/cpp0x/variadic53.C: New.
+ * g++.dg/cpp0x/variadic54.C: New.
+ * g++.dg/cpp0x/variadic55.C: New.
+ * g++.dg/cpp0x/variadic56.C: New.
+ * g++.dg/cpp0x/variadic57.C: New.
+ * g++.dg/cpp0x/variadic58.C: New.
+ * g++.dg/cpp0x/variadic59.C: New.
+ * g++.dg/cpp0x/variadic60.C : New.
+ * g++.dg/cpp0x/variadic61.C : New.
+ * g++.dg/cpp0x/variadic62.C : New.
+ * g++.dg/cpp0x/variadic63.C : New.
+ * g++.dg/cpp0x/variadic64.C : New.
+ * g++.dg/cpp0x/variadic65.C : New.
+ * g++.dg/cpp0x/variadic66.C : New.
+ * g++.dg/cpp0x/variadic67.C : New.
+ * g++.dg/cpp0x/variadic68.C : New.
+ * g++.dg/cpp0x/variadic69.C : New.
+ * g++.dg/cpp0x/variadic70.C : New.
+ * g++.dg/cpp0x/variadic71.C : New.
+ * g++.dg/cpp0x/variadic72.C : New.
+ * g++.dg/cpp0x/variadic73.C : New.
+ * g++.dg/cpp0x/variadic74.C : New.
+ * g++.dg/cpp0x/variadic75.C : New.
+ * g++.dg/cpp0x/variadic-ex1.C : New.
+ * g++.dg/cpp0x/variadic-ex2.C : New.
+ * g++.dg/cpp0x/variadic-ex3.C : New.
+ * g++.dg/cpp0x/variadic-ex4.C : New.
+ * g++.dg/cpp0x/variadic-ex5.C : New.
+ * g++.dg/cpp0x/variadic-ex6.C : New.
+ * g++.dg/cpp0x/variadic-ex7.C : New.
+ * g++.dg/cpp0x/variadic-ex8.C : New.
+ * g++.dg/cpp0x/variadic-ex9.C : New.
+ * g++.dg/cpp0x/variadic-ex10.C : New.
+ * g++.dg/cpp0x/variadic-ex11.C : New.
+ * g++.dg/cpp0x/variadic-ex12.C : New.
+ * g++.dg/cpp0x/variadic-ex13.C : New.
+ * g++.dg/cpp0x/variadic-ex14.C : New.
+
+2007-03-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/31099
+ * gfortran.dg/unformatted_recl.f90: New test.
+
+2007-03-09 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.dg/fold-eqcmplx-1.c: New test case.
+
+2007-03-09 Alexandre Oliva <aoliva@redhat.com>
+
+ PR rtl-optimization/30643
+ * gcc.dg/pr30643.c: New.
+
+2007-03-09 Chao-ying Fu <fu@mips.com>
+
+ * gcc.target/mips/mips32-dspr2-type.c: New test.
+ * gcc.target/mips/mips32-dspr2.c: New test.
+ * gcc.target/mips/dspr2-MULT.c: New test.
+ * gcc.target/mips/dspr2-MULTU.c: New test.
+ * gcc.target/mips/mips32-dsp-run.c: New test to check execution.
+ * gcc.target/mips/mips32-dsp.c: Change v4i8 typedef to use signed char.
+ Adjust some formats.
+
+2007-03-09 Dirk Mueller <dmueller@suse.de>
+
+ PR c++/17946
+ * gcc.dg/Wlogical-op-1.c: New.
+ * g++.dg/warn/Wlogical-op-1.C: New.
+
+2007-03-09 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/30904
+ PR middle-end/31058
+ * gcc.dg/pr30904.c: Remove xfail.
+
+2007-03-08 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C/31072
+ * gcc.c-torture/execute/pr31072.c: New test.
+
+2007-03-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/builtins-55.c: Test *lceil* and *lfloor*.
+ * gcc.dg/torture/builtin-attr-1.c: Likewise.
+ * gcc.dg/torture/builtin-convert-1.c: Likewise. Also test *lrint* and *lround*.
+ * gcc.dg/torture/builtin-convert-2.c: Test ceil->lceil and floor->lfloor.
+ * gcc.dg/torture/builtin-convert-3.c: Test *lceil* and *lfloor*.
+ * gcc.dg/torture/builtin-integral-1.c: Likewise.
+ * gcc.dg/torture/builtin-minmax-1.c: Likewise. Also test *lrint*
+ and *lround*. Correct macro names.
+ * gcc.dg/torture/builtin-nonneg-1.c: Test *lceil* and *lfloor*.
+ * gcc.dg/torture/builtin-rounding-1.c: Likewise.
+
+2007-03-08 Ian Lance Taylor <iant@google.com>
+
+ * gcc.dg/no-strict-overflow-5.c: New test.
+ * gcc.dg/no-strict-overflow-6.c: New test.
+ * gcc.dg/Wstrict-overflow-11.c: New test.
+ * gcc.dg/Wstrict-overflow-12.c: New test.
+ * gcc.dg/Wstrict-overflow-13.c: New test.
+ * gcc.dg/Wstrict-overflow-14.c: New test.
+ * gcc.dg/Wstrict-overflow-15.c: New test.
+
+2007-03-08 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.c-torture/execute/strcmp-1.x: New file. XFAIL execution
+ for VxWorks kernel mode.
+ * gcc.c-torture/execute/strncmp-1.x: Likewise.
+
+2007-03-08 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.c-torture/execute/ieee/hugeval.x: XFAIL for VxWorks kernel
+ mode.
+
+2007-03-08 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.c-torture/execute/builtins/memmove-lib.c: Include lib/bzero.c
+ and lib/bfill.c on VxWorks targets.
+ * gcc.c-torture/execute/builtins/memmove-2-lib.c: Likewise.
+ * gcc.c-torture/execute/builtins/strchr-lib.c: Include lib/bzero.c,
+ lib/bfill.c and lib/memmove.c on VxWorks targets.
+ * gcc.c-torture/execute/builtins/strrchr-lib.c: Likewise.
+ * gcc.c-torture/execute/builtins/memops-asm-lib.c: Include lib/bfill.c
+ on VxWorks targets.
+ * gcc.c-torture/execute/builtins/lib/bzero.c: New file.
+ * gcc.c-torture/execute/builtins/lib/bfill.c: Likewise.
+
+2007-03-08 Tobias Burnus <burnus@net-b.de>
+
+ * gfortran.dg/use_5.f90: New test.
+ * gfortran.dg/use_6.f90: Ditto.
+ * gfortran.dg/use_7.f90: Ditto.
+
+2007-03-08 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30973
+ * gfortran.dg/use_4.f90: New test.
+ * gfortran.dg/used_dummy_types_7.f90: Correct ambiguous symbol.
+
+2007-03-08 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/31011
+ * gfortran.dg/parameter_array_section_2.f90: New test.
+
+2007-03-08 Volker Reichelt <reichelt@netcologne.de>
+
+ PR c++/30852
+ * g++.dg/ext/offsetof1.C: Add cases with volatile.
+
+ PR c++/30534
+ * g++.dg/template/arg5.C: New test.
+
+2007-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * g++.dg/eh/arm-iwmmxt-unwind.C: New test.
+
+2007-03-07 Paolo Bonzini <bonzini@gnu.org>
+
+ * gcc.dg/var-expand1.c: Add newline at end of file.
+
+2007-03-07 Hans-Peter Nilsson <hp@axis.com>
+
+ * g++.old-deja/g++.jason/template31.C: Include cstdlib.
+
+2007-03-06 Richard Sandiford <richard@codesourcery.com>
+
+ * gcc.c-torture/compile/m68k-byte-addr.c: New test.
+
+2007-03-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-convert-4.c: New test.
+
+2007-03-05 Ian Lance Taylor <iant@google.com>
+
+ * gcc.c-torture/compile/pr31034.c: New test.
+
+2007-03-05 Ian Lance Taylor <iant@google.com>
+
+ * gcc.dg/inline-18.c: New test.
+ * gcc.dg/inline-19.c: New test.
+ * gcc.dg/inline-20.c: New test.
+ * gcc.dg/inline-21.c: New test.
+
+2007-03-05 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/14052
+ * gcc.dg/tree-ssa/vrp33.c: New testcase.
+
+2007-03-05 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/23777
+ * gcc.dg/tree-ssa/pr23777.c: New testcase.
+
+2007-03-04 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR other/30465
+ * gcc.dg/multiple-overflow-warn-3.c: New.
+ * g++.dg/warn/multiple-overflow-warn-3.C: New.
+
+2007-03-04 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/30895
+ * g++.dg/parse/template23.C: New test.
+
+2007-03-04 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/30744
+ * gcc.dg/pr30744-1.c: New test case.
+
+2007-03-04 Tobias Burnus <burnus@net-b.de>
+
+ * gfortran.dg/c_by_val.c: Use _Complex instead of a struct.
+
+2007-03-04 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR target/30406
+ * gfortran.dg/logical_3.f90: New test.
+
+2007-03-04 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/30981
+ * gfortran.dg/integer_exponentiation_1.f90: New test.
+
+2007-03-04 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcc.target/m68k/m68k.exp: New.
+ * gcc.target/m68k/crash1.c: New.
+
+2007-03-03 Tobias Burnus <burnus@net-b.de>
+
+ * gfortran.dg/c_by_val.c: Use int64_t instead of long
+ to be more compatible with integer(kind=8).
+
+2007-03-03 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/31001
+ * gfortran.dg/zero_sized_3.f90: New test.
+
+2007-03-03 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ PR c++/15787
+ * g++.dg/parse/else.C: New.
+ * g++.dg/parse/else-2.C: New.
+
+2007-03-03 Paul Thomas <pault@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30882
+ * gfortran.dg/size_dim.f90: New test.
+
+2007-03-02 Paul Thomas <pault@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30873
+ * gfortran.dg/entry_9.f90: New test.
+
+2007-03-02 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/28253
+ * g++.dg/inherit/covariant16.C: New test.
+
+2007-03-02 Geoffrey Keating <geoffk@apple.com>
+
+ * g++.dg/other/darwin-minversion-1.C: New.
+
+2007-03-02 Diego Novillo <dnovillo@redhat.com>
+
+ * gcc.dg/tree-ssa/20070302-1.c: New test.
+
+2007-03-02 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.target/powerpc/spe-unwind-1.c, g++.dg/eh/simd-5.C: New
+ tests.
+
+2007-03-01 Zdenek Dvorak <dvorakz@suse.cz>
+
+ * gcc.dg/tree-ssa/prefetch-4.c: New test.
+
+2007-03-01 Simon Baldwin <simonb@google.com>
+
+ PR c++/23689
+ * warn/ignored_typedef.C: New.
+ * init/ctor8.C: Added dg-warning to consume ignored typedef
+ warning.
+ * template/typedef2.C: Ditto. Moved dg-error onto its own line
+ and added an explicit line number.
+
+2007-02-28 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/30364
+ * gcc.dg/torture/pr30364-1.c: New testcase.
+ * gcc.dg/torture/pr30364-2.c: Likewise.
+ * gcc.dg/torture/pr30364-3.c: Likewise.
+
+2007-02-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-frexp-1.c: On mips*-*-irix6* and
+ powerpc*, use -funsafe-math-optimizations.
+ * gcc.dg/torture/builtin-logb-1.c: Likewise.
+ * gcc.dg/torture/builtin-modf-1.c: Likewise.
+
+2007-02-28 Tobias Burnus <burnus@net-b.de>
+ Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30888
+ PR fortran/30887
+ * c_by_val_1.f: Test %VAL() with non-default kind.
+ * c_by_val.c: Ditto.
+ * c_by_val_4.f: New test.
+
+2007-02-28 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/30968
+ * gfortran.dg/continuation_7.f90: New test.
+
+2007-02-28 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * g++.dg/inherit/thunk7.C: New test.
+ * lib/target-supports.exp (check_profiling_available): Not available
+ for bfin-*-*.
+
+2007-02-27 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/30970
+ * gcc.target/i386/gfortran.dg/pr30970.c: New test.
+
+2007-02-27 Mark Mitchell <mark@codesourcery.com>
+
+ * lib/target-supports.exp (check_effective_target_init_priority):
+ Remove Solaris special case.
+
+2007-02-26 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.target/powerpc/stabs-attrib-vect-darwin.c: Allow
+ for more builtin types.
+
+ * g++.dg/ext/visibility/class1.C: Port to Darwin.
+ * g++.dg/ext/visibility/noPLT.C: Likewise.
+
+2007-02-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-modf-1.c: Use -fno-finite-math-only on
+ sh* targets.
+
+2007-02-26 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR fortran/30865
+ * size_optional_dim_1.f90: New test.
+
+2007-02-25 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc.dg/vxworks/vxworks.exp: New file.
+ * gcc.dg/vxworks/initpri1.c: Likewise.
+ * gcc.dg/vxworks/initpri2.c: Likewise.
+ * gcc.dg/initpri2.c: Add more tests.
+ * g++.dg/special/initpri2.C: Likewise.
+
+ * gcc.dg/initpri1.c: New test.
+ * gcc.dg/initpri2.c: Likewise.
+ * g++.dg/special/initpri1.C: New test.
+ * g++.dg/special/initpri2.C: Likewise.
+ * g++.dg/special/conpr-1.C: Use init_priority effective target.
+ * g++.dg/special/conpr-2.C: Likewise.
+ * g++.dg/special/conpr-3.C: Likewise.
+ * g++.dg/special/conpr-4.C: Likewise.
+ * g++.dg/special/initp1.C: Likewise.
+ * g++.dg/special/ecos.exp: Remove code to detect availability of
+ constructor priorities.
+ * lib/target-supports.exp (check_effective_target_init_priority):
+ New function.
+
+2007-02-24 Jan Hubicka <jh@suse.cz>
+
+ * gcc.c-torture/execute/pr30778.c: New testcase.
+
+2007-02-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/30918
+ * gfortran.dg/namelist_26.f90: New test.
+
+2007-02-24 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/30951
+ * gcc.dg/pr30951.c: New testcase.
+
+2007-02-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-modf-1.c: New test.
+
+2007-02-23 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/30904
+ * gcc.dg/pr30904.c: New test.
+
+2007-02-23 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * gcc.test-framework/README: Correct command.
+ * gcc.test-framework/dg-outexistsnot-exp-P.c: Replace -W with
+ -Wunused-value.
+ * gcc.test-framework/dg-outexists-exp-F.c: Likewise.
+
+2007-02-23 Nathan Sidwell <nathan@codesourcery.com>
+
+ * lib/target-supports.exp (check_effective_target_unwrapped): New.
+
+2007-02-23 Mark Mitchell <mark@codesourcery.com>
+
+ * lib/target-supports.exp (check_effective_target_newlib): New
+ function.
+
+2007-02-23 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30660
+ * gfortran.dg/alloc_comp_basics_4.f90: Add component with an
+ allocatable component.
+
+
+2007-02-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-logb-1.c: New test.
+ * gcc.dg/torture/builtin-math-2.c: Test logb/ilogb.
+ * gcc.dg/torture/builtin-nonneg-1.c: Test significand.
+ * gcc.dg/torture/builtin-frexp-1.c: Use -fno-finite-math-only on
+ sh* targets.
+
+2007-02-23 Richard Guenther <rguenther@suse.de>
+
+ * g++.dg/warn/changes-meaning.C: New testcase.
+
+2007-02-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/30910
+ * gfortran.dg/fmt_zero_precision.f90: Update test.
+
+2007-02-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/torture/builtin-frexp-1.c: New test.
+
+2007-02-22 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/opt/switch4.C: Pass -fshort-enums -w.
+
+2007-02-22 Ian Lance Taylor <iant@google.com>
+
+ PR debug/30898
+ * g++.dg/debug/pr30898.C: New test.
+
+2007-02-22 Ira Rosen <irar@il.ibm.com>
+
+ * gcc.dg/vect/vect-106.c: New test.
+
+2007-02-22 Dorit Nuzman <dorit@il.ibm.com>
+ Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/30843
+ * gcc.dg/vect/pr30843.c: New test.
+
+2007-02-22 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/30858
+ * gcc.dg/vect/pr30858.c: New test.
+
+2007-02-21 Mark Mitchell <mark@codesourcery.com>
+
+ * lib/wrapper.exp (${tool}_maybe_build_wrapper): Allow the caller
+ to set options for compiling testglue.
+ * lib/g++.exp (g++_init): Compile testglue with -fexceptions.
+ * lib/obj-c++.exp (obj-c++_init): Likewise.
+
2007-02-21 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/derived_aggregate.adb: New test.
@@ -76,7 +737,7 @@
-Wstring-literal-comparison with -Waddress.
* gcc.dg/Wstring-literal-comparison-4.c: Replace
-Wno-string-literal-comparison with -Wno-address.
-
+
2007-02-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/self_aggregate_with_call.adb: New test.
@@ -125,7 +786,7 @@
* gcc.target/i386/builtin-bswap-1.c: Remove -march=nocona.
* gcc.target/i386/builtin-bswap-3.c: Ditto.
* gcc.target/i386/xchg-1.c: New test.
- * gcc.target/i386/xchg-2.c: New test.
+ * gcc.target/i386/xchg-2.c: New test.
2007-02-16 Richard Guenther <rguenther@suse.de>
Christian Bruel <christian.bruel@st.com>
@@ -252,7 +913,7 @@
PR c/29521
* gcc.dg/c90-return-1.c: Update output.
* gcc.dg/c99-return-1.c: Likewise.
-
+
2007-02-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/30554
@@ -457,7 +1118,7 @@
2007-02-07 Hans-Peter Nilsson <hp@axis.com>
- * lib/target-supports.exp (check_effective_target_simulator): New.
+ * lib/target-supports.exp (check_effective_target_simulator): New.
2007-02-06 Zdenek Dvorak <dvorakz@suse.cz>
@@ -502,7 +1163,7 @@
* gcc.dg/vect/vect-reduc-dot-u16b.c: Likewise.
* gcc.dg/vect/vect-widen-mult-u16.c: Likewise.
-2007-02-06 Ira Rosen <irar@il.ibm.com>
+2007-02-06 Ira Rosen <irar@il.ibm.com>
* gcc.dg/vect/fast-math-vect-pow-2.c: New test.
@@ -627,7 +1288,7 @@
gcc.dg/Wparentheses-2.c: Update and add new tests.
-2007-01-31 Ira Rosen <irar@il.ibm.com>
+2007-01-31 Ira Rosen <irar@il.ibm.com>
* gcc.dg/vect/vect-37.c: Restore the original behaivior - xfail to
vectorize.
@@ -796,7 +1457,7 @@
* gcc.dg/Wno-all.c: New.
* gfortran.dg/Wall.f90: New.
* gfortran.dg/Wno-all.f90: New.
-
+
2007-01-24 Geoffrey Keating <geoffk@apple.com>
* gcc.target/powerpc/darwin-ehreturn-1.c: New.
@@ -868,7 +1529,7 @@
PR fortran/30532
* gfortran.dg/ctrl-z.f90: New test.
-
+
2007-01-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/30481
@@ -903,9 +1564,9 @@
PR libfortran/30525
* gfortran.dg/char_comparison_1.f: New test.
-2007-01-21 Ira Rosen <irar@il.ibm.com>
+2007-01-21 Ira Rosen <irar@il.ibm.com>
- * gcc.dg/vect/vect-strided-same-dr.c: New test.
+ * gcc.dg/vect/vect-strided-same-dr.c: New test.
2007-01-20 Andrew Pinski <pinskia@gmail.com>
@@ -957,7 +1618,7 @@
* g++.dg/warn/deprecated.C: Update warning output.
* g++.dg/warn/deprecated-2.C: Likewise.
* g++.dg/warn/deprecated-3.C: New.
-
+
2007-01-19 Nathan Sidwell <nathan@codesourcery.com>
* gcc.c-torture/execute/nestfunc-7.c: New.
@@ -1218,7 +1879,7 @@
* g++.dg/warn/Woverflow-2.C: New.
* g++.dg/warn/Woverflow-3.C: New.
* g++.dg/warn/multiple-overflow-warn-2.C: New.
-
+
2007-01-07 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/27698
@@ -1235,7 +1896,7 @@
PR c++/19439
* g++.dg/template/duplicate1.C: New test
* g++.dg/template/memfriend6.C: Adjust error markers.
-
+
2007-01-05 Andrew Pinski <Andrew_Pinski@playstation.sony.com>
PR tree-opt/30385
@@ -1248,7 +1909,7 @@
* gcc.dg/multiple-overflow-warn-2.c: New.
* gcc.dg/overflow-warn-6.c: New.
* g++.dg/warn/multiple-overflow-warn-1.C: New.
-
+
2007-01-05 Roger Sayle <roger@eyesopen.com>
* gfortran.dg/array_memcpy_1.f90: New test case.
@@ -1483,7 +2144,7 @@
* gcc.dg/Wmissing-parameter-type.c: New.
* gcc.dg/Wmissing-parameter-type-Wextra.c: New.
* gcc.dg/Wmissing-parameter-type-no.c: New.
-
+
2006-12-22 Paul Thomas <pault@gcc.gnu.org>
PR fortran/25818
diff --git a/gcc/testsuite/ada/acats/tests/c9/c96004a.ada b/gcc/testsuite/ada/acats/tests/c9/c96004a.ada
index 14967c46102..f5357fc5130 100644
--- a/gcc/testsuite/ada/acats/tests/c9/c96004a.ada
+++ b/gcc/testsuite/ada/acats/tests/c9/c96004a.ada
@@ -92,7 +92,7 @@ BEGIN
END;
BEGIN
- YR := IDENT_INT(2100);
+ YR := IDENT_INT(YEAR_NUMBER'LAST + 1);
FAILED ("EXCEPTION NOT RAISED - (A)3");
IF NOT EQUAL (YR, YR) THEN
COMMENT ("NO EXCEPTION RAISED");
diff --git a/gcc/testsuite/ada/acats/tests/c9/c96007a.ada b/gcc/testsuite/ada/acats/tests/c9/c96007a.ada
index b961d791f0e..beda25fd5e8 100644
--- a/gcc/testsuite/ada/acats/tests/c9/c96007a.ada
+++ b/gcc/testsuite/ada/acats/tests/c9/c96007a.ada
@@ -136,7 +136,7 @@ BEGIN
END;
BEGIN
- BAD_TIME := TIME_OF (2100, 8, 13);
+ BAD_TIME := TIME_OF (YEAR_NUMBER'LAST + 1, 8, 13);
FAILED ("EXCEPTION NOT RAISED - 2100 (B)");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C b/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C
new file mode 100644
index 00000000000..b9f9f678c57
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C
@@ -0,0 +1,476 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do "run" }
+// A basic implementation of TR1's bind using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+// Trivial reference_wrapper
+template<typename T>
+struct reference_wrapper
+{
+ reference_wrapper(T& x) : ptr(&x) { }
+
+ operator T&() const { return *ptr; }
+
+ T& get() const { return *ptr; }
+
+ T* ptr;
+};
+
+template<typename T> reference_wrapper<T> ref(T& x) { return x; }
+template<typename T> reference_wrapper<const T> cref(const T& x) { return x; }
+
+// Simple type-traits we'll need
+template<typename T>
+struct add_reference
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+// For creating the constructor parameters of tuple<>
+template<typename T>
+struct add_const_reference
+{
+ typedef const T& type;
+};
+
+template<typename T>
+struct add_const_reference<T&>
+{
+ typedef T& type;
+};
+
+// 6.1.3 Class template tuple: Needed for bind() implementation
+template<typename... Values>
+class tuple;
+
+template<> class tuple<> { };
+
+template<typename Head, typename... Tail>
+class tuple<Head, Tail...>
+ : private tuple<Tail...>
+{
+ typedef tuple<Tail...> inherited;
+
+ public:
+ tuple() { }
+
+ // implicit copy-constructor is okay
+
+ tuple(typename add_const_reference<Head>::type v,
+ typename add_const_reference<Tail>::type... vtail)
+ : m_head(v), inherited(vtail...) { }
+
+ template<typename... VValues>
+ tuple(const tuple<VValues...>& other)
+ : m_head(other.head()), inherited(other.tail()) { }
+
+ template<typename... VValues>
+ tuple& operator=(const tuple<VValues...>& other)
+ {
+ m_head = other.head();
+ tail() = other.tail();
+ return *this;
+ }
+
+ typename add_reference<Head>::type head() { return m_head; }
+ typename add_reference<const Head>::type head() const { return m_head; }
+ inherited& tail() { return *this; }
+ const inherited& tail() const { return *this; }
+
+ protected:
+ Head m_head;
+};
+
+template<typename T>
+struct make_tuple_result
+{
+ typedef T type;
+};
+
+template<typename T>
+struct make_tuple_result<reference_wrapper<T> >
+{
+ typedef T& type;
+};
+
+// 6.1.3.2 Tuple creation functions
+struct ignore_t {
+ template<typename T> ignore_t& operator=(const T&) { return *this; }
+} ignore;
+
+template<typename... Values>
+tuple<typename make_tuple_result<Values>::type...>
+make_tuple(const Values&... values)
+{
+ return tuple<typename make_tuple_result<Values>::type...>(values...);
+}
+
+template<typename... Values>
+tuple<Values&...> tie(Values&... values)
+{
+ return tuple<Values&...>(values...);
+}
+
+// 6.1.3.3 Tuple helper classes
+template<typename Tuple>
+struct tuple_size;
+
+template<>
+struct tuple_size<tuple<> >
+{
+ static const __SIZE_TYPE__ value = 0;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_size<tuple<Head, Tail...> >
+{
+ static const __SIZE_TYPE__ value = 1 + tuple_size<tuple<Tail...> >::value;
+};
+
+template<int I, typename Tuple>
+struct tuple_element;
+
+template<int I, typename Head, typename... Tail>
+struct tuple_element<I, tuple<Head, Tail...> >
+{
+ typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_element<0, tuple<Head, Tail...> >
+{
+ typedef Head type;
+};
+
+// 6.1.3.4 Element access
+template<int I, typename Tuple>
+class get_impl;
+
+template<int I, typename Head, typename... Values>
+class get_impl<I, tuple<Head, Values...> >
+{
+ typedef typename tuple_element<I-1, tuple<Values...> >::type Element;
+ typedef typename add_reference<Element>::type RJ;
+ typedef typename add_const_reference<Element>::type PJ;
+ typedef get_impl<I-1, tuple<Values...> > Next;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+
+ static PJ get(const tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+};
+
+template<typename Head, typename... Values>
+class get_impl<0, tuple<Head, Values...> >
+{
+ typedef typename add_reference<Head>::type RJ;
+ typedef typename add_const_reference<Head>::type PJ;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t) { return t.head(); }
+ static PJ get(const tuple<Head, Values...>& t) { return t.head(); }
+};
+
+template<int I, typename... Values>
+typename add_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+template<int I, typename... Values>
+typename add_const_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(const tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+// 6.1.3.5 Relational operators
+inline bool operator==(const tuple<>&, const tuple<>&) { return true; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator==(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return t.head() == u.head() && t.tail() == u.tail();
+}
+
+template<typename... TValues, typename... UValues>
+bool operator!=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t == u);
+}
+
+inline bool operator<(const tuple<>&, const tuple<>&) { return false; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator<(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return (t.head() < u.head() ||
+ (!(t.head() < u.head()) && t.tail() < u.tail()));
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return u < t;
+}
+
+template<typename... TValues, typename... UValues>
+bool operator<=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(u < t);
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t < u);
+}
+
+// enable_if, the breakfast of champions
+template<bool Cond, typename Type = void>
+struct enable_if {
+ typedef Type type;
+};
+
+template<typename Type>
+struct enable_if<false, Type> { };
+
+// 3.6 Function object binders
+
+// 3.6.1 Class template is_bind_expression
+template<typename T>
+struct is_bind_expression {
+ static const bool value = false;
+};
+
+// 3.6.2 Class template is_placeholder
+template<typename T>
+struct is_placeholder {
+ static const int value = 0;
+};
+
+// 3.6.3 Function template bind
+template<int I> struct placeholder {} ;
+
+template<int N> struct int_c { };
+
+// A tuple of integer values
+template<int...> struct int_tuple {};
+
+// make_indexes_impl is a helper for make_indexes
+template<int I, typename IntTuple, typename... Types>
+struct make_indexes_impl;
+
+
+template<int I, int... Indexes, typename T, typename... Types>
+struct make_indexes_impl<I, int_tuple<Indexes...>, T, Types...>
+{
+ typedef typename make_indexes_impl<I+1,
+ int_tuple<Indexes..., I>,
+ Types...>::type type;
+};
+
+template<int I, int... Indexes>
+struct make_indexes_impl<I, int_tuple<Indexes...> > {
+ typedef int_tuple<Indexes...> type;
+};
+
+// make_indexes takes a variable-length number of N types and
+// generates an int_tuple that contains <0, 1, 2, ..., N-1>. These can
+// be used as indexes for tuple's get or tuple_element operation.
+template<typename... Types>
+struct make_indexes : make_indexes_impl<0, int_tuple<>, Types...> { };
+
+// Get the Ith tuple element, but only if I is in bounds.
+template<int I, typename Tuple, typename = void>
+struct safe_tuple_element{ };
+
+template<int I, typename... Values>
+struct safe_tuple_element<I, tuple<Values...>,
+ typename enable_if<(I >= 0 &&
+ I < tuple_size<tuple<Values...> >::value)
+ >::type>
+{
+ typedef typename tuple_element<I, tuple<Values...> >::type type;
+};
+
+// mu maps a bound argument to an actual argument, given a tuple of
+// the arguments passed to the function object returned by bind().
+
+// Return the stored reference from reference_wrapper
+template<typename T, typename... Args>
+inline T& mu(reference_wrapper<T>& bound_arg, const tuple<Args&...>&)
+{
+ return bound_arg.get();
+}
+
+// Unwrap a tuple into separate arguments and forward to the function
+// object f.
+template<typename F, int... Indexes, typename... Args>
+inline typename F::result_type
+unwrap_and_forward(F& f, int_tuple<Indexes...>, const tuple<Args&...>& args)
+{
+ return f(get<Indexes>(args)...);
+}
+
+// Evaluate the inner bind expression
+template<typename Bound, typename... Args>
+inline typename enable_if<is_bind_expression<Bound>::value,
+ typename Bound::result_type>::type
+mu(Bound& bound_arg, const tuple<Args&...>& args)
+{
+ typedef typename make_indexes<Args...>::type Indexes;
+ return unwrap_and_forward(bound_arg, Indexes(), args);
+}
+
+// Retrieve the Ith argument from args
+template<typename Bound, typename... Args>
+inline typename safe_tuple_element<is_placeholder<Bound>::value - 1,
+ tuple<Args...> >::type
+mu(Bound& bound_arg, const tuple<Args&...>& args)
+{
+ return get<is_placeholder<Bound>::value-1>(args);
+}
+
+// Return the stored value.
+template<typename T>
+struct is_reference_wrapper {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_reference_wrapper<reference_wrapper<T> > {
+ static const bool value = true;
+};
+
+template<typename Bound, typename... Args>
+inline typename enable_if<(!is_bind_expression<Bound>::value
+ && !is_placeholder<Bound>::value
+ && !is_reference_wrapper<Bound>::value),
+ Bound&>::type
+mu(Bound& bound_arg, const tuple<Args&...>&)
+{
+ return bound_arg;
+}
+
+//
+template<typename F, typename... BoundArgs, int... Indexes, typename... Args>
+typename F::result_type
+apply_functor(F& f, tuple<BoundArgs...>& bound_args, int_tuple<Indexes...>,
+ const tuple<Args&...>& args)
+{
+ return f(mu(get<Indexes>(bound_args), args)...);
+}
+
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ typedef typename make_indexes<BoundArgs...>::type indexes;
+
+ public:
+ typedef typename F::result_type result_type;
+
+ explicit bound_functor(const F& f, const BoundArgs&... bound_args)
+ : f(f), bound_args(bound_args...) { }
+
+ template<typename... Args>
+ typename F::result_type operator()(Args&... args) {
+ return apply_functor(f, bound_args, indexes(), tie(args...));
+ }
+
+ private:
+ F f;
+ tuple<BoundArgs...> bound_args;
+};
+
+template<typename F, typename... BoundArgs>
+struct is_bind_expression<bound_functor<F, BoundArgs...> > {
+ static const bool value = true;
+};
+
+template<typename F, typename... BoundArgs>
+inline bound_functor<F, BoundArgs...>
+bind(const F& f, const BoundArgs&... bound_args)
+{
+ return bound_functor<F, BoundArgs...>(f, bound_args...);
+}
+
+
+// 3.6.4 Placeholders
+template<int I>
+struct is_placeholder<placeholder<I> > {
+ static const int value = I;
+};
+
+placeholder<1> _1;
+placeholder<2> _2;
+placeholder<3> _3;
+placeholder<4> _4;
+placeholder<5> _5;
+placeholder<6> _6;
+placeholder<7> _7;
+placeholder<8> _8;
+placeholder<9> _9;
+
+// Test code
+template<typename T>
+struct plus {
+ typedef T result_type;
+
+ T operator()(T x, T y) { return x + y; }
+};
+
+template<typename T>
+struct multiplies {
+ typedef T result_type;
+
+ T operator()(T x, T y) { return x * y; }
+};
+
+template<typename T>
+struct negate {
+ typedef T result_type;
+
+ T operator()(T x) { return -x; }
+};
+
+int main()
+{
+ int seventeen = 17;
+ int forty_two = 42;
+
+ assert(bind(plus<int>(), _1, _2)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), _1, _1)(seventeen, forty_two) == 34);
+ assert(bind(plus<int>(), _2, _1)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), 5, _1)(seventeen, forty_two) == 22);
+ assert(bind(plus<int>(), ref(seventeen), _2)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), bind(multiplies<int>(), 3, _1), _2)(seventeen, forty_two)
+ == 93);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
new file mode 100644
index 00000000000..d5ebf0def3c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
@@ -0,0 +1,4 @@
+// { dg-options "-std=gnu++0x" }
+template<typename ... Elements> class Tuple;
+Tuple<>* t; // OK: Elements is empty
+Tuple* u; // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
new file mode 100644
index 00000000000..a392bd7d43f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Types> struct Tuple { };
+
+Tuple<> t0; // Types contains no arguments
+Tuple<int> t1; // Types contains one argument: int
+Tuple<int, float> t2; // Types contains two arguments: int and float
+Tuple<0> error; // { dg-error "mismatch" }
+// { dg-error "expected a type" "" { target *-*-* } 7 }
+// { dg-error "in declaration" "" { target *-*-* } 7 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C
new file mode 100644
index 00000000000..57ef2a3d30e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Types>
+ void f(Types... args);
+
+void g() {
+ f(); // okay: args contains no arguments
+ f(1); // okay: args contains one int argument
+ (2, 1.0); // okay: args contains two arguments, an int and a double
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C
new file mode 100644
index 00000000000..b97df310203
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Types>
+ void f(Types... rest);
+
+template<typename... Types>
+ void g(Types... rest) {
+ f(&rest...); // ``&rest...'' is a pack expansion, ``&rest'' is its pattern
+ }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C
new file mode 100644
index 00000000000..f1cce3a4363
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C
@@ -0,0 +1,39 @@
+// { dg-options "-std=gnu++0x" }
+
+template<typename T, typename U> struct is_same {
+ static const bool value = false;
+};
+
+template<typename T> struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename...> struct Tuple {};
+template<typename T1, typename T2> struct Pair {};
+
+template<typename... Args1>
+ struct zip {
+ template<typename... Args2>
+ struct with {
+ typedef Tuple<Pair<Args1, Args2>...> type; // { dg-error "mismatched argument pack" }
+ };
+ };
+
+static_assert
+ (is_same<zip<short, int>::with<unsigned short, unsigned>::type,
+ Tuple<Pair<short, unsigned short>, Pair<int, unsigned> > >::value,
+ "zip");
+
+typedef zip<short>::with<unsigned short, unsigned>::type T2; // error: different number of arguments specified
+ // for Args1 and Args2
+
+template<typename... Args> void f(Args...);
+
+template<typename... Args> void g(Args... args)
+{
+ f(const_cast<const Args*>(&args)...); // okay: ``Args'' and ``args'' are expanded
+ f(5 ...); // { dg-error "contains no argument packs" }
+ f(args); // { dg-error "parameter packs not expanded" }
+ // { dg-error "args" "" { target *-*-* } 36 }
+ f(h(args...) + args...); // okay: first ``args'' expanded within h, second ``args'' expanded within f.
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
new file mode 100644
index 00000000000..7050256d437
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
@@ -0,0 +1,23 @@
+// { dg-options "-std=gnu++0x" }
+
+template<class T> class A { /* ... */ };
+template<class T, class U = T> class B { /* ... */ };
+template<class... Types> class C { /* ... */ };
+
+template<template<class> class P> class X { /* ... */ };
+template<template<class...> class Q> class Y { /* ... */ };
+
+X<A> xA; // okay
+X<B> xB; // { dg-error "mismatch" }
+// { dg-error "expected a template" "" { target *-*-* } 11 }
+// { dg-error "invalid type" "" { target *-*-* } 11 }
+X<C> xC; // { dg-error "mismatch" }
+// { dg-error "expected a template" "" { target *-*-* } 14 }
+// { dg-error "invalid type" "" { target *-*-* } 14 }
+Y<A> yA; // { dg-error "mismatch" }
+// { dg-error "expected a template" "" { target *-*-* } 17 }
+// { dg-error "invalid type" "" { target *-*-* } 17 }
+Y<B> yB; // { dg-error "mismatch" }
+// { dg-error "expected a template" "" { target *-*-* } 20 }
+// { dg-error "invalid type" "" { target *-*-* } 20 }
+Y<C> yC; // okay
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C
new file mode 100644
index 00000000000..ca5fa271637
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=gnu++0x" }
+template<class... Types> struct B { // { dg-error "declaration of" }
+ void f3();
+ void f4();
+};
+
+template<class... Types> void B<Types...>::f3() { } // OK
+template<class... Types> void B<Types>::f4() { } // { dg-error "invalid" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
new file mode 100644
index 00000000000..8b8ca9e312d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+template<class X, class Y, class... Z> X f(Y);
+void g()
+{
+ int i = f<int>(5.6);
+ int j = f(5.6); // { dg-error "no matching" }
+ f<void>(f<int, bool>);
+ f<void>(f<int>); // { dg-error "no matching" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
new file mode 100644
index 00000000000..69866dcb13d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+template<class X, class Y, class Z> X f(Y,Z);
+template<class... Args> void f2();
+void g()
+{
+ f<int,const char*,double>("aa",3.0);
+ f<int,const char*>("aa",3.0); // Z is deduced to be double
+ f<int>("aa",3.0); // Y is deduced to be char*, and
+ // Z is deduced to be double
+ f("aa",3.0); // { dg-error "no matching" }
+ f2<char, short, int, long>(); // okay
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C
new file mode 100644
index 00000000000..2439a51c5a4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C
@@ -0,0 +1,7 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Types> void f(Types... values);
+
+void g()
+{
+ f<int*, float*>(0, 0, 0); // Types is deduced to the sequence int*, float*, int
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C
new file mode 100644
index 00000000000..87b1bf20576
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=gnu++0x" }
+template<class...> struct Tuple { };
+
+template<class... Types> void f(Types&...);
+template<class... Types1, class... Types2> void g(Tuple<Types1...>, Tuple<Types2...>);
+
+void h(int x, float& y)
+{
+ const int z = x;
+ f(x, y, z); // Types is deduced to int, const int, float
+ g(Tuple<short, int, long>(), Tuple<float, double>()); // Types1 is deduced to short, int long
+ // Types2 is deduced to float, double
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C
new file mode 100644
index 00000000000..7ca31f9c67b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=gnu++0x" }
+template<typename...> struct Tuple { };
+template<typename... Types> char& g(Tuple<Types...>); // #1
+template<typename T1, typename... Types> short& g(Tuple<T1, Types...>); // #2
+template<typename T1, typename... Types> int& g(Tuple<T1, Types&...>); // #3
+
+void f() {
+ // char& x1 = g(Tuple<>()); // calls #1
+ short& y1 = g(Tuple<int, float>()); // calls #2
+ // int& z1 = g(Tuple<int, float&>()); // calls #3
+ // int& z2 = g(Tuple<int>()); // calls #3
+ // int& z3 = g(Tuple<int>()); // calls #3
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C
new file mode 100644
index 00000000000..03d28b82535
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C
@@ -0,0 +1,18 @@
+// { dg-options "-std=gnu++0x" }
+template<class> struct X { static const bool primary = true; };
+template<class R, class... ArgTypes> struct X<R(int, ArgTypes...)> {
+ static const bool primary = false;
+};
+template<class... Types> struct Y { static const bool primary = true; };
+template<class T, class... Types> struct Y<T, Types&...> {
+ static const bool primary = false;
+};
+
+static_assert (X<int>::primary, "uses primary template");
+static_assert (!X<int(int, float, double)>::primary,
+ "uses partial specialization");
+static_assert (X<int(float, int)>::primary, "uses primary template");
+static_assert (Y<>::primary, "uses primary template");
+static_assert (!Y<int&, float&, double&>::primary,
+ "uses partial specialization");
+static_assert (Y<int, float, double>::primary, "uses primary template");
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C
new file mode 100644
index 00000000000..ec78a7a8e25
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args> char& f(Args... args); // #1
+template<typename T1, typename... Args> short& f(T1 a1, Args... args); // #2
+template<typename T1, typename T2> int& f(T1 a2, T2 a2); // #3
+
+void g() {
+ char& x = f(); // calls #1
+ short& y = f(1, 2, 3); // calls #2
+ int& z = f(1, 2); // calls #3
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-function.C b/gcc/testsuite/g++.dg/cpp0x/variadic-function.C
new file mode 100644
index 00000000000..0373efde7c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-function.C
@@ -0,0 +1,96 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do "run" }
+// A basic implementation of TR1's function using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+template<typename Signature>
+class function;
+
+template<typename R, typename... Args>
+class invoker_base
+{
+ public:
+ virtual ~invoker_base() { }
+ virtual R invoke(Args...) = 0;
+ virtual invoker_base* clone() = 0;
+};
+
+template<typename F, typename R, typename... Args>
+class functor_invoker : public invoker_base<R, Args...>
+{
+ public:
+ explicit functor_invoker(const F& f) : f(f) { }
+ R invoke(Args... args) { return f(args...); }
+ functor_invoker* clone() { return new functor_invoker(f); }
+
+ private:
+ F f;
+};
+
+template<typename R, typename... Args>
+class function<R (Args...)> {
+ public:
+ typedef R result_type;
+
+ function() : invoker (0) { }
+
+ function(const function& other) : invoker(0) {
+ if (other.invoker)
+ invoker = other.invoker->clone();
+ }
+
+ template<typename F>
+ function(const F& f) : invoker(0) {
+ invoker = new functor_invoker<F, R, Args...>(f);
+ }
+
+ ~function() {
+ if (invoker)
+ delete invoker;
+ }
+
+ function& operator=(const function& other) {
+ function(other).swap(*this);
+ return *this;
+ }
+
+ template<typename F>
+ function& operator=(const F& f) {
+ function(f).swap(*this);
+ return *this;
+ }
+
+ void swap(function& other) {
+ invoker_base<R, Args...>* tmp = invoker;
+ invoker = other.invoker;
+ other.invoker = tmp;
+ }
+
+ result_type operator()(Args... args) const {
+ assert(invoker);
+ return invoker->invoke(args...);
+ }
+
+ private:
+ invoker_base<R, Args...>* invoker;
+};
+
+struct plus {
+ template<typename T> T operator()(T x, T y) { return x + y; }
+};
+
+struct multiplies {
+ template<typename T> T operator()(T x, T y) { return x * y; }
+};
+
+int main()
+{
+ function<int(int, int)> f1 = plus();
+ assert(f1(3, 5) == 8);
+
+ f1 = multiplies();
+ assert(f1(3, 5) == 15);
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C b/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
new file mode 100644
index 00000000000..6e29d3b3d95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
@@ -0,0 +1,50 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do "run" }
+// A basic implementation of TR1's mem_fn using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+template<typename R, typename Class, typename... Args>
+class Mem_fn
+{
+ public:
+ explicit Mem_fn(R (Class::*pmf)(Args...)) : pmf(pmf) { }
+
+ R operator()(Class& object, Args... args)
+ {
+ return (object.*pmf)(args...);
+ }
+
+ R operator()(Class* object, Args... args)
+ {
+ return (object->*pmf)(args...);
+ }
+
+ R (Class::*pmf)(Args...);
+};
+
+template<typename R, typename Class, typename... Args>
+inline Mem_fn<R, Class, Args...>
+mem_fn(R (Class::* pmf)(Args...))
+{
+ return Mem_fn<R, Class, Args...>(pmf);
+}
+
+class X {
+ public:
+ int negate(int x) { return -x; }
+ int plus(int x, int y) { return x + y; }
+};
+
+int main()
+{
+ X x;
+ X* xp = &x;
+
+ assert(mem_fn(&X::negate)(x, 17) == -17);
+ assert(mem_fn(&X::negate)(xp, 17) == -17);
+ assert(mem_fn(&X::plus)(x, 17, 25) == 42);
+ assert(mem_fn(&X::plus)(xp, 17, 25) == 42);
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C b/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C
new file mode 100644
index 00000000000..2c298a132b4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C
@@ -0,0 +1,294 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do "run" }
+// An implementation of TR1's <tuple> using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+
+#include <string>
+#include <cassert>
+#include <cstring>
+
+// Trivial reference_wrapper
+template<typename T>
+struct reference_wrapper
+{
+ reference_wrapper(T& x) : ptr(&x) { }
+
+ operator T&() const { return *ptr; }
+
+ T* ptr;
+};
+
+template<typename T> reference_wrapper<T> ref(T& x) { return x; }
+template<typename T> reference_wrapper<const T> cref(const T& x) { return x; }
+
+// Simple type-traits we'll need
+template<typename T>
+struct add_reference
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+// For creating the constructor parameters of tuple<>
+template<typename T>
+struct add_const_reference
+{
+ typedef const T& type;
+};
+
+template<typename T>
+struct add_const_reference<T&>
+{
+ typedef T& type;
+};
+
+// 6.1.3 Class template tuple
+template<typename... Values>
+class tuple;
+
+template<> class tuple<> { };
+
+template<typename Head, typename... Tail>
+class tuple<Head, Tail...>
+ : private tuple<Tail...>
+{
+ typedef tuple<Tail...> inherited;
+
+ public:
+ tuple() { }
+
+ // implicit copy-constructor is okay
+
+ tuple(typename add_const_reference<Head>::type v,
+ typename add_const_reference<Tail>::type... vtail)
+ : m_head(v), inherited(vtail...) { }
+
+ template<typename... VValues>
+ tuple(const tuple<VValues...>& other)
+ : m_head(other.head()), inherited(other.tail()) { }
+
+ template<typename... VValues>
+ tuple& operator=(const tuple<VValues...>& other)
+ {
+ m_head = other.head();
+ tail() = other.tail();
+ return *this;
+ }
+
+ typename add_reference<Head>::type head() { return m_head; }
+ typename add_reference<const Head>::type head() const { return m_head; }
+ inherited& tail() { return *this; }
+ const inherited& tail() const { return *this; }
+
+ protected:
+ Head m_head;
+};
+
+template<typename T>
+struct make_tuple_result
+{
+ typedef T type;
+};
+
+template<typename T>
+struct make_tuple_result<reference_wrapper<T> >
+{
+ typedef T& type;
+};
+
+// 6.1.3.2 Tuple creation functions
+struct ignore_t {
+ template<typename T> ignore_t& operator=(const T&) { return *this; }
+} ignore;
+
+template<typename... Values>
+tuple<typename make_tuple_result<Values>::type...>
+make_tuple(const Values&... values)
+{
+ return tuple<typename make_tuple_result<Values>::type...>(values...);
+}
+
+template<typename... Values>
+tuple<Values&...> tie(Values&... values)
+{
+ return tuple<Values&...>(values...);
+}
+
+// 6.1.3.3 Tuple helper classes
+template<typename Tuple>
+struct tuple_size;
+
+template<>
+struct tuple_size<tuple<> >
+{
+ static const std::size_t value = 0;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_size<tuple<Head, Tail...> >
+{
+ static const std::size_t value = 1 + tuple_size<tuple<Tail...> >::value;
+};
+
+template<int I, typename Tuple>
+struct tuple_element;
+
+template<int I, typename Head, typename... Tail>
+struct tuple_element<I, tuple<Head, Tail...> >
+{
+ typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_element<0, tuple<Head, Tail...> >
+{
+ typedef Head type;
+};
+
+// 6.1.3.4 Element access
+template<int I, typename Tuple>
+class get_impl;
+
+template<int I, typename Head, typename... Values>
+class get_impl<I, tuple<Head, Values...> >
+{
+ typedef typename tuple_element<I-1, tuple<Values...> >::type Element;
+ typedef typename add_reference<Element>::type RJ;
+ typedef typename add_const_reference<Element>::type PJ;
+ typedef get_impl<I-1, tuple<Values...> > Next;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+
+ static PJ get(const tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+};
+
+template<typename Head, typename... Values>
+class get_impl<0, tuple<Head, Values...> >
+{
+ typedef typename add_reference<Head>::type RJ;
+ typedef typename add_const_reference<Head>::type PJ;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t) { return t.head(); }
+ static PJ get(const tuple<Head, Values...>& t) { return t.head(); }
+};
+
+template<int I, typename... Values>
+typename add_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+template<int I, typename... Values>
+typename add_const_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(const tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+// 6.1.3.5 Relational operators
+inline bool operator==(const tuple<>&, const tuple<>&) { return true; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator==(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return t.head() == u.head() && t.tail() == u.tail();
+}
+
+template<typename... TValues, typename... UValues>
+bool operator!=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t == u);
+}
+
+inline bool operator<(const tuple<>&, const tuple<>&) { return false; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator<(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return (t.head() < u.head() ||
+ (!(t.head() < u.head()) && t.tail() < u.tail()));
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return u < t;
+}
+
+template<typename... TValues, typename... UValues>
+bool operator<=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(u < t);
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t < u);
+}
+
+int a0[tuple_size<tuple<> >::value == 0? 1 : -1];
+int a1[tuple_size<tuple<int, float, double> >::value == 3? 1 : -1];
+int a2a[is_same<tuple_element<0, tuple<int, float, double> >::type, int>
+ ::value? 1 : -1];
+int a2b[is_same<tuple_element<1, tuple<int, float, double> >::type, float>
+ ::value? 1 : -1];
+int a2c[is_same<tuple_element<2, tuple<int, float, double> >::type, double>
+ ::value? 1 : -1];
+
+int main()
+{
+ tuple<> t0;
+ tuple<int> t1(1);
+ tuple<int, float> t2(1, 3.14159f);
+ tuple<int, float, const char*> t3a(1, 3.14159f, "Hello, world!");
+ tuple<long, double, std::string> t3b(t3a);
+ t3b = t3a;
+ // t3a = t3b; DPG: triggers an error, as it should.
+
+ tuple<int, float, std::string> t3c =
+ make_tuple(17, 2.718281828, std::string("Fun"));
+
+ int seventeen = 17;
+ double pi = 3.14159;
+ tuple<int&, double&> seventeen_pi = make_tuple(ref(seventeen), ref(pi));
+ tuple<int&, const double&> seventeen_pi2 =
+ make_tuple(ref(seventeen), cref(pi));
+ tuple<int&, double&> seventeen_pi_tied = tie(seventeen, pi);
+ assert(get<0>(t3a) == 1);
+ assert(get<1>(t3a) == 3.14159f);
+ assert(std::strcmp(get<2>(t3a), "Hello, world!") == 0);
+
+ assert(t3a == t3b);
+ assert(!(t3a != t3b));
+ assert(!(t3a < t3b));
+ assert(!(t3a > t3b));
+ assert(t3a <= t3b && t3b <= t3a);
+ assert(t3a >= t3b && t3b >= t3a);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic1.C b/gcc/testsuite/g++.dg/cpp0x/variadic1.C
new file mode 100644
index 00000000000..f87d53ca386
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic1.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename...>
+class tuple;
+
+template<typename... Args>
+class tuple { };
+
+template<typename T1, class... Args>
+class tuple1p { };
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic10.C b/gcc/testsuite/g++.dg/cpp0x/variadic10.C
new file mode 100644
index 00000000000..5f73eba8d68
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic10.C
@@ -0,0 +1,22 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T1, typename T2>
+struct pair {};
+
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<pair<int, float> > { };
+
+template<typename... Outer>
+struct X {
+ template<typename... Inner>
+ struct Y
+ {
+ typedef tuple<pair<Outer, Inner>...> type; // { dg-error "mismatched argument pack lengths" }
+ };
+};
+
+X<int, double>::Y<short, char, double>::type honk;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic11.C b/gcc/testsuite/g++.dg/cpp0x/variadic11.C
new file mode 100644
index 00000000000..3c27de0fb19
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic11.C
@@ -0,0 +1,18 @@
+// { dg-options "-std=gnu++0x" }
+template<typename...> struct count;
+
+template<>
+struct count<> {
+ static const int value = 0;
+};
+
+template<typename T, typename... Args>
+struct count<T, Args...> {
+ static const int value = 1 + count<Args...>::value;
+};
+
+int a0[count<>::value == 0? 1 : -1];
+int a1[count<char>::value == 1? 1 : -1];
+int a2[count<char, short>::value == 2? 1 : -1];
+int a3[count<char, short, int>::value == 3? 1 : -1];
+int a4[count<char, short, int, long>::value == 4? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic12.C b/gcc/testsuite/g++.dg/cpp0x/variadic12.C
new file mode 100644
index 00000000000..30108c99932
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic12.C
@@ -0,0 +1,42 @@
+// { dg-options "-std=gnu++0x" }
+// A tuple type
+template<typename... Args> struct tuple { };
+
+// Determine if two types are the same
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+// Append 'T' to the end of Tuple
+template<typename T, typename Tuple>
+struct append_to_tuple;
+
+template<typename T, typename... Args>
+struct append_to_tuple<T, tuple<Args...> > {
+ typedef tuple<Args..., T> type;
+};
+
+// Reverse a sequence of arguments (and return the result as a tuple)
+template<typename... Args> struct reverse;
+
+template<typename T, typename... Args>
+struct reverse<T, Args...> {
+ typedef typename append_to_tuple<T, typename reverse<Args...>::type>::type
+ type;
+};
+
+template<>
+struct reverse<> {
+ typedef tuple<> type;
+};
+
+int a0[is_same<reverse<>::type, tuple<> >::value? 1 : -1];
+int a1[is_same<reverse<int>::type, tuple<int> >::value? 1 : -1];
+int a2[is_same<reverse<char, int>::type, tuple<int, char> >::value? 1 : -1];
+int a3[is_same<reverse<char, int, long>::type, tuple<long, int, char> >::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic13.C b/gcc/testsuite/g++.dg/cpp0x/variadic13.C
new file mode 100644
index 00000000000..7794e8a3dc9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic13.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args> struct tuple1 { };
+template<typename... Args> struct tuple2 { };
+
+template<typename T, typename U>
+struct same_tuple_args {
+ static const bool value = false;
+};
+
+template<typename... Args>
+struct same_tuple_args<tuple1<Args...>, tuple2<Args...> > {
+ static const bool value = true;
+};
+
+int same0[same_tuple_args<tuple1<>, tuple2<> >::value? 1 : -1];
+int same1[same_tuple_args<tuple1<int>, tuple2<int> >::value? 1 : -1];
+int same2[same_tuple_args<tuple1<float, int>, tuple2<float, int> >::value? 1 : -1];
+int diff0[!same_tuple_args<tuple1<>, tuple2<int> >::value? 1 : -1];
+int diff1[!same_tuple_args<tuple1<int, float>, tuple2<float, int> >::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic14.C b/gcc/testsuite/g++.dg/cpp0x/variadic14.C
new file mode 100644
index 00000000000..3c1bb0d6d23
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic14.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(ArgTypes...);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(float, double)>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic15.C b/gcc/testsuite/g++.dg/cpp0x/variadic15.C
new file mode 100644
index 00000000000..68786cb8229
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic15.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&...);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&)>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic16.C b/gcc/testsuite/g++.dg/cpp0x/variadic16.C
new file mode 100644
index 00000000000..001919d469f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic16.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&... args);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&)>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic17.C b/gcc/testsuite/g++.dg/cpp0x/variadic17.C
new file mode 100644
index 00000000000..986721bbec3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic17.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&......);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int(...)>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&...)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&,...)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&...)>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic18.C b/gcc/testsuite/g++.dg/cpp0x/variadic18.C
new file mode 100644
index 00000000000..147ed8e4bfc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic18.C
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+template<typename...> class tuple { };
+
+template<typename T, template<typename T> class... Metafunctions>
+struct apply_all
+{
+ typedef tuple<typename Metafunctions<T>::type...> type;
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename T>
+struct add_pointer {
+ typedef T* type;
+};
+
+template<typename T>
+struct add_pointer<T&>
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference {
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+int a0[is_same<apply_all<int>::type,tuple<> >::value? 1 : -1];
+int a1[is_same<apply_all<int, add_pointer>::type,tuple<int*> >::value? 1 : -1];
+int a2[is_same<apply_all<int, add_pointer, add_reference>::type,tuple<int*, int&> >::value? 1 : -1];
+int a3[is_same<apply_all<int&, add_pointer, add_reference>::type,tuple<int&, int&> >::value? 1 : -1];
+
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic19.C b/gcc/testsuite/g++.dg/cpp0x/variadic19.C
new file mode 100644
index 00000000000..92e7a953aba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic19.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<typename T, template<class T> class... Metafunctions>
+struct tuple<Metafunctions<T>...> {
+ static const int value = 1;
+};
+
+template<typename T> struct add_pointer;
+template<typename T> struct add_reference;
+
+int a0[tuple<int, float>::value == 0? 1 : -1];
+int a1[tuple<add_pointer<int>, add_pointer<float> >::value == 0? 1 : -1];
+int a2[tuple<>::value == 0? 1 : -1];
+int a3[tuple<add_pointer<int> >::value == 1? 1 : -1];
+int a4[tuple<add_pointer<int>, add_reference<int> >::value == 1? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic2.C b/gcc/testsuite/g++.dg/cpp0x/variadic2.C
new file mode 100644
index 00000000000..d62a54245e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic2.C
@@ -0,0 +1,17 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args = int> // { dg-error "default argument" }
+class tuple2;
+
+template<typename... = int> // { dg-error "default argument" }
+class tuple3;
+
+template<typename T1, typename T2, typename... Rest>
+struct two_or_more {}; // { dg-error "provided for" }
+
+typedef two_or_more<int> bad; // { dg-error "2 or more" }
+// { dg-error "invalid type" "" { target *-*-* } 11 }
+
+void f()
+{
+ two_or_more<int, float> z = 5; // { dg-error "two_or_more<int, float>" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic20.C b/gcc/testsuite/g++.dg/cpp0x/variadic20.C
new file mode 100644
index 00000000000..06204c75dd5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic20.C
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T> struct add_pointer;
+template<typename T> struct add_reference;
+
+template<template<class T> class... Metafunctions>
+struct metatuple {
+ static const int value = 0;
+};
+
+template<>
+struct metatuple<add_pointer> {
+ static const int value = 1;
+};
+
+template<template<class T> class Meta>
+struct metatuple<Meta, Meta> { // { dg-error "candidates" }
+ static const int value = 2;
+};
+
+template<template<class T> class... Metafunctions>
+struct metatuple<add_pointer, Metafunctions...> { // { dg-error "" }
+ static const int value = 3;
+};
+
+template<template<class T> class First,
+ template<class T> class... Metafunctions>
+struct metatuple<First, Metafunctions...> { // { dg-error "struct" }
+ static const int value = 4;
+};
+
+template<template<class T> class First,
+ template<class T> class Second,
+ template<class T> class... Metafunctions>
+struct metatuple<First, Second, Metafunctions...> { // { dg-error "struct" }
+ static const int value = 5;
+};
+
+int a0[metatuple<>::value == 0? 1 : -1];
+int a1[metatuple<add_pointer>::value == 1? 1 : -1];
+int a2a[metatuple<add_pointer, add_pointer>::value == 2? 1 : -1]; // { dg-error "ambiguous" }
+int a2b[metatuple<add_reference, add_reference>::value == 2? 1 : -1];
+int a3[metatuple<add_pointer, add_reference>::value == 3? 1 : -1]; // { dg-error "ambiguous" }
+int a4[metatuple<add_reference>::value == 4? 1 : -1];
+int a5[metatuple<add_reference, add_pointer>::value == 5? 1 : -1];
+
+// { dg-error "incomplete" "" { target *-*-* } 40 }
+// { dg-error "incomplete" "" { target *-*-* } 42 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic21.C b/gcc/testsuite/g++.dg/cpp0x/variadic21.C
new file mode 100644
index 00000000000..b65e995b9a1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic21.C
@@ -0,0 +1,7 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, int... Dims>
+struct array { };
+
+array<int> a0;
+array<int, 1> a1;
+array<int, 1, 2, 3, 4> a1234;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic22.C b/gcc/testsuite/g++.dg/cpp0x/variadic22.C
new file mode 100644
index 00000000000..1d26e40d981
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic22.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(ArgTypes... args);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(float, double const)>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic23.C b/gcc/testsuite/g++.dg/cpp0x/variadic23.C
new file mode 100644
index 00000000000..43309a1e1f8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic23.C
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, int... Dims>
+struct array {
+ static const int value = 0;
+};
+
+template<>
+struct array<int, 17> {
+ static const int value = 1;
+};
+
+template<int... Dims>
+struct array<float, 1, Dims...> {
+ static const int value = 2;
+};
+
+template<typename T, int... Dims>
+struct array<T, 1, Dims...> {
+ static const int value = 3;
+};
+
+int a0[array<int>::value == 0? 1 : -1];
+int a1[array<int, 17>::value == 1? 1 : -1];
+int a2[array<float, 1, 2, 3>::value == 2? 1 : -1];
+int a3[array<double, 1, 2, 3>::value == 3? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic24.C b/gcc/testsuite/g++.dg/cpp0x/variadic24.C
new file mode 100644
index 00000000000..6ef8e8a77d0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic24.C
@@ -0,0 +1,6 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, T... Values>
+struct vector_c { };
+
+vector_c<int, 17, 42> intvec;
+vector_c<char, 'a', 'b', 'c'> charvec;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic25.C b/gcc/testsuite/g++.dg/cpp0x/variadic25.C
new file mode 100644
index 00000000000..6589e7f60af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic25.C
@@ -0,0 +1,16 @@
+// { dg-options "-std=gnu++0x" }
+template<int... Values>
+struct sum;
+
+template<>
+struct sum<> {
+ static const int value = 0;
+};
+
+template<int Value, int... Values>
+struct sum<Value, Values...> {
+ static const int value = Value + sum<Values...>::value;
+};
+
+int a0[sum<>::value == 0? 1 : -1];
+int a1[sum<1, 2, 3, 4, 5>::value == 15? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic26.C b/gcc/testsuite/g++.dg/cpp0x/variadic26.C
new file mode 100644
index 00000000000..7f9f6bc8052
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic26.C
@@ -0,0 +1,24 @@
+// { dg-options "-std=gnu++0x" }
+template<template<int, int> class Meta, int Initial, int... Values>
+struct accumulate {
+ static const int value = Initial;
+};
+
+template<template<int, int> class Meta, int Initial, int Value, int... Rest>
+struct accumulate<Meta, Initial, Value, Rest...> {
+ static const int value =
+ Meta<Value, accumulate<Meta, Initial, Rest...>::value>::value;
+};
+
+template<int X, int Y>
+struct sum {
+ static const int value = X + Y;
+};
+
+template<int X, int Y>
+struct prod {
+ static const int value = X * Y;
+};
+
+int a0[accumulate<sum,0,1,2,3,4,5>::value == 15? 1 : -1];
+int a1[accumulate<prod,1,1,2,3,4,5>::value == 120? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic27.C b/gcc/testsuite/g++.dg/cpp0x/variadic27.C
new file mode 100644
index 00000000000..45a897ce2c9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic27.C
@@ -0,0 +1,22 @@
+// { dg-options "-std=gnu++0x" }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+int a0[same_type<function_traits<int()>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int(float)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int(double, char)>::result_type, int>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic28.C b/gcc/testsuite/g++.dg/cpp0x/variadic28.C
new file mode 100644
index 00000000000..167088b4945
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic28.C
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes......)> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+int a0[same_type<function_traits<int(double, char...)>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int(double, char,...)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int(char,...)>::result_type, int>::value? 1 : -1];
+int a3[same_type<function_traits<int(...)>::result_type, int>::value? 1 : -1];
+int a4[same_type<function_traits<int(double x, char...)>::result_type, int>::value? 1 : -1];
+int a5[same_type<function_traits<int(double, char y...)>::result_type, int>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic29.C b/gcc/testsuite/g++.dg/cpp0x/variadic29.C
new file mode 100644
index 00000000000..aaed595831d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic29.C
@@ -0,0 +1,35 @@
+// { dg-options "-std=gnu++0x" }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename R, typename Class, typename... ArgTypes>
+struct function_traits<R (Class::*)(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename R, typename Class, typename... ArgTypes>
+struct function_traits<R (Class::*)(ArgTypes...) const> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+struct X {};
+
+int a0[same_type<function_traits<int (X::*)()>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int (X::*)(float)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int (X::*)(double, char)>::result_type, int>::value? 1 : -1];
+int a3[same_type<function_traits<int (X::*)(double, char) const>::result_type, int>::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic3.C b/gcc/testsuite/g++.dg/cpp0x/variadic3.C
new file mode 100644
index 00000000000..42ba8ab47ea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic3.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+class tuple {};
+
+void f()
+{
+ tuple<> x;
+ tuple<int> y;
+ tuple<int, float> z;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic30.C b/gcc/testsuite/g++.dg/cpp0x/variadic30.C
new file mode 100644
index 00000000000..66cbe9f6272
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic30.C
@@ -0,0 +1,11 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... T>
+void eat(T...);
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic31.C b/gcc/testsuite/g++.dg/cpp0x/variadic31.C
new file mode 100644
index 00000000000..eacf568978a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic31.C
@@ -0,0 +1,11 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... T>
+void eat(T...) { }
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic32.C b/gcc/testsuite/g++.dg/cpp0x/variadic32.C
new file mode 100644
index 00000000000..c5bee55ccb7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic32.C
@@ -0,0 +1,11 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... T>
+void eat(const T&...) { }
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic33.C b/gcc/testsuite/g++.dg/cpp0x/variadic33.C
new file mode 100644
index 00000000000..5784be887ac
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic33.C
@@ -0,0 +1,16 @@
+// { dg-options "-std=gnu++0x" }
+void print_all() {}
+
+template<typename T, typename... Rest>
+void print_all(const T& t, const Rest&... rest)
+{
+ print_all(rest...);
+}
+
+void f()
+{
+ print_all();
+ print_all(1);
+ print_all(1, 3.14159);
+ print_all("Hello, World!", 17, 3.14159);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic34.C b/gcc/testsuite/g++.dg/cpp0x/variadic34.C
new file mode 100644
index 00000000000..5eee3f13c62
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic34.C
@@ -0,0 +1,11 @@
+// { dg-options "-std=gnu++0x" }
+template<int I, typename... Args>
+void get_ith(const Args&... args);
+
+void f()
+{
+ get_ith<1>(1, 2, 3);
+ get_ith<1, int>(1, 2.0, 'x');
+ get_ith<1, int, double>(1, 2.0, 'x');
+ get_ith<1, int, double, char>(1, 2.0, 'x');
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic35.C b/gcc/testsuite/g++.dg/cpp0x/variadic35.C
new file mode 100644
index 00000000000..cd6ba2b0a0c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic35.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+template<int I, typename... Args>
+void get_ith(const Args&... args);
+
+void f()
+{
+ get_ith<1, float>(1, 2.0, 'x');
+ get_ith<1, int, double, char, int>(1, 2.0, 'x'); // { dg-error "no matching function" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic36.C b/gcc/testsuite/g++.dg/cpp0x/variadic36.C
new file mode 100644
index 00000000000..370d475eb6d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic36.C
@@ -0,0 +1,15 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, typename... Args>
+void f(const T&, const Args&... args)
+{
+ f(args); // { dg-error "packs not expanded" }
+}
+
+template<typename... Values>
+struct tuple_base { };
+
+template<typename... Values>
+struct tuple : tuple_base<Values> { }; // { dg-error "packs not expanded" }
+
+// { dg-error "args" "" { target *-*-* } 5 }
+// { dg-error "Values" "" { target *-*-* } 12 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic37.C b/gcc/testsuite/g++.dg/cpp0x/variadic37.C
new file mode 100644
index 00000000000..a6e5f613fcd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic37.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Values>
+struct tuple
+{
+ static const __SIZE_TYPE__ length = sizeof...(Values);
+};
+
+int a0[tuple<>::length == 0? 1 : -1];
+int a1[tuple<int>::length == 1? 1 : -1];
+int a2[tuple<int, float>::length == 2? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic38.C b/gcc/testsuite/g++.dg/cpp0x/variadic38.C
new file mode 100644
index 00000000000..e4ae4a6305d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic38.C
@@ -0,0 +1,6 @@
+// { dg-options "-std=gnu++0x" }
+template<int... Values>
+struct int_vec {};
+
+template<int... Values>
+struct int_vec<0, (Values+1)...> {}; // { dg-error "involves template parameter" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic39.C b/gcc/testsuite/g++.dg/cpp0x/variadic39.C
new file mode 100644
index 00000000000..bd656ba8504
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic39.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+struct tuple {};
+
+template<typename T, typename... Args>
+struct tuple<Args..., T> { }; // { dg-error "end" }
+
+
+template<int... Values>
+struct int_vec { };
+
+template<int I, int... Values>
+struct int_vec<Values..., I> { }; // { dg-error "end" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic4.C b/gcc/testsuite/g++.dg/cpp0x/variadic4.C
new file mode 100644
index 00000000000..6c15a6de92d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic4.C
@@ -0,0 +1,15 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+template<typename... Args>
+class tuple {};
+
+void f_none(tuple<>) {}
+void f_one(tuple<int>) {}
+void f_two(tuple<int, float>) {}
+void f_nested(tuple<int, tuple<double, char>, float>) { }
+
+
+// { dg-final { scan-assembler "_Z6f_none5tupleIE" } }
+// { dg-final { scan-assembler "_Z5f_one5tupleIiE" } }
+// { dg-final { scan-assembler "_Z5f_two5tupleIifE" } }
+// { dg-final { scan-assembler "_Z8f_nested5tupleIiS_IdcEfE" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic40.C b/gcc/testsuite/g++.dg/cpp0x/variadic40.C
new file mode 100644
index 00000000000..6cc9273a897
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic40.C
@@ -0,0 +1,3 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Values, typename T>
+struct backward_tuple {}; // { dg-error "end" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic41.C b/gcc/testsuite/g++.dg/cpp0x/variadic41.C
new file mode 100644
index 00000000000..d209766d132
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic41.C
@@ -0,0 +1,3 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+void f(const Args&... args, int oops); // { dg-error "end" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic42.C b/gcc/testsuite/g++.dg/cpp0x/variadic42.C
new file mode 100644
index 00000000000..4c6c7673d80
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic42.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+template<typename... Args>
+void f(Args...) { }
+
+void g()
+{
+ f<int*, float*, double*>(0, 0, 0);
+ f<int*>(0,0,0);
+}
+// { dg-final { scan-assembler "_Z1fIPiPfPdEvU10__variadicT_" } }
+// { dg-final { scan-assembler "_Z1fIPiiiEvU10__variadicT_" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic43.C b/gcc/testsuite/g++.dg/cpp0x/variadic43.C
new file mode 100644
index 00000000000..fce81ae0dd1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic43.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+int f(const Args&...);
+
+void g()
+{
+ int (*fp)(const int&, const float&) = &f;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic44.C b/gcc/testsuite/g++.dg/cpp0x/variadic44.C
new file mode 100644
index 00000000000..8452a96cc21
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic44.C
@@ -0,0 +1,13 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+template<typename... Args>
+int f(const Args&...);
+
+template<typename T> void g(T) { }
+
+void h()
+{
+ g(&f<int, float>);
+}
+
+// { dg-final { scan-assembler "_Z1gIPFiRKiRKfEEvT_"} }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic45.C b/gcc/testsuite/g++.dg/cpp0x/variadic45.C
new file mode 100644
index 00000000000..c5a66ab2062
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic45.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+int& f(Args...);
+
+template<typename T1, typename T2>
+float& f(T1, T2);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic46.C b/gcc/testsuite/g++.dg/cpp0x/variadic46.C
new file mode 100644
index 00000000000..8b81a363bf1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic46.C
@@ -0,0 +1,11 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+int& f(Args&...);
+
+template<typename... Args>
+float& f(const Args&...);
+
+int& g(int x, float y)
+{
+ return f(x, y);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic47.C b/gcc/testsuite/g++.dg/cpp0x/variadic47.C
new file mode 100644
index 00000000000..d80371c0eee
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic47.C
@@ -0,0 +1,18 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T> struct wrap { };
+
+template<typename... Args>
+int& f(const Args&...);
+
+template<typename... Args>
+float& f(const wrap<Args>&...);
+
+int& g(int x, float y, double z)
+{
+ return f(x, y, z);
+}
+
+float& h(wrap<int> x, wrap<float> y, wrap<double> z)
+{
+ return f(x, y, z);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic48.C b/gcc/testsuite/g++.dg/cpp0x/variadic48.C
new file mode 100644
index 00000000000..ab3f777f795
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic48.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, typename... Args>
+int& f(const T&, Args...);
+
+template<typename T>
+float& f(const T&);
+
+float& g() {
+ return f(17);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic49.C b/gcc/testsuite/g++.dg/cpp0x/variadic49.C
new file mode 100644
index 00000000000..7e2215f2c23
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic49.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+int& f(...);
+
+template<typename... Args>
+float& f(Args...);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic5.C b/gcc/testsuite/g++.dg/cpp0x/variadic5.C
new file mode 100644
index 00000000000..d1f333566d8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic5.C
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<> {
+ static const int value = 1;
+};
+
+template<>
+struct tuple<int> {
+ static const int value = 2;
+};
+
+
+template<>
+struct tuple<int, float> {
+ static const int value = 3;
+};
+
+template<typename T>
+struct tuple<T, T> {
+ static const int value = 4;
+};
+
+template<>
+struct tuple<float, float> {
+ static const int value = 5;
+};
+
+int a0[tuple<float>::value == 0? 1 : -1];
+int a1[tuple<>::value == 1? 1 : -1];
+int a2[tuple<int>::value == 2? 1 : -1];
+int a3[tuple<int, float>::value == 3? 1 : -1];
+int a4[tuple<int, int>::value == 4? 1 : -1];
+int a5[tuple<float, float>::value == 5? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic50.C b/gcc/testsuite/g++.dg/cpp0x/variadic50.C
new file mode 100644
index 00000000000..a2c3b7c908f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic50.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+int& f(int, double, ...);
+
+template<typename... Args>
+float& f(Args...);
+
+float& g() {
+ return f(17, 3.14159, 3);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic51.C b/gcc/testsuite/g++.dg/cpp0x/variadic51.C
new file mode 100644
index 00000000000..e2e2d630a7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic51.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T1, typename T2>
+float& f(T1, T2);
+
+template<typename... Args>
+int& f(Args...);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic52.C b/gcc/testsuite/g++.dg/cpp0x/variadic52.C
new file mode 100644
index 00000000000..12b121fe4ec
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic52.C
@@ -0,0 +1,7 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, T... Values>
+struct vector_c { };
+
+vector_c<int, 1, 2, 3> v1;
+vector_c<char, 'a', 'b', 'c'> v2;
+vector_c<long, 1u, 2, 3l> v3;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic53.C b/gcc/testsuite/g++.dg/cpp0x/variadic53.C
new file mode 100644
index 00000000000..09a3879b420
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic53.C
@@ -0,0 +1,17 @@
+// { dg-options "-std=gnu++0x" }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ typedef typename F::result_type result_type;
+
+ template<typename... Args>
+ typename F::result_type operator()(Args&... args);
+};
+
+template<typename F, typename... BoundArgs>
+template<typename... Args>
+typename F::result_type
+bound_functor<F, BoundArgs...>::operator()(Args&... args)
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic54.C b/gcc/testsuite/g++.dg/cpp0x/variadic54.C
new file mode 100644
index 00000000000..db750d76511
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic54.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ bound_functor();
+};
+
+template<typename F, typename... BoundArgs>
+bound_functor<F, BoundArgs...>::bound_functor()
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic55.C b/gcc/testsuite/g++.dg/cpp0x/variadic55.C
new file mode 100644
index 00000000000..b9c8cffb027
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic55.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ bound_functor(const BoundArgs&... bound_args);
+};
+
+template<typename F, typename... BoundArgs>
+bound_functor<F, BoundArgs...>::bound_functor(const BoundArgs&...)
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic56.C b/gcc/testsuite/g++.dg/cpp0x/variadic56.C
new file mode 100644
index 00000000000..77846e51321
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic56.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Elements>
+struct tuple { };
+
+template<typename T, typename... Elements>
+struct tuple<T, Elements...> {
+ int foo();
+};
+
+template<typename T, typename... Elements>
+struct tuple<T*, Elements...> {
+ int bar();
+};
+
+template<typename T, typename... Elements>
+int tuple<T, Elements...>::foo() { return 0; }
+
+template<typename T, typename... Elements>
+int tuple<T*, Elements...>::bar() { return 0; }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic57.C b/gcc/testsuite/g++.dg/cpp0x/variadic57.C
new file mode 100644
index 00000000000..9833b1bb359
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic57.C
@@ -0,0 +1,16 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T, int... Dims>
+struct array {
+ int foo();
+};
+
+template<typename T>
+struct array<T, 0> {
+ int bar();
+};
+
+template<typename T, int... Dims>
+int array<T, Dims...>::foo() { }
+
+template<typename T>
+int array<T, 0>::bar() { }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic58.C b/gcc/testsuite/g++.dg/cpp0x/variadic58.C
new file mode 100644
index 00000000000..5da0730b5aa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic58.C
@@ -0,0 +1,16 @@
+// { dg-options "-std=gnu++0x" }
+#include <typeinfo>
+
+template<typename... Args>
+void foo(Args...) { }
+
+template<typename... Args>
+void bar(Args... args) {
+ foo(Args()...);
+ foo(args = args...);
+ foo(reinterpret_cast<void*>(&args)...);
+ foo(const_cast<const Args>(args)...);
+ foo(static_cast<void*>(&args)...);
+ foo(dynamic_cast<void*>(&args)...);
+ foo(typeid(Args)...);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic59.C b/gcc/testsuite/g++.dg/cpp0x/variadic59.C
new file mode 100644
index 00000000000..f0730d33baf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic59.C
@@ -0,0 +1,4 @@
+// { dg-options "-std=gnu++0x" }
+template<class T, typename... VarArgs>
+void print(T t, VarArgs args); // { dg-error "packs not expanded" }
+// { dg-error "VarArgs" "" { target *-*-* } 3 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic6.C b/gcc/testsuite/g++.dg/cpp0x/variadic6.C
new file mode 100644
index 00000000000..105550bb903
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic6.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+template<typename ... Args>
+struct tuple_base {};
+
+template<typename ... Args>
+struct tuple : public tuple_base<Args...>
+{
+};
+
+tuple<> zero;
+tuple<int> one;
+tuple<float, int> two;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic60.C b/gcc/testsuite/g++.dg/cpp0x/variadic60.C
new file mode 100644
index 00000000000..29c4e29b872
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic60.C
@@ -0,0 +1 @@
+template<typename... Args> class tuple; // { dg-warning "variadic templates" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic61.C b/gcc/testsuite/g++.dg/cpp0x/variadic61.C
new file mode 100644
index 00000000000..487f78bc07a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic61.C
@@ -0,0 +1,2 @@
+// { dg-options "-pedantic" }
+template<typename... Args> class tuple; // { dg-warning "variadic templates" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic62.C b/gcc/testsuite/g++.dg/cpp0x/variadic62.C
new file mode 100644
index 00000000000..dfa41f73915
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic62.C
@@ -0,0 +1,2 @@
+// { dg-options "-pedantic-errors" }
+template<typename... Args> class tuple; // { dg-error "variadic templates" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic63.C b/gcc/testsuite/g++.dg/cpp0x/variadic63.C
new file mode 100644
index 00000000000..359def1cd10
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic63.C
@@ -0,0 +1,2 @@
+// { dg-options "-std=gnu++0x -pedantic" }
+template<typename... Args> class tuple;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic64.C b/gcc/testsuite/g++.dg/cpp0x/variadic64.C
new file mode 100644
index 00000000000..c9212e2e959
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic64.C
@@ -0,0 +1,19 @@
+// { dg-options "-std=gnu++0x" }
+template<int... Indexes>
+ struct _Index_tuple { };
+
+template<int _Num, typename _Tuple = _Index_tuple<> >
+struct _Build_index_tuple;
+
+template<int _Num, int... _Indexes>
+struct _Build_index_tuple<_Num, _Index_tuple<_Indexes...> >
+ : _Build_index_tuple<_Num - 1,
+ _Index_tuple<_Indexes..., sizeof...(_Indexes)> >
+{
+};
+
+template<int... _Indexes>
+struct _Build_index_tuple<0, _Index_tuple<_Indexes...> >
+{
+ typedef _Index_tuple<_Indexes...> __type;
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic65.C b/gcc/testsuite/g++.dg/cpp0x/variadic65.C
new file mode 100644
index 00000000000..6379da83f11
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic65.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=gnu++0x" }
+struct unused;
+template<typename T1 = unused, typename T2 = unused, typename T3 = unused,
+ typename T4 = unused, typename T5 = unused, typename T6 = unused>
+struct tuple {};
+
+template<typename... Args>
+void foo(tuple<Args...>) { } // { dg-error "cannot expand" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic66.C b/gcc/testsuite/g++.dg/cpp0x/variadic66.C
new file mode 100644
index 00000000000..5c31ae06fd4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic66.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=gnu++0x" }
+
+template<typename Result, typename Functor, typename... ArgTypes>
+Result bind(Functor, ArgTypes...) { }
+
+void f()
+{
+ bind<int>(17, 20, 22);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic67.C b/gcc/testsuite/g++.dg/cpp0x/variadic67.C
new file mode 100644
index 00000000000..e496bfc176c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic67.C
@@ -0,0 +1,24 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Elements> struct tuple {};
+
+template<typename... Args>
+struct nested
+{
+ typedef tuple<tuple<Args, Args...>...> type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+int a0[is_same<nested<int, float>::type,
+ tuple<tuple<int, int, float>,
+ tuple<float, int, float> > >::value? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic68.C b/gcc/testsuite/g++.dg/cpp0x/variadic68.C
new file mode 100644
index 00000000000..53d8f2d6d0c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic68.C
@@ -0,0 +1,23 @@
+// { dg-do "run" }
+// { dg-options "-std=gnu++0x" }
+extern "C" void abort();
+
+template<typename T, T... Values>
+void f(T* expected_values, int n)
+{
+ if (sizeof...(Values) != n)
+ abort ();
+
+ T values[] = { Values... };
+ for (int i = 0; i < n; ++i)
+ if (values[i] != expected_values[i])
+ abort();
+}
+
+int main()
+{
+ int test_arr1[3] = { 1, 2, 3 };
+ f<int, 1, 2, 3>(test_arr1, 3);
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic69.C b/gcc/testsuite/g++.dg/cpp0x/variadic69.C
new file mode 100644
index 00000000000..5fe9a1950ff
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic69.C
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T>
+struct stored_value
+{
+ explicit stored_value() : value() { }
+
+ explicit stored_value(const T& value) : value(value) { }
+
+ stored_value(int, const T& value) : value(value) { }
+
+ T value;
+};
+
+template<typename... Values>
+struct myclass : public stored_value<Values>...
+{
+ myclass() { }
+
+ explicit myclass(const Values&... values)
+ : stored_value<Values>(values)... { }
+
+ explicit myclass(int x, const Values&... values)
+ : stored_value<Values>(x, values)... { }
+
+};
+
+void f()
+{
+ int i;
+ float f;
+ myclass<int*, float*> ifp1;
+ myclass<int*, float*> ifp2(&i, &f);
+ myclass<int*, float*> ifp3(1, &i, &f);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic7.C b/gcc/testsuite/g++.dg/cpp0x/variadic7.C
new file mode 100644
index 00000000000..3ba37bfb66e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic7.C
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+struct tuple_base {
+ static const int value = 0;
+};
+
+template<>
+struct tuple_base<int> {
+ static const int value = 1;
+};
+
+template<>
+struct tuple_base<int, float> {
+ static const int value = 2;
+};
+
+template<>
+struct tuple_base<float, int> {
+ static const int value = 3;
+};
+
+template<typename... Args>
+struct int_tuple : tuple_base<int, Args...> { };
+
+template<typename... Args>
+struct tuple_int : tuple_base<Args..., int> { };
+
+int a0a[int_tuple<int>::value == 0? 1 : -1];
+int a0b[int_tuple<int>::value == 0? 1 : -1];
+int a1a[int_tuple<>::value == 1? 1 : -1];
+int a1b[tuple_int<>::value == 1? 1 : -1];
+int a2[int_tuple<float>::value == 2? 1 : -1];
+int a3[tuple_int<float>::value == 3? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic70.C b/gcc/testsuite/g++.dg/cpp0x/variadic70.C
new file mode 100644
index 00000000000..0bc8e824cd4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic70.C
@@ -0,0 +1,22 @@
+// { dg-do "run" }
+// { dg-options "-std=gnu++0x" }
+template <typename T, T... Args> struct bomb;
+
+template <typename T>
+struct bomb<T> {
+ static const T value = 0;
+};
+
+template <typename T, T v, T... Args>
+struct bomb<T, v, Args...> {
+ static const T value = v + bomb<T, Args...>::value;
+};
+
+extern "C" void abort();
+
+int main() {
+ bomb<int, 1, 2, 3, 4> b;
+ if (b.value != 10)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic71.C b/gcc/testsuite/g++.dg/cpp0x/variadic71.C
new file mode 100644
index 00000000000..d4219dace83
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic71.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=gnu++0x" }
+template<typename...> struct list {};
+
+template<typename Sequence, typename Head>
+struct push_front;
+
+template<typename... Elements, typename Head>
+struct push_front<list<Elements...>, Head> {
+ typedef list<Head, Elements> type; // { dg-error "parameter packs not expanded" }
+};
+
+// { dg-error "Elements" "" { target *-*-* } 9 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic72.C b/gcc/testsuite/g++.dg/cpp0x/variadic72.C
new file mode 100644
index 00000000000..b1a620d5386
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic72.C
@@ -0,0 +1,21 @@
+// { dg-options "-std=gnu++0x" }
+struct A {};
+struct B {};
+struct C {};
+
+template<typename... Mixins>
+struct mixed_up : public Mixins...
+{
+};
+
+void fA(A);
+void fB(B);
+void fC(C);
+
+void g()
+{
+ mixed_up<A, B, C> m;
+ fA(m);
+ fB(m);
+ fC(m);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic73.C b/gcc/testsuite/g++.dg/cpp0x/variadic73.C
new file mode 100644
index 00000000000..7bff85b5037
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic73.C
@@ -0,0 +1,33 @@
+// { dg-do "run" }
+// { dg-options "-std=gnu++0x" }
+struct A {};
+struct B {};
+struct C {};
+
+template<typename... Exceptions> void f(int idx) throw(Exceptions...) {
+ if (idx == 0) throw A();
+ else if (idx == 1) throw B();
+ else if (idx == 2) throw C();
+}
+
+extern "C" void abort();
+
+int main()
+{
+ try {
+ f<A, B, C>(0);
+ abort();
+ } catch (A) {
+ }
+ try {
+ f<A, B, C>(1);
+ abort();
+ } catch (B) {
+ }
+ try {
+ f<A, B, C>(2);
+ abort();
+ } catch (C) {
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic74.C b/gcc/testsuite/g++.dg/cpp0x/variadic74.C
new file mode 100644
index 00000000000..19b6b11d8e2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic74.C
@@ -0,0 +1,26 @@
+// { dg-options "-std=gnu++0x" }
+template <class... Types> class A
+{
+public:
+ template <Types... Values> class X { /* ... */ }; // { dg-error "not a valid type for a template constant parameter" }
+};
+
+template<class... Types> class B
+{
+public:
+ template <Types*... Values> class X {
+ typename A<Types*...>::template X<Values...> foo;
+ };
+};
+
+int i;
+float f;
+
+A<int*, float*>::X<&i, &f> apple1;
+B<int, float>::X<&i, &f> banana1;
+
+A<int*, float*>::X<&i> apple2; // { dg-error "wrong number of template arguments" }
+// { dg-error "invalid type" "" { target *-*-* } 22 }
+A<int*, float*>::X<&i, &f, &f> apple3; // { dg-error "wrong number of template arguments" }
+// { dg-error "invalid type" "" { target *-*-* } 24 }
+A<int, float> apple4;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic75.C b/gcc/testsuite/g++.dg/cpp0x/variadic75.C
new file mode 100644
index 00000000000..f57f8b3ef47
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic75.C
@@ -0,0 +1,33 @@
+// { dg-options "-std=gnu++0x" }
+
+template<typename...> struct tuple { };
+
+template<template<typename T> class Meta, typename... Values>
+struct apply_all
+{
+ typedef tuple<typename Meta<Values>::type...> type;
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename T>
+struct add_reference {
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&> {
+ typedef T& type;
+};
+
+static_assert(is_same<apply_all<add_reference, int, int&, float>::type,
+ tuple<int&, int&, float&> >::value,
+ "check apply");
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic8.C b/gcc/testsuite/g++.dg/cpp0x/variadic8.C
new file mode 100644
index 00000000000..c3a1340cf26
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic8.C
@@ -0,0 +1,23 @@
+// { dg-options "-std=gnu++0x" }
+template<typename... Args>
+struct tuple_base {
+ static const int value = 0;
+};
+
+template<>
+struct tuple_base<int*>
+{
+ static const int value = 1;
+};
+
+template<typename T>
+struct tuple_base<T*>
+{
+ static const int value = 2;
+};
+
+template<typename... Args>
+struct tuple_of_pointers : tuple_base<Args*...> { };
+
+int a1[tuple_of_pointers<int>::value == 1? 1 : -1];
+int a2[tuple_of_pointers<float>::value == 2? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic9.C b/gcc/testsuite/g++.dg/cpp0x/variadic9.C
new file mode 100644
index 00000000000..c5db6af6a89
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic9.C
@@ -0,0 +1,38 @@
+// { dg-options "-std=gnu++0x" }
+template<typename T1, typename T2>
+struct pair {};
+
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<pair<int, float> > {
+ static const int value = 1;
+};
+
+template<typename U>
+struct tuple<pair<int, U> > {
+ static const int value = 2;
+};
+
+template<typename T, typename U>
+struct tuple<pair<T, U>, pair<T, U> > {
+ static const int value = 3;
+};
+
+
+template<typename... Outer>
+struct X {
+ template<typename... Inner>
+ struct Y
+ {
+ typedef tuple<pair<Outer, Inner>...> type;
+ };
+};
+
+int a0[X<int, double>::Y<short, char>::type::value == 0? 1 : -1];
+int a1[X<int>::Y<float>::type::value == 1? 1 : -1];
+int a2[X<int>::Y<double>::type::value == 2? 1 : -1];
+int a3[X<int, int>::Y<double, double>::type::value == 3? 1 : -1];
diff --git a/gcc/testsuite/g++.dg/debug/pr30898.C b/gcc/testsuite/g++.dg/debug/pr30898.C
new file mode 100644
index 00000000000..4c06ea60845
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/pr30898.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+
+double foo()
+{
+ union
+ {
+ int i;
+ double d;
+ };
+
+ i = 0;
+ return d;
+}
diff --git a/gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C b/gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C
new file mode 100644
index 00000000000..109837cd820
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C
@@ -0,0 +1,47 @@
+/* Test unwinding of iWMMXt register saves. */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm32 } */
+
+#ifdef __IWMMXT__
+extern "C" void abort (void);
+extern "C" void exit (int);
+
+void
+foo (void)
+{
+ register long long wr10 asm("wr10") = 0;
+ register long long wr11 asm("wr11") = 1;
+ register long long wr12 asm("wr12") = 2;
+ register long long wr14 asm("wr14") = 4;
+ register long long wr15 asm("wr15") = 5;
+ asm volatile ("" : "+y" (wr10), "+y" (wr11), "+y" (wr12), "+y" (wr14), "+y" (wr15));
+ throw "";
+}
+
+int
+main (void)
+{
+ register long long wr10 asm("wr10") = 10;
+ register long long wr11 asm("wr11") = 11;
+ register long long wr12 asm("wr12") = 12;
+ register long long wr13 asm("wr13") = 13;
+ register long long wr14 asm("wr14") = 14;
+ register long long wr15 asm("wr15") = 15;
+ asm volatile ("" : "+y" (wr10), "+y" (wr11), "+y" (wr12), "+y" (wr13), "+y" (wr14), "+y" (wr15));
+ try {
+ foo ();
+ } catch (...) {
+ asm volatile ("" : "+y" (wr10), "+y" (wr11), "+y" (wr12), "+y" (wr13), "+y" (wr14), "+y" (wr15));
+ if (wr10 != 10 || wr11 != 11 || wr12 != 12 || wr13 != 13 || wr14 != 14 || wr15 != 15)
+ abort ();
+ }
+ exit (0);
+}
+#else
+int
+main (void)
+{
+}
+#endif
diff --git a/gcc/testsuite/g++.dg/eh/simd-5.C b/gcc/testsuite/g++.dg/eh/simd-5.C
new file mode 100644
index 00000000000..d83d31392c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/simd-5.C
@@ -0,0 +1,44 @@
+// Test EH with V2SI SIMD registers actually restores correct values.
+// Origin: Joseph Myers <joseph@codesourcery.com>
+// { dg-options "-O" }
+// { dg-do run { target powerpc_spe } }
+
+extern "C" void abort (void);
+extern "C" int memcmp (const void *, const void *, __SIZE_TYPE__);
+typedef int __attribute__((vector_size (8))) v2si;
+
+v2si a = { 1, 2 };
+v2si b = { 3, 4 };
+v2si c = { 4, 6 };
+volatile v2si r;
+v2si r2;
+
+void
+f ()
+{
+ register v2si v asm("r15");
+ v = __builtin_spe_evaddw (b, c);
+ asm volatile ("" : "+r" (v));
+ r = v;
+ throw 1;
+}
+
+int
+main ()
+{
+ register v2si v asm("r15");
+ v = __builtin_spe_evaddw (a, b);
+ asm volatile ("" : "+r" (v));
+ try
+ {
+ f ();
+ }
+ catch (int)
+ {
+ r = v;
+ r2 = r;
+ if (memcmp (&r2, &c, sizeof (v2si)))
+ abort ();
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield3.C b/gcc/testsuite/g++.dg/expr/bitfield3.C
new file mode 100644
index 00000000000..7b856e9e8b8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield3.C
@@ -0,0 +1,12 @@
+// PR c++/30274
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+void f() {
+ s.x--; // { dg-error "bool" }
+ --s.x; // { dg-error "bool" }
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield4.C b/gcc/testsuite/g++.dg/expr/bitfield4.C
new file mode 100644
index 00000000000..d824964e187
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield4.C
@@ -0,0 +1,19 @@
+// PR c++/30274
+// { dg-do link }
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+template <typename T>
+void f(T);
+
+template <>
+void f(bool) {}
+
+int main() {
+ f(s.x++);
+ f(++s.x);
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield5.C b/gcc/testsuite/g++.dg/expr/bitfield5.C
new file mode 100644
index 00000000000..3d18e159cc0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield5.C
@@ -0,0 +1,17 @@
+// PR c++/30274
+// { dg-do run }
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+int main() {
+ s.x++;
+ if (s.x != 1)
+ return 1;
+ ++s.x;
+ if (s.x != 1)
+ return 2;
+}
diff --git a/gcc/testsuite/g++.dg/expr/bitfield6.C b/gcc/testsuite/g++.dg/expr/bitfield6.C
new file mode 100644
index 00000000000..6f6d559a38e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/bitfield6.C
@@ -0,0 +1,11 @@
+// PR c++/30274
+
+struct S {
+ bool x : 4;
+};
+
+S s;
+
+void f() {
+ ++s.x = false;
+}
diff --git a/gcc/testsuite/g++.dg/ext/bitfield1.C b/gcc/testsuite/g++.dg/ext/bitfield1.C
new file mode 100644
index 00000000000..25c90df4191
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/bitfield1.C
@@ -0,0 +1,22 @@
+// PR c++/30328
+// { dg-do link }
+// { dg-options "" }
+
+struct S
+{
+ signed int a:17;
+} x;
+
+typedef typeof (x.a) foo;
+
+template <class T>
+T* inc(T* p) { return p+1; }
+
+int main ()
+{
+ foo x[2] = { 1,2 };
+ int y[2] = { 1,2 };
+ *inc(x);
+ *inc(y);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/ext/offsetof1.C b/gcc/testsuite/g++.dg/ext/offsetof1.C
index 123a9e3efeb..1468c0a7c06 100644
--- a/gcc/testsuite/g++.dg/ext/offsetof1.C
+++ b/gcc/testsuite/g++.dg/ext/offsetof1.C
@@ -8,8 +8,10 @@ struct bar {
};
int a = __builtin_offsetof(bar, foo); // { dg-error "static data member" }
+int av = __builtin_offsetof(volatile bar, foo); // { dg-error "static data member" }
int b = __builtin_offsetof(bar, baz); // { dg-error "member function" }
int b0 = __builtin_offsetof(bar, baz[0]); // { dg-error "function" }
+int bv0 = __builtin_offsetof(volatile bar, baz[0]); // { dg-error "function" }
int c = __builtin_offsetof(bar, ~bar); // { dg-error "member function" }
typedef int I;
diff --git a/gcc/testsuite/g++.dg/ext/visibility/class1.C b/gcc/testsuite/g++.dg/ext/visibility/class1.C
index cd546d15e5b..fda5439c7a7 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/class1.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/class1.C
@@ -2,9 +2,9 @@
// Init should not be hidden, so calling it should use the PLT.
// { dg-options "-fpic" }
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile { target i?86-*-* x86_64-*-* *-*-darwin* } }
// { dg-require-visibility "" }
-// { dg-final { scan-assembler "InitEv@PLT" } }
+// { dg-final { scan-assembler "InitEv@PLT|indirect_symbol.*InitEv" } }
#pragma GCC visibility push(hidden)
struct __attribute__ ((visibility ("default"))) nsINIParser
diff --git a/gcc/testsuite/g++.dg/ext/visibility/noPLT.C b/gcc/testsuite/g++.dg/ext/visibility/noPLT.C
index fbca4ed2a9b..38af05fd6e3 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/noPLT.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/noPLT.C
@@ -2,7 +2,7 @@
/* { dg-do compile { target fpic } } */
/* { dg-require-visibility "" } */
/* { dg-options "-fPIC -fvisibility=hidden" } */
-/* { dg-final { scan-assembler-not "methodEv@PLT" } } */
+/* { dg-final { scan-assembler-not "methodEv@PLT|indirect_symbol.*methodEv" } } */
class Foo
{
diff --git a/gcc/testsuite/g++.dg/ext/vla1.C b/gcc/testsuite/g++.dg/ext/vla1.C
index f2238c2fdd4..fad67ce956c 100644
--- a/gcc/testsuite/g++.dg/ext/vla1.C
+++ b/gcc/testsuite/g++.dg/ext/vla1.C
@@ -9,7 +9,7 @@ class A { A (int); };
A::A (int i)
{
- int ar[1][i]; // { dg-error "variable-size array" }
+ int ar[1][i]; // { dg-error "variable length array" }
ar[0][0] = 0;
}
diff --git a/gcc/testsuite/g++.dg/inherit/covariant16.C b/gcc/testsuite/g++.dg/inherit/covariant16.C
new file mode 100644
index 00000000000..828b5b8f1a6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/covariant16.C
@@ -0,0 +1,17 @@
+/* PR c++/28253 This used to ICE. */
+/* { dg-do "compile" } */
+
+struct A
+{
+ virtual A* foo();
+};
+
+struct B : virtual A
+{
+ virtual B* foo(); /* { dg-error "overriding" } */
+};
+
+struct C : B
+{
+ virtual C& foo(); /* { dg-error "conflicting return type" } */
+};
diff --git a/gcc/testsuite/g++.dg/inherit/thunk7.C b/gcc/testsuite/g++.dg/inherit/thunk7.C
new file mode 100644
index 00000000000..0e16d895424
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/thunk7.C
@@ -0,0 +1,55 @@
+// { dg-do run }
+
+#include <stdlib.h>
+
+class A
+{
+ int a, b;
+public:
+ virtual void foo (int a, int b, int c, int d);
+};
+
+class B
+{
+ int c, d;
+public:
+ virtual void bar (int a, int b, int c, int d);
+};
+
+class D : public virtual A, public virtual B
+{
+ int e, f;
+};
+
+void A::foo(int a, int b, int c, int d)
+{
+ if (a != 1 || b != 2 || c != 3 || d != 4)
+ abort ();
+}
+
+void B::bar (int a, int b, int c, int d)
+{
+ if (a != 5 || b != 6 || c != 7 || d != 8)
+ abort ();
+}
+
+class C: private D, public virtual A, public virtual B
+{
+public:
+ virtual void foo (int a, int b, int c, int d) { A::foo (a, b, c, d); D::A::foo (a, b, c, d); }
+ virtual void bar (int a, int b, int c, int d) { B::bar (a, b, c, d); D::B::bar (a, b, c, d); }
+};
+
+C c1;
+C *c2 = &c1;
+A *c3 = &c1;
+B *c4 = &c1;
+
+int main()
+{
+ c2->foo (1, 2, 3, 4);
+ c2->bar (5, 6, 7, 8);
+ c3->foo (1, 2, 3, 4);
+ c4->bar (5, 6, 7, 8);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/init/ctor8.C b/gcc/testsuite/g++.dg/init/ctor8.C
index 9723892f91c..beb92ef8519 100644
--- a/gcc/testsuite/g++.dg/init/ctor8.C
+++ b/gcc/testsuite/g++.dg/init/ctor8.C
@@ -2,10 +2,8 @@
typedef struct S { // { dg-error "reference" }
int &r;
-};
+}; // { dg-warning "'typedef' was ignored" }
S f () {
return S (); // { dg-error "synthesized" }
}
-
-
diff --git a/gcc/testsuite/g++.dg/opt/switch4.C b/gcc/testsuite/g++.dg/opt/switch4.C
index 231929fdf3d..1542f310ca4 100644
--- a/gcc/testsuite/g++.dg/opt/switch4.C
+++ b/gcc/testsuite/g++.dg/opt/switch4.C
@@ -1,4 +1,5 @@
// { dg-do compile }
+// { dg-options "-fshort-enums -w" }
// PR c++/20008
diff --git a/gcc/testsuite/g++.dg/other/darwin-minversion-1.C b/gcc/testsuite/g++.dg/other/darwin-minversion-1.C
new file mode 100644
index 00000000000..cbf5ff1d20b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/darwin-minversion-1.C
@@ -0,0 +1,10 @@
+/* Test for -mmacosx-version-min default on powerpc-darwin. */
+/* { dg-do compile { target powerpc-*-darwin* } } */
+
+int main(void)
+{
+#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1030
+ fail me;
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/other/default6.C b/gcc/testsuite/g++.dg/other/default6.C
new file mode 100644
index 00000000000..2641801b1e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/default6.C
@@ -0,0 +1,18 @@
+// PR c++/30108
+
+class BaseRobot {
+ typedef void (BaseRobot::*PseudoState)(void);
+ typedef PseudoState STATE;
+ STATE initial ();
+ int ready ();
+ STATE stpOtherTask ();
+ STATE commonEventProcessing (STATE pIdleTarget=(STATE)&BaseRobot::ready);
+};
+BaseRobot::STATE BaseRobot::initial ()
+{
+ return commonEventProcessing ();
+}
+BaseRobot::STATE BaseRobot::stpOtherTask ()
+{
+ return commonEventProcessing ();
+}
diff --git a/gcc/testsuite/g++.dg/parse/else-2.C b/gcc/testsuite/g++.dg/parse/else-2.C
new file mode 100644
index 00000000000..7f0b23cd701
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/else-2.C
@@ -0,0 +1,11 @@
+// { dg-do compile }
+// { dg-options " " }
+
+int f()
+{
+
+ else // { dg-error "'else' without a previous 'if'" }
+ {
+ return 0;
+ }
+}
diff --git a/gcc/testsuite/g++.dg/parse/else.C b/gcc/testsuite/g++.dg/parse/else.C
new file mode 100644
index 00000000000..87ea982a81c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/else.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options " " }
+
+int f()
+{
+ if (1)
+ {
+ return 1;
+ else // { dg-error "expected .\}. before 'else'" }
+ {
+ return 0;
+ }
+}
diff --git a/gcc/testsuite/g++.dg/parse/template23.C b/gcc/testsuite/g++.dg/parse/template23.C
new file mode 100644
index 00000000000..795457b68da
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/template23.C
@@ -0,0 +1,10 @@
+/* PR c++/30895 This used to ICE. */
+/* { dg-do "compile" } */
+
+template<int> struct A {};
+
+template<typename T> struct B
+{
+ A<T(0i)> a1; /* { dg-error "imaginary constants are a GCC extension" } */
+ A<T(0i)> a2; /* { dg-error "imaginary constants are a GCC extension" } */
+};
diff --git a/gcc/testsuite/g++.dg/special/conpr-1.C b/gcc/testsuite/g++.dg/special/conpr-1.C
index c91753dc495..ef694dbe6f8 100644
--- a/gcc/testsuite/g++.dg/special/conpr-1.C
+++ b/gcc/testsuite/g++.dg/special/conpr-1.C
@@ -1,4 +1,4 @@
-/* { dg-do run } */
+/* { dg-do run { target init_priority } } */
#include <stdlib.h>
diff --git a/gcc/testsuite/g++.dg/special/conpr-2.C b/gcc/testsuite/g++.dg/special/conpr-2.C
index 67333c8a98b..ac826942a67 100644
--- a/gcc/testsuite/g++.dg/special/conpr-2.C
+++ b/gcc/testsuite/g++.dg/special/conpr-2.C
@@ -1,5 +1,4 @@
-/* This doesn't work on solaris2 for reasons described in PR 6482. */
-/* { dg-do run { xfail *-*-solaris2* } } */
+/* { dg-do run { target init_priority } } */
/* { dg-additional-sources "conpr-2a.cc" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/g++.dg/special/conpr-3.C b/gcc/testsuite/g++.dg/special/conpr-3.C
index 04a080bacef..71fadcc64d3 100644
--- a/gcc/testsuite/g++.dg/special/conpr-3.C
+++ b/gcc/testsuite/g++.dg/special/conpr-3.C
@@ -1,4 +1,4 @@
-/* { dg-do run } */
+/* { dg-do run { target init_priority } } */
/* { dg-additional-sources "conpr-3a.cc conpr-3b.cc" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/g++.dg/special/conpr-4.C b/gcc/testsuite/g++.dg/special/conpr-4.C
index c04d188ad70..40ce21d98b5 100644
--- a/gcc/testsuite/g++.dg/special/conpr-4.C
+++ b/gcc/testsuite/g++.dg/special/conpr-4.C
@@ -1,4 +1,4 @@
-/* { dg-do run } */
+/* { dg-do run { target init_priority } } */
/* { dg-additional-sources "conpr-3b.cc conpr-3a.cc" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/g++.dg/special/ecos.exp b/gcc/testsuite/g++.dg/special/ecos.exp
index 10f098fea43..6fbd8110610 100644
--- a/gcc/testsuite/g++.dg/special/ecos.exp
+++ b/gcc/testsuite/g++.dg/special/ecos.exp
@@ -24,16 +24,6 @@
# Load support procs.
load_lib g++-dg.exp
-# Test for whether or not __attribute__((init_priority)) is supported
-# by the platform.
-
-set comp_output [g++_target_compile \
- "$srcdir/$subdir/initp1.C" "initp1.S" assembly ""]
-remove-build-file "initp1.S"
-if { [string match "*init_priority*" $comp_output] } {
- return 0
-}
-
# Initialize 'dg'.
dg-init
diff --git a/gcc/testsuite/g++.dg/special/initp1.C b/gcc/testsuite/g++.dg/special/initp1.C
index adde34fefa6..4a539a5a4bd 100644
--- a/gcc/testsuite/g++.dg/special/initp1.C
+++ b/gcc/testsuite/g++.dg/special/initp1.C
@@ -1,5 +1,4 @@
-/* This doesn't work on solaris2 for reasons described in PR 6482. */
-/* { dg-do run { xfail *-*-solaris2* } } */
+/* { dg-do run { target init_priority } } */
#include <stdlib.h>
class Two {
diff --git a/gcc/testsuite/g++.dg/special/initpri1.C b/gcc/testsuite/g++.dg/special/initpri1.C
new file mode 100644
index 00000000000..bd24961e46b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/special/initpri1.C
@@ -0,0 +1,62 @@
+/* { dg-do run { target init_priority } } */
+
+extern "C" void abort ();
+
+int i;
+int j;
+
+void c1() __attribute__((constructor (500)));
+void c2() __attribute__((constructor (700)));
+void c3() __attribute__((constructor (600)));
+
+void c1() {
+ if (i++ != 0)
+ abort ();
+}
+
+void c2() {
+ if (i++ != 2)
+ abort ();
+}
+
+void c3() {
+ if (i++ != 1)
+ abort ();
+}
+
+void d1() __attribute__((destructor (500)));
+void d2() __attribute__((destructor (700)));
+void d3() __attribute__((destructor (600)));
+
+void d1() {
+ if (--i != 0)
+ abort ();
+}
+
+void d2() {
+ if (--i != 2)
+ abort ();
+}
+
+void d3() {
+ if (j != 2)
+ abort ();
+ if (--i != 1)
+ abort ();
+}
+
+void cd4() __attribute__((constructor (800), destructor (800)));
+
+void cd4() {
+ if (i != 3)
+ abort ();
+ ++j;
+}
+
+int main () {
+ if (i != 3)
+ return 1;
+ if (j != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/special/initpri2.C b/gcc/testsuite/g++.dg/special/initpri2.C
new file mode 100644
index 00000000000..fa9fda0d7f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/special/initpri2.C
@@ -0,0 +1,39 @@
+/* { dg-do compile { target init_priority } } */
+
+/* Priorities must be in the range [0, 65535]. */
+void c1()
+ __attribute__((constructor (-1))); /* { dg-error "priorities" } */
+void c2()
+ __attribute__((constructor (65536))); /* { dg-error "priorities" } */
+void d1()
+ __attribute__((destructor (-1))); /* { dg-error "priorities" } */
+void d2()
+ __attribute__((destructor (65536))); /* { dg-error "priorities" } */
+
+/* Priorities 0-100 are reserved for system libraries. */
+void c3()
+ __attribute__((constructor (50))); /* { dg-warning "reserved" } */
+void d3()
+ __attribute__((constructor (50))); /* { dg-warning "reserved" } */
+
+/* Priorities must be integral constants. */
+
+/* Pointers, even with constant values, are not allowed. */
+void c4()
+ __attribute__((constructor ((void*) 500))); /* { dg-error "priorities" } */
+void d4()
+ __attribute__((destructor ((void*) 500))); /* { dg-error "priorities" } */
+
+/* Integer variables are not allowed. */
+int i;
+void c5()
+ __attribute__((constructor ((i)))); /* { dg-error "priorities" } */
+void d5()
+ __attribute__((destructor ((i)))); /* { dg-error "priorities" } */
+
+/* Enumeration constants are allowed. */
+enum E { e = 500 };
+void c6()
+ __attribute__((constructor ((e))));
+void d6()
+ __attribute__((destructor ((e))));
diff --git a/gcc/testsuite/g++.dg/template/arg5.C b/gcc/testsuite/g++.dg/template/arg5.C
new file mode 100644
index 00000000000..3d67143b12d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/arg5.C
@@ -0,0 +1,9 @@
+// PR c++/30534
+// { dg-do compile }
+
+template<bool> struct A;
+
+template<int> void foo()
+{
+ A<__builtin_constant_p(.)> a; // { dg-error "template argument" }
+}
diff --git a/gcc/testsuite/g++.dg/template/array18.C b/gcc/testsuite/g++.dg/template/array18.C
new file mode 100644
index 00000000000..b2b1e3502e1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/array18.C
@@ -0,0 +1,13 @@
+// PR c++/30924
+
+template<typename T>
+struct x {};
+
+template<typename T, unsigned N>
+struct x<T*[N]> {};
+
+int main() {
+ x<int> a;
+ x<int*[10]> b;
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/template/complit2.C b/gcc/testsuite/g++.dg/template/complit2.C
new file mode 100644
index 00000000000..cf3856d474e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/complit2.C
@@ -0,0 +1,17 @@
+// PR c++/31038
+// { dg-options "" }
+
+template<int> void foo()
+{
+ int i = (int) { 0 };
+}
+
+template void foo<0>();
+int f();
+
+template<int> void bar()
+{
+ int i = (int) { f() };
+}
+
+template void bar<0>();
diff --git a/gcc/testsuite/g++.dg/template/typedef2.C b/gcc/testsuite/g++.dg/template/typedef2.C
index 6c65671f6fe..cfe0f3f75bf 100644
--- a/gcc/testsuite/g++.dg/template/typedef2.C
+++ b/gcc/testsuite/g++.dg/template/typedef2.C
@@ -1,3 +1,4 @@
// PR c++/18155
-template<int> typedef struct A; // { dg-error "" }
+template<int> typedef struct A; // { dg-warning "'typedef' was ignored" }
+ // { dg-error "" "" { target *-*-* } 3 }
diff --git a/gcc/testsuite/g++.dg/warn/Wconversion2.C b/gcc/testsuite/g++.dg/warn/Wconversion2.C
new file mode 100644
index 00000000000..d77407aedc9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wconversion2.C
@@ -0,0 +1,4 @@
+// { dg-options "-Wconversion" }
+
+void foo(const char *);
+void bar() { foo(false); } // { dg-warning "pointer type argument" }
diff --git a/gcc/testsuite/g++.dg/warn/Wlogical-op-1.C b/gcc/testsuite/g++.dg/warn/Wlogical-op-1.C
new file mode 100644
index 00000000000..f67ab89f867
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wlogical-op-1.C
@@ -0,0 +1,47 @@
+// { dg-do compile}
+// { dg-options "-Wlogical-op" }
+
+enum { a, b1, b2 };
+
+enum testenum { t1, t2};
+
+extern int c;
+extern bool bool_a, bool_b;
+
+template<typename Enum>
+class QFlags
+{
+public:
+ typedef void **Zero;
+ int i;
+ inline QFlags(Enum f) : i(f) {}
+
+ inline operator int() const
+ { return i;}
+
+};
+
+QFlags<testenum> f(t2);
+extern void do_something(int);
+
+extern testenum testa();
+
+void foo()
+{
+ if ( f && b2 ) // { dg-warning "always evaluate as" }
+ do_something(1);
+ if ( c && b2 ) // { dg-warning "always evaluate as" }
+ do_something(2);
+
+ if ( b2 && c == a ) // { dg-bogus "always evaluate as" }
+ do_something(101);
+ if ( 1 && c )
+ do_something(102); // { dg-bogus "always evaluate as" }
+ if ( t2 && b2 ) // { dg-bogus "always evaluate as" }
+ do_something(103);
+ if ( true && c == a ) // { dg-bogus "always evaluate as" }
+ do_something(104);
+ if ( b2 && true ) // { dg-bogus "always evaluate as" }
+ do_something(105);
+}
+
diff --git a/gcc/testsuite/g++.dg/warn/Wvla-1.C b/gcc/testsuite/g++.dg/warn/Wvla-1.C
new file mode 100644
index 00000000000..ca3669aec99
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wvla-1.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-Wvla" } */
+
+void func (int i)
+{
+ int array[i]; /* { dg-warning "variable length array 'array' is used" } */
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wvla-2.C b/gcc/testsuite/g++.dg/warn/Wvla-2.C
new file mode 100644
index 00000000000..c611f07aab4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wvla-2.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -Wvla" } */
+
+void func (int i)
+{
+ int array[i]; /* { dg-error "error: ISO C.* forbids variable.* array 'array'" } */
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wvla-3.C b/gcc/testsuite/g++.dg/warn/Wvla-3.C
new file mode 100644
index 00000000000..259c576b29f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wvla-3.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -Wno-vla" } */
+
+void func (int i)
+{
+ int array[i];
+}
diff --git a/gcc/testsuite/g++.dg/warn/changes-meaning.C b/gcc/testsuite/g++.dg/warn/changes-meaning.C
new file mode 100644
index 00000000000..fdbddf82091
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/changes-meaning.C
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-fpermissive" } */
+
+template <class _Tp> class auto_ptr {}; /* { dg-warning "changes meaning" } */
+template <class _Tp>
+class counted_ptr
+{
+public:
+ auto_ptr<_Tp> auto_ptr(); /* { dg-warning "" } */
+};
+
diff --git a/gcc/testsuite/g++.dg/warn/do-empty.C b/gcc/testsuite/g++.dg/warn/do-empty.C
new file mode 100644
index 00000000000..350261d48ed
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/do-empty.C
@@ -0,0 +1,15 @@
+/* Test diagnostics for empty bodies in do / while. */
+/* { dg-do compile } */
+/* { dg-options "-Wempty-body" } */
+
+void
+f (int x)
+{
+ do
+ ; /* { dg-warning "empty body in" } */
+ while (x--);
+
+ do
+ {} /* { dg-bogus "empty body in" } */
+ while (++x < 10);
+}
diff --git a/gcc/testsuite/g++.dg/warn/ignored_typedef.C b/gcc/testsuite/g++.dg/warn/ignored_typedef.C
new file mode 100644
index 00000000000..74586a81f5b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/ignored_typedef.C
@@ -0,0 +1,22 @@
+// PR c++/23689
+// Test that malformed typedef's produce a compiler warning.
+
+typedef char valid_0;
+typedef int valid_1;
+typedef long valid_2;
+typedef float valid_3;
+typedef double valid_4;
+typedef unsigned valid_5;
+typedef int *valid_6;
+typedef struct valid_7 {} valid_8;
+typedef struct {} valid_9;
+typedef int temp_0; typedef temp_0 valid_10;
+struct temp_1 {}; typedef temp_1 valid_11;
+union temp_2 {}; typedef temp_2 valid_12;
+typedef void (*valid_13) (int);
+
+typedef struct invalid_0 {}; // { dg-warning "'typedef' was ignored" }
+typedef class invalid_1 {}; // { dg-warning "'typedef' was ignored" }
+typedef enum invalid_2 { INVALID_2 }; // { dg-warning "'typedef' was ignored" }
+typedef enum { INVALID_3 }; // { dg-warning "'typedef' was ignored" }
+typedef union invalid_4 {}; // { dg-warning "'typedef' was ignored" }
diff --git a/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C b/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C
new file mode 100644
index 00000000000..491f7af58ca
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/multiple-overflow-warn-3.C
@@ -0,0 +1,12 @@
+/* PR 30465 : Test for duplicated warnings in a conversion. */
+/* { dg-do compile } */
+/* { dg-options "-Woverflow" } */
+
+wchar_t
+g (void)
+{
+ wchar_t wc = ((wchar_t)1 << 31) - 1; /* { dg-bogus "overflow .* overflow" } */
+ /* { dg-warning "overflow" "" { target *-*-* } 8 } */
+ return wc;
+}
+
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template31.C b/gcc/testsuite/g++.old-deja/g++.jason/template31.C
index 2cab859afc6..81d696f2f09 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/template31.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/template31.C
@@ -3,6 +3,7 @@
#include <iostream>
#include <vector>
+#include <cstdlib>
using std::vector;
diff --git a/gcc/testsuite/gcc.c-torture/compile/981006-1.c b/gcc/testsuite/gcc.c-torture/compile/981006-1.c
index 718fa881af5..ba59da74e66 100644
--- a/gcc/testsuite/gcc.c-torture/compile/981006-1.c
+++ b/gcc/testsuite/gcc.c-torture/compile/981006-1.c
@@ -6,7 +6,7 @@
/* { dg-do assemble } */
/* For MIPS at least, pic is needed to trigger the problem. */
/* { dg-options "-w -Wuninitialized -Werror -fpic" } */
-/* { dg-options "-w -Wuninitialized -Werror" { target rs6000-*-aix* powerpc*-*-aix* arm*-*-* xscale*-*-* strongarm*-*-* fr30-*-* sh-*-hms sh-*-coff h8300*-*-* cris-*-elf* cris-*-aout* mmix-*-* } } */
+/* { dg-options "-w -Wuninitialized -Werror" { target { { rs6000-*-aix* powerpc*-*-aix* arm*-*-* xscale*-*-* strongarm*-*-* fr30-*-* sh-*-hms sh-*-coff h8300*-*-* cris-*-elf* cris-*-aout* mmix-*-* } || { ! fpic } } } } */
int foo (int a, int b)
{
diff --git a/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c b/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c
new file mode 100644
index 00000000000..88667a461ec
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/m68k-byte-addr.c
@@ -0,0 +1,20 @@
+/* This testcase triggered an attempt to reload a byte value into an
+ address register. */
+extern volatile unsigned char x[];
+
+#define DECLARE(I) orig##I, inc##I
+#define READ(I) orig##I = x[I]
+#define INC(I) inc##I = orig##I + 1
+#define WRITE1(I) x[I] = orig##I
+#define WRITE2(I) x[I] = inc##I
+
+#define REPEAT(X) X(0), X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8)
+
+void foo (void)
+{
+ unsigned char REPEAT (DECLARE);
+ REPEAT (READ);
+ REPEAT (INC);
+ REPEAT (WRITE1);
+ REPEAT (WRITE2);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr31034.c b/gcc/testsuite/gcc.c-torture/compile/pr31034.c
new file mode 100644
index 00000000000..affad95154a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr31034.c
@@ -0,0 +1,14 @@
+static inline int
+mod (int a, int n)
+{
+ return a >= n ? a % n : a;
+}
+void dpara(int);
+void opticurve (int m)
+{
+ int i;
+ for (i = 0; i < m; i++)
+ {
+ dpara(mod (i - 1, m));
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c b/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c
new file mode 100644
index 00000000000..c5e9629bd9b
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c
@@ -0,0 +1,15 @@
+extern int inside_main;
+
+void
+bfill (void *s, __SIZE_TYPE__ n, int ch)
+{
+ char *p;
+
+ for (p = s; n-- > 0; p++)
+ *p = ch;
+
+#ifdef __OPTIMIZE__
+ if (inside_main)
+ abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c b/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c
new file mode 100644
index 00000000000..bcbe3a4383a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c
@@ -0,0 +1,15 @@
+extern int inside_main;
+
+void
+bzero (void *s, __SIZE_TYPE__ n)
+{
+ char *p;
+
+ for (p = s; n-- > 0; p++)
+ *p = 0;
+
+#ifdef __OPTIMIZE__
+ if (inside_main)
+ abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
index 5be3df52fe5..e2293ffc040 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-2-lib.c
@@ -1 +1,7 @@
#include "lib/memmove.c"
+#ifdef __vxworks
+/* The RTP C library uses bzero and bfill, both of which are defined
+ in the same file as bcopy. */
+#include "lib/bzero.c"
+#include "lib/bfill.c"
+#endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
index 5be3df52fe5..e2293ffc040 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/memmove-lib.c
@@ -1 +1,7 @@
#include "lib/memmove.c"
+#ifdef __vxworks
+/* The RTP C library uses bzero and bfill, both of which are defined
+ in the same file as bcopy. */
+#include "lib/bzero.c"
+#include "lib/bfill.c"
+#endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
index 2edd0ffa748..eeffe5c08e4 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/memops-asm-lib.c
@@ -77,3 +77,9 @@ bzero (void *d, size_t n)
my_bzero (d, n);
TEST_ABORT;
}
+
+#ifdef __vxworks
+/* The RTP C library uses bfill, which is defined in the same file as
+ bzero and bcopy. */
+#include "lib/bfill.c"
+#endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c
index 9049fb9e1ff..b3f0bd237a4 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/strchr-lib.c
@@ -1 +1,8 @@
#include "lib/strchr.c"
+#ifdef __vxworks
+/* The RTP C library uses bzero, bfill and bcopy, all of which are defined
+ in the same file as index. */
+#include "lib/bzero.c"
+#include "lib/bfill.c"
+#include "lib/memmove.c"
+#endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c b/gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c
index 90475eca33d..9194c555f63 100644
--- a/gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c
+++ b/gcc/testsuite/gcc.c-torture/execute/builtins/strrchr-lib.c
@@ -1 +1,8 @@
#include "lib/strrchr.c"
+#ifdef __vxworks
+/* The RTP C library uses bzero, bfill and bcopy, all of which are defined
+ in the same file as rindex. */
+#include "lib/bzero.c"
+#include "lib/bfill.c"
+#include "lib/memmove.c"
+#endif
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x b/gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
index 45cb7cb027b..ee4ac4feb96 100644
--- a/gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
@@ -6,5 +6,18 @@ if { [istarget "hppa*-*-hpux9*"] || [istarget "hppa*-*-hpux10*"] } {
set torture_execute_xfail "$target_triplet"
}
+# VxWorks kernel mode has the same problem.
+if {[istarget "*-*-vxworks*"]} {
+ set torture_eval_before_execute {
+ global compiler_conditional_xfail_data
+ set compiler_conditional_xfail_data {
+ "The kernel HUGE_VAL is defined to DBL_MAX instead of +Inf."
+ { "*-*-*" }
+ {}
+ { "-mrtp" }
+ }
+ }
+}
+
return 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr30778.c b/gcc/testsuite/gcc.c-torture/execute/pr30778.c
new file mode 100644
index 00000000000..1b05189f499
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr30778.c
@@ -0,0 +1,34 @@
+extern void *memset (void *, int, unsigned long);
+extern void abort (void);
+
+struct reg_stat {
+ void *last_death;
+ void *last_set;
+ void *last_set_value;
+ int last_set_label;
+ char last_set_sign_bit_copies;
+ int last_set_mode : 8;
+ char last_set_invalid;
+ char sign_bit_copies;
+ long nonzero_bits;
+};
+
+static struct reg_stat *reg_stat;
+
+void __attribute__((noinline))
+init_reg_last (void)
+{
+ memset (reg_stat, 0, __builtin_offsetof (struct reg_stat, sign_bit_copies));
+}
+
+int main (void)
+{
+ struct reg_stat r;
+
+ reg_stat = &r;
+ r.nonzero_bits = -1;
+ init_reg_last ();
+ if (r.nonzero_bits != -1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr31072.c b/gcc/testsuite/gcc.c-torture/execute/pr31072.c
new file mode 100644
index 00000000000..beb4b558e34
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr31072.c
@@ -0,0 +1,10 @@
+extern volatile int ReadyFlag_NotProperlyInitialized;
+
+volatile int ReadyFlag_NotProperlyInitialized=1;
+
+int main(void)
+{
+ if (ReadyFlag_NotProperlyInitialized != 1)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/strcmp-1.x b/gcc/testsuite/gcc.c-torture/execute/strcmp-1.x
new file mode 100644
index 00000000000..d807481b36f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/strcmp-1.x
@@ -0,0 +1,16 @@
+if {[istarget i?86-*-vxworks*]
+ || [istarget mips*-*-vxworks*]
+ || [istarget sh*-*-vxworks*]
+ || [istarget sparc*-*-vxworks*]} {
+ # The kernel strcmp doesn't perform unsigned comparisons.
+ set torture_eval_before_execute {
+ global compiler_conditional_xfail_data
+ set compiler_conditional_xfail_data {
+ "The kernel strcmp doesn't perform unsigned comparisons."
+ { "*-*-*" }
+ {}
+ { "-mrtp" }
+ }
+ }
+}
+return 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/strncmp-1.x b/gcc/testsuite/gcc.c-torture/execute/strncmp-1.x
new file mode 100644
index 00000000000..b555e0c8f2a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/strncmp-1.x
@@ -0,0 +1,16 @@
+if {[istarget i?86-*-vxworks*]
+ || [istarget mips*-*-vxworks*]
+ || [istarget sh*-*-vxworks*]
+ || [istarget sparc*-*-vxworks*]} {
+ # The kernel strncmp doesn't perform unsigned comparisons.
+ set torture_eval_before_execute {
+ global compiler_conditional_xfail_data
+ set compiler_conditional_xfail_data {
+ "The kernel strncmp doesn't perform unsigned comparisons."
+ { "*-*-*" }
+ {}
+ { "-mrtp" }
+ }
+ }
+}
+return 0
diff --git a/gcc/testsuite/gcc.dg/20001116-1.c b/gcc/testsuite/gcc.dg/20001116-1.c
index 3ea2f381d07..8b1e919c66f 100644
--- a/gcc/testsuite/gcc.dg/20001116-1.c
+++ b/gcc/testsuite/gcc.dg/20001116-1.c
@@ -7,5 +7,5 @@
void foo (int x)
{
if (x)
- ; /* { dg-warning "empty body in an if-statement" } */
+ ; /* { dg-warning "empty body in an" } */
}
diff --git a/gcc/testsuite/gcc.dg/20020103-1.c b/gcc/testsuite/gcc.dg/20020103-1.c
index 776dd3d96d6..3402e8bdfce 100644
--- a/gcc/testsuite/gcc.dg/20020103-1.c
+++ b/gcc/testsuite/gcc.dg/20020103-1.c
@@ -1,6 +1,7 @@
/* Verify that constant equivalences get reloaded properly, either by being
spilled to the stack, or regenerated, but not dropped to memory. */
/* { dg-do compile { target { { i?86-*-* rs6000-*-* alpha*-*-* x86_64-*-* } || { powerpc*-*-* && ilp32 } } } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -fpic -fno-omit-frame-pointer -fno-asynchronous-unwind-tables" } */
/* { dg-final { scan-assembler-not "LC\[0-9\]" { xfail powerpc*-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/20020426-2.c b/gcc/testsuite/gcc.dg/20020426-2.c
index 095cf51790d..40dd69c2ccc 100644
--- a/gcc/testsuite/gcc.dg/20020426-2.c
+++ b/gcc/testsuite/gcc.dg/20020426-2.c
@@ -3,6 +3,7 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -frename-registers -fomit-frame-pointer -fPIC -mtune=i686" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target fpic } */
/* { dg-bogus "\[Uu\]nresolved symbol .(_GLOBAL_OFFSET_TABLE_|\[_.A-Za-z\]\[_.0-9A-Za-z\]*@(PLT|GOT|GOTOFF))" "PIC unsupported" { xfail *-*-netware* } 0 } */
extern void exit (int);
diff --git a/gcc/testsuite/gcc.dg/20040813-1.c b/gcc/testsuite/gcc.dg/20040813-1.c
index a983886da29..df36058a4ca 100644
--- a/gcc/testsuite/gcc.dg/20040813-1.c
+++ b/gcc/testsuite/gcc.dg/20040813-1.c
@@ -2,7 +2,7 @@
/* Contributed by Devang Patel <dpatel@apple.com> */
/* { dg-do compile } */
-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-sysv5* } { "*" } { "" } } */
+/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-sysv5* *-*-vxworks* } { "*" } { "" } } */
/* { dg-options "-gstabs" } */
int
diff --git a/gcc/testsuite/gcc.dg/Wlogical-op-1.c b/gcc/testsuite/gcc.dg/Wlogical-op-1.c
new file mode 100644
index 00000000000..d9687bf09a2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wlogical-op-1.c
@@ -0,0 +1,47 @@
+/*
+ { dg-do compile}
+ { dg-options "-Wlogical-op" }
+*/
+
+enum { a, ba, b };
+
+enum testenum { t1, t2};
+
+extern int c;
+extern char bool_a, bool_b;
+
+extern int testa();
+
+void foo()
+{
+ if ( testa() && b ) /* { dg-warning "always evaluate as" } */
+ (void)testa();
+
+ if ( c && b ) /* { dg-warning "always evaluate as" } */
+ (void)testa();
+
+ if ( c && 0x42 ) /* { dg-warning "always evaluate as" } */
+ (void)testa();
+
+ if ( c && 0x42 ) /* { dg-warning "always evaluate as" } */
+ (void) testa();
+
+ if ( c && 0x80 >>6) /* { dg-warning "always evaluate as" } */
+ (void)testa();
+
+
+ if ( b && c == a ) /* { dg-bogus "always evaluate as" } */
+ (void)testa();
+
+ if ( 1 && c ) /* { dg-bogus "always evaluate as" } */
+ (void)testa();
+
+ if ( t2 && b ) /* { dg-bogus "always evaluate as" } */
+ (void)testa();
+
+ if ( 0 && c == a ) /* { dg-bogus "always evaluate as" } */
+ (void)testa();
+
+ if ( b && 1 ) /* { dg-bogus "always evaluate as" } */
+ (void)testa();
+}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-11.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-11.c
new file mode 100644
index 00000000000..c98610e48a6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-11.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=1" } */
+
+/* Based on strict-overflow-5.c. */
+
+/* We can only unroll when using strict overflow semantics. */
+
+int foo (int i)
+{
+ int index;
+ int r=0;
+
+ for (index = i; index <= i+4; index+=2) /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
+ r++;
+
+ return r;
+}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-12.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-12.c
new file mode 100644
index 00000000000..177904db74a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-12.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=2" } */
+
+/* Source: Ian Lance Taylor. Dual of no-strict-overflow-6.c. */
+
+/* VRP test. This turns into an infinite loop when using strict
+ overflow semantics. */
+
+int
+foo ()
+{
+ int i, bits;
+ for (i = 1, bits = 1; i > 0; i += i) /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
+ ++bits;
+ return bits;
+}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-13.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-13.c
new file mode 100644
index 00000000000..170d13777fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-13.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=2" } */
+
+/* Source: Ian Lance Taylor. Dual of no-strict-overflow-6.c. */
+
+/* VRP test. This turns into an infinite loop (depending on what
+ bigtime_test does), but at least we warn about it. */
+
+extern int bigtime_test (int);
+int
+foo ()
+{
+ int j;
+ for (j = 1; 0 < j; j *= 2) /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
+ if (! bigtime_test (j))
+ return 1;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-14.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-14.c
new file mode 100644
index 00000000000..6f3c5a24fd1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-14.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=4" } */
+
+/* Source: Ian Lance Taylor. */
+
+int
+foo (int j)
+{
+ int i;
+ int sum = 0;
+
+ for (i = 1; i < j; i += i)
+ sum += i / 16; /* { dg-warning "assuming signed overflow does not occur" "" } */
+ return sum;
+}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-15.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-15.c
new file mode 100644
index 00000000000..d1627d2f47b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-15.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=4" } */
+
+/* Source: Ian Lance Taylor. */
+
+int
+foo (int j)
+{
+ int i;
+ int sum = 0;
+
+ for (i = 1; i < j; i += i)
+ sum += __builtin_abs (i); /* { dg-warning "assuming signed overflow does not occur" "" } */
+ return sum;
+}
diff --git a/gcc/testsuite/gcc.dg/builtins-55.c b/gcc/testsuite/gcc.dg/builtins-55.c
index d804f290e00..7eebd6395ca 100644
--- a/gcc/testsuite/gcc.dg/builtins-55.c
+++ b/gcc/testsuite/gcc.dg/builtins-55.c
@@ -32,6 +32,10 @@ void test(double x)
if (sizeof(long) != sizeof(long long))
return;
+ if (__builtin_lceil(x) != __builtin_llceil(x))
+ link_error();
+ if (__builtin_lfloor(x) != __builtin_llfloor(x))
+ link_error();
if (lround(x) != llround(x))
link_error();
if (lrint(x) != llrint(x))
@@ -45,6 +49,10 @@ void testf(float x)
if (sizeof(long) != sizeof(long long))
return;
+ if (__builtin_lceilf(x) != __builtin_llceilf(x))
+ link_error();
+ if (__builtin_lfloorf(x) != __builtin_llfloorf(x))
+ link_error();
if (lroundf(x) != llroundf(x))
link_error();
if (lrintf(x) != llrintf(x))
@@ -58,6 +66,10 @@ void testl(long double x)
if (sizeof(long) != sizeof(long long))
return;
+ if (__builtin_lceill(x) != __builtin_llceill(x))
+ link_error();
+ if (__builtin_lfloorl(x) != __builtin_llfloorl(x))
+ link_error();
if (lroundl(x) != llroundl(x))
link_error();
if (lrintl(x) != llrintl(x))
diff --git a/gcc/testsuite/gcc.dg/builtins-config.h b/gcc/testsuite/gcc.dg/builtins-config.h
index e61d02a5e62..060db4ffc18 100644
--- a/gcc/testsuite/gcc.dg/builtins-config.h
+++ b/gcc/testsuite/gcc.dg/builtins-config.h
@@ -17,6 +17,8 @@
/* FreeBSD before version 5 doesn't have the entire C99 runtime. */
#elif defined(__netware__)
/* NetWare doesn't have the entire C99 runtime. */
+#elif defined(__vxworks)
+/* VxWorks doesn't have a full C99 time. (cabs is missing, for example.) */
#elif (defined(__APPLE__) && defined(__ppc__) \
&& ! defined (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__))
/* MacOS versions before 10.3 don't have many C99 functions.
diff --git a/gcc/testsuite/gcc.dg/c90-vla-1.c b/gcc/testsuite/gcc.dg/c90-vla-1.c
index c8c93c7826c..2d9b5f10bc1 100644
--- a/gcc/testsuite/gcc.dg/c90-vla-1.c
+++ b/gcc/testsuite/gcc.dg/c90-vla-1.c
@@ -5,7 +5,7 @@
void
tdef (int n)
{
- typedef int A[n]; /* { dg-error "forbids variable-size array" } */
+ typedef int A[n]; /* { dg-error "forbids variable length array" } */
A a;
A *p;
p = &a;
diff --git a/gcc/testsuite/gcc.dg/c99-vla-1.c b/gcc/testsuite/gcc.dg/c99-vla-1.c
index 0378ce38bcd..4a3a0f8e238 100644
--- a/gcc/testsuite/gcc.dg/c99-vla-1.c
+++ b/gcc/testsuite/gcc.dg/c99-vla-1.c
@@ -5,7 +5,7 @@
void
tdef (int n)
{
- typedef int A[n]; /* { dg-bogus "forbids variable-size array" } */
+ typedef int A[n]; /* { dg-bogus "forbids variable length array" } */
A a;
A *p;
p = &a;
diff --git a/gcc/testsuite/gcc.dg/do-empty.c b/gcc/testsuite/gcc.dg/do-empty.c
new file mode 100644
index 00000000000..350261d48ed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/do-empty.c
@@ -0,0 +1,15 @@
+/* Test diagnostics for empty bodies in do / while. */
+/* { dg-do compile } */
+/* { dg-options "-Wempty-body" } */
+
+void
+f (int x)
+{
+ do
+ ; /* { dg-warning "empty body in" } */
+ while (x--);
+
+ do
+ {} /* { dg-bogus "empty body in" } */
+ while (++x < 10);
+}
diff --git a/gcc/testsuite/gcc.dg/fold-eqcmplx-1.c b/gcc/testsuite/gcc.dg/fold-eqcmplx-1.c
new file mode 100644
index 00000000000..32f4396ba90
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/fold-eqcmplx-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-original" } */
+
+int foo(float x, float y)
+{
+ return (_Complex float)x == (_Complex float)y;
+}
+
+/* { dg-final { scan-tree-dump-times "x == y" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc/testsuite/gcc.dg/if-empty-1.c b/gcc/testsuite/gcc.dg/if-empty-1.c
index 9785c72a181..a129832c337 100644
--- a/gcc/testsuite/gcc.dg/if-empty-1.c
+++ b/gcc/testsuite/gcc.dg/if-empty-1.c
@@ -7,7 +7,7 @@ void
f (int x)
{
if (x)
- ; /* { dg-warning "warning: empty body in an if-statement" } */
+ ; /* { dg-warning "warning: empty body in an" } */
if (x)
; /* By design we don't warn in this case. */
else
@@ -15,7 +15,7 @@ f (int x)
if (x)
(void)0;
else
- ; /* { dg-warning "warning: empty body in an else-statement" } */
+ ; /* { dg-warning "warning: empty body in an" } */
if (x)
(void)0;
else
diff --git a/gcc/testsuite/gcc.dg/initpri1.c b/gcc/testsuite/gcc.dg/initpri1.c
new file mode 100644
index 00000000000..794ea2b9e0b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/initpri1.c
@@ -0,0 +1,62 @@
+/* { dg-do run { target init_priority } } */
+
+extern void abort ();
+
+int i;
+int j;
+
+void c1() __attribute__((constructor (500)));
+void c2() __attribute__((constructor (700)));
+void c3() __attribute__((constructor (600)));
+
+void c1() {
+ if (i++ != 0)
+ abort ();
+}
+
+void c2() {
+ if (i++ != 2)
+ abort ();
+}
+
+void c3() {
+ if (i++ != 1)
+ abort ();
+}
+
+void d1() __attribute__((destructor (500)));
+void d2() __attribute__((destructor (700)));
+void d3() __attribute__((destructor (600)));
+
+void d1() {
+ if (--i != 0)
+ abort ();
+}
+
+void d2() {
+ if (--i != 2)
+ abort ();
+}
+
+void d3() {
+ if (j != 2)
+ abort ();
+ if (--i != 1)
+ abort ();
+}
+
+void cd4() __attribute__((constructor (800), destructor (800)));
+
+void cd4() {
+ if (i != 3)
+ abort ();
+ ++j;
+}
+
+int main () {
+ if (i != 3)
+ return 1;
+ if (j != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/initpri2.c b/gcc/testsuite/gcc.dg/initpri2.c
new file mode 100644
index 00000000000..fa9fda0d7f3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/initpri2.c
@@ -0,0 +1,39 @@
+/* { dg-do compile { target init_priority } } */
+
+/* Priorities must be in the range [0, 65535]. */
+void c1()
+ __attribute__((constructor (-1))); /* { dg-error "priorities" } */
+void c2()
+ __attribute__((constructor (65536))); /* { dg-error "priorities" } */
+void d1()
+ __attribute__((destructor (-1))); /* { dg-error "priorities" } */
+void d2()
+ __attribute__((destructor (65536))); /* { dg-error "priorities" } */
+
+/* Priorities 0-100 are reserved for system libraries. */
+void c3()
+ __attribute__((constructor (50))); /* { dg-warning "reserved" } */
+void d3()
+ __attribute__((constructor (50))); /* { dg-warning "reserved" } */
+
+/* Priorities must be integral constants. */
+
+/* Pointers, even with constant values, are not allowed. */
+void c4()
+ __attribute__((constructor ((void*) 500))); /* { dg-error "priorities" } */
+void d4()
+ __attribute__((destructor ((void*) 500))); /* { dg-error "priorities" } */
+
+/* Integer variables are not allowed. */
+int i;
+void c5()
+ __attribute__((constructor ((i)))); /* { dg-error "priorities" } */
+void d5()
+ __attribute__((destructor ((i)))); /* { dg-error "priorities" } */
+
+/* Enumeration constants are allowed. */
+enum E { e = 500 };
+void c6()
+ __attribute__((constructor ((e))));
+void d6()
+ __attribute__((destructor ((e))));
diff --git a/gcc/testsuite/gcc.dg/inline-18.c b/gcc/testsuite/gcc.dg/inline-18.c
new file mode 100644
index 00000000000..5a37195be94
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/inline-18.c
@@ -0,0 +1,28 @@
+/* Test -fgnu89-extern-inline. */
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -fgnu89-inline" } */
+/* { dg-final { scan-assembler "func1" } } */
+/* { dg-final { scan-assembler-not "func2" } } */
+/* { dg-final { scan-assembler "func3" } } */
+/* { dg-final { scan-assembler "func4" } } */
+
+#ifndef __GNUC_GNU_INLINE__
+#error __GNUC_GNU_INLINE__ is not defined
+#endif
+
+#ifdef __GNUC_STDC_INLINE__
+#error __GNUC_STDC_INLINE__ is defined
+#endif
+
+extern inline int func1 (void) { return 0; }
+inline int func1 (void) { return 1; }
+
+extern int func2 (void);
+extern inline int func2 (void) { return 2; }
+
+inline int func3 (void);
+inline int func3 (void) { return 3; }
+
+extern int func4 (void);
+extern inline int func4 (void) { return 4; }
+int func4 (void) { return 5; }
diff --git a/gcc/testsuite/gcc.dg/inline-19.c b/gcc/testsuite/gcc.dg/inline-19.c
new file mode 100644
index 00000000000..96dceb43356
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/inline-19.c
@@ -0,0 +1,28 @@
+/* Test -fgnu89-extern-inline. */
+/* { dg-do compile } */
+/* { dg-options "-fgnu89-inline" } */
+/* { dg-final { scan-assembler "func1" } } */
+/* { dg-final { scan-assembler-not "func2" } } */
+/* { dg-final { scan-assembler "func3" } } */
+/* { dg-final { scan-assembler "func4" } } */
+
+#ifndef __GNUC_GNU_INLINE__
+#error __GNUC_GNU_INLINE__ is not defined
+#endif
+
+#ifdef __GNUC_STDC_INLINE__
+#error __GNUC_STDC_INLINE__ is defined
+#endif
+
+extern inline int func1 (void) { return 0; }
+inline int func1 (void) { return 1; }
+
+extern int func2 (void);
+extern inline int func2 (void) { return 2; }
+
+inline int func3 (void);
+inline int func3 (void) { return 3; }
+
+extern int func4 (void);
+extern inline int func4 (void) { return 4; }
+int func4 (void) { return 5; }
diff --git a/gcc/testsuite/gcc.dg/inline-20.c b/gcc/testsuite/gcc.dg/inline-20.c
new file mode 100644
index 00000000000..31354abca90
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/inline-20.c
@@ -0,0 +1,64 @@
+/* Test -fno-gnu89-extern-inline. */
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -fno-gnu89-inline" } */
+/* { dg-final { scan-assembler-not "dontgenerate" } } */
+/* { dg-final { scan-assembler "func1" } } */
+/* { dg-final { scan-assembler "func2" } } */
+/* { dg-final { scan-assembler "func3" } } */
+/* { dg-final { scan-assembler "func4" } } */
+/* { dg-final { scan-assembler "func5" } } */
+/* { dg-final { scan-assembler "func6" } } */
+/* { dg-final { scan-assembler "func7" } } */
+/* { dg-final { scan-assembler "func8" } } */
+/* { dg-final { scan-assembler "func9" } } */
+
+#ifdef __GNUC_GNU_INLINE__
+#error __GNUC_GNU_INLINE__ is defined
+#endif
+
+#ifndef __GNUC_STDC_INLINE__
+#error __GNUC_STDC_INLINE__ is not defined
+#endif
+
+inline int dontgenerate1 (void)
+{
+ return 1;
+}
+
+inline int dontgenerate2 (void);
+inline int dontgenerate2 (void)
+{
+ return 2;
+}
+
+inline int dontgenerate3 (void)
+{
+ return 3;
+}
+inline int dontgenerate3 (void);
+
+extern inline int func1 (void) { return 1; }
+
+extern inline int func2 (void);
+inline int func2 (void) { return 2; }
+
+inline int func3 (void) { return 3; }
+extern inline int func3 (void);
+
+inline int func4 (void);
+extern inline int func4 (void) { return 4; }
+
+extern inline int func5 (void) { return 5; }
+inline int func5 (void);
+
+extern int func6 (void);
+inline int func6 (void) { return 6; }
+
+inline int func7 (void) { return 7; }
+extern int func7 (void);
+
+inline int func8 (void);
+extern int func8 (void) { return 8; }
+
+extern int func9 (void) { return 9; }
+inline int func9 (void);
diff --git a/gcc/testsuite/gcc.dg/inline-21.c b/gcc/testsuite/gcc.dg/inline-21.c
new file mode 100644
index 00000000000..c7f9a07b6ce
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/inline-21.c
@@ -0,0 +1,4 @@
+/* Test -fno-gnu89-extern-inline. */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu89 -fno-gnu89-inline" } */
+/* { dg-error "only supported in GNU99 or C99 mode" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/intmax_t-1.c b/gcc/testsuite/gcc.dg/intmax_t-1.c
index 80893401c34..8357aa961db 100644
--- a/gcc/testsuite/gcc.dg/intmax_t-1.c
+++ b/gcc/testsuite/gcc.dg/intmax_t-1.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-Wall" } */
-/* { dg-error "" "" { target *-*-solaris2.5.1 *arm*-*-*elf* xscale*-*-elf* xtensa-*-elf* } 0 } */
+/* { dg-error "" "" { target *-*-solaris2.5.1 *arm*-*-*elf* xscale*-*-elf* xtensa-*-elf* *-*-vxworks* } 0 } */
/* Compile with -Wall to get a warning if built-in and system intmax_t don't
match. */
diff --git a/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c b/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
new file mode 100644
index 00000000000..afb4e517f28
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/multiple-overflow-warn-3.c
@@ -0,0 +1,12 @@
+/* PR 30465 : Test for duplicated warnings in a conversion. */
+/* { dg-do compile } */
+/* { dg-options "-Woverflow" } */
+
+short int
+g (void)
+{
+ short int wc = ((short int)1 << 31) - 1; /* { dg-bogus "overflow .* overflow" } */
+ /* { dg-warning "overflow" "" { target *-*-* } 8 } */
+ return wc;
+}
+
diff --git a/gcc/testsuite/gcc.dg/no-strict-overflow-5.c b/gcc/testsuite/gcc.dg/no-strict-overflow-5.c
new file mode 100644
index 00000000000..7f82014c76e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/no-strict-overflow-5.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-strict-overflow -O2 -fdump-tree-final_cleanup" } */
+
+/* Dual of strict-overflow-5.c. */
+
+/* We can only unroll when using strict overflow semantics. */
+
+int foo (int i)
+{
+ int index;
+ int r=0;
+
+ for (index = i; index <= i+4; index+=2)
+ r++;
+
+ return r;
+}
+
+/* { dg-final { scan-tree-dump-times "r = 3" 0 "final_cleanup" } } */
+/* { dg-final { cleanup-tree-dump "final_cleanup" } } */
diff --git a/gcc/testsuite/gcc.dg/no-strict-overflow-6.c b/gcc/testsuite/gcc.dg/no-strict-overflow-6.c
new file mode 100644
index 00000000000..664aa256af5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/no-strict-overflow-6.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-strict-overflow -O2 -fdump-tree-final_cleanup" } */
+
+/* Source: Ian Lance Taylor. */
+
+/* VRP test. We can not simplify the conditional when not using
+ strict overflow semantics. We don't test this with
+ -fstrict-overflow because it turns into an infinite loop. That is
+ OK but it would also be OK to not do that. */
+
+int
+foo ()
+{
+ int i, bits;
+ for (i = 1, bits = 1; i > 0; i += i)
+ ++bits;
+ return bits;
+}
+
+/* { dg-final { scan-tree-dump "return bits" "final_cleanup" } } */
+/* { dg-final { cleanup-tree-dump "final_cleanup" } } */
diff --git a/gcc/testsuite/gcc.dg/pr23165.c b/gcc/testsuite/gcc.dg/pr23165.c
index 94e7daebc90..49194a1462d 100644
--- a/gcc/testsuite/gcc.dg/pr23165.c
+++ b/gcc/testsuite/gcc.dg/pr23165.c
@@ -3,7 +3,7 @@
void foo (void)
{
if (0)
- a: ; /* { dg-warning "empty body in an if-statement" } */
+ a: ; /* { dg-warning "empty body in an" } */
}
diff --git a/gcc/testsuite/gcc.dg/pr28243.c b/gcc/testsuite/gcc.dg/pr28243.c
index f74f86e3010..c2797c0fb3f 100644
--- a/gcc/testsuite/gcc.dg/pr28243.c
+++ b/gcc/testsuite/gcc.dg/pr28243.c
@@ -2,6 +2,7 @@
/* Reported by Mike Frysinger <vapier@gentoo.org> */
/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -ftracer -fPIC" } */
struct displayfuncs {
diff --git a/gcc/testsuite/gcc.dg/pr30643.c b/gcc/testsuite/gcc.dg/pr30643.c
new file mode 100644
index 00000000000..67fe111a77f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30643.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-not "undefined" } } */
+
+/* Make sure we optimize all calls away. */
+
+extern void undefined (void);
+struct s { int a, b; };
+void bar (struct s *ps, int *p, int *__restrict__ rp, int *__restrict__ rq)
+{
+ ps->a = 0;
+ ps->b = 1;
+ if (ps->a != 0)
+ undefined ();
+ p[0] = 0;
+ p[1] = 1;
+ if (p[0] != 0)
+ undefined ();
+ rp[0] = 0;
+ rq[0] = 1;
+ if (rp[0] != 0)
+ undefined ();
+}
+int main (void) {
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr30744-1.c b/gcc/testsuite/gcc.dg/pr30744-1.c
new file mode 100644
index 00000000000..f0734db60f2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30744-1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef struct {
+ unsigned long unique;
+} G;
+
+void r(G* n)
+{
+ unsigned long p;
+ if (((G *) ((void *)((~(unsigned long)(p))))) != ((void *)0)) {
+ ((G *) ((void *)((~(unsigned long)(p)))))->unique = n->unique;
+ }
+}
+
diff --git a/gcc/testsuite/gcc.dg/pr30904.c b/gcc/testsuite/gcc.dg/pr30904.c
new file mode 100644
index 00000000000..31ca0497f91
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30904.c
@@ -0,0 +1,18 @@
+/* { dg-do link } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+extern int t;
+extern void link_error(void);
+int main (void)
+{
+ struct { unsigned int a : 7; } s;
+ s.a = t;
+ if (s.a >> 8)
+ link_error ();
+ if (s.a >> 9)
+ link_error ();
+}
+
+
+/* { dg-final { scan-tree-dump-times "link_error" 0 "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr30951.c b/gcc/testsuite/gcc.dg/pr30951.c
new file mode 100644
index 00000000000..149b8ecaafd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30951.c
@@ -0,0 +1,36 @@
+/* { dg-do link } */
+
+extern void link_error (void);
+
+void test (int x, unsigned int y)
+{
+ if (x + 5 == x)
+ link_error ();
+ if (x == x + 10)
+ link_error ();
+ if (y + 5 == y)
+ link_error ();
+ if (y == y + 10)
+ link_error ();
+ if (x + 5 != x)
+ ;
+ else
+ link_error ();
+ if (x != x + 10)
+ ;
+ else
+ link_error ();
+ if (y + 5 != y)
+ ;
+ else
+ link_error ();
+ if (y != y + 10)
+ ;
+ else
+ link_error ();
+}
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr31127.c b/gcc/testsuite/gcc.dg/pr31127.c
new file mode 100644
index 00000000000..f45b10ed5bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr31127.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void ParseStringSidToSid(char *s, int* p) {
+ int i = 0;
+
+ while (*s) {
+ while (*s && *s != '-')
+ s++;
+ if (*s== '-')
+ s++;
+
+ p[i++] = *s;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/ssp-1.c b/gcc/testsuite/gcc.dg/ssp-1.c
new file mode 100644
index 00000000000..c839a5d3ae2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ssp-1.c
@@ -0,0 +1,21 @@
+/* { dg-do run { target native } } */
+/* { dg-options "-fstack-protector" } */
+#include <stdlib.h>
+
+static void
+__stack_chk_fail (void)
+{
+ exit (0); /* pass */
+}
+
+int main ()
+{
+ int i;
+ char foo[255];
+
+ // smash stack
+ for (i = 0; i <= 400; i++)
+ foo[i] = 42;
+
+ return 1; /* fail */
+}
diff --git a/gcc/testsuite/gcc.dg/ssp-2.c b/gcc/testsuite/gcc.dg/ssp-2.c
new file mode 100644
index 00000000000..7a5804c60ed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ssp-2.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target native } } */
+/* { dg-options "-fstack-protector" } */
+#include <stdlib.h>
+
+void
+__stack_chk_fail (void)
+{
+ exit (0); /* pass */
+}
+
+void
+overflow()
+{
+ int i = 0;
+ char foo[30];
+
+ /* Overflow buffer. */
+ for (i = 0; i < 50; i++)
+ foo[i] = 42;
+}
+
+int main (void)
+{
+ overflow ();
+ return 1; /* fail */
+}
diff --git a/gcc/testsuite/gcc.dg/tls/opt-10.c b/gcc/testsuite/gcc.dg/tls/opt-10.c
index f31c1fff816..777e585569a 100644
--- a/gcc/testsuite/gcc.dg/tls/opt-10.c
+++ b/gcc/testsuite/gcc.dg/tls/opt-10.c
@@ -1,4 +1,5 @@
/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O3 -fpic" } */
/* The web pass was creating unrecognisable pic_load_dot_plus_four insns
diff --git a/gcc/testsuite/gcc.dg/tls/opt-9.c b/gcc/testsuite/gcc.dg/tls/opt-9.c
index 3829c66fc55..4cc16313b1c 100644
--- a/gcc/testsuite/gcc.dg/tls/opt-9.c
+++ b/gcc/testsuite/gcc.dg/tls/opt-9.c
@@ -1,5 +1,6 @@
/* PR 21412 */
/* { dg-do compile */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -fPIC" } */
struct S { int x[10]; };
diff --git a/gcc/testsuite/gcc.dg/tls/pic-1.c b/gcc/testsuite/gcc.dg/tls/pic-1.c
index f5b020b7db6..f40267c10a3 100644
--- a/gcc/testsuite/gcc.dg/tls/pic-1.c
+++ b/gcc/testsuite/gcc.dg/tls/pic-1.c
@@ -1,4 +1,5 @@
/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -fpic -ftls-model=global-dynamic" } */
extern __thread long e1;
diff --git a/gcc/testsuite/gcc.dg/tls/struct-1.c b/gcc/testsuite/gcc.dg/tls/struct-1.c
index 11151236d90..cf931bf9e62 100644
--- a/gcc/testsuite/gcc.dg/tls/struct-1.c
+++ b/gcc/testsuite/gcc.dg/tls/struct-1.c
@@ -1,6 +1,7 @@
/* This testcase ICEd on IA-32 because the backend was inconsistent whether
to allow addends for @dtpoff relocs or not. */
/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -fpic" } */
struct S {
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-attr-1.c b/gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
index 926f8ed1981..5b9012e51fc 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-attr-1.c
@@ -344,6 +344,8 @@ FPTEST1 (j0)
FPTEST1 (j1)
FPTEST2ARG1 (jn, int)
FPTEST2ARG2 (ldexp, int)
+BUILTIN_FPTEST1 (llceil)
+BUILTIN_FPTEST1 (llfloor)
FPTEST1T (llrint, long long)
FPTEST1T (llround, long long)
FPTEST1 (log)
@@ -351,6 +353,8 @@ FPTEST1 (log10)
FPTEST1 (log1p)
FPTEST1 (log2)
FPTEST1 (logb)
+BUILTIN_FPTEST1 (lceil)
+BUILTIN_FPTEST1 (lfloor)
FPTEST1T (lrint, long)
FPTEST1T (lround, long)
BUILTIN_FPTEST1ARG (nan, char *)
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-convert-1.c b/gcc/testsuite/gcc.dg/torture/builtin-convert-1.c
index 5e4f497a9c7..7886b9a531f 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-convert-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-convert-1.c
@@ -21,9 +21,6 @@
#define MAYBEC99(CODE, C99) (!(C99) && (CODE))
#endif
-#define PROTOTYPE1(FN) extern double FN(double); extern float FN##f(float); \
- extern long double FN##l(long double);
-
void test(double d1, float f1, long double ld1)
{
/* Test converting math builtins to narrower FP types based on a
@@ -33,7 +30,6 @@ void test(double d1, float f1, long double ld1)
is only performed if the replacement function is actually
narrower in width, so check that first. */
#define OUTER_CAST1(MATHFN, C99) \
- PROTOTYPE1 (MATHFN) \
extern void link_failure_outer_##MATHFN##l_##MATHFN##_1(void); \
extern void link_failure_outer_##MATHFN##l_##MATHFN##_2(void); \
extern void link_failure_outer_##MATHFN##l_##MATHFN##f_1(void); \
@@ -41,52 +37,51 @@ void test(double d1, float f1, long double ld1)
extern void link_failure_outer_##MATHFN##_##MATHFN##f_1(void); \
extern void link_failure_outer_##MATHFN##_##MATHFN##f_2(void); \
if (sizeof (long double) > sizeof (double) \
- && MAYBEC99 ((double) MATHFN##l((double)ld1) != MATHFN(ld1), C99)) \
+ && MAYBEC99 ((double) __builtin_##MATHFN##l((double)ld1) != __builtin_##MATHFN(ld1), C99)) \
link_failure_outer_##MATHFN##l_##MATHFN##_1(); \
if (sizeof (long double) > sizeof (double) \
- && MAYBEC99 ((double) MATHFN##l(d1) != MATHFN(d1), C99)) \
+ && MAYBEC99 ((double) __builtin_##MATHFN##l(d1) != __builtin_##MATHFN(d1), C99)) \
link_failure_outer_##MATHFN##l_##MATHFN##_1(); \
if (sizeof (long double) > sizeof (double) \
- && MAYBEC99 ((double) MATHFN##l(f1) != MATHFN(f1), C99)) \
+ && MAYBEC99 ((double) __builtin_##MATHFN##l(f1) != __builtin_##MATHFN(f1), C99)) \
link_failure_outer_##MATHFN##l_##MATHFN##_2(); \
if (sizeof (long double) > sizeof (float) \
- && C99CODE ((float) MATHFN##l((float) ld1) != MATHFN##f(ld1))) \
+ && C99CODE ((float) __builtin_##MATHFN##l((float) ld1) != __builtin_##MATHFN##f(ld1))) \
link_failure_outer_##MATHFN##l_##MATHFN##f_1(); \
if (sizeof (long double) > sizeof (float) \
- && C99CODE ((float) MATHFN##l((float) d1) != MATHFN##f(d1))) \
+ && C99CODE ((float) __builtin_##MATHFN##l((float) d1) != __builtin_##MATHFN##f(d1))) \
link_failure_outer_##MATHFN##l_##MATHFN##f_1(); \
if (sizeof (long double) > sizeof (float) \
- && C99CODE ((float) MATHFN##l(f1) != MATHFN##f(f1))) \
+ && C99CODE ((float) __builtin_##MATHFN##l(f1) != __builtin_##MATHFN##f(f1))) \
link_failure_outer_##MATHFN##l_##MATHFN##f_2(); \
if (sizeof (double) > sizeof (float) \
- && C99CODE ((float) MATHFN((float) ld1) != MATHFN##f(ld1))) \
+ && C99CODE ((float) __builtin_##MATHFN((float) ld1) != __builtin_##MATHFN##f(ld1))) \
link_failure_outer_##MATHFN##_##MATHFN##f_1(); \
if (sizeof (double) > sizeof (float) \
- && C99CODE ((float) MATHFN((float) d1) != MATHFN##f(d1))) \
+ && C99CODE ((float) __builtin_##MATHFN((float) d1) != __builtin_##MATHFN##f(d1))) \
link_failure_outer_##MATHFN##_##MATHFN##f_1(); \
if (sizeof (double) > sizeof (float) \
- && C99CODE ((float) MATHFN(f1) != MATHFN##f(f1))) \
+ && C99CODE ((float) __builtin_##MATHFN(f1) != __builtin_##MATHFN##f(f1))) \
link_failure_outer_##MATHFN##_##MATHFN##f_2()
/* Test converting math builtins to narrower FP types based on if
the argument is a narrower type (perhaps implicitly) cast to a
wider one. */
#define INNER_CAST1(MATHFN, C99) \
- PROTOTYPE1 (MATHFN) \
extern void link_failure_inner_##MATHFN##l_##MATHFN(void); \
extern void link_failure_inner_##MATHFN##l_##MATHFN##f(void); \
extern void link_failure_inner_##MATHFN##_##MATHFN##f(void); \
if (sizeof (long double) > sizeof (double) \
- && MAYBEC99 (MATHFN##l(d1) != (long double) MATHFN(d1), C99)) \
+ && MAYBEC99 (__builtin_##MATHFN##l(d1) != (long double) __builtin_##MATHFN(d1), C99)) \
link_failure_inner_##MATHFN##l_##MATHFN(); \
if (sizeof (long double) > sizeof (float) \
- && C99CODE (MATHFN##l(f1) != (long double) MATHFN##f(f1))) \
+ && C99CODE (__builtin_##MATHFN##l(f1) != (long double) __builtin_##MATHFN##f(f1))) \
link_failure_inner_##MATHFN##l_##MATHFN##f(); \
if (sizeof (long double) > sizeof (float) \
- && C99CODE (MATHFN##l((double)f1) != (long double) MATHFN##f(f1))) \
+ && C99CODE (__builtin_##MATHFN##l((double)f1) != (long double) __builtin_##MATHFN##f(f1))) \
link_failure_inner_##MATHFN##l_##MATHFN##f(); \
if (sizeof (double) > sizeof (float) \
- && C99CODE (MATHFN(f1) != (double) MATHFN##f(f1))) \
+ && C99CODE (__builtin_##MATHFN(f1) != (double) __builtin_##MATHFN##f(f1))) \
link_failure_inner_##MATHFN##_##MATHFN##f()
@@ -122,6 +117,22 @@ void test(double d1, float f1, long double ld1)
OUTER_CAST1 (ceil, /*C99=*/ 0);
INNER_CAST1 (floor, /*C99=*/ 0);
OUTER_CAST1 (floor, /*C99=*/ 0);
+ INNER_CAST1 (lceil, /*C99=*/ 1);
+ OUTER_CAST1 (lceil, /*C99=*/ 1);
+ INNER_CAST1 (lfloor, /*C99=*/ 1);
+ OUTER_CAST1 (lfloor, /*C99=*/ 1);
+ INNER_CAST1 (lrint, /*C99=*/ 1);
+ OUTER_CAST1 (lrint, /*C99=*/ 1);
+ INNER_CAST1 (lround, /*C99=*/ 1);
+ OUTER_CAST1 (lround, /*C99=*/ 1);
+ INNER_CAST1 (llceil, /*C99=*/ 1);
+ OUTER_CAST1 (llceil, /*C99=*/ 1);
+ INNER_CAST1 (llfloor, /*C99=*/ 1);
+ OUTER_CAST1 (llfloor, /*C99=*/ 1);
+ INNER_CAST1 (llrint, /*C99=*/ 1);
+ OUTER_CAST1 (llrint, /*C99=*/ 1);
+ INNER_CAST1 (llround, /*C99=*/ 1);
+ OUTER_CAST1 (llround, /*C99=*/ 1);
INNER_CAST1 (nearbyint, /*C99=*/ 1);
OUTER_CAST1 (nearbyint, /*C99=*/ 1);
INNER_CAST1 (rint, /*C99=*/ 1);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-convert-2.c b/gcc/testsuite/gcc.dg/torture/builtin-convert-2.c
index 2795612d911..312b2d4db3b 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-convert-2.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-convert-2.c
@@ -12,36 +12,26 @@
#include "../builtins-config.h"
-#define PROTOTYPE(FN) extern double FN(double); \
- extern float FN##f(float); \
- extern long double FN##l(long double);
-#define PROTOTYPE_RET(FN, RET) extern RET FN(double); \
- extern RET FN##f(float); \
- extern RET FN##l(long double);
-
/* Macro to do all FP type combinations. The second half tests
narrowing the FP type. */
#define TEST_FP2FIXED(FN1, FN2) \
- PROTOTYPE(FN1) \
- PROTOTYPE_RET(FN2, long) \
- PROTOTYPE_RET(l##FN2, long long) \
extern void link_error_##FN1##_##FN2(void); \
extern void link_error_##FN1##f_##FN2##f(void); \
extern void link_error_##FN1##l_##FN2##l(void); \
extern void link_error_##FN1##_l##FN2(void); \
extern void link_error_##FN1##f_l##FN2##f(void); \
extern void link_error_##FN1##l_l##FN2##l(void); \
- if ((long)FN1(d) != FN2(d)) \
+ if ((long)__builtin_##FN1(d) != __builtin_##FN2(d)) \
link_error_##FN1##_##FN2(); \
- if ((long)FN1##f(f) != FN2##f(f)) \
+ if ((long)__builtin_##FN1##f(f) != __builtin_##FN2##f(f)) \
link_error_##FN1##f_##FN2##f(); \
- if ((long)FN1##l(ld) != FN2##l(ld)) \
+ if ((long)__builtin_##FN1##l(ld) != __builtin_##FN2##l(ld)) \
link_error_##FN1##l_##FN2##l(); \
- if ((long long)FN1(d) != l##FN2(d)) \
+ if ((long long)__builtin_##FN1(d) != __builtin_l##FN2(d)) \
link_error_##FN1##_l##FN2(); \
- if ((long long)FN1##f(f) != l##FN2##f(f)) \
+ if ((long long)__builtin_##FN1##f(f) != __builtin_l##FN2##f(f)) \
link_error_##FN1##f_l##FN2##f(); \
- if ((long long)FN1##l(ld) != l##FN2##l(ld)) \
+ if ((long long)__builtin_##FN1##l(ld) != __builtin_l##FN2##l(ld)) \
link_error_##FN1##l_l##FN2##l(); \
extern void link_error_##FN1##_##FN2##f(void); \
extern void link_error_##FN1##l_##FN2(void); \
@@ -49,17 +39,23 @@
extern void link_error_##FN1##_l##FN2##f(void); \
extern void link_error_##FN1##l_l##FN2(void); \
extern void link_error_##FN1##l_l##FN2##f(void); \
- if (sizeof(double) > sizeof(float) && (long)FN1(f) != FN2##f(f)) \
+ if (sizeof(double) > sizeof(float) \
+ && (long)__builtin_##FN1(f) != __builtin_##FN2##f(f)) \
link_error_##FN1##_##FN2##f(); \
- if (sizeof(long double) > sizeof(double) && (long)FN1##l(d) != FN2(d)) \
+ if (sizeof(long double) > sizeof(double) \
+ && (long)__builtin_##FN1##l(d) != __builtin_##FN2(d)) \
link_error_##FN1##l_##FN2(); \
- if (sizeof(long double) > sizeof(float) && (long)FN1##l(f) != FN2##f(f)) \
+ if (sizeof(long double) > sizeof(float) \
+ && (long)__builtin_##FN1##l(f) != __builtin_##FN2##f(f)) \
link_error_##FN1##l_##FN2##f(); \
- if (sizeof(double) > sizeof(float) && (long long)FN1(f) != l##FN2##f(f)) \
+ if (sizeof(double) > sizeof(float) \
+ && (long long)__builtin_##FN1(f) != __builtin_l##FN2##f(f)) \
link_error_##FN1##_l##FN2##f(); \
- if (sizeof(long double) > sizeof(double) && (long long)FN1##l(d) != l##FN2(d)) \
+ if (sizeof(long double) > sizeof(double) \
+ && (long long)__builtin_##FN1##l(d) != __builtin_l##FN2(d)) \
link_error_##FN1##l_l##FN2(); \
- if (sizeof(long double) > sizeof(float) && (long long)FN1##l(f) != l##FN2##f(f)) \
+ if (sizeof(long double) > sizeof(float) \
+ && (long long)__builtin_##FN1##l(f) != __builtin_l##FN2##f(f)) \
link_error_##FN1##l_l##FN2##f()
void __attribute__ ((__noinline__)) foo (double d, float f, long double ld)
@@ -67,6 +63,8 @@ void __attribute__ ((__noinline__)) foo (double d, float f, long double ld)
#ifdef __OPTIMIZE__
# ifdef HAVE_C99_RUNTIME
/* The resulting transformation functions are all C99. */
+ TEST_FP2FIXED (ceil, lceil);
+ TEST_FP2FIXED (floor, lfloor);
TEST_FP2FIXED (round, lround);
TEST_FP2FIXED (nearbyint, lrint);
TEST_FP2FIXED (rint, lrint);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-convert-3.c b/gcc/testsuite/gcc.dg/torture/builtin-convert-3.c
index ab35e3a6e96..9be570bb592 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-convert-3.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-convert-3.c
@@ -43,6 +43,10 @@ void __attribute__ ((__noinline__)) test (double d1, float f1)
#ifdef __OPTIMIZE__
#ifdef HAVE_C99_RUNTIME
/* We're converting to implicitly generated C99 functions. */
+ INNER_CAST1 (__builtin_lceil, long);
+ INNER_CAST1 (__builtin_llceil, long long);
+ INNER_CAST1 (__builtin_lfloor, long);
+ INNER_CAST1 (__builtin_llfloor, long long);
INNER_CAST1 (lround, long);
INNER_CAST1 (llround, long long);
INNER_CAST1 (lrint, long);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c b/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c
new file mode 100644
index 00000000000..c37bd5e2e8a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007 Free Software Foundation.
+
+ Verify that nearbyint isn't transformed into e.g. rint or lrint
+ when -ftrapping-math is set.
+
+ Written by Kaveh ghazi, 2007-03-04. */
+
+/* { dg-do compile } */
+/* { dg-options "-ftrapping-math -fdump-tree-original" } */
+/* { dg-options "-ftrapping-math -fdump-tree-original -mmacosx-version-min=10.3" { target powerpc-*-darwin* } } */
+/* { dg-options "-ftrapping-math -fdump-tree-original -std=c99" { target *-*-solaris2* } } */
+
+#include "../builtins-config.h"
+
+extern void bar (long);
+
+#define TESTIT(FUNC) do { \
+ bar (__builtin_##FUNC(d)); \
+ bar (__builtin_##FUNC##f(f)); \
+ bar (__builtin_##FUNC##l(ld)); \
+} while (0)
+
+void __attribute__ ((__noinline__)) foo (double d, float f, long double ld)
+{
+ TESTIT(nearbyint);
+}
+
+int main()
+{
+ foo (1.0, 2.0, 3.0);
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "nearbyint " 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "nearbyintf" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "nearbyintl" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c b/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c
new file mode 100644
index 00000000000..cb97e8e4e16
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c
@@ -0,0 +1,122 @@
+/* Copyright (C) 2007 Free Software Foundation.
+
+ Verify that built-in folding of frexp is correctly performed by the
+ compiler.
+
+ Origin: Kaveh R. Ghazi, February 21, 2007. */
+
+/* { dg-do link } */
+/* { dg-options "-fno-finite-math-only" { target sh*-*-* } } */
+/* In order to fold algebraic exprs below, targets with "composite"
+ floating point formats need -funsafe-math-optimizations. */
+/* { dg-options "-funsafe-math-optimizations" { target mips*-*-irix6* powerpc*-*-* } } */
+
+extern void link_error(int);
+
+/* Return TRUE if the sign of X != sign of Y. This is important when
+ comparing signed zeros. */
+#define CKSGN_F(X,Y) \
+ (__builtin_copysignf(1.0F,(X)) != __builtin_copysignf(1.0F,(Y)))
+#define CKSGN(X,Y) \
+ (__builtin_copysign(1.0,(X)) != __builtin_copysign(1.0,(Y)))
+#define CKSGN_L(X,Y) \
+ (__builtin_copysignl(1.0L,(X)) != __builtin_copysignl(1.0L,(Y)))
+
+/* We can only check the exponent when optimizing since we rely on
+ other optimizations to propagate the value. TRUE means an error
+ occurred. */
+#ifdef __OPTIMIZE__
+#define CKEXP(X,Y) X != Y
+#else
+#define CKEXP(X,Y) 0
+#endif
+
+/* Test that frexp(ARG,&i) == RES && i == EXP. Check the sign in
+ case we get -0.0. */
+#define TESTIT_FREXP(ARG,RES,EXP) do { \
+ int i = 123456; \
+ if (__builtin_frexpf(ARG##f,&i) != RES##f \
+ || CKEXP(i,EXP) \
+ || CKSGN_F(__builtin_frexpf(ARG##f,&i),RES##f)) \
+ link_error(__LINE__); \
+ i = 123456; \
+ if (__builtin_frexp(ARG,&i) != RES \
+ || CKEXP(i,EXP) \
+ || CKSGN(__builtin_frexp(ARG,&i),RES)) \
+ link_error(__LINE__); \
+ i = 123456; \
+ if (__builtin_frexpl(ARG##l,&i) != RES##l \
+ || CKEXP(i,EXP) \
+ || CKSGN_L(__builtin_frexpl(ARG##l,&i),RES##l)) \
+ link_error(__LINE__); \
+ } while (0)
+
+/* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false. Check
+ the sign as well. Ensure side-effects are evaluated in i. */
+#define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \
+ int i=5; \
+ if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \
+ || CKSGN_F(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##f(ARGARG)) \
+ || CKEXP(i,6)) \
+ link_error(__LINE__); \
+ if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \
+ || CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \
+ || CKEXP(i,7)) \
+ link_error(__LINE__); \
+ if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \
+ || CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \
+ || CKEXP(i,8)) \
+ link_error(__LINE__); \
+ } while (0)
+
+void __attribute__ ((__noinline__))
+foo(void)
+{
+ /* Test that frexp(ARG1,&i) -> ARG2 && i == ARG3. */
+ TESTIT_FREXP (-0x1p40, -0.5, 41);
+ TESTIT_FREXP (-0x1p30, -0.5, 31);
+ TESTIT_FREXP (-0x1p20, -0.5, 21);
+ TESTIT_FREXP (-0x1p10, -0.5, 11);
+ TESTIT_FREXP (-0x1p5, -0.5, 6);
+ TESTIT_FREXP (-100/3.0, -100/192.0, 6);
+ TESTIT_FREXP (-1.5, -0.75, 1);
+ TESTIT_FREXP (-1.0, -0.5, 1);
+ TESTIT_FREXP (-1/3.0, -2/3.0, -1);
+ TESTIT_FREXP (-1/9.0, -8/9.0, -3);
+ TESTIT_FREXP (-0x1p-5, -0.5, -4);
+ TESTIT_FREXP (-0x1p-10, -0.5, -9);
+ TESTIT_FREXP (-0x1p-20, -0.5, -19);
+ TESTIT_FREXP (-0x1p-30, -0.5, -29);
+ TESTIT_FREXP (-0x1p-40, -0.5, -39);
+ TESTIT_FREXP (-0.0, -0.0, 0);
+ TESTIT_FREXP (0.0, 0.0, 0);
+ TESTIT_FREXP (0x1p-40, 0.5, -39);
+ TESTIT_FREXP (0x1p-30, 0.5, -29);
+ TESTIT_FREXP (0x1p-20, 0.5, -19);
+ TESTIT_FREXP (0x1p-10, 0.5, -9);
+ TESTIT_FREXP (0x1p-5, 0.5, -4);
+ TESTIT_FREXP (1/9.0, 8/9.0, -3);
+ TESTIT_FREXP (1/3.0, 2/3.0, -1);
+ TESTIT_FREXP (1.0, 0.5, 1);
+ TESTIT_FREXP (1.5, 0.75, 1);
+ TESTIT_FREXP (100/3.0, 100/192.0, 6);
+ TESTIT_FREXP (0x1p5, 0.5, 6);
+ TESTIT_FREXP (0x1p10, 0.5, 11);
+ TESTIT_FREXP (0x1p20, 0.5, 21);
+ TESTIT_FREXP (0x1p30, 0.5, 31);
+ TESTIT_FREXP (0x1p40, 0.5, 41);
+
+ /* Test for frexp(+-Inf,&i) -> +-Inf and frexp(+-NaN,&i) -> +-NaN.
+ Exponent is left unspecified, but we test for side-effects. */
+ TESTIT_FREXP2 ( ,inf, , isinf);
+ TESTIT_FREXP2 (- ,inf, , isinf);
+ TESTIT_FREXP2 ( ,nan, "", isnan);
+ TESTIT_FREXP2 (- ,nan, "", isnan);
+}
+
+int main()
+{
+ foo ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c b/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
index 0aeb7ff7bdb..522646dd5cb 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-integral-1.c
@@ -5,48 +5,30 @@
Written by Kaveh Ghazi, 2004-03-16. */
/* { dg-do link } */
-/* { dg-options "-ffast-math" } */
+/* We need -ffinite-math-only so that we can fold "foo != foo", where
+ foo is a floating point expression. We need -fno-math-errno so
+ that various math functions are marked const/pure and can be
+ folded. */
+/* { dg-options "-ffinite-math-only -fno-math-errno" } */
-#define PROTOTYPE1(FN) extern double FN(double); extern float FN##f(float); \
- extern long double FN##l(long double);
-#define PROTOTYPE1_RET(FN, RET) extern RET FN(double); extern RET FN##f(float); \
- extern RET FN##l(long double);
-#define PROTOTYPE_LINK_FAILURE(FN) extern void link_failure_##FN(void); \
- extern void link_failure_##FN##f(void); \
- extern void link_failure_##FN##l(void); \
-
-PROTOTYPE1(fabs)
-PROTOTYPE1(ceil)
-PROTOTYPE1(floor)
-PROTOTYPE1(nearbyint)
-PROTOTYPE1(rint)
-PROTOTYPE1(round)
-PROTOTYPE1(trunc)
-PROTOTYPE1_RET(lround, long)
-PROTOTYPE1_RET(llround, long long)
-PROTOTYPE1_RET(lrint, long)
-PROTOTYPE1_RET(llrint, long long)
+extern int link_failure (int);
/* Test that the various FP truncation builtins detect integral
arguments. */
#define CHECK_FN(MATHFN) \
- PROTOTYPE_LINK_FAILURE(MATHFN); \
- if (MATHFN(i1) != i1) link_failure_##MATHFN(); \
- if (MATHFN##f(i1) != i1) link_failure_##MATHFN##f(); \
- if (MATHFN##l(i1) != i1) link_failure_##MATHFN##l();
+ if (__builtin_##MATHFN(i1) != i1) link_failure (__LINE__); \
+ if (__builtin_##MATHFN##f(i1) != i1) link_failure (__LINE__); \
+ if (__builtin_##MATHFN##l(i1) != i1) link_failure (__LINE__);
#define CHECK_FN_RET(MATHFN, RET) \
- PROTOTYPE_LINK_FAILURE(MATHFN); \
- if (MATHFN(i1) != (RET)(double)i1) link_failure_##MATHFN(); \
- if (MATHFN##f(i1) != (RET)(float)i1) link_failure_##MATHFN##f(); \
- if (MATHFN##l(i1) != (RET)(long double)i1) link_failure_##MATHFN##l();
+ if (__builtin_##MATHFN(i1) != (RET)(double)i1) link_failure (__LINE__); \
+ if (__builtin_##MATHFN##f(i1) != (RET)(float)i1) link_failure (__LINE__); \
+ if (__builtin_##MATHFN##l(i1) != (RET)(long double)i1) link_failure (__LINE__);
/* Check that various other integral expressions are detected. */
#define CHECK_EXPR(EXPR,NAME) \
- extern void link_failure_FP_##NAME(void); \
- extern void link_failure_fixed_##NAME(void); \
- if (ceill(EXPR) != (EXPR)) link_failure_FP_##NAME(); \
- if (lroundl(EXPR) != (long)(long double)(EXPR)) link_failure_fixed_##NAME();
+ if (__builtin_ceill(EXPR) != (EXPR)) link_failure (__LINE__); \
+ if (__builtin_lroundl(EXPR) != (long)(long double)(EXPR)) link_failure (__LINE__);
void __attribute__ ((__noinline__)) test (int i1, int i2)
{
@@ -60,6 +42,10 @@ void __attribute__ ((__noinline__)) test (int i1, int i2)
CHECK_FN_RET(llround, long long);
CHECK_FN_RET(lrint, long);
CHECK_FN_RET(llrint, long long);
+ CHECK_FN_RET(lceil, long);
+ CHECK_FN_RET(llceil, long long);
+ CHECK_FN_RET(lfloor, long);
+ CHECK_FN_RET(llfloor, long long);
CHECK_EXPR (5.0, REAL_CST);
CHECK_EXPR (5.0F, REAL_CSTf);
@@ -67,9 +53,9 @@ void __attribute__ ((__noinline__)) test (int i1, int i2)
CHECK_EXPR ((double)i1, FLOAT_EXPR);
CHECK_EXPR ((float)i1, FLOAT_EXPRf);
CHECK_EXPR ((long double)i1, FLOAT_EXPRl);
- CHECK_EXPR (fabs(i1), ABS_EXPR);
- CHECK_EXPR (fabsf(i1), ABS_EXPRf);
- CHECK_EXPR (fabsl(i1), ABS_EXPRl);
+ CHECK_EXPR (__builtin_fabs(i1), ABS_EXPR);
+ CHECK_EXPR (__builtin_fabsf(i1), ABS_EXPRf);
+ CHECK_EXPR (__builtin_fabsl(i1), ABS_EXPRl);
CHECK_EXPR (((void)i1,(double)i2), COMPOUND_EXPR);
CHECK_EXPR ((double)i1+i2, PLUS_EXPR);
CHECK_EXPR ((double)i1-i2, MINUS_EXPR);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c b/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c
new file mode 100644
index 00000000000..7c8de654c83
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c
@@ -0,0 +1,180 @@
+/* Copyright (C) 2007 Free Software Foundation.
+
+ Verify that built-in folding of logb, ilogb and significand is
+ correctly performed by the compiler.
+
+ Origin: Kaveh R. Ghazi, February 22, 2007. */
+
+/* { dg-do link } */
+/* { dg-options "-fno-finite-math-only" { target sh*-*-* } } */
+/* In order to fold algebraic exprs below, targets with "composite"
+ floating point formats need -funsafe-math-optimizations. */
+/* { dg-options "-funsafe-math-optimizations" { target mips*-*-irix6* powerpc*-*-* } } */
+
+extern void link_error(int);
+
+/* Return TRUE if the sign of X != sign of Y. This is important when
+ comparing signed zeros. */
+#define CKSGN_F(X,Y) \
+ (__builtin_copysignf(1.0F,(X)) != __builtin_copysignf(1.0F,(Y)))
+#define CKSGN(X,Y) \
+ (__builtin_copysign(1.0,(X)) != __builtin_copysign(1.0,(Y)))
+#define CKSGN_L(X,Y) \
+ (__builtin_copysignl(1.0L,(X)) != __builtin_copysignl(1.0L,(Y)))
+
+/* Test that FUNC(ARG) == RES. Check the sign in case we get -0.0. */
+#define TESTIT(FUNC,ARG,RES) do { \
+ if (__builtin_##FUNC##f(ARG##f) != RES##f \
+ || CKSGN_F(__builtin_##FUNC##f(ARG##f),RES##f)) \
+ link_error(__LINE__); \
+ if (__builtin_##FUNC(ARG) != RES \
+ || CKSGN(__builtin_##FUNC(ARG),RES)) \
+ link_error(__LINE__); \
+ if (__builtin_##FUNC##l(ARG##l) != RES##l \
+ || CKSGN_L(__builtin_##FUNC##l(ARG##l),RES##l)) \
+ link_error(__LINE__); \
+ } while (0)
+
+/* Test that FUNC(ARG) == RES. RES is an int so it can't be -0.0. */
+#define TESTIT2(FUNC,ARG,RES) do { \
+ if (__builtin_##FUNC##f(ARG##f) != RES) \
+ link_error(__LINE__); \
+ if (__builtin_##FUNC(ARG) != RES) \
+ link_error(__LINE__); \
+ if (__builtin_##FUNC##l(ARG##l) != RES) \
+ link_error(__LINE__); \
+ } while (0)
+
+/* Test if FUNCRES(FUNC(NEG FUNCARG(ARGARG))) is false. Check the
+ sign as well. */
+#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES) do { \
+ if (!__builtin_##FUNCRES##f(__builtin_##FUNC(NEG __builtin_##FUNCARG##f(ARGARG))) \
+ || CKSGN_F(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG)), NEG __builtin_##FUNCARG##f(ARGARG))) \
+ link_error(__LINE__); \
+ if (!__builtin_##FUNCRES(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG))) \
+ || CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG __builtin_##FUNCARG(ARGARG))) \
+ link_error(__LINE__); \
+ if (!__builtin_##FUNCRES##l(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG))) \
+ || CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG __builtin_##FUNCARG##l(ARGARG))) \
+ link_error(__LINE__); \
+ } while (0)
+
+void __attribute__ ((__noinline__))
+foo(void)
+{
+ /* If radix == 2, test that logb(ARG2) -> ARG3. */
+#if __FLT_RADIX__ == 2
+ TESTIT (logb, -0x1p40, 40.0);
+ TESTIT (logb, -0x1p30, 30.0);
+ TESTIT (logb, -0x1p20, 20.0);
+ TESTIT (logb, -0x1p10, 10.0);
+ TESTIT (logb, -0x1p5, 5.0);
+ TESTIT (logb, -100/3.0, 5.0);
+ TESTIT (logb, -2.0, 1.0);
+ TESTIT (logb, -1.5, 0.0);
+ TESTIT (logb, -1.0, 0.0);
+ TESTIT (logb, -1/3.0, -2.0);
+ TESTIT (logb, -1/9.0, -4.0);
+ TESTIT (logb, -0x1p-5, -5.0);
+ TESTIT (logb, -0x1p-10, -10.0);
+ TESTIT (logb, -0x1p-20, -20.0);
+ TESTIT (logb, -0x1p-30, -30.0);
+ TESTIT (logb, -0x1p-40, -40.0);
+
+ TESTIT (logb, 0x1p-40, -40.0);
+ TESTIT (logb, 0x1p-30, -30.0);
+ TESTIT (logb, 0x1p-20, -20.0);
+ TESTIT (logb, 0x1p-10, -10.0);
+ TESTIT (logb, 0x1p-5, -5.0);
+ TESTIT (logb, 1/9.0, -4.0);
+ TESTIT (logb, 1/3.0, -2.0);
+ TESTIT (logb, 1.0, 0.0);
+ TESTIT (logb, 1.5, 0.0);
+ TESTIT (logb, 2.0, 1.0);
+ TESTIT (logb, 100/3.0, 5.0);
+ TESTIT (logb, 0x1p5, 5.0);
+ TESTIT (logb, 0x1p10, 10.0);
+ TESTIT (logb, 0x1p20, 20.0);
+ TESTIT (logb, 0x1p30, 30.0);
+ TESTIT (logb, 0x1p40, 40.0);
+#endif
+
+ /* If radix == 2, test that ilogb(ARG2) -> ARG3. */
+#if __FLT_RADIX__ == 2
+ TESTIT2 (ilogb, -0x1p40, 40);
+ TESTIT2 (ilogb, -0x1p30, 30);
+ TESTIT2 (ilogb, -0x1p20, 20);
+ TESTIT2 (ilogb, -0x1p10, 10);
+ TESTIT2 (ilogb, -0x1p5, 5);
+ TESTIT2 (ilogb, -100/3.0, 5);
+ TESTIT2 (ilogb, -2.0, 1);
+ TESTIT2 (ilogb, -1.5, 0);
+ TESTIT2 (ilogb, -1.0, 0);
+ TESTIT2 (ilogb, -1/3.0, -2);
+ TESTIT2 (ilogb, -1/9.0, -4);
+ TESTIT2 (ilogb, -0x1p-5, -5);
+ TESTIT2 (ilogb, -0x1p-10, -10);
+ TESTIT2 (ilogb, -0x1p-20, -20);
+ TESTIT2 (ilogb, -0x1p-30, -30);
+ TESTIT2 (ilogb, -0x1p-40, -40);
+
+ TESTIT2 (ilogb, 0x1p-40, -40);
+ TESTIT2 (ilogb, 0x1p-30, -30);
+ TESTIT2 (ilogb, 0x1p-20, -20);
+ TESTIT2 (ilogb, 0x1p-10, -10);
+ TESTIT2 (ilogb, 0x1p-5, -5);
+ TESTIT2 (ilogb, 1/9.0, -4);
+ TESTIT2 (ilogb, 1/3.0, -2);
+ TESTIT2 (ilogb, 1.0, 0);
+ TESTIT2 (ilogb, 1.5, 0);
+ TESTIT2 (ilogb, 2.0, 1);
+ TESTIT2 (ilogb, 100/3.0, 5);
+ TESTIT2 (ilogb, 0x1p5, 5);
+ TESTIT2 (ilogb, 0x1p10, 10);
+ TESTIT2 (ilogb, 0x1p20, 20);
+ TESTIT2 (ilogb, 0x1p30, 30);
+ TESTIT2 (ilogb, 0x1p40, 40);
+#endif
+
+ /* If radix == 2, test that significand(ARG2) -> ARG3. Zero always
+ folds regardless of the radix. */
+ TESTIT (significand, -0.0, -0.0);
+ TESTIT (significand, 0.0, 0.0);
+
+#if __FLT_RADIX__ == 2
+ TESTIT (significand, -0x1p5, -1.0);
+ TESTIT (significand, -100/3.0, -100/96.0);
+ TESTIT (significand, -1.5, -1.5);
+ TESTIT (significand, -1.0, -1.0);
+ TESTIT (significand, -1/3.0, -4/3.0);
+ TESTIT (significand, -1/9.0, -16/9.0);
+ TESTIT (significand, -0x1p-5, -1.0);
+
+ TESTIT (significand, 0x1p-5, 1.0);
+ TESTIT (significand, 1/9.0, 16/9.0);
+ TESTIT (significand, 1/3.0, 4/3.0);
+ TESTIT (significand, 1.0, 1.0);
+ TESTIT (significand, 1.5, 1.5);
+ TESTIT (significand, 100/3.0, 100/96.0);
+ TESTIT (significand, 0x1p5, 1.0);
+#endif
+
+ /* Test for f(+-Inf) -> +-Inf and f(+-NaN) -> +-NaN, regardless of
+ the radix. */
+ TESTIT3 (logb, ,inf, , isinf);
+ TESTIT3 (logb, - ,inf, , isinf);
+ TESTIT3 (logb, ,nan, "", isnan);
+ TESTIT3 (logb, - ,nan, "", isnan);
+
+ TESTIT3 (significand, ,inf, , isinf);
+ TESTIT3 (significand, - ,inf, , isinf);
+ TESTIT3 (significand, ,nan, "", isnan);
+ TESTIT3 (significand, - ,nan, "", isnan);
+}
+
+int main()
+{
+ foo ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-math-2.c b/gcc/testsuite/gcc.dg/torture/builtin-math-2.c
index 7c6fad0d628..5153ae49214 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-math-2.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-math-2.c
@@ -208,6 +208,26 @@ void bar()
__DBL_MIN_EXP__, __LDBL_MIN__, __LDBL_MIN_EXP__);
TESTIT2_I2ALL (scalbln, __FLT_MAX__, __FLT_MAX_EXP__, __DBL_MAX__,
__DBL_MAX_EXP__, __LDBL_MAX__, __LDBL_MAX_EXP__);
+
+ TESTIT (logb, 0.0);
+ TESTIT (logb, -0.0);
+
+ TESTIT (ilogb, 0.0);
+ TESTIT (ilogb, -0.0);
+
+ foof (__builtin_ilogbf (__builtin_inff()));
+ foo (__builtin_ilogb (__builtin_inf()));
+ fool (__builtin_ilogbl (__builtin_infl()));
+ foof (__builtin_ilogbf (-__builtin_inff()));
+ foo (__builtin_ilogb (-__builtin_inf()));
+ fool (__builtin_ilogbl (-__builtin_infl()));
+
+ foof (__builtin_ilogbf (__builtin_nanf("")));
+ foo (__builtin_ilogb (__builtin_nan("")));
+ fool (__builtin_ilogbl (__builtin_nanl("")));
+ foof (__builtin_ilogbf (-__builtin_nanf("")));
+ foo (__builtin_ilogb (-__builtin_nan("")));
+ fool (__builtin_ilogbl (-__builtin_nanl("")));
}
/* { dg-final { scan-tree-dump-times "exp2 " 9 "original" } } */
@@ -258,4 +278,10 @@ void bar()
/* { dg-final { scan-tree-dump-times "scalbln " 8 "original" } } */
/* { dg-final { scan-tree-dump-times "scalblnf" 8 "original" } } */
/* { dg-final { scan-tree-dump-times "scalblnl" 8 "original" } } */
+/* { dg-final { scan-tree-dump-times "_logb " 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "_logbf" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "_logbl" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "ilogb " 6 "original" } } */
+/* { dg-final { scan-tree-dump-times "ilogbf" 6 "original" } } */
+/* { dg-final { scan-tree-dump-times "ilogbl" 6 "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c b/gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
index 4948aa9e004..13831ad3a2e 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-minmax-1.c
@@ -15,10 +15,6 @@ extern void link_error(int);
extern float FUNC##f (float); \
extern double FUNC (double); \
extern long double FUNC##l (long double)
-#define DECLARE_L(FUNC) \
- extern long FUNC##f (float); \
- extern long FUNC (double); \
- extern long FUNC##l (long double)
#define DECLARE2(FUNC) \
extern float FUNC##f (float, float); \
extern double FUNC (double, double); \
@@ -26,9 +22,6 @@ extern void link_error(int);
DECLARE2(fmin);
DECLARE2(fmax);
-DECLARE_L(lround);
-DECLARE_L(lrint);
-DECLARE(sqrt);
DECLARE(fabs);
extern int pure(int) __attribute__ ((__pure__));
@@ -52,20 +45,32 @@ extern int pure(int) __attribute__ ((__pure__));
link_error(__LINE__); \
} while (0)
-/* Test that lround(FUNC(int,int)) == lrint(FUNC(int,int)), i.e. both
- lround() and lrint() should be folded away. */
-#define TEST_NONNEG(FUNC) do { \
- if (lroundf(FUNC##f(i,j)) != lrintf(FUNC##f(i,j))) \
+/* Test that FIXFUNC(FUNC(int1,int2)) == (TYPE)FUNC(int1,int2),
+ i.e. FIXFUNC should be folded away and replaced with a cast. */
+#define TEST_FIXFUNC(FUNC,FIXFUNC,TYPE) do { \
+ if (FIXFUNC##f(FUNC##f(i,j)) != (TYPE)FUNC##f(i,j)) \
link_error(__LINE__); \
- if (lround(FUNC(i,j)) != lrint(FUNC(i,j))) \
+ if (FIXFUNC(FUNC(i,j)) != (TYPE)FUNC(i,j)) \
link_error(__LINE__); \
- if (lroundl(FUNC##l(i,j)) != lrintl(FUNC##l(i,j))) \
+ if (FIXFUNC##l(FUNC##l(i,j)) != (TYPE)FUNC##l(i,j)) \
link_error(__LINE__); \
} while (0)
+/* Test that FUNC(int1,int2) has an integer return type. */
+#define TEST_INT(FUNC) do { \
+ TEST_FIXFUNC(FUNC,__builtin_lround,long); \
+ TEST_FIXFUNC(FUNC,__builtin_llround,long long); \
+ TEST_FIXFUNC(FUNC,__builtin_lrint,long); \
+ TEST_FIXFUNC(FUNC,__builtin_llrint,long long); \
+ TEST_FIXFUNC(FUNC,__builtin_lceil,long); \
+ TEST_FIXFUNC(FUNC,__builtin_llceil,long long); \
+ TEST_FIXFUNC(FUNC,__builtin_lfloor,long); \
+ TEST_FIXFUNC(FUNC,__builtin_llfloor,long long); \
+ } while (0)
+
/* Test that (long)fabs(FUNC(fabs(x),fabs(y))) ==
(long)FUNC(fabs(x),fabs(y)). We cast to (long) so "!=" folds. */
-#define TEST_INT(FUNC) do { \
+#define TEST_NONNEG(FUNC) do { \
if ((long)fabsf(FUNC##f(fabsf(xf),fabsf(yf))) != (long)FUNC##f(fabsf(xf),fabsf(yf))) \
link_error(__LINE__); \
if ((long)fabs(FUNC(fabs(x),fabs(y))) != (long)FUNC(fabs(x),fabs(y))) \
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c b/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c
new file mode 100644
index 00000000000..f438d3477a3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c
@@ -0,0 +1,163 @@
+/* Copyright (C) 2007 Free Software Foundation.
+
+ Verify that built-in folding of modf is correctly performed by the
+ compiler.
+
+ Origin: Kaveh R. Ghazi, February 23, 2007. */
+
+/* { dg-do link } */
+/* { dg-options "-fno-finite-math-only" { target sh*-*-* } } */
+/* In order to fold algebraic exprs below, targets with "composite"
+ floating point formats need -funsafe-math-optimizations. */
+/* { dg-options "-funsafe-math-optimizations" { target mips*-*-irix6* powerpc*-*-* } } */
+
+extern void link_error(int);
+
+/* Return TRUE if the sign of X != sign of Y. This is important when
+ comparing signed zeros. */
+#define CKSGN_F(X,Y) \
+ (__builtin_copysignf(1.0F,(X)) != __builtin_copysignf(1.0F,(Y)))
+#define CKSGN(X,Y) \
+ (__builtin_copysign(1.0,(X)) != __builtin_copysign(1.0,(Y)))
+#define CKSGN_L(X,Y) \
+ (__builtin_copysignl(1.0L,(X)) != __builtin_copysignl(1.0L,(Y)))
+
+/* We use these macros if we can only check these when optimizing. In
+ some cases we rely on other optimizations to propagate the value
+ and fold away certain constructs. Likewise for the sign testing.
+ TRUE means an error occurred. */
+#ifdef __OPTIMIZE__
+#define CKRES(X) (X)
+#define CKIPTR(X,Y) X != Y
+#define CKSGN_IPTR_F(X,Y) CKSGN_F(X,Y)
+#define CKSGN_IPTR(X,Y) CKSGN(X,Y)
+#define CKSGN_IPTR_L(X,Y) CKSGN_L(X,Y)
+#else
+#define CKRES(X) 0
+#define CKIPTR(X,Y) 0
+#define CKSGN_IPTR_F(X,Y) 0
+#define CKSGN_IPTR(X,Y) 0
+#define CKSGN_IPTR_L(X,Y) 0
+#endif
+
+/* Test that modf(ARG1,&iptr) == FRACRES && iptr == INTRES. Check the
+ sign in case we get -0.0. */
+#define TESTIT_MODF(ARG,INTRES,FRACRES) do { \
+ float iptrf = 0.5; double iptr = 0.5; long double iptrl = 0.5; \
+ if (__builtin_modff(ARG##f,&iptrf) != FRACRES##f \
+ || CKIPTR(iptrf,INTRES##f) \
+ || CKSGN_F(__builtin_modff(ARG##f,&iptrf),FRACRES##f) \
+ || CKSGN_IPTR_F(iptrf,INTRES##f)) \
+ link_error(__LINE__); \
+ if (__builtin_modf(ARG,&iptr) != FRACRES \
+ || CKIPTR(iptr,INTRES) \
+ || CKSGN(__builtin_modf(ARG,&iptr),FRACRES) \
+ || CKSGN_IPTR(iptr,INTRES)) \
+ link_error(__LINE__); \
+ if (__builtin_modfl(ARG##l,&iptrl) != FRACRES##l \
+ || CKIPTR(iptrl,INTRES##l) \
+ || CKSGN_L(__builtin_modfl(ARG##l,&iptrl),FRACRES##l) \
+ || CKSGN_IPTR_L(iptrl,INTRES##l)) \
+ link_error(__LINE__); \
+ } while (0)
+
+/* Test that modf(NEG FUNCARG(ARGARG, &iptr)) == FRACRES &&
+ FUNCRES(iptr) is true. Check the sign of both as well. This is
+ for checking an argument of Inf. */
+#define TESTIT_MODF2(NEG,FUNCARG,ARGARG,FUNCRES,FRACRES) do { \
+ float iptrf = 0.5; double iptr = 0.5; long double iptrl = 0.5; \
+ if (__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf) != FRACRES##f \
+ || CKSGN_F(__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf), FRACRES##f) \
+ || CKIPTR(!__builtin_##FUNCRES##f(iptrf),0) \
+ || CKSGN_IPTR_F(iptrf,FRACRES##f)) \
+ link_error(__LINE__); \
+ if (__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr) != FRACRES \
+ || CKSGN(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr), FRACRES) \
+ || CKIPTR(!__builtin_##FUNCRES(iptr),0) \
+ || CKSGN_IPTR(iptr,FRACRES)) \
+ link_error(__LINE__); \
+ if (__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl) != FRACRES##l \
+ || CKSGN_L(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl), FRACRES##l) \
+ || CKIPTR(!__builtin_##FUNCRES##l(iptrl),0) \
+ || CKSGN_IPTR_L(iptrl,FRACRES##l)) \
+ link_error(__LINE__); \
+ } while (0)
+
+/* Test that FUNCRES(modf(NEG FUNCARG(ARGARG, &iptr))) is true &&
+ FUNCRES(iptr) is true. Check the sign of both as well. This is
+ for checking an argument of NaN. */
+#define TESTIT_MODF3(NEG,FUNCARG,ARGARG,FUNCRES) do { \
+ float iptrf = 0.5; double iptr = 0.5; long double iptrl = 0.5; \
+ if (CKRES(!__builtin_##FUNCRES##f(__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf))) \
+ || CKSGN_F(__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf), NEG 1) \
+ || CKIPTR(!__builtin_##FUNCRES##f(iptrf),0) \
+ || CKSGN_IPTR_F(iptrf,NEG 1)) \
+ link_error(__LINE__); \
+ if (CKRES(!__builtin_##FUNCRES(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr))) \
+ || CKSGN(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr), NEG 1) \
+ || CKIPTR(!__builtin_##FUNCRES(iptr),0) \
+ || CKSGN_IPTR(iptr,NEG 1)) \
+ link_error(__LINE__); \
+ if (CKRES(!__builtin_##FUNCRES##l(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl))) \
+ || CKSGN_L(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl), NEG 1) \
+ || CKIPTR(!__builtin_##FUNCRES##l(iptrl),0) \
+ || CKSGN_IPTR_L(iptrl,NEG 1)) \
+ link_error(__LINE__); \
+ } while (0)
+
+void __attribute__ ((__noinline__))
+foo(void)
+{
+ /* Test that modf(ARG1,&iptr) -> ARG3 && iptr == ARG2. */
+ TESTIT_MODF (0x1p10F+0.5, 0x1p10, 0.5);
+ TESTIT_MODF (0x1p10F+0x1p-10, 0x1p10, 0x1p-10);
+ TESTIT_MODF (12345678L/17.0, 726216.0, -726216L+12345678L/17.0);
+ TESTIT_MODF (555.555, 555.0, -555+555.555);
+ TESTIT_MODF (5000/11.0, 454.0, -454+5000/11.0);
+ TESTIT_MODF (1000/7.0, 142.0, -142+1000/7.0);
+ TESTIT_MODF (123/7.0, 17.0, -17+123/7.0);
+ TESTIT_MODF (117/7.0, 16.0, -16+117/7.0);
+ TESTIT_MODF (5.5, 5.0, 0.5);
+ TESTIT_MODF (1.5, 1.0, 0.5);
+ TESTIT_MODF (4/3.0, 1.0, -1+4/3.0);
+ TESTIT_MODF (1.0, 1.0, 0.0);
+ TESTIT_MODF (0.5, 0.0, 0.5);
+ TESTIT_MODF (4/9.0, 0.0, 4/9.0);
+ TESTIT_MODF (1/3.0, 0.0, 1/3.0);
+ TESTIT_MODF (1/9.0, 0.0, 1/9.0);
+ TESTIT_MODF (0.0, 0.0, 0.0);
+
+ TESTIT_MODF (-0.0, -0.0, -0.0);
+ TESTIT_MODF (-1/9.0, -0.0, -1/9.0);
+ TESTIT_MODF (-1/3.0, -0.0, -1/3.0);
+ TESTIT_MODF (-4/9.0, -0.0, -4/9.0);
+ TESTIT_MODF (-0.5, -0.0, -0.5);
+ TESTIT_MODF (-1.0, -1.0, -0.0);
+ TESTIT_MODF (-4/3.0, -1.0, 1-4/3.0);
+ TESTIT_MODF (-1.5, -1.0, -0.5);
+ TESTIT_MODF (-5.5, -5.0, -0.5);
+ TESTIT_MODF (-117/7.0, -16.0, 16-117/7.0);
+ TESTIT_MODF (-123/7.0, -17.0, 17-123/7.0);
+ TESTIT_MODF (-1000/7.0, -142.0, 142-1000/7.0);
+ TESTIT_MODF (-5000/11.0, -454.0, 454-5000/11.0);
+ TESTIT_MODF (-555.555, -555.0, 555-555.555);
+ TESTIT_MODF (-12345678L/17.0, -726216.0, 726216L-12345678L/17.0);
+ TESTIT_MODF (-0x1p10F-0x1p-10, -0x1p10, -0x1p-10);
+ TESTIT_MODF (-0x1p10F-0.5, -0x1p10, -0.5);
+
+
+ /* Test for modf(+-Inf,&i) -> (i=+-0.0, +-Inf). */
+ TESTIT_MODF2 ( ,inf, , isinf, 0.0);
+ TESTIT_MODF2 (- ,inf, , isinf, -0.0);
+
+ /* Test for and modf(+-NaN,&i) -> (i=+-NaN, +-NaN). */
+ TESTIT_MODF3 ( ,nan, "", isnan);
+ TESTIT_MODF3 (- ,nan, "", isnan);
+}
+
+int main()
+{
+ foo();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c b/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
index 1047881333b..8a3286a59b7 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
@@ -144,8 +144,12 @@ void test(double d1, double d2, float f1, float f2,
ARG1TEST1 (floor);
ARG1TEST2 (fmod);
ARG1TEST2_A2INT (ldexp, int);
+ ARG1TEST1_RTYPE (__builtin_llceil, long long);
+ ARG1TEST1_RTYPE (__builtin_llfloor, long long);
ARG1TEST1_RTYPE (llrint, long long);
ARG1TEST1_RTYPE (llround, long long);
+ ARG1TEST1_RTYPE (__builtin_lceil, long);
+ ARG1TEST1_RTYPE (__builtin_lfloor, long);
ARG1TEST1_RTYPE (lrint, long);
ARG1TEST1_RTYPE (lround, long);
/* The modf* functions aren't ever "const" or "pure" even with
@@ -159,6 +163,7 @@ void test(double d1, double d2, float f1, float f2,
ARG1TEST2_A2INT (scalbln, long);
ARG1TEST2_A2INT (scalbn, int);
ARG1TEST1_RTYPE (signbit, int);
+ ARG1TEST1 (significand);
ARG1TEST1 (sinh);
ARG1TEST1 (tanh);
ARG1TEST1 (trunc);
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c b/gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c
index 4101f911e5a..816cffc046c 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c
@@ -7,34 +7,12 @@
/* { dg-do link } */
-#define PROTOTYPE(FN) \
- PROTOTYPE_LINK_ERROR(FN) \
- extern double FN (double); \
- extern float FN##f (float); \
- extern long double FN##l (long double);
-
-#define PROTOTYPE_RET(FN, RET) \
- PROTOTYPE_LINK_ERROR(FN) \
- extern RET FN (double); \
- extern RET FN##f (float); \
- extern RET FN##l (long double);
-
-#define PROTOTYPE_LINK_ERROR(FN) \
- extern void link_error_##FN(void); \
- extern void link_error_##FN##f(void); \
- extern void link_error_##FN##l(void);
+extern int link_error (int);
#define TEST(FN, VALUE, RESULT) \
- if (FN (VALUE) != RESULT) link_error_##FN(); \
- if (FN##f (VALUE) != RESULT) link_error_##FN##f(); \
- if (FN##l (VALUE) != RESULT) link_error_##FN##l(); \
-
-PROTOTYPE (trunc);
-PROTOTYPE (floor);
-PROTOTYPE (ceil);
-PROTOTYPE (round);
-PROTOTYPE_RET (lround, long);
-PROTOTYPE_RET (llround, long long);
+ if (__builtin_##FN (VALUE) != RESULT) link_error (__LINE__); \
+ if (__builtin_##FN##f (VALUE) != RESULT) link_error (__LINE__); \
+ if (__builtin_##FN##l (VALUE) != RESULT) link_error (__LINE__); \
int
main (void)
@@ -45,6 +23,10 @@ main (void)
TEST(round, 0, 0);
TEST(lround, 0, 0);
TEST(llround, 0, 0);
+ TEST(lfloor, 0, 0);
+ TEST(llfloor, 0, 0);
+ TEST(lceil, 0, 0);
+ TEST(llceil, 0, 0);
TEST(trunc, 6, 6);
TEST(floor, 6, 6);
@@ -52,6 +34,10 @@ main (void)
TEST(round, 6, 6);
TEST(lround, 6, 6);
TEST(llround, 6, 6);
+ TEST(lfloor, 6, 6);
+ TEST(llfloor, 6, 6);
+ TEST(lceil, 6, 6);
+ TEST(llceil, 6, 6);
TEST(trunc, -8, -8);
TEST(floor, -8, -8);
@@ -59,6 +45,10 @@ main (void)
TEST(round, -8, -8);
TEST(lround, -8, -8);
TEST(llround, -8, -8);
+ TEST(lfloor, -8, -8);
+ TEST(llfloor, -8, -8);
+ TEST(lceil, -8, -8);
+ TEST(llceil, -8, -8);
TEST(trunc, 3.2, 3);
TEST(floor, 3.2, 3);
@@ -66,6 +56,10 @@ main (void)
TEST(round, 3.2, 3);
TEST(lround, 3.2, 3);
TEST(llround, 3.2, 3);
+ TEST(lfloor, 3.2, 3);
+ TEST(llfloor, 3.2, 3);
+ TEST(lceil, 3.2, 4);
+ TEST(llceil, 3.2, 4);
TEST(trunc, -2.8, -2);
TEST(floor, -2.8, -3);
@@ -73,6 +67,10 @@ main (void)
TEST(round, -2.8, -3);
TEST(lround, -2.8, -3);
TEST(llround, -2.8, -3);
+ TEST(lfloor, -2.8, -3);
+ TEST(llfloor, -2.8, -3);
+ TEST(lceil, -2.8, -2);
+ TEST(llceil, -2.8, -2);
TEST(trunc, 0.01, 0);
TEST(floor, 0.01, 0);
@@ -80,6 +78,10 @@ main (void)
TEST(round, 0.01, 0);
TEST(lround, 0.01, 0);
TEST(llround, 0.01, 0);
+ TEST(lfloor, 0.01, 0);
+ TEST(llfloor, 0.01, 0);
+ TEST(lceil, 0.01, 1);
+ TEST(llceil, 0.01, 1);
TEST(trunc, -0.7, 0);
TEST(floor, -0.7, -1);
@@ -87,6 +89,10 @@ main (void)
TEST(round, -0.7, -1);
TEST(lround, -0.7, -1);
TEST(llround, -0.7, -1);
+ TEST(lfloor, -0.7, -1);
+ TEST(llfloor, -0.7, -1);
+ TEST(lceil, -0.7, 0);
+ TEST(llceil, -0.7, 0);
TEST(trunc, 2.5, 2);
TEST(floor, 2.5, 2);
@@ -94,6 +100,10 @@ main (void)
TEST(round, 2.5, 3);
TEST(lround, 2.5, 3);
TEST(llround, 2.5, 3);
+ TEST(lfloor, 2.5, 2);
+ TEST(llfloor, 2.5, 2);
+ TEST(lceil, 2.5, 3);
+ TEST(llceil, 2.5, 3);
TEST(trunc, -1.5, -1);
TEST(floor, -1.5, -2);
@@ -101,6 +111,10 @@ main (void)
TEST(round, -1.5, -2);
TEST(lround, -1.5, -2);
TEST(llround, -1.5, -2);
+ TEST(lfloor, -1.5, -2);
+ TEST(llfloor, -1.5, -2);
+ TEST(lceil, -1.5, -1);
+ TEST(llceil, -1.5, -1);
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/pr30364-1.c b/gcc/testsuite/gcc.dg/torture/pr30364-1.c
new file mode 100644
index 00000000000..09506c21c1c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr30364-1.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int f(int a, int b)
+{
+ if (a > 0x7FFFFFF0) return 0;
+ if (b > 0x7FFFFFF0) return 0;
+
+ int c = (a - 20) + (b - 20);
+ return c > 0x7FFFFFF0;
+}
+
+int main()
+{
+ if (f (0x7FFFFFF0, 41) != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr30364-2.c b/gcc/testsuite/gcc.dg/torture/pr30364-2.c
new file mode 100644
index 00000000000..20450f55557
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr30364-2.c
@@ -0,0 +1,19 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+int f(unsigned int a, unsigned int b)
+{
+ if (a > 0x7FFFFFF0) return 0;
+ if (b > 0x7FFFFFF0) return 0;
+
+ int c = (a - 20) + (b - 20);
+ return c > 0x7FFFFFF0;
+}
+
+int main()
+{
+ if (f (0x7FFFFFF0, 41) != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr30364-3.c b/gcc/testsuite/gcc.dg/torture/pr30364-3.c
new file mode 100644
index 00000000000..4365679a8e0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr30364-3.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+/* { dg-options "-fwrapv" } */
+
+extern void abort (void);
+
+int f(int a, int b)
+{
+ if (a > 0x7FFFFFF0) return 0;
+ if (b > 0x7FFFFFF0) return 0;
+
+ int c = (a - 20) + (b - 20);
+ return c > 0x7FFFFFF0;
+}
+
+int main()
+{
+ if (f (0x7FFFFFF0, 41) != 1)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr31115.c b/gcc/testsuite/gcc.dg/torture/pr31115.c
new file mode 100644
index 00000000000..1395a34b322
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr31115.c
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+extern void exit(int);
+extern void abort();
+void foo (int e1)
+{
+ if (e1 < 0)
+ {
+ e1 = -e1;
+ if (e1 >>= 4)
+ {
+ if (e1 >= 1 << 5)
+ exit(0);
+ }
+ }
+}
+
+int main()
+{
+ foo(-(1<<9));
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20070302-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20070302-1.c
new file mode 100644
index 00000000000..17fcbab2580
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/20070302-1.c
@@ -0,0 +1,44 @@
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+
+struct A
+{
+ int x;
+ float y;
+};
+
+volatile float X, Y;
+
+int baz (struct A *z, struct A *y)
+{
+ z->x = (int) X;
+ z->y = Y;
+ y->x = (int) X;
+ y->y = Y;
+}
+
+
+struct A B;
+
+float foo (int i)
+{
+ struct A *p, x, y, z;
+
+ p = (i > 10) ? &x : &z;
+ x.y = 3.0;
+ p->x += baz (&z, &y);
+ X = z.y;
+ Y = p->y;
+
+ /* This predicate should always evaluate to false. The call to
+ baz() is not a clobbering site for x.y. The operand scanner was
+ considering it a clobbering site for x.y because x.y is in the
+ alias set of a call-clobbered memory tag. */
+ if (x.y != 3.0)
+ link_error ();
+}
+
+main(int argc, char **argv)
+{
+ foo (argc);
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-26.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-26.c
new file mode 100644
index 00000000000..5ebb3b1e1f7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-26.c
@@ -0,0 +1,29 @@
+/* PR 30730, PR 26900, number of iterations analysis should be able to
+ determine number of iterations of the following loops unconditionally. */
+
+/* { dg-do compile } */
+/* { dg-options "-O -fstrict-overflow -fdump-tree-empty" } */
+
+unsigned foo(unsigned int n)
+{
+ unsigned x = 0;;
+
+ while (n > 10)
+ {
+ n -= 2;
+ x++;
+ }
+
+ return x;
+}
+
+int foo0(int i0, int i1)
+{
+ int i, j = 0;
+ for (i=i0; i<=i1+1; ++i)
+ ++j;
+ return j;
+}
+
+/* { dg-final { scan-tree-dump-times "Removing empty loop" 2 "empty" } } */
+/* { dg-final { cleanup-tree-dump "empty" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c
new file mode 100644
index 00000000000..fae44d51968
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */
+
+int foo ()
+{
+ int A[100][1111];
+ int i, j;
+
+ for( i = 0; i < 1111; i++)
+ for( j = 0; j < 100; j++)
+ A[j][i] = 5 * A[j][i];
+
+ return A[10][10];
+}
+
+/* { dg-final { scan-tree-dump-times "transformed loop" 1 "ltrans"} } */
+/* { dg-final { cleanup-tree-dump "ltrans" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23777.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23777.c
new file mode 100644
index 00000000000..c2ad9b70707
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr23777.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+extern void f(char *const *);
+void g (char **o)
+{
+ static const char *const multilib_exclusions_raw[] = { 0 };
+ const char *const *q = multilib_exclusions_raw;
+
+ f (o);
+ while (*q++)
+ f (o);
+}
+
+/* The last DCE pass is able to remove the load from
+ multilib_exclusions_raw. */
+
+/* { dg-final { scan-tree-dump-not "multilib_exclusions_raw" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c
new file mode 100644
index 00000000000..8a5230eedd3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c
@@ -0,0 +1,18 @@
+/* The loop rolls too little, hence the prefetching would not be useful. */
+
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -fdump-tree-final_cleanup" } */
+
+int xxx[20];
+
+void foo (int n)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ xxx[i] = i;
+}
+
+/* { dg-final { scan-tree-dump-times "prefetch" 0 "final_cleanup" } } */
+/* { dg-final { cleanup-tree-dump "final_cleanup" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-10.c
new file mode 100644
index 00000000000..d8cfcc7accd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-10.c
@@ -0,0 +1,1523 @@
+/* { dg-do compile } */
+/* { dg-options "-O -w -fdump-tree-dse-vops" } */
+
+typedef unsigned int size_t;
+typedef struct _IO_FILE FILE;
+typedef struct
+{
+} __mbstate_t;
+typedef struct
+{
+} _G_fpos_t;
+typedef struct
+{
+};
+typedef int (*__gconv_trans_fct) (struct __gconv_step *,
+ size_t *);
+typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
+ size_t *);
+struct __gconv_trans_data
+{
+};
+struct __gconv_step_data
+{
+};
+typedef struct __gconv_info
+{
+} *__gconv_t;
+typedef union
+{
+ struct
+ {
+ } __combined;
+} _G_iconv_t;
+typedef __builtin_va_list __gnuc_va_list;
+enum __codecvt_result
+{
+ __codecvt_noconv
+};
+struct _IO_FILE {
+};
+vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
+{
+}
+putchar (int __c)
+{
+}
+fputc_unlocked (int __c, FILE *__stream)
+{
+}
+putc_unlocked (int __c, FILE *__stream)
+{
+}
+__attribute__ ((__nothrow__)) ferror_unlocked (FILE *__stream)
+{
+}
+extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+ __gnuc_va_list __ap);
+gets (char *__str)
+{
+}
+extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
+ FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+}
+typedef void *LPVOID;
+typedef int BOOL, *PBOOL, *LPBOOL;
+typedef unsigned char BYTE, *PBYTE, *LPBYTE;
+typedef unsigned short WORD, *PWORD, *LPWORD;
+typedef unsigned int DWORD, *PDWORD, *LPDWORD;
+typedef struct _GUID
+{
+} GUID;
+enum
+{
+ _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
+};
+extern char *__strtok_r (char *__restrict __s,
+ __const char *__restrict __delim,
+ char **__restrict __save_ptr)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
+__strcspn_c3 (__const char *__s, int __reject1, int __reject2,
+ int __reject3)
+{
+}
+extern __inline size_t __strspn_c3 (__const char *__s, int __accept1,
+ int __accept2, int __accept3);
+extern __inline size_t
+__strspn_c3 (__const char *__s, int __accept1, int __accept2, int __accept3)
+{
+}
+extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
+ int __accept2);
+extern __inline char *
+__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
+{
+}
+extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
+ int __accept3)
+{
+}
+__strtok_r_1c (char *__s, char __sep, char **__nextp)
+{
+ {
+ {
+ }
+ }
+}
+__strsep_1c (char **__s, char __reject)
+{
+}
+__strsep_2c (char **__s, char __reject1, char __reject2)
+{
+ {
+ {
+ }
+ }
+}
+extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
+ char __reject3);
+extern __inline char *
+__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
+{
+ {
+ {
+ {
+ }
+ }
+ }
+}
+__attribute__ ((__nothrow__)) __memcpy_ichk (void *__restrict __dest, __const void *__restrict __src, size_t __len)
+{
+}
+__attribute__ ((__nothrow__)) __memmove_ichk (void *__dest, __const void *__src, size_t __len)
+{
+}
+__attribute__ ((__nothrow__)) __strncpy_ichk (char *__restrict __dest, __const char *__restrict __src, size_t __len)
+{
+}
+__attribute__ ((__nothrow__)) stpncpy (char *__dest, __const char *__src, size_t __n)
+{
+ if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
+ && (!__builtin_constant_p (__n) || __n <= __builtin_object_size (__dest, 2 > 1)))
+ return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
+}
+__attribute__ ((__nothrow__)) __strncat_ichk (char *__restrict __dest, __const char *__restrict __src, size_t __len)
+{
+}
+typedef void *PVOID;
+typedef char CHAR, *PCHAR;
+typedef int LONG, *PLONG;
+typedef unsigned short WCHAR, *PWCHAR;
+typedef CHAR *PSTR, *LPSTR, *NPSTR;
+typedef const CHAR *PCSTR, *LPCSTR;
+typedef WCHAR *PWSTR, *LPWSTR, *NWPSTR;
+typedef LONG HRESULT;
+typedef struct _MEMORY_BASIC_INFORMATION
+{
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
+typedef enum _HEAP_INFORMATION_CLASS {
+ HeapCompatibilityInformation,
+} HEAP_INFORMATION_CLASS;
+typedef struct _FLOATING_SAVE_AREA
+{
+} CONTEXT86;
+typedef struct _LDT_ENTRY {
+ union {
+ struct {
+ } Bits;
+ } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY;
+typedef struct _EXCEPTION_RECORD
+{
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+typedef struct _EXCEPTION_POINTERS
+{
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+typedef struct _NT_TIB
+{
+ union {
+ } ;
+} NT_TIB, *PNT_TIB;
+extern inline struct _TEB * __attribute__((__stdcall__)) NtCurrentTeb(void)
+{
+} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
+typedef struct _IMAGE_SYMBOL {
+ union {
+ struct {
+ } FcnAry;
+ } Section;
+} IMAGE_AUX_SYMBOL;
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+ union {
+ } u1;
+} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
+typedef struct _IMAGE_BASE_RELOCATION
+{
+} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
+typedef struct _IMAGE_RELOCATION
+{
+ union {
+ } ;
+} IMAGE_RELOCATION, *PIMAGE_RELOCATION;
+typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
+{
+} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
+typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
+ union {
+ struct {
+ } ;
+ struct {
+ } ;
+ } ;
+} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
+typedef enum ReplacesCorHdrNumericDefines
+{
+ MAX_PACKAGE_NAME = 1024,
+} ReplacesCorHdrNumericDefines;
+typedef struct IMAGE_COR20_HEADER
+{
+} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef enum _TOKEN_INFORMATION_CLASS {
+ TokenUser = 1,
+} TOKEN_INFORMATION_CLASS;
+typedef struct _GENERIC_MAPPING {
+} ACL, *PACL;
+typedef struct _ACL_SIZE_INFORMATION
+{
+} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+typedef struct {
+} SID_AND_ATTRIBUTES;
+typedef enum {
+ WinBuiltinTerminalServerLicenseServersSid = 60
+} WELL_KNOWN_SID_TYPE;
+typedef struct _TOKEN_USER {
+} TOKEN_GROUPS, *PTOKEN_GROUPS;
+typedef union _LARGE_INTEGER {
+ struct {
+ };
+} LARGE_INTEGER, *PLARGE_INTEGER;
+typedef union _ULARGE_INTEGER {
+ struct {
+ };
+} LUID, *PLUID;
+typedef struct _LUID_AND_ATTRIBUTES {
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+typedef enum tagTOKEN_TYPE {
+ TokenPrimary = 1,
+} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
+typedef enum _LATENCY_TIME {
+ VerifyProcessorPowerPolicyDc,
+} POWER_INFORMATION_LEVEL;
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
+typedef struct _RTL_CRITICAL_SECTION {
+} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
+typedef struct _IO_COUNTERS {
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+typedef struct {
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+typedef struct {
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+typedef struct {
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+typedef struct tagSIZE
+{
+} POINT, *PPOINT, *LPPOINT;
+typedef struct _POINTL
+{
+} FILETIME, *PFILETIME, *LPFILETIME;
+typedef struct tagRECT
+{
+ } ldiv_t;
+extern double strtod (__const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+extern long int strtol (__const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+extern long int __strtol_internal (__const char *__restrict __nptr,
+ int __base, int __group)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
+ int __base, int __group)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+extern __inline double
+__attribute__ ((__nothrow__)) strtod (__const char *__restrict __nptr, char **__restrict __endptr)
+{
+}
+extern __inline long int
+__attribute__ ((__nothrow__)) strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base)
+{
+}
+__attribute__ ((__nothrow__)) strtoll (__const char *__restrict __nptr, char **__restrict __endptr, int __base)
+{
+}
+__attribute__ ((__nothrow__)) atoi (__const char *__nptr)
+{
+}
+typedef int int32_t __attribute__ ((__mode__ (__SI__)));
+typedef struct
+ {
+ };
+extern int random_r (struct random_data *__restrict __buf,
+ int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+struct drand48_data
+ {
+ };
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int jrand48_r (unsigned short int __xsubi[3],
+ long int *__restrict __result)
+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int seed48_r (unsigned short int __seed16v[3],
+ struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *qfcvt (long double __value, int __ndigit,
+ size_t __resolvedlen) __attribute__ ((__nothrow__)) __attribute__ ((__warn_unused_result__));
+__attribute__ ((__nothrow__)) realpath (__const char *__restrict __name, char *__restrict __resolved)
+{
+}
+__attribute__ ((__nothrow__)) ptsname_r (int __fd, char *__buf, size_t __buflen)
+{
+}
+typedef struct _EXCEPTION_DEBUG_INFO {
+} EXCEPTION_DEBUG_INFO;
+typedef struct _CREATE_THREAD_DEBUG_INFO {
+} CREATE_THREAD_DEBUG_INFO;
+typedef struct _CREATE_PROCESS_DEBUG_INFO {
+} CREATE_PROCESS_DEBUG_INFO;
+typedef struct _EXIT_THREAD_DEBUG_INFO {
+} LOAD_DLL_DEBUG_INFO;
+typedef struct _UNLOAD_DLL_DEBUG_INFO {
+} RIP_INFO;
+typedef struct _DEBUG_EVENT {
+ union {
+ } u;
+} DEBUG_EVENT, *LPDEBUG_EVENT;
+typedef struct _OFSTRUCT
+{
+} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
+typedef struct _WIN32_FIND_DATAW
+{
+} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
+typedef enum _FINDEX_SEARCH_OPS
+{
+ FindExSearchNameMatch,
+} FINDEX_SEARCH_OPS;
+typedef struct _PROCESS_HEAP_ENTRY
+{
+ union {
+ struct {
+ } Block;
+ struct {
+ } Region;
+ } ;
+} PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY;
+typedef struct tagMEMORYSTATUS
+{
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
+typedef struct _SYSTEMTIME{
+ WORD wYear;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+typedef struct _OVERLAPPED {
+ union {
+ struct {
+ } ;
+ } ;
+} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+typedef struct _TIME_ZONE_INFORMATION{
+} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
+typedef struct _BY_HANDLE_FILE_INFORMATION
+{
+} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+typedef struct tagACTCTX_SECTION_KEYED_DATA {
+} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
+typedef enum _COMPUTER_NAME_FORMAT
+{
+ ComputerNameNetBIOS,
+} COMPUTER_NAME_FORMAT;
+typedef struct tagHW_PROFILE_INFOA {
+} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;
+typedef struct tagHW_PROFILE_INFOW {
+} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;
+BOOL __attribute__((__stdcall__)) SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,
+ SECURITY_DESCRIPTOR_CONTROL);
+typedef struct tagSYSLEVEL
+{
+} SYSLEVEL;
+static inline PVOID __attribute__((__stdcall__)) InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+}
+static inline PVOID __attribute__((__stdcall__)) InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+}
+typedef unsigned long HCRYPTPROV;
+typedef unsigned long HCRYPTKEY;
+typedef void *HCERTSTOREPROV;
+typedef struct _PROV_ENUMALGS {
+} PROV_ENUMALGS;
+typedef struct _HMAC_INFO {
+} HMAC_INFO, *PHMAC_INFO;
+typedef struct _CRYPTOAPI_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
+ CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
+ CERT_NAME_BLOB, *PCERT_NAME_BLOB,
+ CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
+ CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
+ CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
+typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
+} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
+typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
+typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
+} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
+typedef struct _PUBLICKEYSTRUC {
+} BLOBHEADER, PUBLICKEYSTRUC;
+typedef struct _RSAPUBKEY {
+ DWORD magic;
+ DWORD pubexp;
+} RSAPUBKEY;
+typedef struct _CRYPT_BIT_BLOB {
+ DWORD cbData;
+ BYTE *pbData;
+ DWORD cUnusedBits;
+} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
+typedef struct _CRYPT_KEY_PROV_PARAM {
+} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
+typedef struct _CRYPT_KEY_PROV_INFO {
+ CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+ CRYPT_BIT_BLOB PublicKey;
+} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
+typedef struct _CERT_EXTENSION {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Value;
+} CERT_EXTENSION, *PCERT_EXTENSION;
+typedef struct _CERT_EXTENSIONS {
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
+typedef struct _CERT_INFO {
+ CRYPT_INTEGER_BLOB SerialNumber;
+ CERT_NAME_BLOB Subject;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+} CERT_INFO, *PCERT_INFO;
+typedef struct _CERT_RDN_ATTR {
+ LPSTR pszObjId;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
+typedef struct _CERT_RDN {
+} CERT_RDN, *PCERT_RDN;
+typedef struct _CERT_NAME_INFO {
+ DWORD cRDN;
+} CERT_NAME_INFO, *PCERT_NAME_INFO;
+typedef struct _CERT_NAME_VALUE {
+ DWORD dwValueType;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
+typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {
+ CERT_NAME_BLOB CertIssuer;
+} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
+typedef struct _CERT_PRIVATE_KEY_VALIDITY {
+} CERT_OTHER_NAME, *PCERT_OTHER_NAME;
+typedef struct _CERT_ALT_NAME_ENTRY {
+ DWORD dwAltNameChoice;
+ union {
+ LPWSTR pwszURL;
+ } ;
+} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
+typedef struct _CERT_ALT_NAME_INFO {
+ DWORD cAltEntry;
+ PCERT_ALT_NAME_ENTRY rgAltEntry;
+} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
+typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
+ CERT_NAME_BLOB *rgSubtreesConstraint;
+} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
+typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
+} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
+typedef struct _CERT_POLICY_QUALIFIER_INFO {
+} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
+typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
+} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
+ *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
+typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
+ DWORD cValue;
+ PCRYPT_DER_BLOB rgValue;
+} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
+typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
+ PCERT_INFO pCertInfo;
+} CERT_CONTEXT, *PCERT_CONTEXT;
+typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+typedef struct _CRL_ENTRY {
+} CRL_ENTRY, *PCRL_ENTRY;
+typedef struct _CRL_INFO {
+ DWORD cCRLEntry;
+ DWORD cExtension;
+} CRL_INFO, *PCRL_INFO;
+typedef struct _CRL_DIST_POINT_NAME {
+ DWORD dwDistPointNameChoice;
+ union {
+ } ;
+} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
+typedef struct _CRL_DIST_POINT {
+ CRL_DIST_POINT_NAME DistPointName;
+ CRYPT_BIT_BLOB ReasonFlags;
+ CERT_ALT_NAME_INFO CRLIssuer;
+} CRL_DIST_POINT, *PCRL_DIST_POINT;
+typedef struct _CRL_DIST_POINTS_INFO {
+ DWORD cDistPoint;
+ PCRL_DIST_POINT rgDistPoint;
+} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
+typedef struct _CRL_ISSUING_DIST_POINT {
+ BOOL fOnlyContainsUserCerts;
+} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
+typedef struct _CERT_GENERAL_SUBTREE {
+} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
+typedef struct _CRYPT_ATTRIBUTES {
+} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
+typedef struct _CERT_REQUEST_INFO {
+ DWORD dwVersion;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CRYPT_BIT_BLOB Signature;
+} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
+typedef struct _CRL_CONTEXT {
+} CRL_CONTEXT, *PCRL_CONTEXT;
+typedef struct _VTableProvStruc {
+} CTL_CONTEXT, *PCTL_CONTEXT;
+typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
+} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;
+typedef struct _CERT_TRUST_STATUS {
+} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
+ void *pvArg);
+typedef struct _CRYPT_ENCODE_PARA {
+} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
+ DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
+typedef struct _CERT_STORE_PROV_FIND_INFO {
+} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,
+ DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
+ DWORD dwFlags, void *pvData, DWORD *pcbData);
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
+ DWORD dwFlags, void *pvData);
+typedef struct _CERT_CREATE_CONTEXT_PARA {
+} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,
+ const DWORD rgcbValueData[], void *pvArg);
+typedef struct _CRYPT_OID_INFO {
+ union {
+ } ;
+} CRYPT_OID_INFO, *PCRYPT_OID_INFO;
+typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;
+typedef BOOL (__attribute__((__stdcall__)) *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,
+ void *pvArg);
+typedef struct _CRYPT_SIGN_MESSAGE_PARA {
+} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
+typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
+} CRYPT_URL_INFO, *PCRYPT_URL_INFO;
+typedef void (__attribute__((__stdcall__)) *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,
+ LPVOID pvParam);
+typedef struct _CRYPT_CREDENTIALS {
+} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
+typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
+} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
+typedef struct _CRYPT_RETRIEVE_AUX_INFO {
+} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;
+typedef struct _CERT_CHAIN_ENGINE_CONFIG
+{
+} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
+BOOL __attribute__((__stdcall__)) CryptExportPublicKeyInfoEx(HCRYPTPROV hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,
+ void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+BOOL __attribute__((__stdcall__)) CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,
+ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+struct encodedInt
+{
+ int val;
+ const BYTE *encoded;
+};
+static const struct encodedInt ints[] = {
+};
+struct encodedBigInt
+{
+ const BYTE *val;
+ const BYTE *encoded;
+};
+static const struct encodedBigInt bigInts[] = {
+};
+static const struct encodedBigInt bigUInts[] = {
+};
+static void test_encodeInt(DWORD dwEncoding)
+{
+ DWORD bufSize = 0;
+ int i;
+ BOOL ret;
+ CRYPT_INTEGER_BLOB blob;
+ BYTE *buf = ((void *)0);
+ ret = CryptEncodeObjectEx(0, ((LPCSTR)27), &ints[0].val, 0, ((void *)0), ((void *)0),
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)27), &ints[i].val,
+ 0x08000, ((void *)0), &buf, &bufSize);
+ {
+ (winetest_set_location("encode.c", 119), 0) ? 0 : winetest_ok(buf[0] == 2, "Got unexpected type %d for integer (expected 2)\n",
+ buf[1], ints[i].encoded[1]);
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)28), &blob,
+ 0, ((void *)0), ((void *)0), &bufSize);
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)38), &blob,
+ 0x08000, ((void *)0), &buf, &bufSize);
+ {
+ (winetest_set_location("encode.c", 187), 0) ? 0 : winetest_ok(buf[1] == bigUInts[i].encoded[1], "Got length %d, expected %d\n",
+ buf[1], bigUInts[i].encoded[1]);
+ (winetest_set_location("encode.c", 189), 0) ? 0 : winetest_ok(!memcmp(buf + 1, bigUInts[i].encoded + 1,
+ bigUInts[i].encoded[1] + 1),
+ "Encoded value didn't match expected\n");
+ }
+ }
+}
+static void test_decodeInt(DWORD dwEncoding)
+{
+ static const BYTE longForm[] = { 2, 0x81, 0x01, 0x01 };
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ int i;
+ BOOL ret;
+ ret = CryptDecodeObjectEx(3, ((LPCSTR)27), (BYTE *)&ints[0].encoded,
+ ints[0].encoded[1] + 2, 0, ((void *)0), ((void *)0), &bufSize);
+ (winetest_set_location("encode.c", 225), 0) ? 0 : winetest_ok(!ret && GetLastError() == ((HRESULT)0x80093104L),
+ "Expected CRYPT_E_ASN1_BADTAG, got %d\n", GetLastError());
+ {
+ {
+ (winetest_set_location("encode.c", 249), 0) ? 0 : winetest_ok(!memcmp(buf, &ints[i].val, bufSize), "Expected %d, got %d\n",
+ ints[i].val, *(int *)buf);
+ }
+ }
+ {
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)28),
+ &bufSize);
+ {
+ CRYPT_INTEGER_BLOB *blob = (CRYPT_INTEGER_BLOB *)buf;
+ (winetest_set_location("encode.c", 296), 0) ? 0 : winetest_ok(blob->cbData == strlen((const char*)bigUInts[i].val),
+ "Unexpected value\n");
+ }
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)28), longForm,
+ sizeof(longForm), 0x08000, ((void *)0), (BYTE *)&buf, &bufSize);
+ {
+ }
+}
+static const struct encodedInt enums[] = {
+};
+static const LPCSTR enumeratedTypes[] = { ((LPCSTR)29),
+ "2.5.29.21" };
+static void test_encodeEnumerated(DWORD dwEncoding)
+{
+ DWORD i, j;
+ {
+ {
+ BOOL ret;
+ DWORD bufSize = 0;
+ ret = CryptEncodeObjectEx(dwEncoding, enumeratedTypes[i],
+ &bufSize);
+ {
+ }
+ }
+ }
+}
+static void test_decodeEnumerated(DWORD dwEncoding)
+{
+ DWORD i, j;
+ {
+ {
+ BOOL ret;
+ DWORD bufSize = sizeof(int);
+ int val;
+ ret = CryptDecodeObjectEx(dwEncoding, enumeratedTypes[i],
+ (BYTE *)&val, &bufSize);
+ (winetest_set_location("encode.c", 403), 0) ? 0 : winetest_ok(val == enums[j].val, "Unexpected value %d, expected %d\n",
+ val, enums[j].val);
+ }
+ }
+}
+struct encodedFiletime
+{
+ SYSTEMTIME sysTime;
+ const BYTE *encodedTime;
+};
+static void testTimeEncoding(DWORD dwEncoding, LPCSTR structType,
+ const struct encodedFiletime *time)
+{
+}
+static void testTimeDecoding(DWORD dwEncoding, LPCSTR structType,
+ const struct encodedFiletime *time)
+{
+ BOOL ret;
+ if (structType == ((LPCSTR)30) ||
+ (time->sysTime.wYear >= 1950 && time->sysTime.wYear <= 2050))
+ {
+ }
+ (winetest_set_location("encode.c", 476), 0) ? 0 : winetest_ok(!ret && GetLastError() == ((HRESULT)0x8009310BL),
+ "Expected CRYPT_E_ASN1_BADTAG, got 0x%08x\n", GetLastError());
+}
+static const BYTE bin22[] = {
+ 0x18,0x0f,'2','1','4','5','0','6','0','6','1','6','1','0','0','0','Z'};
+static const struct encodedFiletime times[] = {
+};
+static void test_encodeFiletime(DWORD dwEncoding)
+{
+ {
+ }
+}
+static const BYTE bin23[] = {
+ 0x18,0x13,'1','9','4','5','0','6','0','6','1','6','1','0','0','0','.','0','0','0','Z'};
+static const BYTE bin24[] = {
+ 0x18,0x13,'1','9','4','5','0','6','0','6','1','6','1','0','0','0','.','9','9','9','Z'};
+static const BYTE bin26[] = {
+ 0x17,0x0b,'4','5','0','6','0','6','1','6','1','0','Z'};
+static const BYTE bin33[] = {
+ 0x17,0x0f,'4','5','0','6','0','6','1','6','1','0','-','0','1','0','0'};
+static const BYTE bin35[] = {
+ 0x17,0x08, '4','5','0','6','0','6','1','6'};
+static const BYTE bin38[] = {
+ 0x18,0x08, '2','1','4','5','0','6','0','6'};
+static void test_decodeFiletime(DWORD dwEncoding)
+{
+ static const struct encodedFiletime otherTimes[] = {
+ };
+ static const unsigned char *bogusTimes[] = {
+ };
+ {
+ }
+}
+static const char commonName[] = "Juan Lang";
+static const char surName[] = "Lang";
+static const BYTE emptySequence[] = { 0x30, 0 };
+static const BYTE emptyRDNs[] = { 0x30, 0x02, 0x31, 0 };
+static const BYTE twoRDNs[] = {
+ 0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0};
+static const BYTE encodedTwoRDNs[] = {
+};
+static const BYTE us[] = { 0x55, 0x53 };
+static const BYTE minnesota[] = { 0x4d, 0x69, 0x6e, 0x6e, 0x65, 0x73, 0x6f,
+ 0x6f, 0x6c, 0x69, 0x73 };
+static const BYTE codeweavers[] = { 0x43, 0x6f, 0x64, 0x65, 0x57, 0x65, 0x61,
+ 0x76, 0x65, 0x72, 0x73 };
+static const BYTE wine[] = { 0x57, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x65, 0x76,
+ 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74 };
+static const BYTE aric[] = { 0x61, 0x72, 0x69, 0x63, 0x40, 0x63, 0x6f, 0x64,
+ 0x65, 0x77, 0x65, 0x61, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x6f, 0x6d };
+static CHAR oid_us[] = "2.5.4.6",
+ oid_aric[] = "1.2.840.113549.1.9.1";
+static CERT_RDN_ATTR rdnAttrs[] = { { oid_us, 4, { sizeof(us), (LPBYTE)us } },
+ { oid_aric, 7, { sizeof(aric), (LPBYTE)aric } } };
+static const BYTE encodedRDNAttrs[] = {
+};
+static void test_encodeName(DWORD dwEncoding)
+{
+ CERT_NAME_INFO info;
+ static CHAR oid_common_name[] = "2.5.4.3",
+ oid_sur_name[] = "2.5.4.4";
+ BOOL ret;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)7), ((void *)0),
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)7), &info,
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ }
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)7), &info,
+ "Expected E_INVALIDARG, got %08x\n", GetLastError());
+ {
+ }
+}
+static WCHAR commonNameW[] = { 'J','u','a','n',' ','L','a','n','g',0 };
+static const BYTE twoRDNsNoNull[] = {
+ 0x20,0x4c,0x61,0x6e,0x67 };
+static const BYTE anyType[] = {
+ 0x61,0x4c,0x67,0x6e };
+static void test_encodeUnicodeName(DWORD dwEncoding)
+{
+ BOOL ret;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)20), ((void *)0),
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ }
+}
+static void compareNameValues(const CERT_NAME_VALUE *expected,
+ const CERT_NAME_VALUE *got)
+{
+ (winetest_set_location("encode.c", 913), 0) ? 0 : winetest_ok(got->dwValueType == expected->dwValueType,
+ expected->dwValueType, got->Value.cbData, expected->Value.cbData);
+ (winetest_set_location("encode.c", 920), 0) ? 0 : winetest_ok(!memcmp(got->Value.pbData, expected->Value.pbData,
+ (((got->Value.cbData) < (expected->Value.cbData)) ? (got->Value.cbData) : (expected->Value.cbData))),
+ "String type %d: unexpected value\n", expected->dwValueType);
+}
+static void compareRDNAttrs(const CERT_RDN_ATTR *expected,
+ const CERT_RDN_ATTR *got)
+{
+ {
+ {
+ (winetest_set_location("encode.c", 934), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (got->pszObjId) && __builtin_constant_p (expected->pszObjId) && (__s1_len = strlen (got->pszObjId), __s2_len = strlen (expected->pszObjId), (!((size_t)(const void *)((got->pszObjId) + 1) - (size_t)(const void *)(got->pszObjId) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((expected->pszObjId) + 1) - (size_t)(const void *)(expected->pszObjId) == 1) || __s2_len >= 4)) ? __builtin_strcmp (got->pszObjId, expected->pszObjId) : (__builtin_constant_p (got->pszObjId) && ((size_t)(const void *)((got->pszObjId) + 1) - (size_t)(const void *)(got->pszObjId) == 1) && (__s1_len = strlen (got->pszObjId), __s1_len < 4) ? (__builtin_constant_p (expected->pszObjId) && ((size_t)(const void *)((expected->pszObjId) + 1) - (size_t)(const void *)(expected->pszObjId) == 1) ? __builtin_strcmp (got->pszObjId, expected->pszObjId) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (expected->pszObjId); register int __result = (((__const unsigned char *) (__const char *) (got->pszObjId))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (got->pszObjId))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (got->pszObjId))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (got->pszObjId))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (expected->pszObjId) && ((size_t)(const void *)((expected->pszObjId) + 1) - (size_t)(const void *)(expected->pszObjId) == 1) && (__s2_len = strlen (expected->pszObjId), __s2_len < 4) ? (__builtin_constant_p (got->pszObjId) && ((size_t)(const void *)((got->pszObjId) + 1) - (size_t)(const void *)(got->pszObjId) == 1) ? __builtin_strcmp (got->pszObjId, expected->pszObjId) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (got->pszObjId); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (expected->pszObjId))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (expected->pszObjId))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (expected->pszObjId))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (expected->pszObjId))[3]); } } __result; }))) : __builtin_strcmp (got->pszObjId, expected->pszObjId)))); }),
+ expected->pszObjId);
+ }
+ }
+}
+static void compareRDNs(const CERT_RDN *expected, const CERT_RDN *got)
+{
+ {
+ }
+}
+static void compareNames(const CERT_NAME_INFO *expected,
+ const CERT_NAME_INFO *got)
+{
+ (winetest_set_location("encode.c", 959), 0) ? 0 : winetest_ok(got->cRDN == expected->cRDN, "Expected %d RDNs, got %d\n",
+ expected->cRDN, got->cRDN);
+ {
+ }
+}
+static void test_decodeName(DWORD dwEncoding)
+{
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ BOOL ret;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)7), emptySequence,
+ (BYTE *)&buf, &bufSize);
+ {
+ static CHAR oid_sur_name[] = "2.5.4.4",
+ oid_common_name[] = "2.5.4.3";
+ CERT_RDN_ATTR attrs[] = {
+ { oid_sur_name, 4, { sizeof(surName),
+ (BYTE *)commonName } },
+ };
+ }
+ {
+ }
+}
+static void test_decodeUnicodeName(DWORD dwEncoding)
+{
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ BOOL ret;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)20), emptySequence,
+ (BYTE *)&buf, &bufSize);
+ {
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)20), emptyRDNs,
+ (BYTE *)&buf, &bufSize);
+ {
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)20), twoRDNsNoNull,
+ (BYTE *)&buf, &bufSize);
+ {
+ static CHAR oid_sur_name[] = "2.5.4.4",
+ oid_common_name[] = "2.5.4.3";
+ CERT_RDN_ATTR attrs[] = {
+ { oid_sur_name, 4,
+ { lstrlenW(commonNameW) * sizeof(WCHAR), (BYTE *)commonNameW } },
+ };
+ }
+}
+struct EncodedNameValue
+{
+ CERT_NAME_VALUE value;
+};
+static const char bogusPrintable[] = "~";
+static const BYTE bin42[] = { 0x16,0x02,0x80,0x00 };
+static const BYTE bin43[] = { 0x13,0x02,0x7e,0x00 };
+static BYTE octetCommonNameValue[] = {
+ 0x12,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
+static BYTE printableCommonNameValue[] = {
+ 0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
+static BYTE t61CommonNameValue[] = {
+ 0x14,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
+static BYTE graphicCommonNameValue[] = {
+ 0x61,0x00,0x6e,0x00,0x67,0x00,0x00 };
+static BYTE utf8CommonNameValue[] = {
+ 0x0c,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
+static struct EncodedNameValue nameValues[] = {
+ { { 5, { sizeof(commonName), (BYTE *)commonName } },
+ sizeof(bin42) },
+ { { 4, { sizeof(bogusPrintable),
+ (BYTE *)bogusPrintable } }, bin43, sizeof(bin43) },
+};
+static void test_encodeNameValue(DWORD dwEncoding)
+{
+ DWORD size = 0, i;
+ BOOL ret;
+ CERT_NAME_VALUE value = { 0, { 0, ((void *)0) } };
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)6), &value,
+ "Expected CRYPT_E_ASN1_CHOICE, got %08x\n", GetLastError());
+ {
+ (winetest_set_location("encode.c", 1209), 0) ? 0 : winetest_ok(size == sizeof(printableCommonNameValue), "Unexpected size %d\n",
+ "Unexpected encoding\n");
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)6),
+ nameValues[i].value.dwValueType, GetLastError());
+ {
+ }
+ }
+}
+static void test_decodeNameValue(DWORD dwEncoding)
+{
+ int i;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ BOOL ret;
+ {
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)6),
+ (BYTE *)&buf, &bufSize);
+ {
+ compareNameValues(&nameValues[i].value,
+ (const CERT_NAME_VALUE *)buf);
+ }
+ }
+}
+static const BYTE emptyURL[] = { 0x30, 0x02, 0x86, 0x00 };
+static const WCHAR url[] = { 'h','t','t','p',':','/','/','w','i','n','e',
+ 0x6f, 0x72, 0x67 };
+static const BYTE encodedIPAddr[] = { 0x30, 0x06, 0x87, 0x04, 0x7f, 0x00, 0x00,
+ 0x01 };
+static void test_encodeAltName(DWORD dwEncoding)
+{
+ CERT_ALT_NAME_INFO info = { 0 };
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ BOOL ret;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)12), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ {
+ }
+}
+static void test_decodeAltName(DWORD dwEncoding)
+{
+ BOOL ret;
+ DWORD bufSize = 0;
+ CERT_ALT_NAME_INFO *info;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)12),
+ &bufSize);
+ {
+ (winetest_set_location("encode.c", 1392), 0) ? 0 : winetest_ok(info->cAltEntry == 0, "Expected 0 entries, got %d\n",
+ info->cAltEntry);
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)12), emptyURL,
+ &bufSize);
+ {
+ }
+}
+struct encodedBits
+{
+ const BYTE *encoded;
+ DWORD cbDecoded;
+};
+static const struct encodedBits bits[] = {
+};
+static void test_encodeBits(DWORD dwEncoding)
+{
+ DWORD i;
+ {
+ DWORD bufSize = 0;
+ {
+ (winetest_set_location("encode.c", 1802), 0) ? 0 : winetest_ok(bufSize == bits[i].encoded[1] + 2,
+ bits[i].encoded[1] + 2);
+ }
+ }
+}
+static void test_decodeBits(DWORD dwEncoding)
+{
+ DWORD i;
+ {
+ {
+ CRYPT_BIT_BLOB *blob;
+ (winetest_set_location("encode.c", 1835), 0) ? 0 : winetest_ok(blob->cbData == bits[i].cbDecoded,
+ "Unexpected value\n");
+ }
+ }
+ {
+ }
+}
+struct Constraints2
+{
+ CERT_BASIC_CONSTRAINTS2_INFO info;
+};
+static const struct Constraints2 constraints2[] = {
+};
+static const BYTE encodedDomainName[] = { 0x30, 0x2b, 0x31, 0x29, 0x30, 0x11,
+ 0x16, 0x06, 0x77, 0x69, 0x6e, 0x65, 0x68, 0x71 };
+static void test_encodeBasicConstraints(DWORD dwEncoding)
+{
+ CERT_NAME_BLOB nameBlob = { sizeof(encodedDomainName),
+ (LPBYTE)encodedDomainName };
+ {
+ {
+ }
+ }
+ {
+ }
+}
+static const unsigned char encodedCommonName[] = {
+ 0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,'J','u','a','n',' ','L','a','n','g',0};
+static void test_decodeBasicConstraints(DWORD dwEncoding)
+{
+ static const BYTE inverted[] = { 0x30, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01,
+ 0xff };
+ DWORD i;
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ {
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)15),
+ 0x08000, ((void *)0), (BYTE *)&buf, &bufSize);
+ {
+ CERT_BASIC_CONSTRAINTS2_INFO *info =
+ (winetest_set_location("encode.c", 1984), 0) ? 0 : winetest_ok(!memcmp(info, &constraints2[i].info, sizeof(*info)),
+ "Unexpected value for item %d\n", i);
+ }
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)15),
+ (BYTE *)&buf, &bufSize);
+ {
+ CERT_BASIC_CONSTRAINTS_INFO *info = (CERT_BASIC_CONSTRAINTS_INFO *)buf;
+ {
+ (winetest_set_location("encode.c", 2043), 0) ? 0 : winetest_ok(info->rgSubtreesConstraint[0].cbData ==
+ info->rgSubtreesConstraint[0].cbData);
+ (winetest_set_location("encode.c", 2046), 0) ? 0 : winetest_ok(!memcmp(info->rgSubtreesConstraint[0].pbData, encodedDomainName,
+ sizeof(encodedDomainName)), "Unexpected value\n");
+ }
+ }
+}
+static const BYTE modulus1[] = { 0,0,0,1,1,1,1,1 };
+struct EncodedRSAPubKey
+{
+ const BYTE *modulus;
+ size_t decodedModulusLen;
+};
+struct EncodedRSAPubKey rsaPubKeys[] = {
+};
+static void test_encodeRsaPublicKey(DWORD dwEncoding)
+{
+ BYTE toEncode[sizeof(BLOBHEADER) + sizeof(RSAPUBKEY) + sizeof(modulus1)];
+ RSAPUBKEY *rsaPubKey = (RSAPUBKEY *)(toEncode + sizeof(BLOBHEADER));
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0, i;
+ ret = CryptDecodeObjectEx(dwEncoding, "1.2.840.113549.1.1.1",
+ "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
+ {
+ {
+ (winetest_set_location("encode.c", 2210), 0) ? 0 : winetest_ok(bufSize >= sizeof(BLOBHEADER) + sizeof(RSAPUBKEY) +
+ "Wrong size %d\n", bufSize);
+ (winetest_set_location("encode.c", 2223), 0) ? 0 : winetest_ok(rsaPubKey->magic == 0x31415352,
+ rsaPubKey->pubexp);
+ (winetest_set_location("encode.c", 2229), 0) ? 0 : winetest_ok(!memcmp(buf + sizeof(BLOBHEADER) + sizeof(RSAPUBKEY),
+ rsaPubKeys[i].modulus, rsaPubKeys[i].decodedModulusLen),
+ "Unexpected modulus\n");
+ }
+ }
+}
+static const BYTE intSequence[] = { 0x30, 0x1b, 0x02, 0x01, 0x01, 0x02, 0x01,
+ 0x02, 0xff, 0x7f, 0x02, 0x04, 0xba, 0xdd, 0xf0, 0x0d };
+static const BYTE mixedSequence[] = { 0x30, 0x27, 0x17, 0x0d, 0x30, 0x35, 0x30,
+ 0xff, 0x7f, 0x02, 0x04, 0xba, 0xdd, 0xf0, 0x0d };
+static void test_encodeSequenceOfAny(DWORD dwEncoding)
+{
+ BYTE *buf = ((void *)0);
+ {
+ }
+ {
+ (winetest_set_location("encode.c", 2284), 0) ? 0 : winetest_ok(!memcmp(buf, mixedSequence, mixedSequence[1] + 2),
+ "Unexpected value\n");
+ }
+}
+static void test_decodeSequenceOfAny(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ {
+ {
+ }
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)34), mixedSequence,
+ &bufSize);
+ {
+ CRYPT_SEQUENCE_OF_ANY *seq = (CRYPT_SEQUENCE_OF_ANY *)buf;
+ (winetest_set_location("encode.c", 2324), 0) ? 0 : winetest_ok(seq->cValue == sizeof(ints) / sizeof(ints[0]),
+ seq->rgValue[0].cbData);
+ (winetest_set_location("encode.c", 2330), 0) ? 0 : winetest_ok(!memcmp(seq->rgValue[0].pbData, times[0].encodedTime,
+ times[0].encodedTime[1] + 2), "Unexpected value\n");
+ }
+}
+struct encodedExtensions
+{
+ CERT_EXTENSIONS exts;
+};
+static BYTE noncrit_ext_data[] = { 0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
+static CHAR oid_basic_constraints2[] = "2.5.29.19";
+static CERT_EXTENSION nonCriticalExt =
+ { oid_basic_constraints2, 0, { 8, noncrit_ext_data } };
+static const struct encodedExtensions exts[] = {
+};
+static void test_encodeExtensions(DWORD dwEncoding)
+{
+ DWORD i;
+ {
+ {
+ }
+ }
+ {
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)5),
+ ((void *)0), (BYTE *)&buf, &bufSize);
+ {
+ CERT_EXTENSIONS *ext = (CERT_EXTENSIONS *)buf;
+ DWORD j;
+ (winetest_set_location("encode.c", 2405), 0) ? 0 : winetest_ok(ext->cExtension == exts[i].exts.cExtension,
+ ext->cExtension);
+ {
+ (winetest_set_location("encode.c", 2410), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (ext->rgExtension[j].pszObjId) && __builtin_constant_p (exts[i].exts.rgExtension[j].pszObjId) && (__s1_len = strlen (ext->rgExtension[j].pszObjId), __s2_len = strlen (exts[i].exts.rgExtension[j].pszObjId), (!((size_t)(const void *)((ext->rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(ext->rgExtension[j].pszObjId) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((exts[i].exts.rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(exts[i].exts.rgExtension[j].pszObjId) == 1) || __s2_len >= 4)) ? __builtin_strcmp (ext->rgExtension[j].pszObjId, exts[i].exts.rgExtension[j].pszObjId) : (__builtin_constant_p (ext->rgExtension[j].pszObjId) && ((size_t)(const void *)((ext->rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(ext->rgExtension[j].pszObjId) == 1) && (__s1_len = strlen (ext->rgExtension[j].pszObjId), __s1_len < 4) ? (__builtin_constant_p (exts[i].exts.rgExtension[j].pszObjId) && ((size_t)(const void *)((exts[i].exts.rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(exts[i].exts.rgExtension[j].pszObjId) == 1) ? __builtin_strcmp (ext->rgExtension[j].pszObjId, exts[i].exts.rgExtension[j].pszObjId) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (exts[i].exts.rgExtension[j].pszObjId); register int __result = (((__const unsigned char *) (__const char *) (ext->rgExtension[j].pszObjId))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ext->rgExtension[j].pszObjId))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ext->rgExtension[j].pszObjId))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (ext->rgExtension[j].pszObjId))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (exts[i].exts.rgExtension[j].pszObjId) && ((size_t)(const void *)((exts[i].exts.rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(exts[i].exts.rgExtension[j].pszObjId) == 1) && (__s2_len = strlen (exts[i].exts.rgExtension[j].pszObjId), __s2_len < 4) ? (__builtin_constant_p (ext->rgExtension[j].pszObjId) && ((size_t)(const void *)((ext->rgExtension[j].pszObjId) + 1) - (size_t)(const void *)(ext->rgExtension[j].pszObjId) == 1) ? __builtin_strcmp (ext->rgExtension[j].pszObjId, exts[i].exts.rgExtension[j].pszObjId) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (ext->rgExtension[j].pszObjId); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (exts[i].exts.rgExtension[j].pszObjId))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (exts[i].exts.rgExtension[j].pszObjId))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (exts[i].exts.rgExtension[j].pszObjId))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (exts[i].exts.rgExtension[j].pszObjId))[3]); } } __result; }))) : __builtin_strcmp (ext->rgExtension[j].pszObjId, exts[i].exts.rgExtension[j].pszObjId)))); }),
+ ext->rgExtension[j].pszObjId);
+ (winetest_set_location("encode.c", 2415), 0) ? 0 : winetest_ok(!memcmp(ext->rgExtension[j].Value.pbData,
+ exts[i].exts.rgExtension[j].Value.cbData),
+ "Unexpected value\n");
+ }
+ }
+ }
+}
+struct encodedPublicKey
+{
+ const BYTE *encoded;
+ const BYTE *encodedNoNull;
+};
+static const BYTE aKey[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd,
+ 0xe, 0xf };
+static const BYTE params[] = { 0x02, 0x01, 0x01 };
+static const unsigned char bin66[] = {
+ 0x30,0x0f,0x30,0x0a,0x06,0x06,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x05,0x00,0x03,0x01,0x00};
+static const unsigned char bin67[] = {
+ 0x30,0x0d,0x30,0x08,0x06,0x06,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x03,0x01,0x00};
+static const unsigned char bin69[] = {
+ 0x0f};
+static unsigned char bin72[] = { 0x05,0x00};
+static CHAR oid_bogus[] = "1.2.3",
+ oid_rsa[] = "1.2.840.113549";
+static const struct encodedPublicKey pubKeys[] = {
+ { { { oid_rsa, { 0, ((void *)0) } }, { 0, ((void *)0), 0} },
+ { { oid_rsa, { 2, bin72 } }, { sizeof(aKey), (BYTE *)aKey, 0} } },
+ { { { oid_rsa, { sizeof(params), (BYTE *)params } }, { sizeof(aKey),
+ (BYTE *)aKey, 0 } } },
+};
+static void test_encodePublicKeyInfo(DWORD dwEncoding)
+{
+ DWORD i;
+ {
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)8),
+ &bufSize);
+ {
+ (winetest_set_location("encode.c", 2505), 0) ? 0 : winetest_ok(bufSize == pubKeys[i].encoded[1] + 2 ||
+ pubKeys[i].encodedNoNull[1] + 2, bufSize);
+ (winetest_set_location("encode.c", 2510), 0) ? 0 : winetest_ok(!memcmp(buf, pubKeys[i].encoded, pubKeys[i].encoded[1] + 2),
+ "Unexpected value\n");
+ (winetest_set_location("encode.c", 2513), 0) ? 0 : winetest_ok(!memcmp(buf, pubKeys[i].encodedNoNull,
+ pubKeys[i].encodedNoNull[1] + 2), "Unexpected value\n");
+ }
+ }
+}
+static void comparePublicKeyInfo(const CERT_PUBLIC_KEY_INFO *expected,
+ const CERT_PUBLIC_KEY_INFO *got)
+{
+ (winetest_set_location("encode.c", 2523), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (expected->Algorithm.pszObjId) && __builtin_constant_p (got->Algorithm.pszObjId) && (__s1_len = strlen (expected->Algorithm.pszObjId), __s2_len = strlen (got->Algorithm.pszObjId), (!((size_t)(const void *)((expected->Algorithm.pszObjId) + 1) - (size_t)(const void *)(expected->Algorithm.pszObjId) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((got->Algorithm.pszObjId) + 1) - (size_t)(const void *)(got->Algorithm.pszObjId) == 1) || __s2_len >= 4)) ? __builtin_strcmp (expected->Algorithm.pszObjId, got->Algorithm.pszObjId) : (__builtin_constant_p (expected->Algorithm.pszObjId) && ((size_t)(const void *)((expected->Algorithm.pszObjId) + 1) - (size_t)(const void *)(expected->Algorithm.pszObjId) == 1) && (__s1_len = strlen (expected->Algorithm.pszObjId), __s1_len < 4) ? (__builtin_constant_p (got->Algorithm.pszObjId) && ((size_t)(const void *)((got->Algorithm.pszObjId) + 1) - (size_t)(const void *)(got->Algorithm.pszObjId) == 1) ? __builtin_strcmp (expected->Algorithm.pszObjId, got->Algorithm.pszObjId) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (got->Algorithm.pszObjId); register int __result = (((__const unsigned char *) (__const char *) (expected->Algorithm.pszObjId))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (expected->Algorithm.pszObjId))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (expected->Algorithm.pszObjId))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (expected->Algorithm.pszObjId))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (got->Algorithm.pszObjId) && ((size_t)(const void *)((got->Algorithm.pszObjId) + 1) - (size_t)(const void *)(got->Algorithm.pszObjId) == 1) && (__s2_len = strlen (got->Algorithm.pszObjId), __s2_len < 4) ? (__builtin_constant_p (expected->Algorithm.pszObjId) && ((size_t)(const void *)((expected->Algorithm.pszObjId) + 1) - (size_t)(const void *)(expected->Algorithm.pszObjId) == 1) ? __builtin_strcmp (expected->Algorithm.pszObjId, got->Algorithm.pszObjId) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (expected->Algorithm.pszObjId); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (got->Algorithm.pszObjId))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (got->Algorithm.pszObjId))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (got->Algorithm.pszObjId))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (got->Algorithm.pszObjId))[3]); } } __result; }))) : __builtin_strcmp (expected->Algorithm.pszObjId, got->Algorithm.pszObjId)))); }),
+ expected->PublicKey.cbData, got->PublicKey.cbData);
+ (winetest_set_location("encode.c", 2538), 0) ? 0 : winetest_ok(!memcmp(expected->PublicKey.pbData, got->PublicKey.pbData,
+ got->PublicKey.cbData), "Unexpected public key value\n");
+}
+static void test_decodePublicKeyInfo(DWORD dwEncoding)
+{
+ static const BYTE bogusPubKeyInfo[] = { 0x30, 0x22, 0x30, 0x0d, 0x06, 0x06,
+ 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ {
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)8),
+ 0x08000, ((void *)0), (BYTE *)&buf, &bufSize);
+ {
+ }
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)8),
+ "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
+}
+static const BYTE v1Cert[] = { 0x30, 0x33, 0x02, 0x00, 0x30, 0x02, 0x06, 0x00,
+ 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
+static const BYTE v2Cert[] = { 0x30, 0x38, 0xa0, 0x03, 0x02, 0x01, 0x01, 0x02,
+ 0x30, 0x5a, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
+static const BYTE v3Cert[] = { 0x30, 0x38, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02,
+ 0x30, 0x5a, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
+static const BYTE v1CertWithConstraints[] = { 0x30, 0x4b, 0x02, 0x00, 0x30,
+ 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
+static const BYTE v1CertWithSerial[] = { 0x30, 0x4c, 0x02, 0x01, 0x01, 0x30,
+ 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
+static const BYTE bigCert[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
+ 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
+static void test_encodeCertToBeSigned(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ CERT_INFO info = { 0 };
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)2), ((void *)0),
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)2), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ {
+ }
+}
+static void test_decodeCertToBeSigned(DWORD dwEncoding)
+{
+ static const BYTE *corruptCerts[] = { v1Cert, v2Cert, v3Cert,
+ v1CertWithConstraints, v1CertWithSerial };
+ BOOL ret;
+ (winetest_set_location("encode.c", 2727), 0) ? 0 : winetest_ok(!ret && GetLastError() == ((HRESULT)0x80093102L),
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)2),
+ "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
+ }
+ {
+ }
+}
+static const BYTE hash[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd,
+ 0xe, 0xf };
+static const BYTE signedBigCert[] = {
+ 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+static void test_encodeCert(DWORD dwEncoding)
+{
+ CERT_SIGNED_CONTENT_INFO info = { { sizeof(bigCert), (BYTE *)bigCert },
+ { ((void *)0), { 0, ((void *)0) } }, { sizeof(hash), (BYTE *)hash, 0 } };
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD bufSize = 0;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)1), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &bufSize);
+ {
+ }
+}
+static void test_decodeCert(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ {
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)2), signedBigCert,
+ sizeof(signedBigCert), 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ CERT_INFO *info = (CERT_INFO *)buf;
+ (winetest_set_location("encode.c", 2843), 0) ? 0 : winetest_ok(info->SerialNumber.cbData == 1,
+ *info->SerialNumber.pbData);
+ (winetest_set_location("encode.c", 2852), 0) ? 0 : winetest_ok(info->Subject.cbData == sizeof(encodedCommonName),
+ "Wrong size %d\n", info->Subject.cbData);
+ (winetest_set_location("encode.c", 2854), 0) ? 0 : winetest_ok(!memcmp(info->Subject.pbData, encodedCommonName,
+ info->Subject.cbData), "Unexpected subject\n");
+ }
+}
+static const BYTE distPointWithUrl[] = { 0x30, 0x19, 0x30, 0x17, 0xa0, 0x15,
+ 0x6e, 0x65, 0x68, 0x71, 0x2e, 0x6f, 0x72, 0x67 };
+static const BYTE distPointWithIssuer[] = { 0x30, 0x17, 0x30, 0x15, 0xa2, 0x13,
+ 0x2e, 0x6f, 0x72, 0x67 };
+static const BYTE crlReason = 1 |
+ 3;
+static void test_encodeCRLDistPoints(DWORD dwEncoding)
+{
+ CRL_DIST_POINTS_INFO xxxinfo = { 0 };
+ CRL_DIST_POINT point = { { 0 } };
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)35), &xxxinfo,
+ "Expected E_INVALIDARG, got %08x\n", GetLastError());
+ xxxinfo.cDistPoint = 1;
+ xxxinfo.rgDistPoint = &point;
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)35), &xxxinfo,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ point.ReasonFlags.cbData = sizeof(crlReason);
+ {
+ }
+}
+static void test_decodeCRLDistPoints(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ PCERT_ALT_NAME_ENTRY entry;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)35),
+ (BYTE *)&buf, &size);
+ {
+ (winetest_set_location("encode.c", 3065), 0) ? 0 : winetest_ok(entry->dwAltNameChoice == 7,
+ "Expected CERT_ALT_NAME_URL, got %d\n", entry->dwAltNameChoice);
+ }
+}
+static const BYTE urlIDP[] = { 0x30,0x17,0xa0,0x15,0xa0,0x13,0x86,0x11,0x68,
+ 0x67 };
+static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ CRL_ISSUING_DIST_POINT point = { { 0 } };
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)54), ((void *)0),
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)54), &point,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ {
+ }
+}
+static void compareAltNameEntry(const CERT_ALT_NAME_ENTRY *expected,
+ const CERT_ALT_NAME_ENTRY *got)
+{
+ (winetest_set_location("encode.c", 3149), 0) ? 0 : winetest_ok(expected->dwAltNameChoice == got->dwAltNameChoice,
+ got->dwAltNameChoice);
+ {
+ {
+ (winetest_set_location("encode.c", 3161), 0) ? 0 : winetest_ok((!(*expected).pwszURL && !(*got).pwszURL) ||
+ !lstrcmpW((*expected).pwszURL, (*got).pwszURL), "Unexpected name\n");
+ }
+ }
+}
+static void compareAltNameInfo(const CERT_ALT_NAME_INFO *expected,
+ const CERT_ALT_NAME_INFO *got)
+{
+}
+static const BYTE v1CRL[] = { 0x30, 0x15, 0x30, 0x02, 0x06, 0x00, 0x18, 0x0f,
+ 0x30, 0x5a };
+static const BYTE v2CRL[] = { 0x30, 0x18, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
+ 0x30, 0x30, 0x30, 0x30, 0x5a };
+static const BYTE v1CRLWithIssuer[] = { 0x30, 0x2c, 0x30, 0x02, 0x06, 0x00,
+ 0x5a };
+static const BYTE v1CRLWithIssuerAndEmptyEntry[] = { 0x30, 0x43, 0x30, 0x02,
+ 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a };
+static const BYTE v1CRLWithIssuerAndEntry[] = { 0x30, 0x44, 0x30, 0x02, 0x06,
+ 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a };
+static const BYTE v1CRLWithEntryExt[] = { 0x30,0x5a,0x30,0x02,0x06,0x00,0x30,
+ 0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
+static const BYTE v1CRLWithExt[] = { 0x30,0x5c,0x30,0x02,0x06,0x00,0x30,0x15,
+ 0xff,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
+static const BYTE v2CRLWithExt[] = { 0x30,0x5c,0x02,0x01,0x01,0x30,0x02,0x06,
+ 0x13,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
+static const BYTE v2CRLWithIssuingDistPoint[] = { 0x30,0x5c,0x02,0x01,0x01,
+ 0x03,0x55,0x1d,0x13,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
+static void test_encodeCRLToBeSigned(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ CRL_INFO info = { 0 };
+ {
+ (winetest_set_location("encode.c", 3386), 0) ? 0 : winetest_ok(size == sizeof(v1CRLWithIssuerAndEntry),
+ "Wrong size %d\n", size);
+ }
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)3), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ {
+ }
+}
+static const BYTE verisignCRL[] = { 0x30, 0x82, 0x01, 0xb1, 0x30, 0x82, 0x01,
+0x61,0xc0,0x99,0x16,0x71,0x05,0xb6,0x25,0x14,0x64,0x4f,0x30 };
+static void test_decodeCRLToBeSigned(DWORD dwEncoding)
+{
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0, i;
+ {
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)3),
+ (BYTE *)&buf, &size);
+ {
+ CRL_INFO *info = (CRL_INFO *)buf;
+ (winetest_set_location("encode.c", 4016), 0) ? 0 : winetest_ok(info->cCRLEntry == 0, "Expected 0 CRL entries, got %d\n",
+ "Unexpected issuer\n");
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)3),
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ CRL_INFO *info = (CRL_INFO *)buf;
+ (winetest_set_location("encode.c", 4041), 0) ? 0 : winetest_ok(info->cCRLEntry == 1, "Expected 1 CRL entries, got %d\n",
+ "Unexpected issuer\n");
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)3),
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ CRL_INFO *info = (CRL_INFO *)buf;
+ (winetest_set_location("encode.c", 4085), 0) ? 0 : winetest_ok(info->cCRLEntry == 209, "Expected 209 CRL entries, got %d\n",
+ info->cExtension);
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)3),
+ ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+}
+static const BYTE authorityKeyIdWithIssuer[] = { 0x30,0x19,0xa1,0x17,0x30,0x15,
+ 0x20,0x4c,0x61,0x6e,0x67,0x00 };
+static const BYTE authorityKeyIdWithSerial[] = { 0x30,0x03,0x82,0x01,0x01 };
+static void test_encodeAuthorityKeyId(DWORD dwEncoding)
+{
+ CERT_AUTHORITY_KEY_ID_INFO info = { { 0 } };
+ BOOL ret;
+ BYTE *buf = ((void *)0);
+ DWORD size = 0;
+ {
+ }
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)9), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ }
+ ret = CryptEncodeObjectEx(dwEncoding, ((LPCSTR)9), &info,
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ (winetest_set_location("encode.c", 4284), 0) ? 0 : winetest_ok(size == sizeof(authorityKeyIdWithSerial), "Unexpected size %d\n",
+ size);
+ }
+}
+static void test_decodeAuthorityKeyId(DWORD dwEncoding)
+{
+ BOOL ret;
+ LPBYTE buf = ((void *)0);
+ DWORD size = 0;
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)9),
+ (BYTE *)&buf, &size);
+ {
+ }
+ ret = CryptDecodeObjectEx(dwEncoding, ((LPCSTR)9),
+ 0x08000, ((void *)0), (BYTE *)&buf, &size);
+ {
+ (winetest_set_location("encode.c", 4355), 0) ? 0 : winetest_ok(size >= sizeof(CERT_AUTHORITY_KEY_ID_INFO), "Unexpected size %d\n",
+ "Unexpected serial number\n");
+ }
+}
+static void testExportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO *pInfo)
+{
+ BOOL ret;
+ DWORD size = 0;
+ {
+ ret = CryptExportPublicKeyInfoEx(csp, 2, 0x00000001,
+ ((void *)0), 0, ((void *)0), ((void *)0), &size);
+ {
+ {
+ (winetest_set_location("encode.c", 4416), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((*pInfo)->Algorithm.pszObjId) && __builtin_constant_p ("1.2.840.113549.1.1.1") && (__s1_len = strlen ((*pInfo)->Algorithm.pszObjId), __s2_len = strlen ("1.2.840.113549.1.1.1"), (!((size_t)(const void *)(((*pInfo)->Algorithm.pszObjId) + 1) - (size_t)(const void *)((*pInfo)->Algorithm.pszObjId) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) || __s2_len >= 4)) ? __builtin_strcmp ((*pInfo)->Algorithm.pszObjId, "1.2.840.113549.1.1.1") : (__builtin_constant_p ((*pInfo)->Algorithm.pszObjId) && ((size_t)(const void *)(((*pInfo)->Algorithm.pszObjId) + 1) - (size_t)(const void *)((*pInfo)->Algorithm.pszObjId) == 1) && (__s1_len = strlen ((*pInfo)->Algorithm.pszObjId), __s1_len < 4) ? (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) ? __builtin_strcmp ((*pInfo)->Algorithm.pszObjId, "1.2.840.113549.1.1.1") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"); register int __result = (((__const unsigned char *) (__const char *) ((*pInfo)->Algorithm.pszObjId))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((*pInfo)->Algorithm.pszObjId))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((*pInfo)->Algorithm.pszObjId))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ((*pInfo)->Algorithm.pszObjId))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) && (__s2_len = strlen ("1.2.840.113549.1.1.1"), __s2_len < 4) ? (__builtin_constant_p ((*pInfo)->Algorithm.pszObjId) && ((size_t)(const void *)(((*pInfo)->Algorithm.pszObjId) + 1) - (size_t)(const void *)((*pInfo)->Algorithm.pszObjId) == 1) ? __builtin_strcmp ((*pInfo)->Algorithm.pszObjId, "1.2.840.113549.1.1.1") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ((*pInfo)->Algorithm.pszObjId); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[3]); } } __result; }))) : __builtin_strcmp ((*pInfo)->Algorithm.pszObjId, "1.2.840.113549.1.1.1")))); }),
+ (*pInfo)->Algorithm.pszObjId);
+ }
+ }
+ }
+}
+static const BYTE expiredCert[] = { 0x30, 0x82, 0x01, 0x33, 0x30, 0x81, 0xe2,
+ 0x49, 0xe5, 0xf9, 0x65, 0xf3 };
+static void testImportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO info)
+{
+ BOOL ret;
+ HCRYPTKEY key;
+ PCCERT_CONTEXT context;
+ (winetest_set_location("encode.c", 4464), 0) ? 0 : winetest_ok(!ret && GetLastError() == 2,
+ GetLastError());
+ {
+ (winetest_set_location("encode.c", 4485), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ("1.2.840.113549.1.1.1") && __builtin_constant_p (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) && (__s1_len = strlen ("1.2.840.113549.1.1.1"), __s2_len = strlen (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId), (!((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) || __s1_len >= 4) && (!((size_t)(const void *)((context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) + 1) - (size_t)(const void *)(context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) == 1) || __s2_len >= 4)) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) : (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) && (__s1_len = strlen ("1.2.840.113549.1.1.1"), __s1_len < 4) ? (__builtin_constant_p (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) && ((size_t)(const void *)((context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) + 1) - (size_t)(const void *)(context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) == 1) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId); register int __result = (((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) && ((size_t)(const void *)((context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) + 1) - (size_t)(const void *)(context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) == 1) && (__s2_len = strlen (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId), __s2_len < 4) ? (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ("1.2.840.113549.1.1.1"); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId))[3]); } } __result; }))) : __builtin_strcmp ("1.2.840.113549.1.1.1", context->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId)))); }),
+ &context->pCertInfo->SubjectPublicKeyInfo, 0, 0, ((void *)0), &key);
+ }
+}
+static const char cspName[] = "WineCryptTemp";
+static void testPortPublicKeyInfo(void)
+{
+ HCRYPTPROV csp;
+ BOOL ret;
+ CryptAcquireContextA(&csp, cspName, "Microsoft Base Cryptographic Provider v1.0", 1,
+ 0x00000008);
+ ret = CryptAcquireContextA(&csp, cspName, "Microsoft Base Cryptographic Provider v1.0", 1,
+ 0x00000010);
+}
+void func_encode(void)
+{
+ test_encodeCRLDistPoints(0x00000001);
+}
+
+/* { dg-final { scan-tree-dump-times " xxxinfo = {}" 1 "dse1"} } */
+/* { dg-final { cleanup-tree-dump "dse1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp33.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp33.c
new file mode 100644
index 00000000000..13f60a6e720
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp33.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+/* This is from PR14052. */
+
+int f2(int x) { return x == 1 || x == 3 || x == 1; }
+
+/* { dg-final { scan-tree-dump "Folding predicate.*== 1 to 0" "vrp1" } } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/var-expand1.c b/gcc/testsuite/gcc.dg/var-expand1.c
new file mode 100644
index 00000000000..8782d1cf9c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/var-expand1.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -funroll-loops --fast-math -fvariable-expansion-in-unroller -dL" } */
+
+extern void abort (void);
+
+float array[10] = { 1,2,3,4,5,6,7,8,9,10 };
+
+int foo (int n)
+{
+ unsigned i;
+ float accum = 1.0;
+
+ for (i = 0; i < n; i++)
+ accum += array[i];
+
+ return accum;
+}
+
+int main (void)
+{
+ return foo (10);
+}
+
+/* { dg-final { scan-rtl-dump "Expanding Accumulator" "loop2_unroll" } } */
+/* { dg-final { cleanup-rtl-dump "loop*" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c b/gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c
new file mode 100644
index 00000000000..caa6a3ca67d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/fast-math-vect-pr29925.c
@@ -0,0 +1,39 @@
+/* { dg-require-effective-target vect_float } */
+
+#include <stdlib.h>
+#include "tree-vect.h"
+
+void interp_pitch(float *exc, float *interp, int pitch, int len)
+{
+ int i,k;
+ int maxj;
+
+ maxj=3;
+ for (i=0;i<len;i++)
+ {
+ float tmp = 0;
+ for (k=0;k<7;k++)
+ {
+ tmp += exc[i-pitch+k+maxj-6];
+ }
+ interp[i] = tmp;
+ }
+}
+
+int main()
+{
+ float *exc = calloc(126,sizeof(float));
+ float *interp = calloc(80,sizeof(float));
+ int pitch = -35;
+
+ check_vect ();
+
+ interp_pitch(exc, interp, pitch, 80);
+ free(exc);
+ free(interp);
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr30843.c b/gcc/testsuite/gcc.dg/vect/pr30843.c
new file mode 100644
index 00000000000..616b618f4d8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr30843.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_long } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 16
+
+void dacP98FillRGBMap (unsigned char *pBuffer)
+{
+ unsigned long dw, dw1;
+ unsigned long *pdw = (unsigned long *)(pBuffer);
+
+ for( dw = 256, dw1 = 0; dw; dw--, dw1 += 0x01010101)
+ {
+ *pdw++ = dw1;
+ *pdw++ = dw1;
+ *pdw++ = dw1;
+ *pdw++ = dw1;
+ }
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/pr30858.c b/gcc/testsuite/gcc.dg/vect/pr30858.c
new file mode 100644
index 00000000000..0af2f8e9a91
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr30858.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+int
+foo (int ko)
+{
+ int j,i;
+ for (j = 0; j < ko; j++)
+ i += (i > 10) ? -5 : 7;
+ return i;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Unknown def-use cycle pattern." 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-106.c b/gcc/testsuite/gcc.dg/vect/vect-106.c
new file mode 100755
index 00000000000..04a9f6c1c68
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-106.c
@@ -0,0 +1,73 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 9
+
+static int a[N] = {1,2,3,4,5,6,7,8,9};
+static int b[N] = {2,3,4,5,6,7,8,9,0};
+
+int main1 () {
+ int i;
+ int *p, *q, *p1, *q1;
+ p = (unsigned int *) malloc (sizeof (unsigned int) * N);
+ q = (unsigned int *) malloc (sizeof (unsigned int) * N);
+
+ p1 = p; q1 = q;
+
+ /* Not vectorizable: because of the redundant cast (caused by ponter
+ arithmetics), alias analysis fails to distinguish between
+ the pointers. */
+ for (i = 0; i < N; i++)
+ {
+ *(q + i) = a[i];
+ *(p + i) = b[i];
+ }
+
+ /* check results: */
+ for (i = 0; i < N; i++)
+ {
+ if (*q != a[i] || *p != b[i])
+ abort();
+ q++;
+ p++;
+ }
+
+ q = q1;
+ p = p1;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
+ {
+ *q = b[i];
+ *p = a[i];
+ q++;
+ p++;
+ }
+
+ q = q1;
+ p = p1;
+ /* check results: */
+ for (i = 0; i < N; i++)
+ {
+ if (*q != b[i] || *p != a[i])
+ abort();
+ q++;
+ p++;
+ }
+
+ return 0;
+}
+
+int main (void)
+{
+ check_vect ();
+
+ return main1 ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "can't determine dependence" 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/testsuite/gcc.dg/visibility-11.c b/gcc/testsuite/gcc.dg/visibility-11.c
index 513ce64306e..d616fe9aeec 100644
--- a/gcc/testsuite/gcc.dg/visibility-11.c
+++ b/gcc/testsuite/gcc.dg/visibility-11.c
@@ -5,6 +5,7 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-skip-if "" { *-*-darwin* } { "*" } { "" } } */
/* { dg-require-visibility "" } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-Os -fpic -mstringop-strategy=libcall" } */
/* { dg-final { scan-assembler "memcpy@PLT" } } */
diff --git a/gcc/testsuite/gcc.dg/vxworks/initpri1.c b/gcc/testsuite/gcc.dg/vxworks/initpri1.c
new file mode 100644
index 00000000000..555bffe738d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vxworks/initpri1.c
@@ -0,0 +1,19 @@
+/* On VxWorks, in RTP mode, constructors and destructors go in named
+ sections. The section names must include the initialization
+ priority, even for constructors and destructors with the default
+ priority. */
+
+/* The selector below excludes VxWorks AE because AE does not support
+ RTP mode. */
+/* { dg-do compile { target { *-*-vxworks* && { ! *-*-vxworksae* } } } } */
+/* { dg-options "-mrtp" } */
+/* { dg-final { scan-assembler "ctors\.00000" } } */
+/* { dg-final { scan-assembler "dtors\.00000" } } */
+
+volatile int i;
+
+void c1 () __attribute__((constructor));
+void c1 () { ++i; }
+
+void d1 () __attribute__((destructor));
+void d1 () { --i; }
diff --git a/gcc/testsuite/gcc.dg/vxworks/initpri2.c b/gcc/testsuite/gcc.dg/vxworks/initpri2.c
new file mode 100644
index 00000000000..7f483efadb2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vxworks/initpri2.c
@@ -0,0 +1,15 @@
+/* On VxWorks, in kernel mode, there is no support for .ctors/.dtors.
+ Instead, initialization is handled by munch. */
+
+/* { dg-do compile { target vxworks_kernel } } */
+/* { dg-final { scan-assembler-not "\.ctors" } } */
+/* { dg-final { scan-assembler-not "\.dtors" } } */
+
+volatile int i;
+
+void c1 () __attribute__((constructor));
+void c1 () { ++i; }
+
+void d1 () __attribute__((destructor));
+void d1 () { --i; }
+
diff --git a/gcc/testsuite/gcc.dg/vxworks/vxworks.exp b/gcc/testsuite/gcc.dg/vxworks/vxworks.exp
new file mode 100644
index 00000000000..826bcf3f3a5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vxworks/vxworks.exp
@@ -0,0 +1,36 @@
+# Copyright (C) 1997 Free Software Foundation, Inc.
+
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+ set DEFAULT_CFLAGS " -ansi -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cSi\]]] \
+ "" $DEFAULT_CFLAGS
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.dg/wvla-1.c b/gcc/testsuite/gcc.dg/wvla-1.c
new file mode 100644
index 00000000000..c8f21078be9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-1.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c89 -Wvla" } */
+
+extern void
+func (int i, int array[i]); /* { dg-warning "variable length array 'array' is used" } */
diff --git a/gcc/testsuite/gcc.dg/wvla-2.c b/gcc/testsuite/gcc.dg/wvla-2.c
new file mode 100644
index 00000000000..d811a112f07
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-2.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -Wvla" } */
+
+extern void
+func (int i, int array[i]); /* { dg-warning "variable length array 'array' is used" } */
diff --git a/gcc/testsuite/gcc.dg/wvla-3.c b/gcc/testsuite/gcc.dg/wvla-3.c
new file mode 100644
index 00000000000..3d5d3aa5434
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-3.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -std=c89 -Wvla" } */
+
+extern void
+func (int i, int array[i]); /* { dg-error "error: ISO C90 forbids variable.* array 'array'" } */
diff --git a/gcc/testsuite/gcc.dg/wvla-4.c b/gcc/testsuite/gcc.dg/wvla-4.c
new file mode 100644
index 00000000000..8c15292edac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-4.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -std=c99 -Wvla" } */
+
+extern void
+func (int i, int array[i]); /* { dg-warning "variable length array 'array' is used" } */
diff --git a/gcc/testsuite/gcc.dg/wvla-5.c b/gcc/testsuite/gcc.dg/wvla-5.c
new file mode 100644
index 00000000000..919b8dc201b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-5.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -std=c89 -Wno-vla" } */
+
+extern void
+func (int i, int array[i]);
diff --git a/gcc/testsuite/gcc.dg/wvla-6.c b/gcc/testsuite/gcc.dg/wvla-6.c
new file mode 100644
index 00000000000..f21435b02a8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-6.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c89 -Wvla" } */
+
+extern void
+func (int i, int [i]); /* { dg-warning "variable length array is used" } */
diff --git a/gcc/testsuite/gcc.dg/wvla-7.c b/gcc/testsuite/gcc.dg/wvla-7.c
new file mode 100644
index 00000000000..bc113bfb05d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/wvla-7.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-pedantic-errors -std=c89 -Wvla" } */
+
+extern void
+func (int i, int [i]); /* { dg-error "error: ISO C90 forbids variable" } */
diff --git a/gcc/testsuite/gcc.target/i386/20000807-1.c b/gcc/testsuite/gcc.target/i386/20000807-1.c
index 360e3245989..70b0182b054 100644
--- a/gcc/testsuite/gcc.target/i386/20000807-1.c
+++ b/gcc/testsuite/gcc.target/i386/20000807-1.c
@@ -1,4 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-Os -fpic" } */
#include <string.h>
diff --git a/gcc/testsuite/gcc.target/i386/20000904-1.c b/gcc/testsuite/gcc.target/i386/20000904-1.c
index 31f937cab71..bf00d557d71 100644
--- a/gcc/testsuite/gcc.target/i386/20000904-1.c
+++ b/gcc/testsuite/gcc.target/i386/20000904-1.c
@@ -1,4 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O0 -fpic" } */
static struct {
diff --git a/gcc/testsuite/gcc.target/i386/20011119-1.c b/gcc/testsuite/gcc.target/i386/20011119-1.c
index 4a338570dda..dc724aa60c1 100644
--- a/gcc/testsuite/gcc.target/i386/20011119-1.c
+++ b/gcc/testsuite/gcc.target/i386/20011119-1.c
@@ -1,6 +1,7 @@
/* Test for reload failing to eliminate from argp to sp. */
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
/* { dg-skip-if "" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */
/* { dg-skip-if "PIC default" { "*-*-darwin*" } { "*" } { "" } } */
/* { dg-options "-O2 -fomit-frame-pointer" } */
diff --git a/gcc/testsuite/gcc.target/i386/990213-2.c b/gcc/testsuite/gcc.target/i386/990213-2.c
index d095e3723f9..899f3395de3 100644
--- a/gcc/testsuite/gcc.target/i386/990213-2.c
+++ b/gcc/testsuite/gcc.target/i386/990213-2.c
@@ -1,4 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-fPIC" } */
struct normal_encoding {};
diff --git a/gcc/testsuite/gcc.target/i386/990214-1.c b/gcc/testsuite/gcc.target/i386/990214-1.c
index b3cb519a471..d9e401ddb89 100644
--- a/gcc/testsuite/gcc.target/i386/990214-1.c
+++ b/gcc/testsuite/gcc.target/i386/990214-1.c
@@ -1,4 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-fPIC" } */
typedef int int64_t __attribute__ ((__mode__ ( __DI__ ))) ;
diff --git a/gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c b/gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c
new file mode 100644
index 00000000000..5999544aa32
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile { target x86_64-*-* } } */
+/* { dg-options "-O2 -mcx16" } */
+
+typedef int TItype __attribute__ ((mode (TI)));
+
+TItype m_128;
+
+void test(TItype x_128)
+{
+ m_128 = __sync_val_compare_and_swap (&m_128, x_128, m_128);
+}
+
+/* { dg-final { scan-assembler "cmpxchg16b" } } */
diff --git a/gcc/testsuite/gcc.target/i386/compress-float-387-pic.c b/gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
index 0673f5d1c8e..bae12ff1710 100644
--- a/gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
+++ b/gcc/testsuite/gcc.target/i386/compress-float-387-pic.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target i?86*-*-* } } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -march=pentium4 -mtune=prescott -mfpmath=387 -fpic" } */
double foo (double x) {
return x + 1.75;
diff --git a/gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c b/gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c
index 52cf4637716..4999d207ac9 100644
--- a/gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c
+++ b/gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target i?86*-*-* } } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -march=pentium4 -mtune=prescott -mfpmath=sse -fpic" } */
double foo (double x) {
return x + 1.75;
diff --git a/gcc/testsuite/gcc.target/i386/pic-1.c b/gcc/testsuite/gcc.target/i386/pic-1.c
index 7762230c2f6..66a18b099e6 100644
--- a/gcc/testsuite/gcc.target/i386/pic-1.c
+++ b/gcc/testsuite/gcc.target/i386/pic-1.c
@@ -1,6 +1,7 @@
/* PR target/8340 */
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-fPIC" } */
int foo ()
diff --git a/gcc/testsuite/gcc.target/i386/pr21518.c b/gcc/testsuite/gcc.target/i386/pr21518.c
index f2ac666071e..b42d9c9f0b3 100644
--- a/gcc/testsuite/gcc.target/i386/pr21518.c
+++ b/gcc/testsuite/gcc.target/i386/pr21518.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fPIC -fno-tree-pre" } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
extern void __attribute__ ((regparm (3)))
drawPointsLines (char type, int first, int *dd);
diff --git a/gcc/testsuite/gcc.target/i386/pr23098.c b/gcc/testsuite/gcc.target/i386/pr23098.c
index 3ff4b6435cc..0f837d242b8 100644
--- a/gcc/testsuite/gcc.target/i386/pr23098.c
+++ b/gcc/testsuite/gcc.target/i386/pr23098.c
@@ -3,6 +3,7 @@
/* { dg-options "-O2 -fPIC" } */
/* { dg-final { scan-assembler-not "\.LC\[0-9\]" } } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target fpic } */
double foo (float);
diff --git a/gcc/testsuite/gcc.target/i386/pr23943.c b/gcc/testsuite/gcc.target/i386/pr23943.c
index 5e4ad9b2112..576cd61c1f9 100644
--- a/gcc/testsuite/gcc.target/i386/pr23943.c
+++ b/gcc/testsuite/gcc.target/i386/pr23943.c
@@ -1,6 +1,7 @@
/* This used to ICE in side_effects_p, due to a problem in cse.c.
Origin: marcus at jet dot franken dot de. */
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -fPIC" } */
typedef long unsigned int size_t;
diff --git a/gcc/testsuite/gcc.target/i386/pr30848.c b/gcc/testsuite/gcc.target/i386/pr30848.c
new file mode 100644
index 00000000000..2a92851516c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr30848.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+void foo(double d)
+{
+ __asm__ ("" : "=u" (d)); /* { dg-error "output regs" } */
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr30970.c b/gcc/testsuite/gcc.target/i386/pr30970.c
new file mode 100644
index 00000000000..5ee7cb368d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr30970.c
@@ -0,0 +1,15 @@
+/* { dg-do compile { target i?86-*-* x86_64-*-* } }
+/* { dg-options "-msse2 -O2 -ftree-vectorize" } */
+
+#define N 256
+int b[N];
+
+void test()
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ b[i] = 0;
+}
+
+/* { dg-final { scan-assembler-times "pxor" 1 } } */
diff --git a/gcc/testsuite/gcc.target/m68k/crash1.c b/gcc/testsuite/gcc.target/m68k/crash1.c
new file mode 100644
index 00000000000..fdd737ab238
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/crash1.c
@@ -0,0 +1,42 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -fomit-frame-pointer" } */
+
+/* Caused an ICE because of forgotten auto increment. */
+
+register void *current __asm__("%a2");
+
+struct kernel_stat
+{
+ long long user;
+ long long nice;
+ long long system;
+ long long idle;
+ long long steal;
+ unsigned irqs[256];
+};
+extern struct kernel_stat per_cpu__kstat;
+
+void show_stat(void)
+{
+ int i;
+ long long user, nice, system, idle, steal;
+ long long sum = 0;
+
+ user = nice = system = idle = steal = 0;
+ for (i = 0; i < 1; i++)
+ {
+ int j;
+ user = user + per_cpu__kstat.user;
+ nice = nice + per_cpu__kstat.nice;
+ system = system + per_cpu__kstat.system;
+ idle = idle + per_cpu__kstat.idle;
+ steal = steal + per_cpu__kstat.steal;
+
+ for (j = 0 ; j < 256 ; j++)
+ sum += per_cpu__kstat.irqs[j];
+ }
+ seq_printf(user, nice, system, idle, steal);
+ seq_printf(sum);
+ for (i = 0; i < 256; i++)
+ seq_printf (i);
+}
diff --git a/gcc/testsuite/gcc.target/m68k/m68k.exp b/gcc/testsuite/gcc.target/m68k/m68k.exp
new file mode 100644
index 00000000000..9398d109cc6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/m68k.exp
@@ -0,0 +1,41 @@
+# Copyright (C) 1997, 2004, 2006 Free Software Foundation, Inc.
+
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an m68k target.
+if ![istarget m68k*-*-*] then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+ set DEFAULT_CFLAGS " -ansi -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+ "" $DEFAULT_CFLAGS
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.target/mips/dspr2-MULT.c b/gcc/testsuite/gcc.target/mips/dspr2-MULT.c
new file mode 100644
index 00000000000..546e349a0f2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/dspr2-MULT.c
@@ -0,0 +1,21 @@
+/* Test MIPS32 DSP REV 2 MULT instruction */
+/* { dg-do compile } */
+/* { dg-mips-options "-march=mips32r2 -mdspr2 -O2 -ffixed-hi -ffixed-lo" } */
+
+/* { dg-final { scan-assembler "\tmult\t" } } */
+/* { dg-final { scan-assembler "ac1" } } */
+/* { dg-final { scan-assembler "ac2" } } */
+/* { dg-final { scan-assembler "ac3" } } */
+
+typedef long long a64;
+a64 a[4];
+int b[4], c[4];
+
+void test ()
+{
+ a[0] = (a64) b[0] * c[0];
+ a[1] = (a64) b[1] * c[1];
+ a[2] = (a64) b[2] * c[2];
+ a[3] = (a64) b[3] * c[3];
+}
+
diff --git a/gcc/testsuite/gcc.target/mips/dspr2-MULTU.c b/gcc/testsuite/gcc.target/mips/dspr2-MULTU.c
new file mode 100644
index 00000000000..3226151c89d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/dspr2-MULTU.c
@@ -0,0 +1,21 @@
+/* Test MIPS32 DSP REV 2 MULTU instruction */
+/* { dg-do compile } */
+/* { dg-mips-options "-march=mips32r2 -mdspr2 -O2 -ffixed-hi -ffixed-lo" } */
+
+/* { dg-final { scan-assembler "\tmultu\t" } } */
+/* { dg-final { scan-assembler "ac1" } } */
+/* { dg-final { scan-assembler "ac2" } } */
+/* { dg-final { scan-assembler "ac3" } } */
+
+typedef long long a64;
+a64 a[4];
+unsigned int b[4], c[4];
+
+void test ()
+{
+ a[0] = (a64) b[0] * c[0];
+ a[1] = (a64) b[1] * c[1];
+ a[2] = (a64) b[2] * c[2];
+ a[3] = (a64) b[3] * c[3];
+}
+
diff --git a/gcc/testsuite/gcc.target/mips/mips32-dsp-run.c b/gcc/testsuite/gcc.target/mips/mips32-dsp-run.c
new file mode 100644
index 00000000000..a29d756e791
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/mips32-dsp-run.c
@@ -0,0 +1,1001 @@
+/* Test MIPS32 DSP instructions */
+/* { dg-do run { target mipsisa32r2*-*-* } } */
+/* { dg-mips-options "-march=mips32r2 -mdsp -O2" } */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+typedef signed char v4i8 __attribute__ ((vector_size(4)));
+typedef short v2q15 __attribute__ ((vector_size(4)));
+
+typedef int q31;
+typedef int i32;
+typedef long long a64;
+
+void test_MIPS_DSP (void);
+
+char array[100];
+int little_endian;
+
+int main ()
+{
+ int i;
+
+ union { long long ll; int i[2]; } endianness_test;
+ endianness_test.ll = 1;
+ little_endian = endianness_test.i[0];
+
+ for (i = 0; i < 100; i++)
+ array[i] = i;
+
+ test_MIPS_DSP ();
+
+ exit (0);
+}
+
+v2q15 add_v2q15 (v2q15 a, v2q15 b)
+{
+ return __builtin_mips_addq_ph (a, b);
+}
+
+v4i8 add_v4i8 (v4i8 a, v4i8 b)
+{
+ return __builtin_mips_addu_qb (a, b);
+}
+
+v2q15 sub_v2q15 (v2q15 a, v2q15 b)
+{
+ return __builtin_mips_subq_ph (a, b);
+}
+
+v4i8 sub_v4i8 (v4i8 a, v4i8 b)
+{
+ return __builtin_mips_subu_qb (a, b);
+}
+
+void test_MIPS_DSP ()
+{
+ v4i8 v4i8_a,v4i8_b,v4i8_c,v4i8_r,v4i8_s;
+ v2q15 v2q15_a,v2q15_b,v2q15_c,v2q15_r,v2q15_s;
+ q31 q31_a,q31_b,q31_c,q31_r,q31_s;
+ i32 i32_a,i32_b,i32_c,i32_r,i32_s;
+ a64 a64_a,a64_b,a64_c,a64_r,a64_s;
+
+ void *ptr_a;
+ int r,s;
+ long long lr,ls;
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ v2q15_s = (v2q15) {0x81bd, 0x6789};
+ v2q15_r = add_v2q15 (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ v2q15_s = (v2q15) {0x7fff, 0x6789};
+ v2q15_r = __builtin_mips_addq_s_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x70000000;
+ q31_b = 0x71234567;
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_addq_s_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
+ v4i8_s = (v4i8) {0xf1, 0xbd, 0x67, 0x89};
+ v4i8_r = add_v4i8 (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
+ v4i8_s = (v4i8) {0xff, 0xbd, 0x67, 0x89};
+ v4i8_r = __builtin_mips_addu_s_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ v2q15_s = (v2q15) {0xa2ab, 0x4567};
+ v2q15_r = sub_v2q15 (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x8000, 0x5678};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ v2q15_s = (v2q15) {0x8000, 0x4567};
+ v2q15_r = __builtin_mips_subq_s_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x70000000;
+ q31_b = 0x71234567;
+ q31_s = 0xfedcba99;
+ q31_r = __builtin_mips_subq_s_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
+ v4i8_s = (v4i8) {0xf3, 0xab, 0x45, 0x67};
+ v4i8_r = sub_v4i8 (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0xff, 0x89, 0x11, 0x11};
+ v4i8_s = (v4i8) {0x0, 0x0, 0x45, 0x67};
+ v4i8_r = __builtin_mips_subu_s_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0xf5678900;
+ i32_b = 0x7abcdef0;
+ i32_s = 0x702467f0;
+ i32_r = __builtin_mips_addsc (i32_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x75678900;
+ i32_b = 0x7abcdef0;
+ i32_s = 0xf02467f1;
+ i32_r = __builtin_mips_addwc (i32_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0;
+ i32_b = 0x00000901;
+ i32_s = 9;
+ i32_r = __builtin_mips_modsub (i32_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ i32_s = 0x1f4;
+ i32_r = __builtin_mips_raddu_w_qb (v4i8_a);
+ if (i32_r != i32_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x8000, 0x8134};
+ v2q15_s = (v2q15) {0x7fff, 0x7ecc};
+ v2q15_r = __builtin_mips_absq_s_ph (v2q15_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = (q31) 0x80000000;
+ q31_s = (q31) 0x7fffffff;
+ q31_r = __builtin_mips_absq_s_w (q31_a);
+ if (q31_r != q31_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x9999, 0x5612};
+ v2q15_b = (v2q15) {0x5612, 0x3333};
+ if (little_endian)
+ v4i8_s = (v4i8) {0x56, 0x33, 0x99, 0x56};
+ else
+ v4i8_s = (v4i8) {0x99, 0x56, 0x56, 0x33};
+ v4i8_r = __builtin_mips_precrq_qb_ph (v2q15_a, v2q15_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x12348678;
+ q31_b = 0x44445555;
+ if (little_endian)
+ v2q15_s = (v2q15) {0x4444, 0x1234};
+ else
+ v2q15_s = (v2q15) {0x1234, 0x4444};
+ v2q15_r = __builtin_mips_precrq_ph_w (q31_a, q31_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x12348678;
+ q31_b = 0x44445555;
+ if (little_endian)
+ v2q15_s = (v2q15) {0x4444, 0x1235};
+ else
+ v2q15_s = (v2q15) {0x1235, 0x4444};
+ v2q15_r = __builtin_mips_precrq_rs_ph_w (q31_a, q31_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x9999, 0x5612};
+ v2q15_b = (v2q15) {0x5612, 0x3333};
+ if (little_endian)
+ v4i8_s = (v4i8) {0xac, 0x66, 0x00, 0xac};
+ else
+ v4i8_s = (v4i8) {0x00, 0xac, 0xac, 0x66};
+ v4i8_r = __builtin_mips_precrqu_s_qb_ph (v2q15_a, v2q15_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3589, 0x4444};
+ if (little_endian)
+ q31_s = 0x44440000;
+ else
+ q31_s = 0x35890000;
+ q31_r = __builtin_mips_preceq_w_phl (v2q15_a);
+ if (q31_r != q31_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3589, 0x4444};
+ if (little_endian)
+ q31_s = 0x35890000;
+ else
+ q31_s = 0x44440000;
+ q31_r = __builtin_mips_preceq_w_phr (v2q15_a);
+ if (q31_r != q31_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x2b00, 0x1980};
+ else
+ v2q15_s = (v2q15) {0x0900, 0x2b00};
+ v2q15_r = __builtin_mips_precequ_ph_qbl (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x0900, 0x2b00};
+ else
+ v2q15_s = (v2q15) {0x2b00, 0x1980};
+ v2q15_r = __builtin_mips_precequ_ph_qbr (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x2b00, 0x1980};
+ else
+ v2q15_s = (v2q15) {0x0900, 0x2b00};
+ v2q15_r = __builtin_mips_precequ_ph_qbla (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x0900, 0x2b00};
+ else
+ v2q15_s = (v2q15) {0x2b00, 0x1980};
+ v2q15_r = __builtin_mips_precequ_ph_qbra (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x56, 0x33};
+ else
+ v2q15_s = (v2q15) {0x12, 0x56};
+ v2q15_r = __builtin_mips_preceu_ph_qbl (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x12, 0x56};
+ else
+ v2q15_s = (v2q15) {0x56, 0x33};
+ v2q15_r = __builtin_mips_preceu_ph_qbr (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x99, 0x33};
+ else
+ v2q15_s = (v2q15) {0x12, 0x56};
+ v2q15_r = __builtin_mips_preceu_ph_qbla (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x12, 0x56};
+ else
+ v2q15_s = (v2q15) {0x99, 0x33};
+ v2q15_r = __builtin_mips_preceu_ph_qbra (v4i8_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_s = (v4i8) {0xc8, 0xd0, 0x58, 0xe0};
+ v4i8_r = __builtin_mips_shll_qb (v4i8_a, 2);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ i32_b = 1;
+ v4i8_s = (v4i8) {0xe4, 0x68, 0xac, 0xf0};
+ v4i8_r = __builtin_mips_shll_qb (v4i8_a, i32_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_s = (v2q15) {0x48d0, 0x59e0};
+ v2q15_r = __builtin_mips_shll_ph (v2q15_a, 2);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ i32_b = 1;
+ v2q15_s = (v2q15) {0x2468, 0xacf0};
+ v2q15_r = __builtin_mips_shll_ph (v2q15_a, i32_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_s = (v2q15) {0x48d0, 0x7fff};
+ v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, 2);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ i32_b = 1;
+ v2q15_s = (v2q15) {0x2468, 0x7fff};
+ v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, i32_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x70000000;
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_shll_s_w (q31_a, 2);
+ if (q31_r != q31_s)
+ abort ();
+
+ q31_a = 0x70000000;
+ i32_b = 1;
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_shll_s_w (q31_a, i32_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ v4i8_s = (v4i8) {0x3c, 0xd, 0x15, 0x1e};
+ v4i8_r = __builtin_mips_shrl_qb (v4i8_a, 2);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
+ i32_b = 1;
+ v4i8_s = (v4i8) {0x79, 0x1a, 0x2b, 0x3c};
+ v4i8_r = __builtin_mips_shrl_qb (v4i8_a, i32_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_s = (v2q15) {0x48d, 0x159e};
+ v2q15_r = __builtin_mips_shra_ph (v2q15_a, 2);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ i32_b = 1;
+ v2q15_s = (v2q15) {0x91a, 0x2b3c};
+ v2q15_r = __builtin_mips_shra_ph (v2q15_a, i32_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_s = (v2q15) {0x48d, 0x159e};
+ v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, 2);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ i32_b = 3;
+ v2q15_s = (v2q15) {0x247, 0xacf};
+ v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, i32_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x70000000;
+ q31_s = 0x1c000000;
+ q31_r = __builtin_mips_shra_r_w (q31_a, 2);
+ if (q31_r != q31_s)
+ abort ();
+
+ q31_a = 0x70000004;
+ i32_b = 3;
+ q31_s = 0x0e000001;
+ q31_r = __builtin_mips_shra_r_w (q31_a, i32_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ if (little_endian)
+ v2q15_s = (v2q15) {0xffff, 0x4444};
+ else
+ v2q15_s = (v2q15) {0x6f89, 0x2222};
+ v2q15_r = __builtin_mips_muleu_s_ph_qbl (v4i8_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x6f89, 0x2222};
+ else
+ v2q15_s = (v2q15) {0xffff, 0x4444};
+ v2q15_r = __builtin_mips_muleu_s_ph_qbr (v4i8_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x6f89, 0x1111};
+ v2q15_s = (v2q15) {0x0fdd, 0x0b87};
+ v2q15_r = __builtin_mips_mulq_rs_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x8000, 0x8000};
+ v2q15_b = (v2q15) {0x8000, 0x8000};
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_muleq_s_w_phl (v2q15_a, v2q15_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x8000, 0x8000};
+ v2q15_b = (v2q15) {0x8000, 0x8000};
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_muleq_s_w_phr (v2q15_a, v2q15_b);
+ if (q31_r != q31_s)
+ abort ();
+
+#ifndef __mips64
+ a64_a = 0x22221111;
+ v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
+ if (little_endian)
+ a64_s = 0x22222f27;
+ else
+ a64_s = 0x222238d9;
+ a64_r = __builtin_mips_dpau_h_qbl (a64_a, v4i8_b, v4i8_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x22221111;
+ v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
+ if (little_endian)
+ a64_s = 0x222238d9;
+ else
+ a64_s = 0x22222f27;
+ a64_r = __builtin_mips_dpau_h_qbr (a64_a, v4i8_b, v4i8_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x22221111;
+ v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
+ if (little_endian)
+ a64_s = 0x2221f2fb;
+ else
+ a64_s = 0x2221e949;
+ a64_r = __builtin_mips_dpsu_h_qbl (a64_a, v4i8_b, v4i8_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x22221111;
+ v4i8_b = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_c = (v4i8) {0xaa, 0x89, 0x11, 0x34};
+ if (little_endian)
+ a64_s = 0x2221e949;
+ else
+ a64_s = 0x2221f2fb;
+ a64_r = __builtin_mips_dpsu_h_qbr (a64_a, v4i8_b, v4i8_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x5678};
+ v2q15_c = (v2q15) {0x8000, 0x1111};
+ a64_s = 0x8b877d00;
+ a64_r = __builtin_mips_dpaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x5678};
+ v2q15_c = (v2q15) {0x8000, 0x1111};
+ a64_s = 0xffffffff7478a522LL;
+ a64_r = __builtin_mips_dpsq_s_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x5678};
+ v2q15_c = (v2q15) {0x8000, 0x1111};
+ if (little_endian)
+ a64_s = 0xffffffff8b877d02LL;
+ else
+ a64_s = 0x7478a520;
+ a64_r = __builtin_mips_mulsaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ q31_b = 0x80000000;
+ q31_c = 0x80000000;
+ a64_s = 0x7fffffffffffffffLL;
+ a64_r = __builtin_mips_dpaq_sa_l_w (a64_a, q31_b, q31_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ q31_b = 0x80000000;
+ q31_c = 0x80000000;
+ a64_s = 0x8000000000001112LL;
+ a64_r = __builtin_mips_dpsq_sa_l_w (a64_a, q31_b, q31_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x1};
+ v2q15_c = (v2q15) {0x8000, 0x2};
+ if (little_endian)
+ a64_s = 0x1115;
+ else
+ a64_s = 0x80001110;
+ a64_r = __builtin_mips_maq_s_w_phl (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x1};
+ v2q15_c = (v2q15) {0x8000, 0x2};
+ if (little_endian)
+ a64_s = 0x80001110;
+ else
+ a64_s = 0x1115;
+ a64_r = __builtin_mips_maq_s_w_phr (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x1};
+ v2q15_c = (v2q15) {0x8000, 0x2};
+ if (little_endian)
+ a64_s = 0x1115;
+ else
+ a64_s = 0x7fffffff;
+ a64_r = __builtin_mips_maq_sa_w_phl (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x00001111;
+ v2q15_b = (v2q15) {0x8000, 0x1};
+ v2q15_c = (v2q15) {0x8000, 0x2};
+ if (little_endian)
+ a64_s = 0x7fffffff;
+ else
+ a64_s = 0x1115;
+ a64_r = __builtin_mips_maq_sa_w_phr (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+ i32_a = 0x12345678;
+ i32_s = 0x00001e6a;
+ i32_r = __builtin_mips_bitrev (i32_a);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x00000208; // pos is 8, size is 4
+ __builtin_mips_wrdsp (i32_a, 31);
+ i32_a = 0x12345678;
+ i32_b = 0x87654321;
+ i32_s = 0x12345178;
+ i32_r = __builtin_mips_insv (i32_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_s = (v4i8) {1, 1, 1, 1};
+ v4i8_r = __builtin_mips_repl_qb (1);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 99;
+ v4i8_s = (v4i8) {99, 99, 99, 99};
+ v4i8_r = __builtin_mips_repl_qb (i32_a);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_s = (v2q15) {30, 30};
+ v2q15_r = __builtin_mips_repl_ph (30);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x5612;
+ v2q15_s = (v2q15) {0x5612, 0x5612};
+ v2q15_r = __builtin_mips_repl_ph (i32_a);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x03000000;
+ else
+ i32_s = 0x0c000000;
+ __builtin_mips_cmpu_eq_qb (v4i8_a, v4i8_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x04000000;
+ else
+ i32_s = 0x02000000;
+ __builtin_mips_cmpu_lt_qb (v4i8_a, v4i8_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x07000000;
+ else
+ i32_s = 0x0e000000;
+ __builtin_mips_cmpu_le_qb (v4i8_a, v4i8_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x3;
+ else
+ i32_s = 0xc;
+ i32_r=__builtin_mips_cmpgu_eq_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x4;
+ else
+ i32_s = 0x2;
+ i32_r = __builtin_mips_cmpgu_lt_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x12, 0x34, 0x78, 0x56};
+ if (little_endian)
+ i32_s = 0x7;
+ else
+ i32_s = 0xe;
+ i32_r = __builtin_mips_cmpgu_le_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ __builtin_mips_wrdsp (0,31); // Clear all condition code bits.
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x1234, 0x7856};
+ if (little_endian)
+ i32_s = 0x01000000;
+ else
+ i32_s = 0x02000000;
+ __builtin_mips_cmp_eq_ph (v2q15_a, v2q15_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x1234, 0x7856};
+ if (little_endian)
+ i32_s = 0x02000000;
+ else
+ i32_s = 0x01000000;
+ __builtin_mips_cmp_lt_ph (v2q15_a, v2q15_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x1234, 0x7856};
+ i32_s = 0x03000000;
+ __builtin_mips_cmp_le_ph (v2q15_a, v2q15_b);
+ i32_r = __builtin_mips_rddsp (16);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x0a000000; // cc: 0000 1010
+ __builtin_mips_wrdsp (i32_a, 31);
+ v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
+ v4i8_b = (v4i8) {0x21, 0x43, 0x65, 0x87};
+ if (little_endian)
+ v4i8_s = (v4i8) {0x21, 0x34, 0x65, 0x78};
+ else
+ v4i8_s = (v4i8) {0x12, 0x43, 0x56, 0x87};
+ v4i8_r = __builtin_mips_pick_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x02000000; // cc: 0000 0010
+ __builtin_mips_wrdsp (i32_a, 31);
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x2143, 0x6587};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x2143, 0x5678};
+ else
+ v2q15_s = (v2q15) {0x1234, 0x6587};
+ v2q15_r = __builtin_mips_pick_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x1234, 0x5678};
+ v2q15_b = (v2q15) {0x1234, 0x7856};
+ if (little_endian)
+ v2q15_s = (v2q15) {0x7856, 0x1234};
+ else
+ v2q15_s = (v2q15) {0x5678, 0x1234};
+ v2q15_r = __builtin_mips_packrl_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+#ifndef __mips64
+ a64_a = 0x1234567887654321LL;
+ i32_s = 0x88765432;
+ i32_r = __builtin_mips_extr_w (a64_a, 4);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x1234567887658321LL;
+ i32_s = 0x56788766;
+ i32_r = __builtin_mips_extr_r_w (a64_a, 16);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x12345677fffffff8LL;
+ i32_s = 0x7fffffff;
+ i32_r = __builtin_mips_extr_rs_w (a64_a, 4);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x1234567887658321LL;
+ i32_s = 0x7fff;
+ i32_r = __builtin_mips_extr_s_h (a64_a, 16);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x0000007887658321LL;
+ i32_b = 24;
+ i32_s = 0x7887;
+ i32_r = __builtin_mips_extr_s_h (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x1234567887654321LL;
+ i32_b = 4;
+ i32_s = 0x88765432;
+ i32_r = __builtin_mips_extr_w (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x1234567887658321LL;
+ i32_b = 16;
+ i32_s = 0x56788766;
+ i32_r = __builtin_mips_extr_r_w (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x12345677fffffff8LL;
+ i32_b = 4;
+ i32_s = 0x7fffffff;
+ i32_r = __builtin_mips_extr_rs_w (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x0000021f; // pos is 31
+ __builtin_mips_wrdsp (i32_a, 31);
+ a64_a = 0x1234567887654321LL;
+ i32_s = 8;
+ i32_r = __builtin_mips_extp (a64_a, 3); // extract 4 bits
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x0000021f; // pos is 31
+ __builtin_mips_wrdsp (i32_a, 31);
+ a64_a = 0x1234567887654321LL;
+ i32_b = 7; // size is 8. NOTE!! we should use 7
+ i32_s = 0x87;
+ i32_r = __builtin_mips_extp (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x0000021f; // pos is 31
+ __builtin_mips_wrdsp (i32_a, 31);
+ a64_a = 0x1234567887654321LL;
+ i32_s = 8;
+ i32_r = __builtin_mips_extpdp (a64_a, 3); // extract 4 bits
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_s = 0x0000021b; // pos is 27
+ i32_r = __builtin_mips_rddsp (31);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x0000021f; // pos is 31
+ __builtin_mips_wrdsp (i32_a, 31);
+ a64_a = 0x1234567887654321LL;
+ i32_b = 11; // size is 12. NOTE!!! We should use 11
+ i32_s = 0x876;
+ i32_r = __builtin_mips_extpdp (a64_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_s = 0x00000213; // pos is 19
+ i32_r = __builtin_mips_rddsp (31);
+ if (i32_r != i32_s)
+ abort ();
+
+ a64_a = 0x1234567887654321LL;
+ a64_s = 0x0012345678876543LL;
+ a64_r = __builtin_mips_shilo (a64_a, 8);
+ if (a64_r != a64_s)
+ abort ();
+
+ a64_a = 0x1234567887654321LL;
+ i32_b = -16;
+ a64_s = 0x5678876543210000LL;
+ a64_r = __builtin_mips_shilo (a64_a, i32_b);
+ if (a64_r != a64_s)
+ abort ();
+
+ i32_a = 0x0;
+ __builtin_mips_wrdsp (i32_a, 31);
+ a64_a = 0x1234567887654321LL;
+ i32_b = 0x11112222;
+ a64_s = 0x8765432111112222LL;
+ a64_r = __builtin_mips_mthlip (a64_a, i32_b);
+ if (a64_r != a64_s)
+ abort ();
+ i32_s = 32;
+ i32_r = __builtin_mips_rddsp (31);
+ if (i32_r != i32_s)
+ abort ();
+#endif
+
+ i32_a = 0x1357a468;
+ __builtin_mips_wrdsp (i32_a, 63);
+ i32_s = 0x03572428;
+ i32_r = __builtin_mips_rddsp (63);
+ if (i32_r != i32_s)
+ abort ();
+
+ ptr_a = &array;
+ i32_b = 37;
+ i32_s = 37;
+ i32_r = __builtin_mips_lbux (ptr_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ ptr_a = &array;
+ i32_b = 38;
+ if (little_endian)
+ i32_s = 0x2726;
+ else
+ i32_s = 0x2627;
+ i32_r = __builtin_mips_lhx (ptr_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ ptr_a = &array;
+ i32_b = 40;
+ if (little_endian)
+ i32_s = 0x2b2a2928;
+ else
+ i32_s = 0x28292a2b;
+ i32_r = __builtin_mips_lwx (ptr_a, i32_b);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x00000220; // pos is 32, size is 4
+ __builtin_mips_wrdsp (i32_a, 63);
+ i32_s = 1;
+ i32_r = __builtin_mips_bposge32 ();
+ if (i32_r != i32_s)
+ abort ();
+}
+
diff --git a/gcc/testsuite/gcc.target/mips/mips32-dsp.c b/gcc/testsuite/gcc.target/mips/mips32-dsp.c
index 0d015362dd2..c65f7b92602 100644
--- a/gcc/testsuite/gcc.target/mips/mips32-dsp.c
+++ b/gcc/testsuite/gcc.target/mips/mips32-dsp.c
@@ -96,19 +96,19 @@
#include <stdlib.h>
#include <stdio.h>
-typedef char v4i8 __attribute__ ((vector_size(4)));
+typedef signed char v4i8 __attribute__ ((vector_size(4)));
typedef short v2q15 __attribute__ ((vector_size(4)));
typedef int q31;
typedef int i32;
typedef long long a64;
-void test_MIPS_DSP();
+void test_MIPS_DSP (void);
char array[100];
int little_endian;
-int main()
+int main ()
{
int i;
@@ -119,7 +119,7 @@ int main()
for (i = 0; i < 100; i++)
array[i] = i;
- test_MIPS_DSP();
+ test_MIPS_DSP ();
exit (0);
}
@@ -144,7 +144,7 @@ v4i8 sub_v4i8 (v4i8 a, v4i8 b)
return __builtin_mips_subu_qb (a, b);
}
-void test_MIPS_DSP()
+void test_MIPS_DSP ()
{
v4i8 v4i8_a,v4i8_b,v4i8_c,v4i8_r,v4i8_s;
v2q15 v2q15_a,v2q15_b,v2q15_c,v2q15_r,v2q15_s;
@@ -162,7 +162,7 @@ void test_MIPS_DSP()
v2q15_r = add_v2q15 (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -171,14 +171,14 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_addq_s_ph (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x70000000;
q31_b = 0x71234567;
q31_s = 0x7fffffff;
q31_r = __builtin_mips_addq_s_w (q31_a, q31_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -187,7 +187,7 @@ void test_MIPS_DSP()
v4i8_r = add_v4i8 (v4i8_a, v4i8_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -196,7 +196,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_addu_s_qb (v4i8_a, v4i8_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -205,7 +205,7 @@ void test_MIPS_DSP()
v2q15_r = sub_v2q15 (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x8000, 0x5678};
@@ -214,14 +214,14 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_subq_s_ph (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x70000000;
q31_b = 0x71234567;
q31_s = 0xfedcba99;
q31_r = __builtin_mips_subq_s_w (q31_a, q31_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -230,7 +230,7 @@ void test_MIPS_DSP()
v4i8_r = sub_v4i8 (v4i8_a, v4i8_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -239,34 +239,34 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_subu_s_qb (v4i8_a, v4i8_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
i32_a = 0xf5678900;
i32_b = 0x7abcdef0;
i32_s = 0x702467f0;
i32_r = __builtin_mips_addsc (i32_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x75678900;
i32_b = 0x7abcdef0;
i32_s = 0xf02467f1;
i32_r = __builtin_mips_addwc (i32_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0;
i32_b = 0x00000901;
i32_s = 9;
i32_r = __builtin_mips_modsub (i32_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
i32_s = 0x1f4;
i32_r = __builtin_mips_raddu_w_qb (v4i8_a);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
v2q15_a = (v2q15) {0x8000, 0x8134};
@@ -274,13 +274,13 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_absq_s_ph (v2q15_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = (q31) 0x80000000;
q31_s = (q31) 0x7fffffff;
q31_r = __builtin_mips_absq_s_w (q31_a);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v2q15_a = (v2q15) {0x9999, 0x5612};
@@ -292,7 +292,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_precrq_qb_ph (v2q15_a, v2q15_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x12348678;
@@ -304,7 +304,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precrq_ph_w (q31_a, q31_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x12348678;
@@ -316,7 +316,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precrq_rs_ph_w (q31_a, q31_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x9999, 0x5612};
@@ -328,7 +328,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_precrqu_s_qb_ph (v2q15_a, v2q15_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x3589, 0x4444};
@@ -337,7 +337,7 @@ void test_MIPS_DSP()
else
q31_s = 0x35890000;
q31_r = __builtin_mips_preceq_w_phl (v2q15_a);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v2q15_a = (v2q15) {0x3589, 0x4444};
@@ -346,7 +346,7 @@ void test_MIPS_DSP()
else
q31_s = 0x44440000;
q31_r = __builtin_mips_preceq_w_phr (v2q15_a);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -357,7 +357,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precequ_ph_qbl (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -368,7 +368,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precequ_ph_qbr (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -379,7 +379,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precequ_ph_qbla (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -390,7 +390,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_precequ_ph_qbra (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -401,7 +401,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_preceu_ph_qbl (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x56, 0x56, 0x33};
@@ -412,7 +412,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_preceu_ph_qbr (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
@@ -423,7 +423,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_preceu_ph_qbla (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x99, 0x56, 0x33};
@@ -434,7 +434,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_preceu_ph_qbra (v4i8_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -442,7 +442,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_shll_qb (v4i8_a, 2);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -451,7 +451,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_shll_qb (v4i8_a, i32_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -459,7 +459,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shll_ph (v2q15_a, 2);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -468,7 +468,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shll_ph (v2q15_a, i32_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -476,7 +476,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, 2);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -485,20 +485,20 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shll_s_ph (v2q15_a, i32_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x70000000;
q31_s = 0x7fffffff;
q31_r = __builtin_mips_shll_s_w (q31_a, 2);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
q31_a = 0x70000000;
i32_b = 1;
q31_s = 0x7fffffff;
q31_r = __builtin_mips_shll_s_w (q31_a, i32_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -506,7 +506,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_shrl_qb (v4i8_a, 2);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0xf2, 0x34, 0x56, 0x78};
@@ -515,7 +515,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_shrl_qb (v4i8_a, i32_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -523,7 +523,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shra_ph (v2q15_a, 2);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -532,7 +532,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shra_ph (v2q15_a, i32_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -540,7 +540,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, 2);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -549,20 +549,20 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_shra_r_ph (v2q15_a, i32_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
q31_a = 0x70000000;
q31_s = 0x1c000000;
q31_r = __builtin_mips_shra_r_w (q31_a, 2);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
q31_a = 0x70000004;
i32_b = 3;
q31_s = 0x0e000001;
q31_r = __builtin_mips_shra_r_w (q31_a, i32_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
@@ -574,7 +574,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_muleu_s_ph_qbl (v4i8_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x1, 0x2, 0x3, 0x4};
@@ -586,7 +586,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_muleu_s_ph_qbr (v4i8_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -595,21 +595,21 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_mulq_rs_ph (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x8000, 0x8000};
v2q15_b = (v2q15) {0x8000, 0x8000};
q31_s = 0x7fffffff;
q31_r = __builtin_mips_muleq_s_w_phl (v2q15_a, v2q15_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
v2q15_a = (v2q15) {0x8000, 0x8000};
v2q15_b = (v2q15) {0x8000, 0x8000};
q31_s = 0x7fffffff;
q31_r = __builtin_mips_muleq_s_w_phr (v2q15_a, v2q15_b);
- if(q31_r != q31_s)
+ if (q31_r != q31_s)
abort ();
#ifndef __mips64
@@ -621,7 +621,7 @@ void test_MIPS_DSP()
else
a64_s = 0x222238d9;
a64_r = __builtin_mips_dpau_h_qbl (a64_a, v4i8_b, v4i8_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x22221111;
@@ -632,7 +632,7 @@ void test_MIPS_DSP()
else
a64_s = 0x22222f27;
a64_r = __builtin_mips_dpau_h_qbr (a64_a, v4i8_b, v4i8_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x22221111;
@@ -643,7 +643,7 @@ void test_MIPS_DSP()
else
a64_s = 0x2221e949;
a64_r = __builtin_mips_dpsu_h_qbl (a64_a, v4i8_b, v4i8_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x22221111;
@@ -654,7 +654,7 @@ void test_MIPS_DSP()
else
a64_s = 0x2221f2fb;
a64_r = __builtin_mips_dpsu_h_qbr (a64_a, v4i8_b, v4i8_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -662,7 +662,7 @@ void test_MIPS_DSP()
v2q15_c = (v2q15) {0x8000, 0x1111};
a64_s = 0x8b877d00;
a64_r = __builtin_mips_dpaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -670,7 +670,7 @@ void test_MIPS_DSP()
v2q15_c = (v2q15) {0x8000, 0x1111};
a64_s = 0xffffffff7478a522LL;
a64_r = __builtin_mips_dpsq_s_w_ph (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -681,7 +681,7 @@ void test_MIPS_DSP()
else
a64_s = 0x7478a520;
a64_r = __builtin_mips_mulsaq_s_w_ph (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -689,7 +689,7 @@ void test_MIPS_DSP()
q31_c = 0x80000000;
a64_s = 0x7fffffffffffffffLL;
a64_r = __builtin_mips_dpaq_sa_l_w (a64_a, q31_b, q31_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -697,7 +697,7 @@ void test_MIPS_DSP()
q31_c = 0x80000000;
a64_s = 0x8000000000001112LL;
a64_r = __builtin_mips_dpsq_sa_l_w (a64_a, q31_b, q31_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -708,7 +708,7 @@ void test_MIPS_DSP()
else
a64_s = 0x80001110;
a64_r = __builtin_mips_maq_s_w_phl (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -719,7 +719,7 @@ void test_MIPS_DSP()
else
a64_s = 0x1115;
a64_r = __builtin_mips_maq_s_w_phr (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -730,7 +730,7 @@ void test_MIPS_DSP()
else
a64_s = 0x7fffffff;
a64_r = __builtin_mips_maq_sa_w_phl (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x00001111;
@@ -741,14 +741,14 @@ void test_MIPS_DSP()
else
a64_s = 0x1115;
a64_r = __builtin_mips_maq_sa_w_phr (a64_a, v2q15_b, v2q15_c);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
#endif
i32_a = 0x12345678;
i32_s = 0x00001e6a;
i32_r = __builtin_mips_bitrev (i32_a);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x00000208; // pos is 8, size is 4
@@ -757,14 +757,14 @@ void test_MIPS_DSP()
i32_b = 0x87654321;
i32_s = 0x12345178;
i32_r = __builtin_mips_insv (i32_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
v4i8_s = (v4i8) {1, 1, 1, 1};
v4i8_r = __builtin_mips_repl_qb (1);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
i32_a = 99;
@@ -772,14 +772,14 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_repl_qb (i32_a);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_s = (v2q15) {30, 30};
v2q15_r = __builtin_mips_repl_ph (30);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
i32_a = 0x5612;
@@ -787,7 +787,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_repl_ph (i32_a);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v4i8_a = (v4i8) {0x12, 0x34, 0x56, 0x78};
@@ -895,7 +895,7 @@ void test_MIPS_DSP()
v4i8_r = __builtin_mips_pick_qb (v4i8_a, v4i8_b);
r = (int) v4i8_r;
s = (int) v4i8_s;
- if(r != s)
+ if (r != s)
abort ();
i32_a = 0x02000000; // cc: 0000 0010
@@ -909,7 +909,7 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_pick_ph (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
v2q15_a = (v2q15) {0x1234, 0x5678};
@@ -921,60 +921,60 @@ void test_MIPS_DSP()
v2q15_r = __builtin_mips_packrl_ph (v2q15_a, v2q15_b);
r = (int) v2q15_r;
s = (int) v2q15_s;
- if(r != s)
+ if (r != s)
abort ();
#ifndef __mips64
a64_a = 0x1234567887654321LL;
i32_s = 0x88765432;
i32_r = __builtin_mips_extr_w (a64_a, 4);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x1234567887658321LL;
i32_s = 0x56788766;
i32_r = __builtin_mips_extr_r_w (a64_a, 16);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x12345677fffffff8LL;
i32_s = 0x7fffffff;
i32_r = __builtin_mips_extr_rs_w (a64_a, 4);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x1234567887658321LL;
i32_s = 0x7fff;
i32_r = __builtin_mips_extr_s_h (a64_a, 16);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x0000007887658321LL;
i32_b = 24;
i32_s = 0x7887;
i32_r = __builtin_mips_extr_s_h (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x1234567887654321LL;
i32_b = 4;
i32_s = 0x88765432;
i32_r = __builtin_mips_extr_w (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x1234567887658321LL;
i32_b = 16;
i32_s = 0x56788766;
i32_r = __builtin_mips_extr_r_w (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
a64_a = 0x12345677fffffff8LL;
i32_b = 4;
i32_s = 0x7fffffff;
i32_r = __builtin_mips_extr_rs_w (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x0000021f; // pos is 31
@@ -982,7 +982,7 @@ void test_MIPS_DSP()
a64_a = 0x1234567887654321LL;
i32_s = 8;
i32_r = __builtin_mips_extp (a64_a, 3); // extract 4 bits
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x0000021f; // pos is 31
@@ -991,7 +991,7 @@ void test_MIPS_DSP()
i32_b = 7; // size is 8. NOTE!! we should use 7
i32_s = 0x87;
i32_r = __builtin_mips_extp (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x0000021f; // pos is 31
@@ -999,7 +999,7 @@ void test_MIPS_DSP()
a64_a = 0x1234567887654321LL;
i32_s = 8;
i32_r = __builtin_mips_extpdp (a64_a, 3); // extract 4 bits
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_s = 0x0000021b; // pos is 27
@@ -1013,7 +1013,7 @@ void test_MIPS_DSP()
i32_b = 11; // size is 12. NOTE!!! We should use 11
i32_s = 0x876;
i32_r = __builtin_mips_extpdp (a64_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_s = 0x00000213; // pos is 19
@@ -1024,14 +1024,14 @@ void test_MIPS_DSP()
a64_a = 0x1234567887654321LL;
a64_s = 0x0012345678876543LL;
a64_r = __builtin_mips_shilo (a64_a, 8);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
a64_a = 0x1234567887654321LL;
i32_b = -16;
a64_s = 0x5678876543210000LL;
a64_r = __builtin_mips_shilo (a64_a, i32_b);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
i32_a = 0x0;
@@ -1040,11 +1040,11 @@ void test_MIPS_DSP()
i32_b = 0x11112222;
a64_s = 0x8765432111112222LL;
a64_r = __builtin_mips_mthlip (a64_a, i32_b);
- if(a64_r != a64_s)
+ if (a64_r != a64_s)
abort ();
i32_s = 32;
i32_r = __builtin_mips_rddsp (31);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
#endif
@@ -1052,14 +1052,14 @@ void test_MIPS_DSP()
__builtin_mips_wrdsp (i32_a, 63);
i32_s = 0x03572428;
i32_r = __builtin_mips_rddsp (63);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
ptr_a = &array;
i32_b = 37;
i32_s = 37;
i32_r = __builtin_mips_lbux (ptr_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
ptr_a = &array;
@@ -1069,7 +1069,7 @@ void test_MIPS_DSP()
else
i32_s = 0x2627;
i32_r = __builtin_mips_lhx (ptr_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
ptr_a = &array;
@@ -1079,14 +1079,14 @@ void test_MIPS_DSP()
else
i32_s = 0x28292a2b;
i32_r = __builtin_mips_lwx (ptr_a, i32_b);
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
i32_a = 0x00000220; // pos is 32, size is 4
__builtin_mips_wrdsp (i32_a, 63);
i32_s = 1;
i32_r = __builtin_mips_bposge32 ();
- if(i32_r != i32_s)
+ if (i32_r != i32_s)
abort ();
}
diff --git a/gcc/testsuite/gcc.target/mips/mips32-dspr2-type.c b/gcc/testsuite/gcc.target/mips/mips32-dspr2-type.c
new file mode 100644
index 00000000000..5552e8b7205
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/mips32-dspr2-type.c
@@ -0,0 +1,12 @@
+/* Test MIPS32 DSP REV 2 instructions */
+/* { dg-do compile } */
+/* { dg-mips-options "-march=mips32r2 -mdspr2" } */
+/* { dg-final { scan-assembler "\tmul.ph\t" } } */
+
+typedef short v2hi __attribute__ ((vector_size(4)));
+
+v2hi mul_v2hi (v2hi a, v2hi b)
+{
+ return a * b;
+}
+
diff --git a/gcc/testsuite/gcc.target/mips/mips32-dspr2.c b/gcc/testsuite/gcc.target/mips/mips32-dspr2.c
new file mode 100644
index 00000000000..31cf22cfcd4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/mips32-dspr2.c
@@ -0,0 +1,541 @@
+/* Test MIPS32 DSP REV 2 instructions */
+/* { dg-do run { target mipsisa32r2*-*-* } } */
+/* { dg-mips-options "-march=mips32r2 -mdspr2 -O2" } */
+
+typedef signed char v4q7 __attribute__ ((vector_size(4)));
+typedef signed char v4i8 __attribute__ ((vector_size(4)));
+typedef short v2q15 __attribute__ ((vector_size(4)));
+typedef short v2i16 __attribute__ ((vector_size(4)));
+typedef int q31;
+typedef int i32;
+typedef unsigned int ui32;
+typedef long long a64;
+
+void abort (void);
+
+void test_MIPS_DSPR2 (void);
+
+int little_endian;
+
+int main ()
+{
+ union { long long ll; int i[2]; } endianness_test;
+ endianness_test.ll = 1;
+ little_endian = endianness_test.i[0];
+
+ test_MIPS_DSPR2 ();
+
+ return 0;
+}
+
+void test_MIPS_DSPR2 ()
+{
+ v4q7 v4q7_a,v4q7_b,v4q7_c,v4q7_r,v4q7_s;
+ v4i8 v4i8_a,v4i8_b,v4i8_c,v4i8_r,v4i8_s;
+ v2q15 v2q15_a,v2q15_b,v2q15_c,v2q15_r,v2q15_s;
+ v2i16 v2i16_a,v2i16_b,v2i16_c,v2i16_r,v2i16_s;
+ q31 q31_a,q31_b,q31_c,q31_r,q31_s;
+ i32 i32_a,i32_b,i32_c,i32_r,i32_s;
+ ui32 ui32_a,ui32_b,ui32_c,ui32_r,ui32_s;
+ a64 a64_a,a64_b,a64_c,a64_r,a64_s;
+
+ int r,s;
+
+ v4q7_a = (v4i8) {0x81, 0xff, 0x80, 0x23};
+ v4q7_s = (v4i8) {0x7f, 0x01, 0x7f, 0x23};
+ v4q7_r = __builtin_mips_absq_s_qb (v4q7_a);
+ r = (int) v4q7_r;
+ s = (int) v4q7_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0xffff, 0x2468};
+ v2i16_b = (v2i16) {0x1234, 0x1111};
+ v2i16_s = (v2i16) {0x1233, 0x3579};
+ v2i16_r = __builtin_mips_addu_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0xffff, 0x2468};
+ v2i16_b = (v2i16) {0x1234, 0x1111};
+ v2i16_s = (v2i16) {0xffff, 0x3579};
+ v2i16_r = __builtin_mips_addu_s_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0xff};
+ v4i8_b = (v4i8) {0x11, 0x33, 0x99, 0xff};
+ v4i8_s = (v4i8) {0x11, 0x2a, 0x66, 0xff};
+ v4i8_r = __builtin_mips_adduh_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0xff};
+ v4i8_b = (v4i8) {0x11, 0x33, 0x99, 0xff};
+ v4i8_s = (v4i8) {0x11, 0x2b, 0x66, 0xff};
+ v4i8_r = __builtin_mips_adduh_r_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x12345678;
+ i32_b = 0x87654321;
+ i32_s = 0x56784321;
+ i32_r = __builtin_mips_append (i32_a, i32_b, 16);
+ if (i32_r != i32_s)
+ abort ();
+
+ i32_a = 0x12345678;
+ i32_b = 0x87654321;
+ i32_s = 0x78876543;
+ i32_r = __builtin_mips_balign (i32_a, i32_b, 3);
+ if (i32_r != i32_s)
+ abort ();
+
+ __builtin_mips_wrdsp (0, 63);
+ v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x44};
+ v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44};
+ if (little_endian)
+ i32_s = 0xd;
+ else
+ i32_s = 0xb;
+ i32_r = __builtin_mips_cmpgdu_eq_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+ i32_r = __builtin_mips_rddsp (16);
+ if (little_endian)
+ i32_s = 0x0d000000;
+ else
+ i32_s = 0x0b000000;
+ if (i32_r != i32_s)
+ abort ();
+
+ __builtin_mips_wrdsp (0, 63);
+ v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x44};
+ v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44};
+ if (little_endian)
+ i32_s = 0x2;
+ else
+ i32_s = 0x4;
+ i32_r = __builtin_mips_cmpgdu_lt_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+ i32_r = __builtin_mips_rddsp (16);
+ if (little_endian)
+ i32_s = 0x02000000;
+ else
+ i32_s = 0x04000000;
+ if (i32_r != i32_s)
+ abort ();
+
+ __builtin_mips_wrdsp (0, 63);
+ v4i8_a = (v4i8) {0x11, 0x22, 0x33, 0x54};
+ v4i8_b = (v4i8) {0x11, 0x33, 0x33, 0x44};
+ if (little_endian)
+ i32_s = 0x7;
+ else
+ i32_s = 0xe;
+ i32_r = __builtin_mips_cmpgdu_le_qb (v4i8_a, v4i8_b);
+ if (i32_r != i32_s)
+ abort ();
+ i32_r = __builtin_mips_rddsp (16);
+ if (little_endian)
+ i32_s = 0x07000000;
+ else
+ i32_s = 0x0e000000;
+ if (i32_r != i32_s)
+ abort ();
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ v2i16_b = (v2i16) {0xffff, 0x1555};
+ v2i16_c = (v2i16) {0x1234, 0x3322};
+ a64_s = 0x1677088e;
+ a64_r = __builtin_mips_dpa_w_ph (a64_a, v2i16_b, v2i16_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ v2i16_b = (v2i16) {0xffff, 0x1555};
+ v2i16_c = (v2i16) {0x1234, 0x3322};
+ a64_s = 0x0df1a462;
+ a64_r = __builtin_mips_dps_w_ph (a64_a, v2i16_b, v2i16_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ i32_b = 0x80000000;
+ i32_c = 0x11112222;
+ a64_s = 0xF7776EEF12345678LL;
+ a64_r = __builtin_mips_madd (a64_a, i32_b, i32_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ ui32_b = 0x80000000;
+ ui32_c = 0x11112222;
+ a64_s = 0x0888911112345678LL;
+ a64_r = __builtin_mips_maddu (a64_a, ui32_b, ui32_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ i32_b = 0x80000000;
+ i32_c = 0x11112222;
+ a64_s = 0x0888911112345678LL;
+ a64_r = __builtin_mips_msub (a64_a, i32_b, i32_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x12345678;
+ ui32_b = 0x80000000;
+ ui32_c = 0x11112222;
+ a64_s = 0xF7776EEF12345678LL;
+ a64_r = __builtin_mips_msubu (a64_a, ui32_b, ui32_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+ v2i16_a = (v2i16) {0xffff, 0x2468};
+ v2i16_b = (v2i16) {0x1234, 0x1111};
+ v2i16_s = (v2i16) {0xedcc, 0x52e8};
+ v2i16_r = __builtin_mips_mul_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0x8000, 0x7fff};
+ v2i16_b = (v2i16) {0x1234, 0x1111};
+ v2i16_s = (v2i16) {0x8000, 0x7fff};
+ v2i16_r = __builtin_mips_mul_s_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x80000000;
+ q31_b = 0x80000000;
+ q31_s = 0x7fffffff;
+ q31_r = __builtin_mips_mulq_rs_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0xffff, 0x8000};
+ v2q15_b = (v2q15) {0x1111, 0x8000};
+ v2q15_s = (v2q15) {0xffff, 0x7fff};
+ v2q15_r = __builtin_mips_mulq_s_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x00000002;
+ q31_b = 0x80000000;
+ q31_s = 0xfffffffe;
+ q31_r = __builtin_mips_mulq_s_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+#ifndef __mips64
+ a64_a = 0x19848419;
+ v2i16_b = (v2i16) {0xffff, 0x8000};
+ v2i16_c = (v2i16) {0x1111, 0x8000};
+ if (little_endian)
+ a64_s = 0x5984952a;
+ else
+ a64_s = 0xffffffffd9847308LL;
+ a64_r = __builtin_mips_mulsa_w_ph (a64_a, v2i16_b, v2i16_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ i32_a = 0x80000000;
+ i32_b = 0x11112222;
+ a64_s = 0xF7776EEF00000000LL;
+ a64_r = __builtin_mips_mult (i32_a, i32_b);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ ui32_a = 0x80000000;
+ ui32_b = 0x11112222;
+ a64_s = 0x888911100000000LL;
+ a64_r = __builtin_mips_multu (ui32_a, ui32_b);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+ v2i16_a = (v2i16) {0x1234, 0x5678};
+ v2i16_b = (v2i16) {0x2233, 0x5566};
+ if (little_endian)
+ v4i8_s = (v4i8) {0x33, 0x66, 0x34, 0x78};
+ else
+ v4i8_s = (v4i8) {0x34, 0x78, 0x33, 0x66};
+ v4i8_r = __builtin_mips_precr_qb_ph (v2i16_a, v2i16_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x12345678;
+ i32_b = 0x33334444;
+ if (little_endian)
+ v2i16_s = (v2i16) {0x3444, 0x4567};
+ else
+ v2i16_s = (v2i16) {0x4567, 0x3444};
+ v2i16_r = __builtin_mips_precr_sra_ph_w (i32_a, i32_b, 4);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x12345678;
+ i32_b = 0x33334444;
+ if (little_endian)
+ v2i16_s = (v2i16) {0x3444, 0x4568};
+ else
+ v2i16_s = (v2i16) {0x4568, 0x3444};
+ v2i16_r = __builtin_mips_precr_sra_r_ph_w (i32_a, i32_b, 4);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ i32_a = 0x12345678;
+ i32_b = 0x87654321;
+ i32_s = 0x43211234;
+ i32_r = __builtin_mips_prepend (i32_a, i32_b, 16);
+ if (i32_r != i32_s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99};
+ v4i8_s = (v4i8) {0x9, 0x22, 0x3b, 0xcc};
+ v4i8_r = __builtin_mips_shra_qb (v4i8_a, 1);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99};
+ v4i8_s = (v4i8) {0x9, 0x23, 0x3c, 0xcd};
+ v4i8_r = __builtin_mips_shra_r_qb (v4i8_a, 1);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_b = 1;
+ v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99};
+ v4i8_s = (v4i8) {0x9, 0x22, 0x3b, 0xcc};
+ v4i8_r = __builtin_mips_shra_qb (v4i8_a, i32_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ i32_b = 1;
+ v4i8_a = (v4i8) {0x12, 0x45, 0x77, 0x99};
+ v4i8_s = (v4i8) {0x9, 0x23, 0x3c, 0xcd};
+ v4i8_r = __builtin_mips_shra_r_qb (v4i8_a, i32_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0x1357, 0x2468};
+ v2i16_s = (v2i16) {0x0135, 0x0246};
+ v2i16_r = __builtin_mips_shrl_ph (v2i16_a, 4);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ i32_b = 8;
+ v2i16_a = (v2i16) {0x1357, 0x2468};
+ v2i16_s = (v2i16) {0x0013, 0x0024};
+ v2i16_r = __builtin_mips_shrl_ph (v2i16_a, i32_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0x1357, 0x4455};
+ v2i16_b = (v2i16) {0x3333, 0x4444};
+ v2i16_s = (v2i16) {0xe024, 0x0011};
+ v2i16_r = __builtin_mips_subu_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v2i16_a = (v2i16) {0x1357, 0x4455};
+ v2i16_b = (v2i16) {0x3333, 0x4444};
+ v2i16_s = (v2i16) {0x0000, 0x0011};
+ v2i16_r = __builtin_mips_subu_s_ph (v2i16_a, v2i16_b);
+ r = (int) v2i16_r;
+ s = (int) v2i16_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x33 ,0x44, 0x55, 0x66};
+ v4i8_b = (v4i8) {0x99 ,0x15, 0x85, 0xff};
+ v4i8_s = (v4i8) {0xcd ,0x17, 0xe8, 0xb3};
+ v4i8_r = __builtin_mips_subuh_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v4i8_a = (v4i8) {0x33 ,0x44, 0x55, 0x66};
+ v4i8_b = (v4i8) {0x99 ,0x15, 0x85, 0xff};
+ v4i8_s = (v4i8) {0xcd ,0x18, 0xe8, 0xb4};
+ v4i8_r = __builtin_mips_subuh_r_qb (v4i8_a, v4i8_b);
+ r = (int) v4i8_r;
+ s = (int) v4i8_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3334, 0x4444};
+ v2q15_b = (v2q15) {0x1111, 0x2222};
+ v2q15_s = (v2q15) {0x2222, 0x3333};
+ v2q15_r = __builtin_mips_addqh_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3334, 0x4444};
+ v2q15_b = (v2q15) {0x1111, 0x2222};
+ v2q15_s = (v2q15) {0x2223, 0x3333};
+ v2q15_r = __builtin_mips_addqh_r_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x11111112;
+ q31_b = 0x99999999;
+ q31_s = 0xd5555555;
+ q31_r = __builtin_mips_addqh_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ q31_a = 0x11111112;
+ q31_b = 0x99999999;
+ q31_s = 0xd5555556;
+ q31_r = __builtin_mips_addqh_r_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3334, 0x4444};
+ v2q15_b = (v2q15) {0x1111, 0x2222};
+ v2q15_s = (v2q15) {0x1111, 0x1111};
+ v2q15_r = __builtin_mips_subqh_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ v2q15_a = (v2q15) {0x3334, 0x4444};
+ v2q15_b = (v2q15) {0x1111, 0x2222};
+ v2q15_s = (v2q15) {0x1112, 0x1111};
+ v2q15_r = __builtin_mips_subqh_r_ph (v2q15_a, v2q15_b);
+ r = (int) v2q15_r;
+ s = (int) v2q15_s;
+ if (r != s)
+ abort ();
+
+ q31_a = 0x11111112;
+ q31_b = 0x99999999;
+ q31_s = 0x3bbbbbbc;
+ q31_r = __builtin_mips_subqh_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+ q31_a = 0x11111112;
+ q31_b = 0x99999999;
+ q31_s = 0x3bbbbbbd;
+ q31_r = __builtin_mips_subqh_r_w (q31_a, q31_b);
+ if (q31_r != q31_s)
+ abort ();
+
+#ifndef __mips64
+ a64_a = 0x1111222212345678LL;
+ v2i16_b = (v2i16) {0x1, 0x2};
+ v2i16_c = (v2i16) {0x3, 0x4};
+ a64_s = 0x1111222212345682LL;
+ a64_r = __builtin_mips_dpax_w_ph (a64_a, v2i16_b, v2i16_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x9999111112345678LL;
+ v2i16_b = (v2i16) {0x1, 0x2};
+ v2i16_c = (v2i16) {0x3, 0x4};
+ a64_s = 0x999911111234566eLL;
+ a64_r = __builtin_mips_dpsx_w_ph (a64_a, v2i16_b, v2i16_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x70000000;
+ v2q15_b = (v2q15) {0x4000, 0x2000};
+ v2q15_c = (v2q15) {0x2000, 0x4000};
+ a64_s = 0x98000000;
+ a64_r = __builtin_mips_dpaqx_s_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x70000000;
+ v2q15_b = (v2q15) {0x4000, 0x2000};
+ v2q15_c = (v2q15) {0x2000, 0x4000};
+ a64_s = 0x7fffffff;
+ a64_r = __builtin_mips_dpaqx_sa_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0x70000000;
+ v2q15_b = (v2q15) {0x4000, 0x2000};
+ v2q15_c = (v2q15) {0x2000, 0x4000};
+ a64_s = 0x48000000;
+ a64_r = __builtin_mips_dpsqx_s_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+
+#ifndef __mips64
+ a64_a = 0xFFFFFFFF80000000LL;
+ v2q15_b = (v2q15) {0x4000, 0x2000};
+ v2q15_c = (v2q15) {0x2000, 0x4000};
+ a64_s = 0xFFFFFFFF80000000LL;
+ a64_r = __builtin_mips_dpsqx_sa_w_ph (a64_a, v2q15_b, v2q15_c);
+ if (a64_r != a64_s)
+ abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/spe-unwind-1.c b/gcc/testsuite/gcc.target/powerpc/spe-unwind-1.c
new file mode 100644
index 00000000000..84d4bf28803
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/spe-unwind-1.c
@@ -0,0 +1,116 @@
+/* Verify that unwinding can find SPE registers in signal frames. */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do run { target { powerpc*-*-linux* && powerpc_spe } } } */
+/* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
+
+#include <unwind.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h>
+
+int count;
+char *null;
+int found_reg;
+
+typedef int v2si __attribute__((__vector_size__(8)));
+
+v2si v1 = { 123, 234 };
+v2si v2 = { 345, 456 };
+
+static _Unwind_Reason_Code
+force_unwind_stop (int version, _Unwind_Action actions,
+ _Unwind_Exception_Class exc_class,
+ struct _Unwind_Exception *exc_obj,
+ struct _Unwind_Context *context,
+ void *stop_parameter)
+{
+ unsigned int reg;
+ if (actions & _UA_END_OF_STACK)
+ abort ();
+ if (_Unwind_GetGR (context, 1215) == 123)
+ found_reg = 1;
+ return _URC_NO_REASON;
+}
+
+static void force_unwind ()
+{
+ struct _Unwind_Exception *exc = malloc (sizeof (*exc));
+ memset (&exc->exception_class, 0, sizeof (exc->exception_class));
+ exc->exception_cleanup = 0;
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+ _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
+#else
+ _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0);
+#endif
+
+ abort ();
+}
+
+static void counter (void *p __attribute__((unused)))
+{
+ ++count;
+}
+
+static void handler (void *p __attribute__((unused)))
+{
+ if (count != 2)
+ abort ();
+ if (!found_reg)
+ abort ();
+ exit (0);
+}
+
+static int __attribute__((noinline)) fn5 ()
+{
+ char dummy __attribute__((cleanup (counter)));
+ force_unwind ();
+ return 0;
+}
+
+static void fn4 (int sig)
+{
+ char dummy __attribute__((cleanup (counter)));
+ /* Clobber high part without compiler's knowledge so the only saved
+ copy is from the signal frame. */
+ asm volatile ("evmergelo 15,15,15");
+ fn5 ();
+ null = NULL;
+}
+
+static void fn3 ()
+{
+ abort ();
+}
+
+static int __attribute__((noinline)) fn2 ()
+{
+ register v2si r15 asm("r15");
+ r15 = v1;
+ asm volatile ("" : "+r" (r15));
+ *null = 0;
+ fn3 ();
+ return 0;
+}
+
+static int __attribute__((noinline)) fn1 ()
+{
+ signal (SIGSEGV, fn4);
+ signal (SIGBUS, fn4);
+ fn2 ();
+ return 0;
+}
+
+static int __attribute__((noinline)) fn0 ()
+{
+ char dummy __attribute__((cleanup (handler)));
+ fn1 ();
+ null = 0;
+ return 0;
+}
+
+int main()
+{
+ fn0 ();
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c b/gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
index d380f8e8d00..4356a9828bf 100644
--- a/gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
+++ b/gcc/testsuite/gcc.target/powerpc/stabs-attrib-vect-darwin.c
@@ -8,4 +8,4 @@ int main ()
return 0;
}
-/* { dg-final { scan-assembler ".stabs.*vi\:\\(0,16\\)=\@V" } } */
+/* { dg-final { scan-assembler ".stabs.*vi\:\\(0,\[0-9\]+\\)=\@V" } } */
diff --git a/gcc/testsuite/gcc.test-framework/README b/gcc/testsuite/gcc.test-framework/README
index 3a9d4f086af..607a4955f45 100644
--- a/gcc/testsuite/gcc.test-framework/README
+++ b/gcc/testsuite/gcc.test-framework/README
@@ -19,7 +19,7 @@ To run these tests:
To check the results:
TF=${SRC}/gcc/testsuite/gcc.test-framework
- awk -f ${TF}/test-framework.awk gcc/testsuite/gcc.sum
+ awk -f ${TF}/test-framework.awk gcc/testsuite/gcc/gcc.sum
The awk script prints unexpected results followed by the number of tests
that passed and failed.
diff --git a/gcc/testsuite/gcc.test-framework/dg-outexists-exp-F.c b/gcc/testsuite/gcc.test-framework/dg-outexists-exp-F.c
index 397ec68a204..d53a2f5ce61 100644
--- a/gcc/testsuite/gcc.test-framework/dg-outexists-exp-F.c
+++ b/gcc/testsuite/gcc.test-framework/dg-outexists-exp-F.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-W -Werror" } */
+/* { dg-options "-Wunused-value -Werror" } */
int main (void) { 0; } /* { dg-warning "no effect" } */
diff --git a/gcc/testsuite/gcc.test-framework/dg-outexistsnot-exp-P.c b/gcc/testsuite/gcc.test-framework/dg-outexistsnot-exp-P.c
index 0076752410b..8d6bf974449 100644
--- a/gcc/testsuite/gcc.test-framework/dg-outexistsnot-exp-P.c
+++ b/gcc/testsuite/gcc.test-framework/dg-outexistsnot-exp-P.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-W -Werror" } */
+/* { dg-options "-Wunused-value -Werror" } */
int main (void) { 0; } /* { dg-warning "no effect" } */
diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_basics_4.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_basics_4.f90
index c910b708bd3..508d5670689 100644
--- a/gcc/testsuite/gfortran.dg/alloc_comp_basics_4.f90
+++ b/gcc/testsuite/gfortran.dg/alloc_comp_basics_4.f90
@@ -6,8 +6,14 @@
! Contributed by Toon Moene <toon@moene.indiv.nluug.nl>
!
MODULE types_m
+ TYPE coord_t
+ INTEGER ncord
+ REAL,ALLOCATABLE,DIMENSION(:) :: x, y
+ END TYPE
+
TYPE grib_t
REAL,DIMENSION(:),ALLOCATABLE :: vdata
+ TYPE(coord_t) coords
END TYPE
END MODULE
diff --git a/gcc/testsuite/gfortran.dg/c_by_val.c b/gcc/testsuite/gfortran.dg/c_by_val.c
index daba6d2c52d..98357696f39 100644
--- a/gcc/testsuite/gfortran.dg/c_by_val.c
+++ b/gcc/testsuite/gfortran.dg/c_by_val.c
@@ -1,9 +1,14 @@
/* Passing from fortran to C by value, using %VAL. */
-typedef struct { float r, i; } complex;
+#include <inttypes.h>
+#include <complex.h>
+
extern void f_to_f__ (float*, float, float*, float**);
+extern void f_to_f8__ (double*, double, double*, double**);
extern void i_to_i__ (int*, int, int*, int**);
-extern void c_to_c__ (complex*, complex, complex*, complex**);
+extern void i_to_i8__ (int64_t*, int64_t, int64_t*, int64_t**);
+extern void c_to_c__ (float _Complex*, float _Complex, float _Complex*, float _Complex**);
+extern void c_to_c8__ (double _Complex*, double _Complex, double _Complex*, double _Complex**);
extern void abort (void);
void
@@ -17,6 +22,16 @@ f_to_f__(float *retval, float a1, float *a2, float **a3)
}
void
+f_to_f8__(double *retval, double a1, double *a2, double **a3)
+{
+ if ( a1 != *a2 ) abort();
+ if ( a1 != **a3 ) abort();
+ a1 = 0.0;
+ *retval = *a2 * 2.0;
+ return;
+}
+
+void
i_to_i__(int *retval, int i1, int *i2, int **i3)
{
if ( i1 != *i2 ) abort();
@@ -27,15 +42,31 @@ i_to_i__(int *retval, int i1, int *i2, int **i3)
}
void
-c_to_c__(complex *retval, complex c1, complex *c2, complex **c3)
+i_to_i8__(int64_t *retval, int64_t i1, int64_t *i2, int64_t **i3)
+{
+ if ( i1 != *i2 ) abort();
+ if ( i1 != **i3 ) abort();
+ i1 = 0;
+ *retval = *i2 * 3;
+ return;
+}
+
+void
+c_to_c__(float _Complex *retval, float _Complex c1, float _Complex *c2, float _Complex **c3)
+{
+ if ( c1 != *c2 ) abort();
+ if ( c1 != *(*c3) ) abort();
+ c1 = 0.0 + 0.0 * _Complex_I;
+ *retval = (*c2) * 4.0;
+ return;
+}
+
+void
+c_to_c8__(double _Complex *retval, double _Complex c1, double _Complex *c2, double _Complex **c3)
{
- if ( c1.r != c2->r ) abort();
- if ( c1.i != c2->i ) abort();
- if ( c1.r != (*c3)->r ) abort();
- if ( c1.i != (*c3)->i ) abort();
- c1.r = 0.0;
- c1.i = 0.0;
- retval->r = c2->r * 4.0;
- retval->i = c2->i * 4.0;
+ if ( c1 != *c2 ) abort();
+ if ( c1 != *(*c3) ) abort();
+ c1 = 0.0 + 0.0 * _Complex_I;;
+ *retval = (*c2) * 4.0;
return;
}
diff --git a/gcc/testsuite/gfortran.dg/c_by_val_1.f b/gcc/testsuite/gfortran.dg/c_by_val_1.f
index 133cc55e173..af1e25a6b88 100644
--- a/gcc/testsuite/gfortran.dg/c_by_val_1.f
+++ b/gcc/testsuite/gfortran.dg/c_by_val_1.f
@@ -4,9 +4,13 @@ C { dg-options "-ff2c -w -O0" }
program c_by_val_1
external f_to_f, i_to_i, c_to_c
+ external f_to_f8, i_to_i8, c_to_c8
real a, b, c
- integer*4 i, j, k
+ real(8) a8, b8, c8
+ integer(4) i, j, k
+ integer(8) i8, j8, k8
complex u, v, w, c_to_c
+ complex(8) u8, v8, w8, c_to_c8
a = 42.0
b = 0.0
@@ -14,18 +18,36 @@ C { dg-options "-ff2c -w -O0" }
call f_to_f (b, %VAL (a), %REF (c), %LOC (c))
if ((2.0 * a).ne.b) call abort ()
+ a8 = 43.0
+ b8 = 1.0
+ c8 = a8
+ call f_to_f8 (b8, %VAL (a8), %REF (c8), %LOC (c8))
+ if ((2.0 * a8).ne.b8) call abort ()
+
i = 99
j = 0
k = i
call i_to_i (j, %VAL (i), %REF (k), %LOC (k))
if ((3 * i).ne.j) call abort ()
+ i8 = 199
+ j8 = 10
+ k8 = i8
+ call i_to_i8 (j8, %VAL (i8), %REF (k8), %LOC (k8))
+ if ((3 * i8).ne.j8) call abort ()
+
u = (-1.0, 2.0)
v = (1.0, -2.0)
w = u
v = c_to_c (%VAL (u), %REF (w), %LOC (w))
if ((4.0 * u).ne.v) call abort ()
+ u8 = (-1.0, 2.0)
+ v8 = (1.0, -2.0)
+ w8 = u8
+ v8 = c_to_c8 (%VAL (u8), %REF (w8), %LOC (w8))
+ if ((4.0 * u8).ne.v8) call abort ()
+
stop
end
diff --git a/gcc/testsuite/gfortran.dg/c_by_val_4.f b/gcc/testsuite/gfortran.dg/c_by_val_4.f
new file mode 100644
index 00000000000..c8f4b0484dd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/c_by_val_4.f
@@ -0,0 +1,17 @@
+C { dg-do compile }
+C Tests the fix for PR30888, in which the dummy procedure would
+C generate an error with the %VAL argument, even though it is
+C declared EXTERNAL.
+C
+C Contributed by Peter W. Draper <p.w.draper@durham.ac.uk>
+C
+ SUBROUTINE VALTEST( DOIT )
+ EXTERNAL DOIT
+ INTEGER P
+ INTEGER I
+ I = 0
+ P = 0
+ CALL DOIT( %VAL( P ) ) ! { dg-warning "Extension: argument list function" }
+ CALL DOIT( I )
+ CALL DOIT( %VAL( P ) ) ! { dg-warning "Extension: argument list function" }
+ END
diff --git a/gcc/testsuite/gfortran.dg/continuation_7.f90 b/gcc/testsuite/gfortran.dg/continuation_7.f90
new file mode 100644
index 00000000000..0a761889ba9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/continuation_7.f90
@@ -0,0 +1,22 @@
+! { dg-do "compile" }
+! { dg-options "-Wall -std=f95" }
+! There should only two warnings be printed.
+! PR fortran/30968
+print *, "Foo bar&
+ &Bar foo"
+print *, "Foo bar&
+ Bar foo" ! { dg-warning "Missing '&' in continued character constant" }
+print *, "Foo bar"&
+ &, "Bar foo"
+print *, "Foo bar"&
+ , "Bar foo"
+
+print '(&
+ a)', 'Hello' ! { dg-warning "Missing '&' in continued character constant" }
+print '(&
+ &a)', 'Hello'
+print '('&
+ &//'a)', 'Hello'
+print '('&
+ // "a)", 'Hello'
+end
diff --git a/gcc/testsuite/gfortran.dg/entry_9.f90 b/gcc/testsuite/gfortran.dg/entry_9.f90
new file mode 100644
index 00000000000..1daf49ce621
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/entry_9.f90
@@ -0,0 +1,31 @@
+! { dg-do "run" }
+! Check whether RESULT of ENTRY defaults to entry-name.
+! PR fortran/30873
+!
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
+!
+MODULE M1
+ CONTAINS
+ FUNCTION F2(K)
+ INTEGER :: F2,K
+ F2=E1(K)
+ END FUNCTION F2
+
+ RECURSIVE FUNCTION F1(I)
+ INTEGER :: F1,I,E1
+ F1=F2(I)
+ RETURN
+ ENTRY E1(I)
+ E1=-I
+ RETURN
+ END FUNCTION F1
+END MODULE M1
+
+program main
+ use m1
+ if (E1(5) /= -5) call abort()
+ if (F2(4) /= -4) call abort()
+ if (F1(1) /= -1) call abort()
+end program main
+
+! { dg-final { cleanup-modules "m1" } }
diff --git a/gcc/testsuite/gfortran.dg/fmt_zero_precision.f90 b/gcc/testsuite/gfortran.dg/fmt_zero_precision.f90
index ca66427ee65..6ecd499b68c 100644
--- a/gcc/testsuite/gfortran.dg/fmt_zero_precision.f90
+++ b/gcc/testsuite/gfortran.dg/fmt_zero_precision.f90
@@ -1,5 +1,6 @@
! { dg-do run }
! PR28354 Incorrect rounding of .99999 with f3.0 format specifier
+! PR30910 ES format not quite right...
! Test case derived from PR. Submitted by Jerry DeLisle <jvdelisle@gcc.gnu.org>
write(*,50) -0.99999
write(*,50) 0.99999
@@ -15,6 +16,35 @@
write(*,100) 333.499
50 format(f3.0,"<")
100 format(f8.0,"<")
+ write(6,'(es6.0)') 1.0e-1
+ write(*,150) -0.99999
+ write(*,150) 0.99999
+ write(*,150) -9.0
+ write(*,150) -0.99
+ write(*,150) -0.999
+ write(*,150) -0.999
+ write(*,150) -0.59
+ write(*,150) -0.49
+ write(*,200) 37.99999
+ write(*,200) 10345.0
+ write(*,200) 333.678
+ write(*,200) 333.499
+ 150 format(es7.0,"<")
+ 200 format(es8.0,"<")
+ write(*,250) -0.99999
+ write(*,250) 0.99999
+ write(*,250) -9.0
+ write(*,250) -0.99
+ write(*,250) -0.999
+ write(*,250) -0.999
+ write(*,250) -0.59
+ write(*,250) -0.49
+ write(*,300) 37.99999
+ write(*,300) 10345.0
+ write(*,300) 333.678
+ write(*,300) 333.499
+ 250 format(1pe7.0,"<")
+ 300 format(1pe6.0,"<")
end
! {dg-output "-1.<"
! {dg-output " 1.<"
@@ -28,3 +58,28 @@
! {dg-output " 10345.<"
! {dg-output " 334.<"
! {dg-output " 333.<"
+! {dg-output "1.E-01"
+! {dg-output "-1.E+00<"
+! {dg-output " 1.E+00<"
+! {dg-output "-9.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-6.E-01<"
+! {dg-output "-5.E-01<"
+! {dg-output " 4.E+01<"
+! {dg-output " 1.E+04<"
+! {dg-output " 3.E+02<"
+! {dg-output " 3.E+02<"
+! {dg-output "-1.E+00<"
+! {dg-output " 1.E+00<"
+! {dg-output "-9.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-1.E+00<"
+! {dg-output "-6.E-01<"
+! {dg-output "-5.E-01<"
+! {dg-output "4.E+01<"
+! {dg-output "1.E+04<"
+! {dg-output "3.E+02<"
+! {dg-output "3.E+02<"
diff --git a/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90 b/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90
new file mode 100644
index 00000000000..57d7466d005
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/integer_exponentiation_1.f90
@@ -0,0 +1,6 @@
+! { dg-do run }
+! PR 30981 - this used to go into an endless loop during execution.
+program test
+ a = 3.0
+ b = a**(-2147483647-1) ! { dg-warning "Integer outside symmetric range" }
+end program test
diff --git a/gcc/testsuite/gfortran.dg/interface_11.f90 b/gcc/testsuite/gfortran.dg/interface_11.f90
new file mode 100644
index 00000000000..a143bb374f2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/interface_11.f90
@@ -0,0 +1,29 @@
+! { dg-do compile }
+! Tests the fix for PR30883 in which interface functions and
+! their results did not get an implicit type.
+!
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
+!
+MODULE M1
+ IMPLICIT NONE
+CONTAINS
+ SUBROUTINE S1(F1, F2, G1, G2)
+ INTERFACE
+ FUNCTION F1(i, a)
+ END FUNCTION F1
+ FUNCTION F2(i, a)
+ implicit complex (a-z)
+ END FUNCTION F2
+ END INTERFACE
+ INTERFACE
+ FUNCTION g1(i, a) result(z)
+ END FUNCTION g1
+ FUNCTION g2(i, a) result(z)
+ implicit complex (a-z)
+ END FUNCTION g2
+ END INTERFACE
+ END SUBROUTINE S1
+END MODULE
+
+END
+! { dg-final { cleanup-modules "m1" } }
diff --git a/gcc/testsuite/gfortran.dg/logical_3.f90 b/gcc/testsuite/gfortran.dg/logical_3.f90
new file mode 100644
index 00000000000..f4d069e9a4c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/logical_3.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! This checks the fix for PR30406.
+!
+! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+!===============================================================
+
+function f()
+ logical(8) :: f
+ f = .false._8
+end function f
diff --git a/gcc/testsuite/gfortran.dg/module_implicit_conversion.f90 b/gcc/testsuite/gfortran.dg/module_implicit_conversion.f90
new file mode 100644
index 00000000000..d7835a7f961
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/module_implicit_conversion.f90
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! { dg-options "-std=gnu" }
+
+module module_implicit_conversion
+ ! double complex :: s = (1.0D0, 0D0)
+ double complex :: s = (1.0, 0D0)
+end module module_implicit_conversion
+
+! { dg-final { cleanup-modules "module_implicit_conversion" } }
diff --git a/gcc/testsuite/gfortran.dg/namelist_26.f90 b/gcc/testsuite/gfortran.dg/namelist_26.f90
new file mode 100644
index 00000000000..2c1b26062e1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_26.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+! PR30918 Failure to skip commented out NAMELIST
+! Before the patch, this read the commented out namelist and iuse would
+! equal 2 when done. Test case from PR.
+program gfcbug58
+ implicit none
+ integer :: iuse = 0, ios
+ integer, parameter :: nmlunit = 10 ! Namelist unit
+ !------------------
+ ! Namelist 'REPORT'
+ !------------------
+ character(len=12) :: type, use
+ integer :: max_proc
+ namelist /REPORT/ type, use, max_proc
+ !------------------
+ ! Set up the test file
+ !------------------
+ open(unit=nmlunit, status="scratch")
+ write(nmlunit, '(a)') "!================"
+ write(nmlunit, '(a)') "! Namelist REPORT"
+ write(nmlunit, '(a)') "!================"
+ write(nmlunit, '(a)') "! &REPORT use = 'ignore' / ! Comment"
+ write(nmlunit, '(a)') "!"
+ write(nmlunit, '(a)') " &REPORT type = 'SYNOP'"
+ write(nmlunit, '(a)') " use = 'active'"
+ write(nmlunit, '(a)') " max_proc = 20"
+ write(nmlunit, '(a)') " /"
+ rewind(nmlunit)
+ !-------------------------------------
+ ! Loop to read namelist multiple times
+ !-------------------------------------
+ do
+ !----------------------------------------
+ ! Preset namelist variables with defaults
+ !----------------------------------------
+ type = ''
+ use = ''
+ max_proc = -1
+ !--------------
+ ! Read namelist
+ !--------------
+ read (nmlunit, nml=REPORT, iostat=ios)
+ if (ios /= 0) exit
+ iuse = iuse + 1
+ end do
+ if (iuse /= 1) call abort()
+
+end program gfcbug58
diff --git a/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90 b/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90
new file mode 100644
index 00000000000..aa212c050fa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/parameter_array_section_2.f90
@@ -0,0 +1,14 @@
+! { dg-do run }
+! { dg-options "-O" }
+! Test the fix for PR31011 in which the length of the array sections
+! with stride other than unity were incorrectly calculated.
+!
+! Contributed by <terry@chem.gu.se>
+!
+program PotentialMatrix
+ implicit none
+ real(kind=8),dimension(2),parameter::v2=(/1,2/)
+ real(kind=8),dimension(4),parameter::v4=(/1,2,3,4/)
+ if (any (v2*v4(1:3:2) .ne. (/1,6/))) call abort ()
+ if (any (v2*v4(3:1:-2) .ne. (/3,2/))) call abort ()
+end
diff --git a/gcc/testsuite/gfortran.dg/size_dim.f90 b/gcc/testsuite/gfortran.dg/size_dim.f90
new file mode 100644
index 00000000000..248a0c33dda
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/size_dim.f90
@@ -0,0 +1,15 @@
+! { dg-do "run" }
+! Check size with initialization expression value for dim=
+! PR fortran/30882
+!
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
+!
+program main
+ integer :: a(10)
+ call S1(a)
+contains
+ subroutine S1(a)
+ integer :: a(*)
+ if(size(a(1:10),1) /= 10) call abort()
+ end subroutine S1
+end program main
diff --git a/gcc/testsuite/gfortran.dg/size_optional_dim_1.f90 b/gcc/testsuite/gfortran.dg/size_optional_dim_1.f90
new file mode 100644
index 00000000000..de5a739f56b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/size_optional_dim_1.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! PR 30865 - passing a subroutine optional argument to size(dim=...)
+! used to segfault.
+program main
+ implicit none
+ integer :: a(2,3)
+ integer :: ires
+
+ call checkv (ires, a)
+ if (ires /= 6) call abort
+ call checkv (ires, a, 1)
+ if (ires /= 2) call abort
+contains
+ subroutine checkv(ires,a1,opt1)
+ integer, intent(out) :: ires
+ integer :: a1(:,:)
+ integer, optional :: opt1
+
+ ires = size (a1, dim=opt1)
+ end subroutine checkv
+end program main
diff --git a/gcc/testsuite/gfortran.dg/unformatted_recl_1.f90 b/gcc/testsuite/gfortran.dg/unformatted_recl_1.f90
new file mode 100644
index 00000000000..ef1d75470d3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unformatted_recl_1.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+! PR31099 Runtime error on legal code using RECL
+program test
+ integer :: a, b
+ a=1
+ b=2
+ open(10, status="scratch", form="unformatted", recl=8)
+ write(10) a,b
+ write(10) a,b
+ write(10) a,b
+ write(10) b, a
+ rewind(10)
+ b=0
+ a=0
+ read(10) a, b
+ read(10) a, b
+ read(10) a, b
+ read(10) a, b
+ if ((a.ne.2).and.( b.ne.1)) call abort()
+end program test
+
diff --git a/gcc/testsuite/gfortran.dg/use_4.f90 b/gcc/testsuite/gfortran.dg/use_4.f90
new file mode 100644
index 00000000000..43d94bc223c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_4.f90
@@ -0,0 +1,33 @@
+! { dg-do "compile" }
+! PR fortran/30973
+! Using symbols with the name of the module
+
+module foo
+ integer :: i
+end module foo
+
+module bar
+ integer :: j
+end module bar
+
+module test
+ use foo, only:
+ integer :: foo ! { dg-error "cannot have a type" }
+end module test
+
+module test2
+ use bar, only: foo => j
+ use foo ! ok, unless foo is accessed
+end module test2
+
+module test3
+ use bar, only: foo => j
+ use foo ! ok, unless foo is accessed
+ foo = 5 ! { dg-error "is an ambiguous reference to 'j'" }
+end module test3
+
+program test_foo
+ use foo, only: foo ! { dg-error "been used as an external module name" }
+ use foo, only: i => foo! { dg-error "been used as an external module name" }
+ use foo, only: foo => i! { dg-error "been used as an external module name" }
+end program
diff --git a/gcc/testsuite/gfortran.dg/use_5.f90 b/gcc/testsuite/gfortran.dg/use_5.f90
new file mode 100644
index 00000000000..6d2de048043
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_5.f90
@@ -0,0 +1,49 @@
+! { dg-do "run" }
+! Renaming of operators
+module z
+ interface operator(.addfive.)
+ module procedure sub2
+ end interface
+contains
+function sub2(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub2 = x + 5
+end function sub2
+end module z
+
+module y
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 15
+end function sub
+end module y
+
+module x
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 25
+end function sub
+end module x
+
+use x, only : operator(.bar.) => operator(.addfive.)
+use y, operator(.my.) => operator(.addfive.)
+use z
+ integer :: i
+ i = 2
+ if ((.bar. i) /= 2+25) call abort ()
+ if ((.my. i) /= 2+15) call abort ()
+ if ((.addfive. i) /= 2+5) call abort ()
+end
+
+! { dg-final { cleanup-tree-dump "x y z" } }
diff --git a/gcc/testsuite/gfortran.dg/use_6.f90 b/gcc/testsuite/gfortran.dg/use_6.f90
new file mode 100644
index 00000000000..f0b133e67ae
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_6.f90
@@ -0,0 +1,45 @@
+! { dg-do "compile" }
+! { dg-options "-std=f95" }
+! Renaming of operators
+module z
+ interface operator(.addfive.)
+ module procedure sub2
+ end interface
+contains
+function sub2(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub2 = x + 5
+end function sub2
+end module z
+
+module y
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 15
+end function sub
+end module y
+
+module x
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 25
+end function sub
+end module x
+
+use x, only : operator(.bar.) => operator(.addfive.) ! { dg-error "Fortran 2003: Renaming operators in USE statements" }
+use y, operator(.my.) => operator(.addfive.) ! { dg-error "Fortran 2003: Renaming operators in USE statements" }
+use z
+end
+
+! { dg-final { cleanup-tree-dump "x y z" } }
diff --git a/gcc/testsuite/gfortran.dg/use_7.f90 b/gcc/testsuite/gfortran.dg/use_7.f90
new file mode 100644
index 00000000000..3973176b09b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_7.f90
@@ -0,0 +1,49 @@
+! { dg-do "compile" }
+! Renaming of operators
+module z
+ type myT
+ integer :: t
+ end type myT
+ interface operator(+)
+ module procedure sub2
+ end interface
+contains
+function sub2(x)
+ type(myT) :: sub2
+ type(myT),intent(in) :: x
+ sub2%t = x%t + 5
+end function sub2
+end module z
+
+module y
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 15
+end function sub
+end module y
+
+module x
+ interface operator(.addfive.)
+ module procedure sub
+ end interface
+contains
+function sub(x)
+ integer :: sub
+ integer,intent(in) :: x
+ sub = x + 25
+end function sub
+end module x
+
+use z, operator(-) => operator(+) ! { dg-error "Syntax error in USE statement" }
+use z, operator(.op.) => operator(+) ! { dg-error "Syntax error in USE statement" }
+use x, only : bar => operator(.addfive.) ! { dg-error "Syntax error in USE statement" }
+use y, operator(.my.) => sub ! { dg-error "Syntax error in USE statement" }
+use y, operator(+) => operator(.addfive.) ! { dg-error "Syntax error in USE statement" }
+end
+
+! { dg-final { cleanup-tree-dump "x y z" } }
diff --git a/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90 b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90
index 9e591b23ea3..b0acc51409f 100644
--- a/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90
+++ b/gcc/testsuite/gfortran.dg/used_dummy_types_7.f90
@@ -33,12 +33,12 @@ END MODULE
MODULE list
INTERFACE
- SUBROUTINE dummy_atom_list_insert(this, atom)
+ SUBROUTINE dummy_atom_list_insert(this, atom2)
USE types, ONLY: dummy_atom_list
USE atom, ONLY: dummy_atom
TYPE(dummy_atom_list), INTENT(inout) :: this
- TYPE(dummy_atom), INTENT(in) :: atom
+ TYPE(dummy_atom), INTENT(in) :: atom2
END SUBROUTINE
END INTERFACE
END MODULE
diff --git a/gcc/testsuite/gfortran.dg/zero_sized_3.f90 b/gcc/testsuite/gfortran.dg/zero_sized_3.f90
new file mode 100644
index 00000000000..e4e1c06d2c0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/zero_sized_3.f90
@@ -0,0 +1,20 @@
+! { dg-do run }
+! Testcase for PR libfortran/31001
+ implicit none
+
+ integer :: i, j, k
+ integer, allocatable :: mm(:)
+ logical, allocatable :: mask(:)
+
+ do i = 2, -2, -1
+ do k = 0, 1
+ allocate (mm(i), mask(i))
+ mm(:) = k
+ mask(:) = (mm == 0)
+ j = count (mask)
+ print *, pack (mm, mask)
+ if (size (pack (mm, mask)) /= j) call abort
+ deallocate (mm, mask)
+ end do
+ end do
+end
diff --git a/gcc/testsuite/lib/g++.exp b/gcc/testsuite/lib/g++.exp
index 700cc5819e9..5e3a09838f6 100644
--- a/gcc/testsuite/lib/g++.exp
+++ b/gcc/testsuite/lib/g++.exp
@@ -221,7 +221,7 @@ proc g++_init { args } {
unset gluefile
}
- g++_maybe_build_wrapper "${tmpdir}/g++-testglue.o"
+ g++_maybe_build_wrapper "${tmpdir}/g++-testglue.o" "-fexceptions"
if {![info exists CXXFLAGS]} {
set CXXFLAGS ""
diff --git a/gcc/testsuite/lib/obj-c++.exp b/gcc/testsuite/lib/obj-c++.exp
index 8913b319283..3927e76c0f8 100644
--- a/gcc/testsuite/lib/obj-c++.exp
+++ b/gcc/testsuite/lib/obj-c++.exp
@@ -239,7 +239,7 @@ proc obj-c++_init { args } {
unset gluefile
}
- obj-c++_maybe_build_wrapper "${tmpdir}/obj-c++-testglue.o"
+ obj-c++_maybe_build_wrapper "${tmpdir}/obj-c++-testglue.o" "-fexceptions"
set ALWAYS_OBJCXXFLAGS ""
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index ec63866614e..e8efd58365d 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -340,6 +340,7 @@ proc check_profiling_available { test_what } {
|| [istarget arm*-*-eabi*]
|| [istarget arm*-*-elf]
|| [istarget arm*-*-symbianelf*]
+ || [istarget bfin-*-*]
|| [istarget powerpc-*-eabi*]
|| [istarget strongarm*-*-elf]
|| [istarget xscale*-*-elf]
@@ -349,6 +350,7 @@ proc check_profiling_available { test_what } {
|| [istarget m68k-*-elf]
|| [istarget mips*-*-elf]
|| [istarget xtensa-*-elf]
+ || [istarget *-*-vxworks*]
|| [istarget *-*-windiss] } {
set profiling_available_saved 0
} else {
@@ -517,6 +519,16 @@ proc check_effective_target_mpaired_single { } {
} "-mpaired-single"]
}
+# Return 1 if the target does not use a status wrapper.
+
+proc check_effective_target_unwrapped { } {
+ if { [target_info needs_status_wrapper] != "" \
+ && [target_info needs_status_wrapper] != "0" } {
+ return 0
+ }
+ return 1
+}
+
# Return true if iconv is supported on the target. In particular IBM1047.
proc check_iconv_available { test_what } {
@@ -2053,6 +2065,14 @@ proc check_effective_target_uclibc {} {
}]
}
+# Return true if this is a Newlib target.
+
+proc check_effective_target_newlib {} {
+ return [check_no_compiler_messages newlib object {
+ #include <newlib.h>
+ }]
+}
+
# Return 1 if
# (a) an error of a few ULP is expected in string to floating-point
# conversion functions; and
@@ -2071,6 +2091,16 @@ proc check_effective_target_dummy_wcsftime {} {
return [check_effective_target_uclibc]
}
+# Return 1 if constructors with initialization priority arguments are
+# supposed on this target.
+
+proc check_effective_target_init_priority {} {
+ return [check_no_compiler_messages init_priority assembly "
+ void f() __attribute__((constructor (1000)));
+ void f() \{\}
+ "]
+}
+
# Return 1 if the target matches the effective target 'arg', 0 otherwise.
# This can be used with any check_* proc that takes no argument and
# returns only 1 or 0. It could be used with check_* procs that take
@@ -2157,3 +2187,13 @@ proc check_effective_target_simulator { } {
return 0
}
+
+# Return 1 if the target is a VxWorks RTP.
+
+proc check_effective_target_vxworks_kernel { } {
+ return [check_no_compiler_messages vxworks_kernel assembly {
+ #if !defined __vxworks || defined __RTP__
+ #error NO
+ #endif
+ }]
+}
diff --git a/gcc/testsuite/lib/wrapper.exp b/gcc/testsuite/lib/wrapper.exp
index 48c31e68ebe..c61a21d7021 100644
--- a/gcc/testsuite/lib/wrapper.exp
+++ b/gcc/testsuite/lib/wrapper.exp
@@ -16,20 +16,25 @@
# This file contains GCC-specifics for status wrappers for test programs.
-# ${tool}_maybe_build_wrapper -- Build wrapper object if the target needs it.
+# ${tool}_maybe_build_wrapper -- Build wrapper object if the target
+# needs it. FILENAME is the path to the wrapper file. If there are
+# additional arguments, they are command-line options to provide to
+# the compiler when compiling FILENAME.
-proc ${tool}_maybe_build_wrapper { filename } {
+proc ${tool}_maybe_build_wrapper { filename args } {
global gluefile wrap_flags
if { [target_info needs_status_wrapper] != "" \
&& [target_info needs_status_wrapper] != "0" \
&& ![info exists gluefile] } {
set saved_wrap_compile_flags [target_info wrap_compile_flags]
+ set flags [join $args " "]
# The wrapper code may contain code that gcc objects on. This
# became true for dejagnu-1.4.4. The set of warnings and code
# that gcc objects on may change, so just make sure -w is always
# passed to turn off all warnings.
- set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags -w"
+ set_currtarget_info wrap_compile_flags \
+ "$saved_wrap_compile_flags -w $flags"
set result [build_wrapper $filename]
set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags"
if { $result != "" } {
diff --git a/gcc/timevar.def b/gcc/timevar.def
index a30efc56f2f..855f959eeeb 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -109,6 +109,7 @@ DEFTIMEVAR (TV_TREE_LOOP_UNSWITCH , "tree loop unswitching")
DEFTIMEVAR (TV_COMPLETE_UNROLL , "complete unrolling")
DEFTIMEVAR (TV_TREE_VECTORIZATION , "tree vectorization")
DEFTIMEVAR (TV_TREE_LINEAR_TRANSFORM , "tree loop linear")
+DEFTIMEVAR (TV_CHECK_DATA_DEPS , "tree check data dependences")
DEFTIMEVAR (TV_TREE_PREFETCH , "tree prefetching")
DEFTIMEVAR (TV_TREE_LOOP_IVOPTS , "tree iv optimization")
DEFTIMEVAR (TV_TREE_LOOP_INIT , "tree loop init")
diff --git a/gcc/tlink.c b/gcc/tlink.c
index 1689ddbe242..7907f419488 100644
--- a/gcc/tlink.c
+++ b/gcc/tlink.c
@@ -607,12 +607,20 @@ scan_linker_output (const char *fname)
{
FILE *stream = fopen (fname, "r");
char *line;
+ int skip_next_in_line = 0;
while ((line = tfgets (stream)) != NULL)
{
char *p = line, *q;
symbol *sym;
int end;
+ int ok = 0;
+
+ /* On darwin9, we might have to skip " in " lines as well. */
+ if (skip_next_in_line
+ && strstr (p, " in "))
+ continue;
+ skip_next_in_line = 0;
while (*p && ISSPACE ((unsigned char) *p))
++p;
@@ -654,6 +662,21 @@ scan_linker_output (const char *fname)
demangled *dem = 0;
q = 0;
+ /* On darwin9, we look for "foo" referenced from:\n\(.* in .*\n\)* */
+ if (strcmp (oldq, "referenced from:") == 0)
+ {
+ /* We have to remember that we found a symbol to tweak. */
+ ok = 1;
+
+ /* We actually want to start from the first word on the
+ line. */
+ oldq = p;
+
+ /* Since the format is multiline, we have to skip
+ following lines with " in ". */
+ skip_next_in_line = 1;
+ }
+
/* First try `GNU style'. */
p = strchr (oldq, '`');
if (p)
@@ -681,7 +704,8 @@ scan_linker_output (const char *fname)
/* We need to check for certain error keywords here, or we would
mistakenly use GNU ld's "In function `foo':" message. */
- if (q && (strstr (oldq, "ndefined")
+ if (q && (ok
+ || strstr (oldq, "ndefined")
|| strstr (oldq, "nresolved")
|| strstr (oldq, "nsatisfied")
|| strstr (oldq, "ultiple")))
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 4ad6f1d983e..8a471d8f955 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1,6 +1,6 @@
/* Top level of GCC compilers (cc1, cc1plus, etc.)
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -239,7 +239,7 @@ int in_system_header = 0;
int flag_detailed_statistics = 0;
/* A random sequence of characters, unless overridden by user. */
-const char *flag_random_seed;
+static const char *flag_random_seed;
/* A local time stamp derived from the time of compilation. It will be
zero if the system cannot provide a time. It will be -1u, if the
@@ -451,23 +451,20 @@ announce_function (tree decl)
}
}
-/* Set up a default flag_random_seed and local_tick, unless the user
- already specified one. */
+/* Initialize local_tick with the time of day, or -1 if
+ flag_random_seed is set. */
static void
-randomize (void)
+init_local_tick (void)
{
if (!flag_random_seed)
{
- unsigned HOST_WIDE_INT value;
- static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
-
/* Get some more or less random data. */
#ifdef HAVE_GETTIMEOFDAY
{
- struct timeval tv;
+ struct timeval tv;
- gettimeofday (&tv, NULL);
+ gettimeofday (&tv, NULL);
local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
#else
@@ -478,15 +475,47 @@ randomize (void)
local_tick = (unsigned) now;
}
#endif
- value = local_tick ^ getpid ();
-
- sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
- flag_random_seed = random_seed;
}
- else if (!local_tick)
+ else
local_tick = -1;
}
+/* Set up a default flag_random_seed and local_tick, unless the user
+ already specified one. Must be called after init_local_tick. */
+
+static void
+init_random_seed (void)
+{
+ unsigned HOST_WIDE_INT value;
+ static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
+
+ value = local_tick ^ getpid ();
+
+ sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
+ flag_random_seed = random_seed;
+}
+
+/* Obtain the random_seed string. Unless NOINIT, initialize it if
+ it's not provided in the command line. */
+
+const char *
+get_random_seed (bool noinit)
+{
+ if (!flag_random_seed && !noinit)
+ init_random_seed ();
+ return flag_random_seed;
+}
+
+/* Modify the random_seed string to VAL. Return its previous
+ value. */
+
+const char *
+set_random_seed (const char *val)
+{
+ const char *old = flag_random_seed;
+ flag_random_seed = val;
+ return old;
+}
/* Decode the string P as an integral parameter.
If the string is indeed an integer return its numeric value else
@@ -1277,7 +1306,8 @@ print_switch_values (print_switch_fn_type print_fn)
/* Fill in the -frandom-seed option, if the user didn't pass it, so
that it can be printed below. This helps reproducibility. */
- randomize ();
+ if (!flag_random_seed)
+ init_random_seed ();
/* Print the options as passed. */
pos = print_single_switch (print_fn, pos,
@@ -2119,7 +2149,7 @@ toplev_main (unsigned int argc, const char **argv)
enough to default flags appropriately. */
decode_options (argc, argv);
- randomize ();
+ init_local_tick ();
/* Exit early if we can (e.g. -help). */
if (!exit_after_options)
diff --git a/gcc/toplev.h b/gcc/toplev.h
index a23d52c8983..524708d1d07 100644
--- a/gcc/toplev.h
+++ b/gcc/toplev.h
@@ -1,5 +1,5 @@
/* toplev.h - Various declarations for functions found in toplev.c
- Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+ Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -191,4 +191,9 @@ exact_log2 (unsigned HOST_WIDE_INT x)
extern const char *get_src_pwd (void);
extern bool set_src_pwd (const char *);
+/* Functions used to manipulate the random seed. */
+
+extern const char *get_random_seed (bool);
+extern const char *set_random_seed (const char *);
+
#endif /* ! GCC_TOPLEV_H */
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 593dc0d03c1..202a69e2c8f 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -4606,7 +4606,7 @@ move_stmt_r (tree *tp, int *walk_subtrees, void *data)
if (p->new_label_map)
{
struct tree_map in, *out;
- in.from = t;
+ in.base.from = t;
out = htab_find_with_hash (p->new_label_map, &in, DECL_UID (t));
if (out)
*tp = t = out->to;
@@ -4795,7 +4795,7 @@ new_label_mapper (tree decl, void *data)
m = xmalloc (sizeof (struct tree_map));
m->hash = DECL_UID (decl);
- m->from = decl;
+ m->base.from = decl;
m->to = create_artificial_label ();
LABEL_DECL_UID (m->to) = LABEL_DECL_UID (decl);
diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c
index a64ec1805c5..3f479edad03 100644
--- a/gcc/tree-complex.c
+++ b/gcc/tree-complex.c
@@ -1533,10 +1533,10 @@ struct tree_opt_pass pass_lower_complex =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_dump_func | TODO_ggc_collect
- | TODO_update_smt_usage
- | TODO_update_ssa
- | TODO_verify_stmts, /* todo_flags_finish */
+ TODO_dump_func
+ | TODO_ggc_collect
+ | TODO_update_ssa
+ | TODO_verify_stmts, /* todo_flags_finish */
0 /* letter */
};
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index b84f36be660..d59278c89f5 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -1,5 +1,5 @@
/* Data references and dependences detectors.
- Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Sebastian Pop <pop@cri.ensmp.fr>
This file is part of GCC.
@@ -125,10 +125,6 @@ static struct datadep_stats
static tree object_analysis (tree, tree, bool, struct data_reference **,
tree *, tree *, tree *, tree *, tree *,
struct ptr_info_def **, subvar_t *);
-static struct data_reference * init_data_ref (tree, tree, tree, tree, bool,
- tree, tree, tree, tree, tree,
- struct ptr_info_def *,
- enum data_ref_type);
static bool subscript_dependence_tester_1 (struct data_dependence_relation *,
struct data_reference *,
struct data_reference *);
@@ -172,6 +168,7 @@ ptr_ptr_may_alias_p (tree ptr_a, tree ptr_b,
tree tag_a = NULL_TREE, tag_b = NULL_TREE;
struct ptr_info_def *pi_a = DR_PTR_INFO (dra);
struct ptr_info_def *pi_b = DR_PTR_INFO (drb);
+ bitmap bal1, bal2;
if (pi_a && pi_a->name_mem_tag && pi_b && pi_b->name_mem_tag)
{
@@ -192,7 +189,19 @@ ptr_ptr_may_alias_p (tree ptr_a, tree ptr_b,
if (!tag_b)
return false;
}
- *aliased = (tag_a == tag_b);
+ bal1 = BITMAP_ALLOC (NULL);
+ bitmap_set_bit (bal1, DECL_UID (tag_a));
+ if (MTAG_P (tag_a) && MTAG_ALIASES (tag_a))
+ bitmap_ior_into (bal1, MTAG_ALIASES (tag_a));
+
+ bal2 = BITMAP_ALLOC (NULL);
+ bitmap_set_bit (bal2, DECL_UID (tag_b));
+ if (MTAG_P (tag_b) && MTAG_ALIASES (tag_b))
+ bitmap_ior_into (bal2, MTAG_ALIASES (tag_b));
+ *aliased = bitmap_intersect_p (bal1, bal2);
+
+ BITMAP_FREE (bal1);
+ BITMAP_FREE (bal2);
return true;
}
@@ -819,6 +828,7 @@ dump_data_dependence_relation (FILE *outf,
dump_subscript (outf, DDR_SUBSCRIPT (ddr, i));
}
+ fprintf (outf, " inner loop index: %d\n", DDR_INNER_LOOP (ddr));
fprintf (outf, " loop nest: (");
for (i = 0; VEC_iterate (loop_p, DDR_LOOP_NEST (ddr), i, loopi); i++)
fprintf (outf, "%d ", loopi->num);
@@ -972,27 +982,24 @@ analyze_array_indexes (struct loop *loop,
set to true when REF is in the right hand side of an
assignment. */
-struct data_reference *
-analyze_array (tree stmt, tree ref, bool is_read)
+static struct data_reference *
+init_array_ref (tree stmt, tree ref, bool is_read)
{
- struct data_reference *res;
- VEC(tree,heap) *acc_fns;
+ struct loop *loop = loop_containing_stmt (stmt);
+ VEC(tree,heap) *acc_fns = VEC_alloc (tree, heap, 3);
+ struct data_reference *res = XNEW (struct data_reference);;
if (dump_file && (dump_flags & TDF_DETAILS))
{
- fprintf (dump_file, "(analyze_array \n");
+ fprintf (dump_file, "(init_array_ref \n");
fprintf (dump_file, " (ref = ");
print_generic_stmt (dump_file, ref, 0);
fprintf (dump_file, ")\n");
}
- res = XNEW (struct data_reference);
-
DR_STMT (res) = stmt;
DR_REF (res) = ref;
- acc_fns = VEC_alloc (tree, heap, 3);
- DR_BASE_OBJECT (res) = analyze_array_indexes
- (loop_containing_stmt (stmt), &acc_fns, ref, stmt);
+ DR_BASE_OBJECT (res) = analyze_array_indexes (loop, &acc_fns, ref, stmt);
DR_TYPE (res) = ARRAY_REF_TYPE;
DR_SET_ACCESS_FNS (res, acc_fns);
DR_IS_READ (res) = is_read;
@@ -1010,6 +1017,45 @@ analyze_array (tree stmt, tree ref, bool is_read)
return res;
}
+/* For a data reference REF contained in the statement STMT, initialize
+ a DATA_REFERENCE structure, and return it. */
+
+static struct data_reference *
+init_pointer_ref (tree stmt, tree ref, tree access_fn, bool is_read,
+ tree base_address, tree step, struct ptr_info_def *ptr_info)
+{
+ struct data_reference *res = XNEW (struct data_reference);
+ VEC(tree,heap) *acc_fns = VEC_alloc (tree, heap, 3);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "(init_pointer_ref \n");
+ fprintf (dump_file, " (ref = ");
+ print_generic_stmt (dump_file, ref, 0);
+ fprintf (dump_file, ")\n");
+ }
+
+ DR_STMT (res) = stmt;
+ DR_REF (res) = ref;
+ DR_BASE_OBJECT (res) = NULL_TREE;
+ DR_TYPE (res) = POINTER_REF_TYPE;
+ DR_SET_ACCESS_FNS (res, acc_fns);
+ VEC_quick_push (tree, DR_ACCESS_FNS (res), access_fn);
+ DR_IS_READ (res) = is_read;
+ DR_BASE_ADDRESS (res) = base_address;
+ DR_OFFSET (res) = NULL_TREE;
+ DR_INIT (res) = NULL_TREE;
+ DR_STEP (res) = step;
+ DR_OFFSET_MISALIGNMENT (res) = NULL_TREE;
+ DR_MEMTAG (res) = NULL_TREE;
+ DR_PTR_INFO (res) = ptr_info;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, ")\n");
+
+ return res;
+}
+
/* Analyze an indirect memory reference, REF, that comes from STMT.
IS_READ is true if this is an indirect load, and false if it is
an indirect store.
@@ -1050,7 +1096,7 @@ analyze_indirect_ref (tree stmt, tree ref, bool is_read)
if (!expr_invariant_in_loop_p (loop, init))
{
- if (dump_file && (dump_flags & TDF_DETAILS))
+ if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "\ninitial condition is not loop invariant.\n");
}
else
@@ -1074,61 +1120,8 @@ analyze_indirect_ref (tree stmt, tree ref, bool is_read)
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "\nunknown evolution of ptr.\n");
}
- return init_data_ref (stmt, ref, NULL_TREE, access_fn, is_read, base_address,
- NULL_TREE, step, NULL_TREE, NULL_TREE,
- ptr_info, POINTER_REF_TYPE);
-}
-
-/* For a data reference REF contained in the statement STMT, initialize
- a DATA_REFERENCE structure, and return it. */
-
-struct data_reference *
-init_data_ref (tree stmt,
- tree ref,
- tree base,
- tree access_fn,
- bool is_read,
- tree base_address,
- tree init_offset,
- tree step,
- tree misalign,
- tree memtag,
- struct ptr_info_def *ptr_info,
- enum data_ref_type type)
-{
- struct data_reference *res;
- VEC(tree,heap) *acc_fns;
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "(init_data_ref \n");
- fprintf (dump_file, " (ref = ");
- print_generic_stmt (dump_file, ref, 0);
- fprintf (dump_file, ")\n");
- }
-
- res = XNEW (struct data_reference);
-
- DR_STMT (res) = stmt;
- DR_REF (res) = ref;
- DR_BASE_OBJECT (res) = base;
- DR_TYPE (res) = type;
- acc_fns = VEC_alloc (tree, heap, 3);
- DR_SET_ACCESS_FNS (res, acc_fns);
- VEC_quick_push (tree, DR_ACCESS_FNS (res), access_fn);
- DR_IS_READ (res) = is_read;
- DR_BASE_ADDRESS (res) = base_address;
- DR_OFFSET (res) = init_offset;
- DR_INIT (res) = NULL_TREE;
- DR_STEP (res) = step;
- DR_OFFSET_MISALIGNMENT (res) = misalign;
- DR_MEMTAG (res) = memtag;
- DR_PTR_INFO (res) = ptr_info;
-
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, ")\n");
-
- return res;
+ return init_pointer_ref (stmt, ref, access_fn, is_read, base_address,
+ step, ptr_info);
}
/* Function strip_conversions
@@ -1585,7 +1578,7 @@ object_analysis (tree memref, tree stmt, bool is_read,
if (!(*dr))
{
if (TREE_CODE (memref) == ARRAY_REF)
- *dr = analyze_array (stmt, memref, is_read);
+ *dr = init_array_ref (stmt, memref, is_read);
else if (TREE_CODE (memref) == COMPONENT_REF)
comp_ref = memref;
else
@@ -1658,7 +1651,7 @@ object_analysis (tree memref, tree stmt, bool is_read,
{
if (comp_ref && TREE_CODE (TREE_OPERAND (comp_ref, 0)) == ARRAY_REF)
{
- *dr = analyze_array (stmt, TREE_OPERAND (comp_ref, 0), is_read);
+ *dr = init_array_ref (stmt, TREE_OPERAND (comp_ref, 0), is_read);
if (DR_NUM_DIMENSIONS (*dr) != 1)
{
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -1842,7 +1835,7 @@ object_analysis (tree memref, tree stmt, bool is_read,
Extract INVARIANT and CONSTANT parts from OFFSET.
*/
-static void
+static bool
analyze_offset (tree offset, tree *invariant, tree *constant)
{
tree op0, op1, constant_0, constant_1, invariant_0, invariant_1;
@@ -1858,23 +1851,36 @@ analyze_offset (tree offset, tree *invariant, tree *constant)
*constant = offset;
else
*invariant = offset;
- return;
+ return true;
}
op0 = TREE_OPERAND (offset, 0);
op1 = TREE_OPERAND (offset, 1);
/* Recursive call with the operands. */
- analyze_offset (op0, &invariant_0, &constant_0);
- analyze_offset (op1, &invariant_1, &constant_1);
+ if (!analyze_offset (op0, &invariant_0, &constant_0)
+ || !analyze_offset (op1, &invariant_1, &constant_1))
+ return false;
- /* Combine the results. */
+ /* Combine the results. Add negation to the subtrahend in case of
+ subtraction. */
+ if (constant_0 && constant_1)
+ return false;
*constant = constant_0 ? constant_0 : constant_1;
+ if (code == MINUS_EXPR && constant_1)
+ *constant = fold_build1 (NEGATE_EXPR, TREE_TYPE (*constant), *constant);
+
if (invariant_0 && invariant_1)
*invariant =
fold_build2 (code, TREE_TYPE (invariant_0), invariant_0, invariant_1);
else
- *invariant = invariant_0 ? invariant_0 : invariant_1;
+ {
+ *invariant = invariant_0 ? invariant_0 : invariant_1;
+ if (code == MINUS_EXPR && invariant_1)
+ *invariant =
+ fold_build1 (NEGATE_EXPR, TREE_TYPE (*invariant), *invariant);
+ }
+ return true;
}
/* Free the memory used by the data reference DR. */
@@ -1948,7 +1954,17 @@ create_data_ref (tree memref, tree stmt, bool is_read)
STRIP_NOPS (offset);
if (offset != orig_offset)
type = TREE_TYPE (orig_offset);
- analyze_offset (offset, &invariant, &constant);
+ if (!analyze_offset (offset, &invariant, &constant))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\ncreate_data_ref: failed to analyze dr's");
+ fprintf (dump_file, " offset for ");
+ print_generic_expr (dump_file, memref, TDF_SLIM);
+ fprintf (dump_file, "\n");
+ }
+ return NULL;
+ }
if (type && invariant)
invariant = fold_convert (type, invariant);
@@ -2289,6 +2305,7 @@ initialize_data_dependence_relation (struct data_reference *a,
DDR_ARE_DEPENDENT (res) = NULL_TREE;
DDR_SUBSCRIPTS (res) = VEC_alloc (subscript_p, heap, DR_NUM_DIMENSIONS (a));
DDR_LOOP_NEST (res) = loop_nest;
+ DDR_INNER_LOOP (res) = 0;
DDR_DIR_VECTS (res) = NULL;
DDR_DIST_VECTS (res) = NULL;
@@ -2530,29 +2547,85 @@ analyze_ziv_subscript (tree chrec_a,
fprintf (dump_file, ")\n");
}
-/* Get the real or estimated number of iterations for LOOPNUM, whichever is
- available. Return the number of iterations as a tree, or NULL_TREE if
- we don't know. */
+/* Sets NIT to the estimated number of executions of the statements in
+ LOOP. If CONSERVATIVE is true, we must be sure that NIT is at least as
+ large as the number of iterations. If we have no reliable estimate,
+ the function returns false, otherwise returns true. */
-static tree
-get_number_of_iters_for_loop (int loopnum)
+static bool
+estimated_loop_iterations (struct loop *loop, bool conservative,
+ double_int *nit)
{
- struct loop *loop = get_loop (loopnum);
tree numiter = number_of_exit_cond_executions (loop);
+ /* If we have an exact value, use it. */
if (TREE_CODE (numiter) == INTEGER_CST)
- return numiter;
+ {
+ *nit = tree_to_double_int (numiter);
+ return true;
+ }
+
+ /* If we have a measured profile and we do not ask for a conservative bound,
+ use it. */
+ if (!conservative && loop->header->count != 0)
+ {
+ *nit = uhwi_to_double_int (expected_loop_iterations (loop) + 1);
+ return true;
+ }
+ /* Finally, try using a reliable estimate on number of iterations according
+ to the size of the accessed data, if available. */
+ estimate_numbers_of_iterations_loop (loop);
if (loop->estimate_state == EST_AVAILABLE)
{
- tree type = lang_hooks.types.type_for_size (INT_TYPE_SIZE, true);
- if (double_int_fits_to_tree_p (type, loop->estimated_nb_iterations))
- return double_int_to_tree (type, loop->estimated_nb_iterations);
+ *nit = loop->estimated_nb_iterations;
+ return true;
}
- return NULL_TREE;
+ return false;
+}
+
+/* Similar to estimated_loop_iterations, but returns the estimate only
+ if it fits to HOST_WIDE_INT. If this is not the case, or the estimate
+ on the number of iterations of LOOP could not be derived, returns -1. */
+
+HOST_WIDE_INT
+estimated_loop_iterations_int (struct loop *loop, bool conservative)
+{
+ double_int nit;
+ HOST_WIDE_INT hwi_nit;
+
+ if (!estimated_loop_iterations (loop, conservative, &nit))
+ return -1;
+
+ if (!double_int_fits_in_shwi_p (nit))
+ return -1;
+ hwi_nit = double_int_to_shwi (nit);
+
+ return hwi_nit < 0 ? -1 : hwi_nit;
}
+/* Similar to estimated_loop_iterations, but returns the estimate as a tree,
+ and only if it fits to the int type. If this is not the case, or the
+ estimate on the number of iterations of LOOP could not be derived, returns
+ chrec_dont_know. */
+
+static tree
+estimated_loop_iterations_tree (struct loop *loop, bool conservative)
+{
+ double_int nit;
+ tree type;
+
+ if (!estimated_loop_iterations (loop, conservative, &nit))
+ return chrec_dont_know;
+
+ type = lang_hooks.types.type_for_size (INT_TYPE_SIZE, true);
+ if (!double_int_fits_to_tree_p (type, nit))
+ return chrec_dont_know;
+
+ return double_int_to_tree (type, nit);
+}
+
/* Analyze a SIV (Single Index Variable) subscript where CHREC_A is a
constant, and CHREC_B is an affine function. *OVERLAPS_A and
*OVERLAPS_B are initialized to the functions that describe the
@@ -2613,8 +2686,8 @@ analyze_siv_subscript_cst_affine (tree chrec_a,
if (tree_fold_divides_p (CHREC_RIGHT (chrec_b), difference))
{
- tree numiter;
- int loopnum = CHREC_VARIABLE (chrec_b);
+ HOST_WIDE_INT numiter;
+ struct loop *loop = get_chrec_loop (chrec_b);
*overlaps_a = conflict_fn (1, affine_fn_cst (integer_zero_node));
tmp = fold_build2 (EXACT_DIV_EXPR, integer_type_node,
@@ -2628,11 +2701,10 @@ analyze_siv_subscript_cst_affine (tree chrec_a,
/* Perform weak-zero siv test to see if overlap is
outside the loop bounds. */
- numiter = get_number_of_iters_for_loop (loopnum);
+ numiter = estimated_loop_iterations_int (loop, true);
- if (numiter != NULL_TREE
- && TREE_CODE (tmp) == INTEGER_CST
- && tree_int_cst_lt (numiter, tmp))
+ if (numiter >= 0
+ && compare_tree_int (tmp, numiter) > 0)
{
free_conflict_function (*overlaps_a);
free_conflict_function (*overlaps_b);
@@ -2696,8 +2768,8 @@ analyze_siv_subscript_cst_affine (tree chrec_a,
*/
if (tree_fold_divides_p (CHREC_RIGHT (chrec_b), difference))
{
- tree numiter;
- int loopnum = CHREC_VARIABLE (chrec_b);
+ HOST_WIDE_INT numiter;
+ struct loop *loop = get_chrec_loop (chrec_b);
*overlaps_a = conflict_fn (1, affine_fn_cst (integer_zero_node));
tmp = fold_build2 (EXACT_DIV_EXPR,
@@ -2708,11 +2780,10 @@ analyze_siv_subscript_cst_affine (tree chrec_a,
/* Perform weak-zero siv test to see if overlap is
outside the loop bounds. */
- numiter = get_number_of_iters_for_loop (loopnum);
+ numiter = estimated_loop_iterations_int (loop, true);
- if (numiter != NULL_TREE
- && TREE_CODE (tmp) == INTEGER_CST
- && tree_int_cst_lt (numiter, tmp))
+ if (numiter >= 0
+ && compare_tree_int (tmp, numiter) > 0)
{
free_conflict_function (*overlaps_a);
free_conflict_function (*overlaps_b);
@@ -2839,8 +2910,7 @@ compute_overlap_steps_for_affine_1_2 (tree chrec_a, tree chrec_b,
{
bool xz_p, yz_p, xyz_p;
int step_x, step_y, step_z;
- int niter_x, niter_y, niter_z, niter;
- tree numiter_x, numiter_y, numiter_z;
+ HOST_WIDE_INT niter_x, niter_y, niter_z, niter;
affine_fn overlaps_a_xz, overlaps_b_xz;
affine_fn overlaps_a_yz, overlaps_b_yz;
affine_fn overlaps_a_xyz, overlaps_b_xyz;
@@ -2851,12 +2921,12 @@ compute_overlap_steps_for_affine_1_2 (tree chrec_a, tree chrec_b,
step_y = int_cst_value (CHREC_RIGHT (chrec_a));
step_z = int_cst_value (CHREC_RIGHT (chrec_b));
- numiter_x = get_number_of_iters_for_loop (CHREC_VARIABLE (CHREC_LEFT (chrec_a)));
- numiter_y = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_a));
- numiter_z = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_b));
+ niter_x = estimated_loop_iterations_int
+ (get_chrec_loop (CHREC_LEFT (chrec_a)), true);
+ niter_y = estimated_loop_iterations_int (get_chrec_loop (chrec_a), true);
+ niter_z = estimated_loop_iterations_int (get_chrec_loop (chrec_b), true);
- if (numiter_x == NULL_TREE || numiter_y == NULL_TREE
- || numiter_z == NULL_TREE)
+ if (niter_x < 0 || niter_y < 0 || niter_z < 0)
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "overlap steps test failed: no iteration counts.\n");
@@ -2867,10 +2937,6 @@ compute_overlap_steps_for_affine_1_2 (tree chrec_a, tree chrec_b,
return;
}
- niter_x = int_cst_value (numiter_x);
- niter_y = int_cst_value (numiter_y);
- niter_z = int_cst_value (numiter_z);
-
niter = MIN (niter_x, niter_z);
compute_overlap_steps_for_affine_univar (niter, step_x, step_z,
&overlaps_a_xz,
@@ -3016,13 +3082,14 @@ analyze_subscript_affine_affine (tree chrec_a,
if (nb_vars_a == 1 && nb_vars_b == 1)
{
int step_a, step_b;
- int niter, niter_a, niter_b;
- tree numiter_a, numiter_b;
+ HOST_WIDE_INT niter, niter_a, niter_b;
affine_fn ova, ovb;
- numiter_a = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_a));
- numiter_b = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_b));
- if (numiter_a == NULL_TREE || numiter_b == NULL_TREE)
+ niter_a = estimated_loop_iterations_int
+ (get_chrec_loop (chrec_a), true);
+ niter_b = estimated_loop_iterations_int
+ (get_chrec_loop (chrec_b), true);
+ if (niter_a < 0 || niter_b < 0)
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "affine-affine test failed: missing iteration counts.\n");
@@ -3032,8 +3099,6 @@ analyze_subscript_affine_affine (tree chrec_a,
goto end_analyze_subs_aa;
}
- niter_a = int_cst_value (numiter_a);
- niter_b = int_cst_value (numiter_b);
niter = MIN (niter_a, niter_b);
step_a = int_cst_value (CHREC_RIGHT (chrec_a));
@@ -3127,12 +3192,13 @@ analyze_subscript_affine_affine (tree chrec_a,
equation: chrec_a (X0) = chrec_b (Y0). */
int x0, y0;
int niter, niter_a, niter_b;
- tree numiter_a, numiter_b;
- numiter_a = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_a));
- numiter_b = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_b));
+ niter_a = estimated_loop_iterations_int
+ (get_chrec_loop (chrec_a), true);
+ niter_b = estimated_loop_iterations_int
+ (get_chrec_loop (chrec_b), true);
- if (numiter_a == NULL_TREE || numiter_b == NULL_TREE)
+ if (niter_a < 0 || niter_b < 0)
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "affine-affine test failed: missing iteration counts.\n");
@@ -3142,8 +3208,6 @@ analyze_subscript_affine_affine (tree chrec_a,
goto end_analyze_subs_aa;
}
- niter_a = int_cst_value (numiter_a);
- niter_b = int_cst_value (numiter_b);
niter = MIN (niter_a, niter_b);
i0 = U[0][0] * gamma / gcd_alpha_beta;
@@ -3468,7 +3532,8 @@ analyze_miv_subscript (tree chrec_a,
in the same order. */
*overlaps_a = conflict_fn (1, affine_fn_cst (integer_zero_node));
*overlaps_b = conflict_fn (1, affine_fn_cst (integer_zero_node));
- *last_conflicts = get_number_of_iters_for_loop (CHREC_VARIABLE (chrec_a));
+ *last_conflicts = estimated_loop_iterations_tree
+ (get_chrec_loop (chrec_a), true);
dependence_stats.num_miv_dependent++;
}
@@ -4115,10 +4180,10 @@ static bool
access_functions_are_affine_or_constant_p (struct data_reference *a)
{
unsigned int i;
- VEC(tree,heap) **fns = DR_ACCESS_FNS_ADDR (a);
+ VEC(tree,heap) *fns = DR_ACCESS_FNS (a);
tree t;
-
- for (i = 0; VEC_iterate (tree, *fns, i, t); i++)
+
+ for (i = 0; VEC_iterate (tree, fns, i, t); i++)
if (!evolution_function_is_constant_p (t)
&& !evolution_function_is_affine_multivariate_p (t))
return false;
@@ -4126,6 +4191,530 @@ access_functions_are_affine_or_constant_p (struct data_reference *a)
return true;
}
+/* Initializes an equation for an OMEGA problem using the information
+ contained in the ACCESS_FUN. Returns true when the operation
+ succeeded.
+
+ PB is the omega constraint system.
+ EQ is the number of the equation to be initialized.
+ OFFSET is used for shifting the variables names in the constraints:
+ a constrain is composed of 2 * the number of variables surrounding
+ dependence accesses. OFFSET is set either to 0 for the first n variables,
+ then it is set to n.
+ ACCESS_FUN is expected to be an affine chrec. */
+
+static bool
+init_omega_eq_with_af (omega_pb pb, unsigned eq,
+ unsigned int offset, tree access_fun,
+ struct data_dependence_relation *ddr)
+{
+ switch (TREE_CODE (access_fun))
+ {
+ case POLYNOMIAL_CHREC:
+ {
+ tree left = CHREC_LEFT (access_fun);
+ tree right = CHREC_RIGHT (access_fun);
+ int var = CHREC_VARIABLE (access_fun);
+ unsigned var_idx;
+
+ if (TREE_CODE (right) != INTEGER_CST)
+ return false;
+
+ var_idx = index_in_loop_nest (var, DDR_LOOP_NEST (ddr));
+ pb->eqs[eq].coef[offset + var_idx + 1] = int_cst_value (right);
+
+ /* Compute the innermost loop index. */
+ DDR_INNER_LOOP (ddr) = MAX (DDR_INNER_LOOP (ddr), var_idx);
+
+ if (offset == 0)
+ pb->eqs[eq].coef[var_idx + DDR_NB_LOOPS (ddr) + 1]
+ += int_cst_value (right);
+
+ switch (TREE_CODE (left))
+ {
+ case POLYNOMIAL_CHREC:
+ return init_omega_eq_with_af (pb, eq, offset, left, ddr);
+
+ case INTEGER_CST:
+ pb->eqs[eq].coef[0] += int_cst_value (left);
+ return true;
+
+ default:
+ return false;
+ }
+ }
+
+ case INTEGER_CST:
+ pb->eqs[eq].coef[0] += int_cst_value (access_fun);
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+/* As explained in the comments preceding init_omega_for_ddr, we have
+ to set up a system for each loop level, setting outer loops
+ variation to zero, and current loop variation to positive or zero.
+ Save each lexico positive distance vector. */
+
+static void
+omega_extract_distance_vectors (omega_pb pb,
+ struct data_dependence_relation *ddr)
+{
+ int eq, geq;
+ unsigned i, j;
+ struct loop *loopi, *loopj;
+ enum omega_result res;
+
+ /* Set a new problem for each loop in the nest. The basis is the
+ problem that we have initialized until now. On top of this we
+ add new constraints. */
+ for (i = 0; i <= DDR_INNER_LOOP (ddr)
+ && VEC_iterate (loop_p, DDR_LOOP_NEST (ddr), i, loopi); i++)
+ {
+ int dist = 0;
+ omega_pb copy = omega_alloc_problem (2 * DDR_NB_LOOPS (ddr),
+ DDR_NB_LOOPS (ddr));
+
+ omega_copy_problem (copy, pb);
+
+ /* For all the outer loops "loop_j", add "dj = 0". */
+ for (j = 0;
+ j < i && VEC_iterate (loop_p, DDR_LOOP_NEST (ddr), j, loopj); j++)
+ {
+ eq = omega_add_zero_eq (copy, omega_black);
+ copy->eqs[eq].coef[j + 1] = 1;
+ }
+
+ /* For "loop_i", add "0 <= di". */
+ geq = omega_add_zero_geq (copy, omega_black);
+ copy->geqs[geq].coef[i + 1] = 1;
+
+ /* Reduce the constraint system, and test that the current
+ problem is feasible. */
+ res = omega_simplify_problem (copy);
+ if (res == omega_false
+ || res == omega_unknown
+ || copy->num_geqs > (int) DDR_NB_LOOPS (ddr))
+ goto next_problem;
+
+ for (eq = 0; eq < copy->num_subs; eq++)
+ if (copy->subs[eq].key == (int) i + 1)
+ {
+ dist = copy->subs[eq].coef[0];
+ goto found_dist;
+ }
+
+ if (dist == 0)
+ {
+ /* Reinitialize problem... */
+ omega_copy_problem (copy, pb);
+ for (j = 0;
+ j < i && VEC_iterate (loop_p, DDR_LOOP_NEST (ddr), j, loopj); j++)
+ {
+ eq = omega_add_zero_eq (copy, omega_black);
+ copy->eqs[eq].coef[j + 1] = 1;
+ }
+
+ /* ..., but this time "di = 1". */
+ eq = omega_add_zero_eq (copy, omega_black);
+ copy->eqs[eq].coef[i + 1] = 1;
+ copy->eqs[eq].coef[0] = -1;
+
+ res = omega_simplify_problem (copy);
+ if (res == omega_false
+ || res == omega_unknown
+ || copy->num_geqs > (int) DDR_NB_LOOPS (ddr))
+ goto next_problem;
+
+ for (eq = 0; eq < copy->num_subs; eq++)
+ if (copy->subs[eq].key == (int) i + 1)
+ {
+ dist = copy->subs[eq].coef[0];
+ goto found_dist;
+ }
+ }
+
+ found_dist:;
+ /* Save the lexicographically positive distance vector. */
+ if (dist >= 0)
+ {
+ lambda_vector dist_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
+ lambda_vector dir_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
+
+ dist_v[i] = dist;
+
+ for (eq = 0; eq < copy->num_subs; eq++)
+ if (copy->subs[eq].key > 0)
+ {
+ dist = copy->subs[eq].coef[0];
+ dist_v[copy->subs[eq].key - 1] = dist;
+ }
+
+ for (j = 0; j < DDR_NB_LOOPS (ddr); j++)
+ dir_v[j] = dir_from_dist (dist_v[j]);
+
+ save_dist_v (ddr, dist_v);
+ save_dir_v (ddr, dir_v);
+ }
+
+ next_problem:;
+ omega_free_problem (copy);
+ }
+}
+
+/* This is called for each subscript of a tuple of data references:
+ insert an equality for representing the conflicts. */
+
+static bool
+omega_setup_subscript (tree access_fun_a, tree access_fun_b,
+ struct data_dependence_relation *ddr,
+ omega_pb pb, bool *maybe_dependent)
+{
+ int eq;
+ tree fun_a = chrec_convert (integer_type_node, access_fun_a, NULL_TREE);
+ tree fun_b = chrec_convert (integer_type_node, access_fun_b, NULL_TREE);
+ tree difference = chrec_fold_minus (integer_type_node, fun_a, fun_b);
+
+ /* When the fun_a - fun_b is not constant, the dependence is not
+ captured by the classic distance vector representation. */
+ if (TREE_CODE (difference) != INTEGER_CST)
+ return false;
+
+ /* ZIV test. */
+ if (ziv_subscript_p (fun_a, fun_b) && !integer_zerop (difference))
+ {
+ /* There is no dependence. */
+ *maybe_dependent = false;
+ return true;
+ }
+
+ fun_b = chrec_fold_multiply (integer_type_node, fun_b,
+ integer_minus_one_node);
+
+ eq = omega_add_zero_eq (pb, omega_black);
+ if (!init_omega_eq_with_af (pb, eq, DDR_NB_LOOPS (ddr), fun_a, ddr)
+ || !init_omega_eq_with_af (pb, eq, 0, fun_b, ddr))
+ /* There is probably a dependence, but the system of
+ constraints cannot be built: answer "don't know". */
+ return false;
+
+ /* GCD test. */
+ if (DDR_NB_LOOPS (ddr) != 0 && pb->eqs[eq].coef[0]
+ && !int_divides_p (lambda_vector_gcd
+ ((lambda_vector) &(pb->eqs[eq].coef[1]),
+ 2 * DDR_NB_LOOPS (ddr)),
+ pb->eqs[eq].coef[0]))
+ {
+ /* There is no dependence. */
+ *maybe_dependent = false;
+ return true;
+ }
+
+ return true;
+}
+
+/* Helper function, same as init_omega_for_ddr but specialized for
+ data references A and B. */
+
+static bool
+init_omega_for_ddr_1 (struct data_reference *dra, struct data_reference *drb,
+ struct data_dependence_relation *ddr,
+ omega_pb pb, bool *maybe_dependent)
+{
+ unsigned i;
+ int ineq;
+ struct loop *loopi;
+ unsigned nb_loops = DDR_NB_LOOPS (ddr);
+
+ /* Insert an equality per subscript. */
+ for (i = 0; i < DDR_NUM_SUBSCRIPTS (ddr); i++)
+ {
+ if (!omega_setup_subscript (DR_ACCESS_FN (dra, i), DR_ACCESS_FN (drb, i),
+ ddr, pb, maybe_dependent))
+ return false;
+ else if (*maybe_dependent == false)
+ {
+ /* There is no dependence. */
+ DDR_ARE_DEPENDENT (ddr) = chrec_known;
+ return true;
+ }
+ }
+
+ /* Insert inequalities: constraints corresponding to the iteration
+ domain, i.e. the loops surrounding the references "loop_x" and
+ the distance variables "dx". The layout of the OMEGA
+ representation is as follows:
+ - coef[0] is the constant
+ - coef[1..nb_loops] are the protected variables that will not be
+ removed by the solver: the "dx"
+ - coef[nb_loops + 1, 2*nb_loops] are the loop variables: "loop_x".
+ */
+ for (i = 0; i <= DDR_INNER_LOOP (ddr)
+ && VEC_iterate (loop_p, DDR_LOOP_NEST (ddr), i, loopi); i++)
+ {
+ HOST_WIDE_INT nbi = estimated_loop_iterations_int (loopi, true);
+
+ /* 0 <= loop_x */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + nb_loops + 1] = 1;
+
+ /* 0 <= loop_x + dx */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + nb_loops + 1] = 1;
+ pb->geqs[ineq].coef[i + 1] = 1;
+
+ if (nbi != -1)
+ {
+ /* loop_x <= nb_iters */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + nb_loops + 1] = -1;
+ pb->geqs[ineq].coef[0] = nbi;
+
+ /* loop_x + dx <= nb_iters */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + nb_loops + 1] = -1;
+ pb->geqs[ineq].coef[i + 1] = -1;
+ pb->geqs[ineq].coef[0] = nbi;
+
+ /* A step "dx" bigger than nb_iters is not feasible, so
+ add "0 <= nb_iters + dx", */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + 1] = 1;
+ pb->geqs[ineq].coef[0] = nbi;
+ /* and "dx <= nb_iters". */
+ ineq = omega_add_zero_geq (pb, omega_black);
+ pb->geqs[ineq].coef[i + 1] = -1;
+ pb->geqs[ineq].coef[0] = nbi;
+ }
+ }
+
+ omega_extract_distance_vectors (pb, ddr);
+
+ return true;
+}
+
+/* Sets up the Omega dependence problem for the data dependence
+ relation DDR. Returns false when the constraint system cannot be
+ built, ie. when the test answers "don't know". Returns true
+ otherwise, and when independence has been proved (using one of the
+ trivial dependence test), set MAYBE_DEPENDENT to false, otherwise
+ set MAYBE_DEPENDENT to true.
+
+ Example: for setting up the dependence system corresponding to the
+ conflicting accesses
+
+ | loop_i
+ | loop_j
+ | A[i, i+1] = ...
+ | ... A[2*j, 2*(i + j)]
+ | endloop_j
+ | endloop_i
+
+ the following constraints come from the iteration domain:
+
+ 0 <= i <= Ni
+ 0 <= i + di <= Ni
+ 0 <= j <= Nj
+ 0 <= j + dj <= Nj
+
+ where di, dj are the distance variables. The constraints
+ representing the conflicting elements are:
+
+ i = 2 * (j + dj)
+ i + 1 = 2 * (i + di + j + dj)
+
+ For asking that the resulting distance vector (di, dj) be
+ lexicographically positive, we insert the constraint "di >= 0". If
+ "di = 0" in the solution, we fix that component to zero, and we
+ look at the inner loops: we set a new problem where all the outer
+ loop distances are zero, and fix this inner component to be
+ positive. When one of the components is positive, we save that
+ distance, and set a new problem where the distance on this loop is
+ zero, searching for other distances in the inner loops. Here is
+ the classic example that illustrates that we have to set for each
+ inner loop a new problem:
+
+ | loop_1
+ | loop_2
+ | A[10]
+ | endloop_2
+ | endloop_1
+
+ we have to save two distances (1, 0) and (0, 1).
+
+ Given two array references, refA and refB, we have to set the
+ dependence problem twice, refA vs. refB and refB vs. refA, and we
+ cannot do a single test, as refB might occur before refA in the
+ inner loops, and the contrary when considering outer loops: ex.
+
+ | loop_0
+ | loop_1
+ | loop_2
+ | T[{1,+,1}_2][{1,+,1}_1] // refA
+ | T[{2,+,1}_2][{0,+,1}_1] // refB
+ | endloop_2
+ | endloop_1
+ | endloop_0
+
+ refB touches the elements in T before refA, and thus for the same
+ loop_0 refB precedes refA: ie. the distance vector (0, 1, -1)
+ but for successive loop_0 iterations, we have (1, -1, 1)
+
+ The Omega solver expects the distance variables ("di" in the
+ previous example) to come first in the constraint system (as
+ variables to be protected, or "safe" variables), the constraint
+ system is built using the following layout:
+
+ "cst | distance vars | index vars".
+*/
+
+static bool
+init_omega_for_ddr (struct data_dependence_relation *ddr,
+ bool *maybe_dependent)
+{
+ omega_pb pb;
+ bool res = false;
+
+ *maybe_dependent = true;
+
+ if (same_access_functions (ddr))
+ {
+ unsigned j;
+ lambda_vector dir_v;
+
+ /* Save the 0 vector. */
+ save_dist_v (ddr, lambda_vector_new (DDR_NB_LOOPS (ddr)));
+ dir_v = lambda_vector_new (DDR_NB_LOOPS (ddr));
+ for (j = 0; j < DDR_NB_LOOPS (ddr); j++)
+ dir_v[j] = dir_equal;
+ save_dir_v (ddr, dir_v);
+
+ /* Save the dependences carried by outer loops. */
+ pb = omega_alloc_problem (2 * DDR_NB_LOOPS (ddr), DDR_NB_LOOPS (ddr));
+ res = init_omega_for_ddr_1 (DDR_A (ddr), DDR_B (ddr), ddr, pb,
+ maybe_dependent);
+ omega_free_problem (pb);
+ return res;
+ }
+
+ /* Omega expects the protected variables (those that have to be kept
+ after elimination) to appear first in the constraint system.
+ These variables are the distance variables. In the following
+ initialization we declare NB_LOOPS safe variables, and the total
+ number of variables for the constraint system is 2*NB_LOOPS. */
+ pb = omega_alloc_problem (2 * DDR_NB_LOOPS (ddr), DDR_NB_LOOPS (ddr));
+ res = init_omega_for_ddr_1 (DDR_A (ddr), DDR_B (ddr), ddr, pb,
+ maybe_dependent);
+ omega_free_problem (pb);
+
+ /* Stop computation if not decidable, or no dependence. */
+ if (res == false || *maybe_dependent == false)
+ return res;
+
+ pb = omega_alloc_problem (2 * DDR_NB_LOOPS (ddr), DDR_NB_LOOPS (ddr));
+ res = init_omega_for_ddr_1 (DDR_B (ddr), DDR_A (ddr), ddr, pb,
+ maybe_dependent);
+ omega_free_problem (pb);
+
+ return res;
+}
+
+/* Return true when DDR contains the same information as that stored
+ in DIR_VECTS and in DIST_VECTS, return false otherwise. */
+
+static bool
+ddr_consistent_p (FILE *file,
+ struct data_dependence_relation *ddr,
+ VEC (lambda_vector, heap) *dist_vects,
+ VEC (lambda_vector, heap) *dir_vects)
+{
+ unsigned int i, j;
+
+ /* If dump_file is set, output there. */
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ file = dump_file;
+
+ if (VEC_length (lambda_vector, dist_vects) != DDR_NUM_DIST_VECTS (ddr))
+ {
+ lambda_vector b_dist_v;
+ fprintf (file, "\n(Number of distance vectors differ: Banerjee has %d, Omega has %d.\n",
+ VEC_length (lambda_vector, dist_vects),
+ DDR_NUM_DIST_VECTS (ddr));
+
+ fprintf (file, "Banerjee dist vectors:\n");
+ for (i = 0; VEC_iterate (lambda_vector, dist_vects, i, b_dist_v); i++)
+ print_lambda_vector (file, b_dist_v, DDR_NB_LOOPS (ddr));
+
+ fprintf (file, "Omega dist vectors:\n");
+ for (i = 0; i < DDR_NUM_DIST_VECTS (ddr); i++)
+ print_lambda_vector (file, DDR_DIST_VECT (ddr, i), DDR_NB_LOOPS (ddr));
+
+ fprintf (file, "data dependence relation:\n");
+ dump_data_dependence_relation (file, ddr);
+
+ fprintf (file, ")\n");
+ return false;
+ }
+
+ if (VEC_length (lambda_vector, dir_vects) != DDR_NUM_DIR_VECTS (ddr))
+ {
+ fprintf (file, "\n(Number of direction vectors differ: Banerjee has %d, Omega has %d.)\n",
+ VEC_length (lambda_vector, dir_vects),
+ DDR_NUM_DIR_VECTS (ddr));
+ return false;
+ }
+
+ for (i = 0; i < DDR_NUM_DIST_VECTS (ddr); i++)
+ {
+ lambda_vector a_dist_v;
+ lambda_vector b_dist_v = DDR_DIST_VECT (ddr, i);
+
+ /* Distance vectors are not ordered in the same way in the DDR
+ and in the DIST_VECTS: search for a matching vector. */
+ for (j = 0; VEC_iterate (lambda_vector, dist_vects, j, a_dist_v); j++)
+ if (lambda_vector_equal (a_dist_v, b_dist_v, DDR_NB_LOOPS (ddr)))
+ break;
+
+ if (j == VEC_length (lambda_vector, dist_vects))
+ {
+ fprintf (file, "\n(Dist vectors from the first dependence analyzer:\n");
+ print_dist_vectors (file, dist_vects, DDR_NB_LOOPS (ddr));
+ fprintf (file, "not found in Omega dist vectors:\n");
+ print_dist_vectors (file, DDR_DIST_VECTS (ddr), DDR_NB_LOOPS (ddr));
+ fprintf (file, "data dependence relation:\n");
+ dump_data_dependence_relation (file, ddr);
+ fprintf (file, ")\n");
+ }
+ }
+
+ for (i = 0; i < DDR_NUM_DIR_VECTS (ddr); i++)
+ {
+ lambda_vector a_dir_v;
+ lambda_vector b_dir_v = DDR_DIR_VECT (ddr, i);
+
+ /* Direction vectors are not ordered in the same way in the DDR
+ and in the DIR_VECTS: search for a matching vector. */
+ for (j = 0; VEC_iterate (lambda_vector, dir_vects, j, a_dir_v); j++)
+ if (lambda_vector_equal (a_dir_v, b_dir_v, DDR_NB_LOOPS (ddr)))
+ break;
+
+ if (j == VEC_length (lambda_vector, dist_vects))
+ {
+ fprintf (file, "\n(Dir vectors from the first dependence analyzer:\n");
+ print_dir_vectors (file, dir_vects, DDR_NB_LOOPS (ddr));
+ fprintf (file, "not found in Omega dir vectors:\n");
+ print_dir_vectors (file, DDR_DIR_VECTS (ddr), DDR_NB_LOOPS (ddr));
+ fprintf (file, "data dependence relation:\n");
+ dump_data_dependence_relation (file, ddr);
+ fprintf (file, ")\n");
+ }
+ }
+
+ return true;
+}
+
/* This computes the affine dependence relation between A and B.
CHREC_KNOWN is used for representing the independence between two
accesses, while CHREC_DONT_KNOW is used for representing the unknown
@@ -4158,13 +4747,57 @@ compute_affine_dependence (struct data_dependence_relation *ddr)
if (access_functions_are_affine_or_constant_p (dra)
&& access_functions_are_affine_or_constant_p (drb))
- subscript_dependence_tester (ddr);
-
+ {
+ if (flag_check_data_deps)
+ {
+ /* Compute the dependences using the first algorithm. */
+ subscript_dependence_tester (ddr);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\n\nBanerjee Analyzer\n");
+ dump_data_dependence_relation (dump_file, ddr);
+ }
+
+ if (DDR_ARE_DEPENDENT (ddr) == NULL_TREE)
+ {
+ bool maybe_dependent;
+ VEC (lambda_vector, heap) *dir_vects, *dist_vects;
+
+ /* Save the result of the first DD analyzer. */
+ dist_vects = DDR_DIST_VECTS (ddr);
+ dir_vects = DDR_DIR_VECTS (ddr);
+
+ /* Reset the information. */
+ DDR_DIST_VECTS (ddr) = NULL;
+ DDR_DIR_VECTS (ddr) = NULL;
+
+ /* Compute the same information using Omega. */
+ if (!init_omega_for_ddr (ddr, &maybe_dependent))
+ goto csys_dont_know;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Omega Analyzer\n");
+ dump_data_dependence_relation (dump_file, ddr);
+ }
+
+ /* Check that we get the same information. */
+ if (maybe_dependent)
+ gcc_assert (ddr_consistent_p (stderr, ddr, dist_vects,
+ dir_vects));
+ }
+ }
+ else
+ subscript_dependence_tester (ddr);
+ }
+
/* As a last case, if the dependence cannot be determined, or if
the dependence is considered too difficult to determine, answer
"don't know". */
else
{
+ csys_dont_know:;
dependence_stats.num_dependence_undetermined++;
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -4523,7 +5156,7 @@ compute_data_dependences_for_loop (struct loop *loop,
}
/* Entry point (for testing only). Analyze all the data references
- and the dependence relations.
+ and the dependence relations in LOOP.
The data references are computed first.
@@ -4543,9 +5176,8 @@ compute_data_dependences_for_loop (struct loop *loop,
recompute the same information. The implementation of this KB is
transparent to the optimizer, and thus the KB can be changed with a
more efficient implementation, or the KB could be disabled. */
-#if 0
static void
-analyze_all_data_dependences (struct loops *loops)
+analyze_all_data_dependences (struct loop *loop)
{
unsigned int i;
int nb_data_refs = 10;
@@ -4555,8 +5187,8 @@ analyze_all_data_dependences (struct loops *loops)
VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs);
/* Compute DDs on the whole function. */
- compute_data_dependences_for_loop (loops->parray[0], false,
- &datarefs, &dependence_relations);
+ compute_data_dependences_for_loop (loop, false, &datarefs,
+ &dependence_relations);
if (dump_file)
{
@@ -4605,7 +5237,19 @@ analyze_all_data_dependences (struct loops *loops)
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
}
-#endif
+
+/* Computes all the data dependences and check that the results of
+ several analyzers are the same. */
+
+void
+tree_check_data_deps (void)
+{
+ loop_iterator li;
+ struct loop *loop_nest;
+
+ FOR_EACH_LOOP (li, loop_nest, 0)
+ analyze_all_data_dependences (loop_nest);
+}
/* Free the memory used by a data dependence relation DDR. */
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index ba471744767..02e15405641 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -1,5 +1,5 @@
/* Data references and dependences detectors.
- Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Sebastian Pop <pop@cri.ensmp.fr>
This file is part of GCC.
@@ -23,6 +23,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#define GCC_TREE_DATA_REF_H
#include "lambda.h"
+#include "omega.h"
/*
The first location accessed by data-ref in the loop is the address of data-ref's
@@ -160,10 +161,6 @@ DEF_VEC_ALLOC_P (data_reference_p, heap);
#define DR_OFFSET_MISALIGNMENT(DR) (DR)->misalignment
#define DR_PTR_INFO(DR) (DR)->ptr_info
#define DR_SUBVARS(DR) (DR)->subvars
-
-#define DR_ACCESS_FNS_ADDR(DR) \
- (DR_TYPE(DR) == ARRAY_REF_TYPE ? \
- &((DR)->object_info.access_fns) : &((DR)->first_location.access_fns))
#define DR_SET_ACCESS_FNS(DR, ACC_FNS) \
{ \
if (DR_TYPE(DR) == ARRAY_REF_TYPE) \
@@ -281,6 +278,10 @@ struct data_dependence_relation
/* The analyzed loop nest. */
VEC (loop_p, heap) *loop_nest;
+ /* An index in loop_nest for the innermost loop that varies for
+ this data dependence relation. */
+ unsigned inner_loop;
+
/* The classic direction vector. */
VEC (lambda_vector, heap) *dir_vects;
@@ -304,6 +305,7 @@ DEF_VEC_ALLOC_P(ddr_p,heap);
/* The size of the direction/distance vectors: the number of loops in
the loop nest. */
#define DDR_NB_LOOPS(DDR) (VEC_length (loop_p, DDR_LOOP_NEST (DDR)))
+#define DDR_INNER_LOOP(DDR) DDR->inner_loop
#define DDR_DIST_VECTS(DDR) ((DDR)->dist_vects)
#define DDR_DIR_VECTS(DDR) ((DDR)->dir_vects)
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index bb276fb1703..edd17cbcf61 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -634,13 +634,13 @@ do_return_redirection (struct goto_queue_node *q, tree finlab, tree mod,
else
new = *return_value_p;
- x = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (new), new, old);
+ x = build_gimple_modify_stmt (new, old);
append_to_statement_list (x, &q->repl_stmt);
if (new == result)
x = result;
else
- x = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (result), result, new);
+ x = build_gimple_modify_stmt (result, new);
q->cont_stmt = build1 (RETURN_EXPR, void_type_node, x);
}
@@ -830,20 +830,20 @@ honor_protect_cleanup_actions (struct leh_state *outer_state,
i = tsi_start (finally);
x = build0 (EXC_PTR_EXPR, ptr_type_node);
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, save_eptr, x);
+ x = build_gimple_modify_stmt (save_eptr, x);
tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
x = build0 (FILTER_EXPR, integer_type_node);
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, save_filt, x);
+ x = build_gimple_modify_stmt (save_filt, x);
tsi_link_before (&i, x, TSI_CONTINUE_LINKING);
i = tsi_last (finally);
x = build0 (EXC_PTR_EXPR, ptr_type_node);
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, x, save_eptr);
+ x = build_gimple_modify_stmt (x, save_eptr);
tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
x = build0 (FILTER_EXPR, integer_type_node);
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, x, save_filt);
+ x = build_gimple_modify_stmt (x, save_filt);
tsi_link_after (&i, x, TSI_CONTINUE_LINKING);
x = build_resx (get_eh_region_number (tf->region));
@@ -1165,8 +1165,9 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
if (tf->may_fallthru)
{
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, finally_tmp,
- build_int_cst (NULL_TREE, fallthru_index));
+ x = build_gimple_modify_stmt (finally_tmp,
+ build_int_cst (integer_type_node,
+ fallthru_index));
append_to_statement_list (x, tf->top_p);
if (tf->may_throw)
@@ -1195,8 +1196,9 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
x = build1 (LABEL_EXPR, void_type_node, tf->eh_label);
append_to_statement_list (x, tf->top_p);
- x = build2 (GIMPLE_MODIFY_STMT, void_type_node, finally_tmp,
- build_int_cst (NULL_TREE, eh_index));
+ x = build_gimple_modify_stmt (finally_tmp,
+ build_int_cst (integer_type_node,
+ eh_index));
append_to_statement_list (x, tf->top_p);
last_case = build3 (CASE_LABEL_EXPR, void_type_node,
@@ -1227,15 +1229,17 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
if (q->index < 0)
{
- mod = build2 (GIMPLE_MODIFY_STMT, void_type_node, finally_tmp,
- build_int_cst (NULL_TREE, return_index));
+ mod = build_gimple_modify_stmt (finally_tmp,
+ build_int_cst (integer_type_node,
+ return_index));
do_return_redirection (q, finally_label, mod, &return_val);
switch_id = return_index;
}
else
{
- mod = build2 (GIMPLE_MODIFY_STMT, void_type_node, finally_tmp,
- build_int_cst (NULL_TREE, q->index));
+ mod = build_gimple_modify_stmt (finally_tmp,
+ build_int_cst (integer_type_node,
+ q->index));
do_goto_redirection (q, finally_label, mod);
switch_id = q->index;
}
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 2d661f58af0..ea2d677be43 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -1,5 +1,6 @@
/* Data and Control Flow Analysis for Trees.
- Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Diego Novillo <dnovillo@redhat.com>
This file is part of GCC.
@@ -776,7 +777,7 @@ bool fold_stmt_inplace (tree);
tree widen_bitfield (tree, tree, tree);
/* In tree-vrp.c */
-tree vrp_evaluate_conditional (tree, bool);
+tree vrp_evaluate_conditional (tree, tree);
void simplify_stmt_using_ranges (tree);
/* In tree-ssa-dom.c */
@@ -821,18 +822,8 @@ struct tree_niter_desc
a loop (provided that assumptions == true and
may_be_zero == false), more precisely the number
of executions of the latch of the loop. */
- tree additional_info; /* The boolean expression. Sometimes we use additional
- knowledge to simplify the other expressions
- contained in this structure (for example the
- knowledge about value ranges of operands on entry to
- the loop). If this is a case, conjunction of such
- condition is stored in this field, so that we do not
- lose the information: for example if may_be_zero
- is (n <= 0) and niter is (unsigned) n, we know
- that the number of iterations is at most
- MAX_SIGNED_INT. However if the (n <= 0) assumption
- is eliminated (by looking at the guard on entry of
- the loop), then the information would be lost. */
+ double_int max; /* The upper bound on the number of iterations of
+ the loop. */
/* The simplified shape of the exit condition. The loop exits if
CONTROL CMP BOUND is false, where CMP is one of NE_EXPR,
@@ -910,7 +901,7 @@ bool contains_abnormal_ssa_name_p (tree);
/* In tree-ssa-threadedge.c */
extern bool potentially_threadable_block (basic_block);
extern void thread_across_edge (tree, edge, bool,
- VEC(tree, heap) **, tree (*) (tree));
+ VEC(tree, heap) **, tree (*) (tree, tree));
/* In tree-ssa-loop-im.c */
/* The possibilities of statement movement. */
@@ -993,6 +984,9 @@ bool sra_type_can_be_decomposed_p (tree);
/* In tree-loop-linear.c */
extern void linear_transform_loops (void);
+/* In tree-data-ref.c */
+extern void tree_check_data_deps (void);
+
/* In tree-ssa-loop-ivopts.c */
bool expr_invariant_in_loop_p (struct loop *, tree);
bool multiplier_allowed_in_address_p (HOST_WIDE_INT, enum machine_mode);
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index e97824f5185..7d1a838d944 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -1,5 +1,5 @@
/* If-conversion for vectorizer.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Devang Patel <dpatel@apple.com>
This file is part of GCC.
@@ -802,8 +802,7 @@ replace_phi_with_cond_gimple_modify_stmt (tree phi, tree cond,
unshare_expr (arg_1));
/* Create new MODIFY expression using RHS. */
- new_stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (PHI_RESULT (phi)),
- unshare_expr (PHI_RESULT (phi)), rhs);
+ new_stmt = build_gimple_modify_stmt (unshare_expr (PHI_RESULT (phi)), rhs);
/* Make new statement definition of the original phi result. */
SSA_NAME_DEF_STMT (PHI_RESULT (phi)) = new_stmt;
@@ -983,7 +982,7 @@ ifc_temp_var (tree type, tree exp)
add_referenced_var (var);
/* Build new statement to assign EXP to new variable. */
- stmt = build2 (GIMPLE_MODIFY_STMT, type, var, exp);
+ stmt = build_gimple_modify_stmt (var, exp);
/* Get SSA name for the new variable and set make new statement
its definition statement. */
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 27d985ea139..966da8449f6 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1,5 +1,6 @@
/* Tree inlining.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
This file is part of GCC.
@@ -873,7 +874,20 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, int count_scal
gcc_assert (lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt)
!= 0);
- if (tree_could_throw_p (stmt))
+ if (tree_could_throw_p (stmt)
+ /* When we are cloning for inlining, we are supposed to
+ construct a clone that calls precisely the same functions
+ as original. However IPA optimizers might've proved
+ earlier some function calls as non-trapping that might
+ render some basic blocks dead that might become
+ unreachable.
+
+ We can't update SSA with unreachable blocks in CFG and thus
+ we prevent the scenario by preserving even the "dead" eh
+ edges until the point they are later removed by
+ fixup_cfg pass. */
+ || (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES
+ && lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt) > 0))
{
int region = lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt);
/* Add an entry for the copied tree in the EH hashtable.
@@ -1386,13 +1400,13 @@ setup_one_parameter (copy_body_data *id, tree p, tree value, tree fn,
if (def && gimple_in_ssa_p (cfun) && is_gimple_reg (p))
{
def = remap_ssa_name (def, id);
- init_stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (var), def, rhs);
+ init_stmt = build_gimple_modify_stmt (def, rhs);
SSA_NAME_DEF_STMT (def) = init_stmt;
SSA_NAME_IS_DEFAULT_DEF (def) = 0;
set_default_def (var, NULL);
}
else
- init_stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (var), var, rhs);
+ init_stmt = build_gimple_modify_stmt (var, rhs);
/* If we did not create a gimple value and we did not create a gimple
cast of a gimple value, then we will need to gimplify INIT_STMTS
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c
index 61fdee3f068..94f3d59f753 100644
--- a/gcc/tree-loop-linear.c
+++ b/gcc/tree-loop-linear.c
@@ -134,24 +134,30 @@ gather_interchange_stats (VEC (ddr_p, heap) *dependence_relations,
for (i = 0; VEC_iterate (data_reference_p, datarefs, i, dr); i++)
{
unsigned int it;
+ tree ref = DR_REF (dr);
tree stmt = DR_STMT (dr);
struct loop *stmt_loop = loop_containing_stmt (stmt);
struct loop *inner_loop = first_loop->inner;
-
+
if (inner_loop != stmt_loop
&& !flow_loop_nested_p (inner_loop, stmt_loop))
continue;
- for (it = 0; it < DR_NUM_DIMENSIONS (dr); it++)
+
+ for (it = 0; it < DR_NUM_DIMENSIONS (dr);
+ it++, ref = TREE_OPERAND (ref, 0))
{
tree chrec = DR_ACCESS_FN (dr, it);
- tree tstride = evolution_part_in_loop_num
- (chrec, loop->num);
-
+ tree tstride = evolution_part_in_loop_num (chrec, loop->num);
+ tree array_size = TYPE_SIZE (TREE_TYPE (ref));
+
if (tstride == NULL_TREE
- || TREE_CODE (tstride) != INTEGER_CST)
+ || array_size == NULL_TREE
+ || TREE_CODE (tstride) != INTEGER_CST
+ || TREE_CODE (array_size) != INTEGER_CST)
continue;
-
- (*access_strides) += int_cst_value (tstride);
+
+ (*access_strides) +=
+ int_cst_value (array_size) * int_cst_value (tstride);
}
}
}
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c
index e6b64687858..698114e5dce 100644
--- a/gcc/tree-mudflap.c
+++ b/gcc/tree-mudflap.c
@@ -1,5 +1,6 @@
/* Mudflap: narrow-pointer bounds-checking by tree rewriting.
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by Frank Ch. Eigler <fche@redhat.com>
and Graydon Hoare <graydon@redhat.com>
@@ -458,14 +459,12 @@ mf_decl_cache_locals (void)
/* Build initialization nodes for the cache vars. We just load the
globals into the cache variables. */
- t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (mf_cache_shift_decl_l),
- mf_cache_shift_decl_l, mf_cache_shift_decl);
+ t = build_gimple_modify_stmt (mf_cache_shift_decl_l, mf_cache_shift_decl);
SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (current_function_decl));
gimplify_to_stmt_list (&t);
shift_init_stmts = t;
- t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (mf_cache_mask_decl_l),
- mf_cache_mask_decl_l, mf_cache_mask_decl);
+ t = build_gimple_modify_stmt (mf_cache_mask_decl_l, mf_cache_mask_decl);
SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (current_function_decl));
gimplify_to_stmt_list (&t);
mask_init_stmts = t;
@@ -553,16 +552,18 @@ mf_build_check_statement_for (tree base, tree limit,
mf_limit = create_tmp_var (mf_uintptr_type, "__mf_limit");
/* Build: __mf_base = (uintptr_t) <base address expression>. */
- t = build2 (GIMPLE_MODIFY_STMT, void_type_node, mf_base,
- convert (mf_uintptr_type, unshare_expr (base)));
+ t = build_gimple_modify_stmt (mf_base,
+ fold_convert (mf_uintptr_type,
+ unshare_expr (base)));
SET_EXPR_LOCUS (t, locus);
gimplify_to_stmt_list (&t);
head = tsi_start (t);
tsi = tsi_last (t);
/* Build: __mf_limit = (uintptr_t) <limit address expression>. */
- t = build2 (GIMPLE_MODIFY_STMT, void_type_node, mf_limit,
- convert (mf_uintptr_type, unshare_expr (limit)));
+ t = build_gimple_modify_stmt (mf_limit,
+ fold_convert (mf_uintptr_type,
+ unshare_expr (limit)));
SET_EXPR_LOCUS (t, locus);
gimplify_to_stmt_list (&t);
tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
@@ -577,7 +578,7 @@ mf_build_check_statement_for (tree base, tree limit,
TREE_TYPE (TREE_TYPE (mf_cache_array_decl)),
mf_cache_array_decl, t, NULL_TREE, NULL_TREE);
t = build1 (ADDR_EXPR, mf_cache_structptr_type, t);
- t = build2 (GIMPLE_MODIFY_STMT, void_type_node, mf_elem, t);
+ t = build_gimple_modify_stmt (mf_elem, t);
SET_EXPR_LOCUS (t, locus);
gimplify_to_stmt_list (&t);
tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
@@ -623,7 +624,7 @@ mf_build_check_statement_for (tree base, tree limit,
can use as the condition for the conditional jump. */
t = build2 (TRUTH_OR_EXPR, boolean_type_node, t, u);
cond = create_tmp_var (boolean_type_node, "__mf_unlikely_cond");
- t = build2 (GIMPLE_MODIFY_STMT, boolean_type_node, cond, t);
+ t = build_gimple_modify_stmt (cond, t);
gimplify_to_stmt_list (&t);
tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
@@ -669,12 +670,12 @@ mf_build_check_statement_for (tree base, tree limit,
if (! flag_mudflap_threads)
{
- t = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- mf_cache_shift_decl_l, mf_cache_shift_decl);
+ t = build_gimple_modify_stmt (mf_cache_shift_decl_l,
+ mf_cache_shift_decl);
tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
- t = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- mf_cache_mask_decl_l, mf_cache_mask_decl);
+ t = build_gimple_modify_stmt (mf_cache_mask_decl_l,
+ mf_cache_mask_decl);
tsi_link_after (&tsi, t, TSI_CONTINUE_LINKING);
}
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index 0713773f761..f26c9ba26ad 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -1,5 +1,5 @@
/* Nested function decomposition for trees.
- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -361,7 +361,7 @@ init_tmp_var (struct nesting_info *info, tree exp, tree_stmt_iterator *tsi)
tree t, stmt;
t = create_tmp_var_for (info, TREE_TYPE (exp), NULL);
- stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (t), t, exp);
+ stmt = build_gimple_modify_stmt (t, exp);
SET_EXPR_LOCUS (stmt, EXPR_LOCUS (tsi_stmt (*tsi)));
tsi_link_before (tsi, stmt, TSI_SAME_STMT);
@@ -389,7 +389,7 @@ save_tmp_var (struct nesting_info *info, tree exp,
tree t, stmt;
t = create_tmp_var_for (info, TREE_TYPE (exp), NULL);
- stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (t), exp, t);
+ stmt = build_gimple_modify_stmt (exp, t);
SET_EXPR_LOCUS (stmt, EXPR_LOCUS (tsi_stmt (*tsi)));
tsi_link_after (tsi, stmt, TSI_SAME_STMT);
@@ -1757,7 +1757,7 @@ finalize_nesting_tree_1 (struct nesting_info *root)
y = build3 (COMPONENT_REF, TREE_TYPE (field),
root->frame_decl, field, NULL_TREE);
- x = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (field), y, x);
+ x = build_gimple_modify_stmt (y, x);
append_to_statement_list (x, &stmt_list);
}
}
@@ -1768,7 +1768,7 @@ finalize_nesting_tree_1 (struct nesting_info *root)
{
tree x = build3 (COMPONENT_REF, TREE_TYPE (root->chain_field),
root->frame_decl, root->chain_field, NULL_TREE);
- x = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (x), x, get_chain_decl (root));
+ x = build_gimple_modify_stmt (x, get_chain_decl (root));
append_to_statement_list (x, &stmt_list);
}
diff --git a/gcc/tree-nrv.c b/gcc/tree-nrv.c
index c33ff0ea31a..906b98fbc8a 100644
--- a/gcc/tree-nrv.c
+++ b/gcc/tree-nrv.c
@@ -163,6 +163,14 @@ tree_nrv (void)
result_type))
return 0;
}
+ else if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT)
+ {
+ tree addr = get_base_address (GIMPLE_STMT_OPERAND (stmt, 0));
+ /* If there's any MODIFY of component of RESULT,
+ then bail out. */
+ if (addr && addr == result)
+ return 0;
+ }
}
}
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index ad8c5ae0298..7e759ba8176 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -1,5 +1,5 @@
/* Convert a program in SSA form into Normal form.
- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Andrew Macleod <amacleod@redhat.com>
This file is part of GCC.
@@ -141,7 +141,7 @@ insert_copy_on_edge (edge e, tree dest, tree src)
{
tree copy;
- copy = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (dest), dest, src);
+ copy = build_gimple_modify_stmt (dest, src);
set_is_used (dest);
if (TREE_CODE (src) == ADDR_EXPR)
@@ -1254,8 +1254,8 @@ insert_backedge_copies (void)
/* Create a new instance of the underlying variable of the
PHI result. */
- stmt = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (result_var),
- NULL_TREE, PHI_ARG_DEF (phi, i));
+ stmt = build_gimple_modify_stmt (NULL_TREE,
+ PHI_ARG_DEF (phi, i));
name = make_ssa_name (result_var, stmt);
GIMPLE_STMT_OPERAND (stmt, 0) = name;
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index 7cdee50f609..ed4fb470dfe 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -215,10 +215,6 @@ struct dump_file_info
for the passes that are handed to register_dump_files. */
#define TODO_set_props (1 << 15)
-/* Set by passes that may make SMT's that were previously never used
- in statements, used. */
-#define TODO_update_smt_usage (1 << 16)
-
#define TODO_update_ssa_any \
(TODO_update_ssa \
| TODO_update_ssa_no_phi \
@@ -298,6 +294,7 @@ extern struct tree_opt_pass pass_rest_of_compilation;
extern struct tree_opt_pass pass_sink_code;
extern struct tree_opt_pass pass_fre;
extern struct tree_opt_pass pass_linear_transform;
+extern struct tree_opt_pass pass_check_data_deps;
extern struct tree_opt_pass pass_copy_prop;
extern struct tree_opt_pass pass_store_ccp;
extern struct tree_opt_pass pass_store_copy_prop;
@@ -347,6 +344,9 @@ extern struct tree_opt_pass pass_profiling;
extern struct tree_opt_pass pass_rtl_ifcvt;
extern struct tree_opt_pass pass_tracer;
+extern struct tree_opt_pass pass_into_cfg_layout_mode;
+extern struct tree_opt_pass pass_outof_cfg_layout_mode;
+
extern struct tree_opt_pass pass_loop2;
extern struct tree_opt_pass pass_rtl_loop_init;
extern struct tree_opt_pass pass_rtl_move_loop_invariants;
diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
index b8e54d468e2..54e88479cdf 100644
--- a/gcc/tree-profile.c
+++ b/gcc/tree-profile.c
@@ -1,6 +1,7 @@
/* Calculate branch probabilities, and basic block execution counts.
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Contributed by James E. Wilson, UC Berkeley/Cygnus Support;
based on some ideas from Dain Samples of UC Berkeley.
Further mangling by Bob Manson, Cygnus Support.
@@ -171,11 +172,12 @@ tree_gen_edge_profiler (int edgeno, edge e)
tree tmp1 = create_tmp_var (gcov_type_node, "PROF");
tree tmp2 = create_tmp_var (gcov_type_node, "PROF");
tree ref = tree_coverage_counter_ref (GCOV_COUNTER_ARCS, edgeno);
- tree stmt1 = build2 (GIMPLE_MODIFY_STMT, gcov_type_node, tmp1, ref);
- tree stmt2 = build2 (GIMPLE_MODIFY_STMT, gcov_type_node, tmp2,
- build2 (PLUS_EXPR, gcov_type_node,
- tmp1, integer_one_node));
- tree stmt3 = build2 (GIMPLE_MODIFY_STMT, gcov_type_node, ref, tmp2);
+ tree one = build_int_cst (gcov_type_node, 1);
+ tree stmt1 = build_gimple_modify_stmt (tmp1, ref);
+ tree stmt2 = build_gimple_modify_stmt (tmp2,
+ build2 (PLUS_EXPR, gcov_type_node,
+ tmp1, one));
+ tree stmt3 = build_gimple_modify_stmt (ref, tmp2);
bsi_insert_on_edge (e, stmt1);
bsi_insert_on_edge (e, stmt2);
bsi_insert_on_edge (e, stmt3);
@@ -282,13 +284,9 @@ tree_gen_ic_profiler (histogram_value value, unsigned tag, unsigned base)
*/
tmp1 = create_tmp_var (ptr_void, "PROF");
- stmt1 = build2 (GIMPLE_MODIFY_STMT,
- build_pointer_type (get_gcov_type ()),
- ic_gcov_type_ptr_var, ref_ptr);
- stmt2 = build2 (GIMPLE_MODIFY_STMT, ptr_void, tmp1,
- unshare_expr (value->hvalue.value));
- stmt3 = build2 (GIMPLE_MODIFY_STMT, ptr_void,
- ic_void_ptr_var, tmp1);
+ stmt1 = build_gimple_modify_stmt (ic_gcov_type_ptr_var, ref_ptr);
+ stmt2 = build_gimple_modify_stmt (tmp1, unshare_expr (value->hvalue.value));
+ stmt3 = build_gimple_modify_stmt (ic_void_ptr_var, tmp1);
bsi_insert_before (&bsi, stmt1, BSI_SAME_STMT);
bsi_insert_before (&bsi, stmt2, BSI_SAME_STMT);
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index 9b0df6fb380..846d27414d5 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2864,14 +2864,6 @@ scev_finalize (void)
BITMAP_FREE (already_instantiated);
}
-/* Returns true if EXPR looks expensive. */
-
-static bool
-expression_expensive_p (tree expr)
-{
- return force_expr_to_var_cost (expr) >= target_spill_cost;
-}
-
/* Replace ssa names for that scev can prove they are constant by the
appropriate constants. Also perform final value replacement in loops,
in case the replacement expressions are cheap.
@@ -2958,10 +2950,13 @@ scev_const_prop (void)
continue;
niter = number_of_latch_executions (loop);
- if (niter == chrec_dont_know
- /* If computing the number of iterations is expensive, it may be
- better not to introduce computations involving it. */
- || expression_expensive_p (niter))
+ /* We used to check here whether the computation of NITER is expensive,
+ and avoided final value elimination if that is the case. The problem
+ is that it is hard to evaluate whether the expression is too
+ expensive, as we do not know what optimization opportunities the
+ the elimination of the final value may reveal. Therefore, we now
+ eliminate the final values of induction variables unconditionally. */
+ if (niter == chrec_dont_know)
continue;
/* Ensure that it is possible to insert new statements somewhere. */
@@ -2999,7 +2994,7 @@ scev_const_prop (void)
def = unshare_expr (def);
remove_phi_node (phi, NULL_TREE, false);
- ass = build2 (GIMPLE_MODIFY_STMT, void_type_node, rslt, NULL_TREE);
+ ass = build_gimple_modify_stmt (rslt, NULL_TREE);
SSA_NAME_DEF_STMT (rslt) = ass;
{
block_stmt_iterator dest = bsi;
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index cb8f63d1833..239fd847969 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -685,8 +685,8 @@ struct sra_walk_fns
void (*init) (struct sra_elt *elt, tree value, block_stmt_iterator *bsi);
/* Invoked when we have a copy between one scalarizable reference ELT
- and one non-scalarizable reference OTHER. IS_OUTPUT is true if ELT
- is on the left-hand side. */
+ and one non-scalarizable reference OTHER without side-effects.
+ IS_OUTPUT is true if ELT is on the left-hand side. */
void (*ldst) (struct sra_elt *elt, tree other,
block_stmt_iterator *bsi, bool is_output);
@@ -908,7 +908,7 @@ sra_walk_gimple_modify_stmt (tree expr, block_stmt_iterator *bsi,
/* If the RHS is scalarizable, handle it. There are only two cases. */
if (rhs_elt)
{
- if (!rhs_elt->is_scalar)
+ if (!rhs_elt->is_scalar && !TREE_SIDE_EFFECTS (lhs))
fns->ldst (rhs_elt, lhs, bsi, false);
else
fns->use (rhs_elt, &GIMPLE_STMT_OPERAND (expr, 1), bsi, false, false);
@@ -951,7 +951,8 @@ sra_walk_gimple_modify_stmt (tree expr, block_stmt_iterator *bsi,
The lvalue requirement prevents us from trying to directly scalarize
the result of a function call. Which would result in trying to call
the function multiple times, and other evil things. */
- else if (!lhs_elt->is_scalar && is_gimple_addressable (rhs))
+ else if (!lhs_elt->is_scalar
+ && !TREE_SIDE_EFFECTS (rhs) && is_gimple_addressable (rhs))
fns->ldst (lhs_elt, rhs, bsi, true);
/* Otherwise we're being used in some context that requires the
@@ -1240,6 +1241,8 @@ instantiate_element (struct sra_elt *elt)
DECL_IGNORED_P (var) = 0;
TREE_NO_WARNING (var) = TREE_NO_WARNING (base);
+ if (elt->element && TREE_NO_WARNING (elt->element))
+ TREE_NO_WARNING (var) = 1;
}
else
{
@@ -1609,9 +1612,6 @@ decide_instantiations (void)
}
bitmap_clear (&done_head);
- if (!bitmap_empty_p (sra_candidates))
- todoflags |= TODO_update_smt_usage;
-
mark_set_for_renaming (sra_candidates);
if (dump_file)
@@ -1697,7 +1697,6 @@ generate_one_element_ref (struct sra_elt *elt, tree base)
}
case ARRAY_TYPE:
- todoflags |= TODO_update_smt_usage;
if (TREE_CODE (elt->element) == RANGE_EXPR)
return build4 (ARRAY_RANGE_REF, elt->type, base,
TREE_OPERAND (elt->element, 0), NULL, NULL);
@@ -1739,7 +1738,7 @@ sra_build_assignment (tree dst, tree src)
anyway, there's little point in making tests and/or adding
conversions to ensure the types of src and dst are the same.
So we just assume type differences at this point are ok. */
- return build2 (GIMPLE_MODIFY_STMT, void_type_node, dst, src);
+ return build_gimple_modify_stmt (dst, src);
}
/* Generate a set of assignment statements in *LIST_P to copy all
diff --git a/gcc/tree-ssa-address.c b/gcc/tree-ssa-address.c
index ef3bfb7cbfb..1279a056e5f 100644
--- a/gcc/tree-ssa-address.c
+++ b/gcc/tree-ssa-address.c
@@ -569,7 +569,7 @@ tree
create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
{
tree mem_ref, tmp;
- tree addr_type = build_pointer_type (type), atype;
+ tree atype;
struct mem_address parts;
addr_to_parts (addr, &parts);
@@ -597,18 +597,24 @@ create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
if (parts.symbol)
{
- tmp = fold_convert (addr_type,
- build_addr (parts.symbol, current_function_decl));
+ tmp = build_addr (parts.symbol, current_function_decl);
+ gcc_assert (is_gimple_val (tmp));
/* Add the symbol to base, eventually forcing it to register. */
if (parts.base)
{
+ gcc_assert (tree_ssa_useless_type_conversion_1
+ (sizetype, TREE_TYPE (parts.base)));
+
if (parts.index)
- parts.base = force_gimple_operand_bsi (bsi,
- fold_build2 (PLUS_EXPR, addr_type,
- fold_convert (addr_type, parts.base),
+ {
+ atype = TREE_TYPE (tmp);
+ parts.base = force_gimple_operand_bsi (bsi,
+ fold_build2 (PLUS_EXPR, atype,
+ fold_convert (atype, parts.base),
tmp),
true, NULL_TREE);
+ }
else
{
parts.index = parts.base;
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 673415c1ca0..b5adbd9c8d2 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1411,8 +1411,7 @@ execute_ssa_ccp (bool store_ccp)
ccp_initialize ();
ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node);
if (ccp_finalize ())
- return (TODO_cleanup_cfg | TODO_update_ssa | TODO_update_smt_usage
- | TODO_remove_unused_locals);
+ return (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals);
else
return 0;
}
diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c
index 80586bd038c..e7131eac9fe 100644
--- a/gcc/tree-ssa-coalesce.c
+++ b/gcc/tree-ssa-coalesce.c
@@ -909,7 +909,7 @@ abnormal_corrupt (tree phi, int i)
static inline void
fail_abnormal_edge_coalesce (int x, int y)
{
- fprintf (stderr, "\nUnable to coalesce ssa_names %d and %d ",x, y);
+ fprintf (stderr, "\nUnable to coalesce ssa_names %d and %d",x, y);
fprintf (stderr, " which are marked as MUST COALESCE.\n");
print_generic_expr (stderr, ssa_name (x), TDF_SLIM);
fprintf (stderr, " and ");
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 888c5ee7bde..6e1387f7157 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -389,8 +389,7 @@ struct tree_opt_pass pass_dominator =
TODO_dump_func
| TODO_update_ssa
| TODO_cleanup_cfg
- | TODO_verify_ssa
- | TODO_update_smt_usage, /* todo_flags_finish */
+ | TODO_verify_ssa, /* todo_flags_finish */
0 /* letter */
};
@@ -554,7 +553,7 @@ restore_vars_to_original_value (void)
/* A trivial wrapper so that we can present the generic jump
threading code with a simple API for simplifying statements. */
static tree
-simplify_stmt_for_jump_threading (tree stmt)
+simplify_stmt_for_jump_threading (tree stmt, tree within_stmt ATTRIBUTE_UNUSED)
{
return lookup_avail_expr (stmt, false);
}
@@ -2551,9 +2550,11 @@ struct tree_opt_pass pass_phi_only_cprop =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_cleanup_cfg | TODO_dump_func
- | TODO_ggc_collect | TODO_verify_ssa
- | TODO_verify_stmts | TODO_update_smt_usage
- | TODO_update_ssa, /* todo_flags_finish */
+ TODO_cleanup_cfg
+ | TODO_dump_func
+ | TODO_ggc_collect
+ | TODO_verify_ssa
+ | TODO_verify_stmts
+ | TODO_update_ssa, /* todo_flags_finish */
0 /* letter */
};
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index ed1a5b2a381..bb5d14d78f9 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -283,6 +283,32 @@ dse_possible_dead_store_p (tree stmt,
gcc_assert (*use_p != NULL_USE_OPERAND_P);
*first_use_p = *use_p;
+ /* In the case of memory partitions, we may get:
+
+ # MPT.764_162 = VDEF <MPT.764_161(D)>
+ x = {};
+ # MPT.764_167 = VDEF <MPT.764_162>
+ y = {};
+
+ So we must make sure we're talking about the same LHS.
+ */
+ if (TREE_CODE (temp) == GIMPLE_MODIFY_STMT)
+ {
+ tree base1 = get_base_address (GIMPLE_STMT_OPERAND (stmt, 0));
+ tree base2 = get_base_address (GIMPLE_STMT_OPERAND (temp, 0));
+
+ while (base1 && INDIRECT_REF_P (base1))
+ base1 = TREE_OPERAND (base1, 0);
+ while (base2 && INDIRECT_REF_P (base2))
+ base2 = TREE_OPERAND (base2, 0);
+
+ if (base1 != base2)
+ {
+ fail = true;
+ break;
+ }
+ }
+
/* If the immediate use of DEF_VAR is not the same as the
previously find immediate uses, then we will not be able
to eliminate STMT. */
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 446efa7434a..a854841f307 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -668,14 +668,11 @@ forward_propagate_addr_into_variable_array_index (tree offset, tree lhs,
Often this will allow for removal of an ADDR_EXPR and INDIRECT_REF
node or for recovery of array indexing from pointer arithmetic.
- CHANGED is an optional pointer to a boolean variable set to true if
- either the LHS or RHS was changed in the USE_STMT.
-
Return true if the propagation was successful (the propagation can
be not totally successful, yet things may have been changed). */
static bool
-forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
+forward_propagate_addr_expr_1 (tree stmt, tree use_stmt)
{
tree name = GIMPLE_STMT_OPERAND (stmt, 0);
tree lhs, rhs, array_ref;
@@ -695,8 +692,6 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
TREE_OPERAND (lhs, 0) = unshare_expr (GIMPLE_STMT_OPERAND (stmt, 1));
fold_stmt_inplace (use_stmt);
tidy_after_forward_propagate_addr (use_stmt);
- if (changed)
- *changed = true;
}
/* Trivial case. The use statement could be a trivial copy. We
@@ -712,8 +707,6 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
GIMPLE_STMT_OPERAND (use_stmt, 1)
= unshare_expr (GIMPLE_STMT_OPERAND (stmt, 1));
tidy_after_forward_propagate_addr (use_stmt);
- if (changed)
- *changed = true;
return true;
}
@@ -734,8 +727,6 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
TREE_OPERAND (rhs, 0) = unshare_expr (GIMPLE_STMT_OPERAND (stmt, 1));
fold_stmt_inplace (use_stmt);
tidy_after_forward_propagate_addr (use_stmt);
- if (changed)
- *changed = true;
return true;
}
@@ -768,8 +759,6 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
if (fold_stmt_inplace (use_stmt))
{
tidy_after_forward_propagate_addr (use_stmt);
- if (changed)
- *changed = true;
return true;
}
else
@@ -795,8 +784,6 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs,
stmt, use_stmt);
- if (res && changed)
- *changed = true;
return res;
}
@@ -812,16 +799,12 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
tree offset_stmt = SSA_NAME_DEF_STMT (TREE_OPERAND (rhs, 0));
res = forward_propagate_addr_into_variable_array_index (offset_stmt, lhs,
stmt, use_stmt);
- if (res && changed)
- *changed = true;
return res;
}
return false;
}
/* STMT is a statement of the form SSA_NAME = ADDR_EXPR <whatever>.
- SOME is a pointer to a boolean value indicating whether we
- propagated the address expression anywhere.
Try to forward propagate the ADDR_EXPR into all uses of the SSA_NAME.
Often this will allow for removal of an ADDR_EXPR and INDIRECT_REF
@@ -829,7 +812,7 @@ forward_propagate_addr_expr_1 (tree stmt, tree use_stmt, bool *changed)
Returns true, if all uses have been propagated into. */
static bool
-forward_propagate_addr_expr (tree stmt, bool *some)
+forward_propagate_addr_expr (tree stmt)
{
int stmt_loop_depth = bb_for_stmt (stmt)->loop_depth;
tree name = GIMPLE_STMT_OPERAND (stmt, 0);
@@ -860,8 +843,7 @@ forward_propagate_addr_expr (tree stmt, bool *some)
push_stmt_changes (&use_stmt);
- result = forward_propagate_addr_expr_1 (stmt, use_stmt, some);
- *some |= result;
+ result = forward_propagate_addr_expr_1 (stmt, use_stmt);
all &= result;
pop_stmt_changes (&use_stmt);
@@ -999,8 +981,7 @@ tree_ssa_forward_propagate_single_use_vars (void)
if (TREE_CODE (rhs) == ADDR_EXPR)
{
- bool some = false;
- if (forward_propagate_addr_expr (stmt, &some))
+ if (forward_propagate_addr_expr (stmt))
{
release_defs (stmt);
todoflags |= TODO_remove_unused_locals;
@@ -1008,8 +989,6 @@ tree_ssa_forward_propagate_single_use_vars (void)
}
else
bsi_next (&bsi);
- if (some)
- todoflags |= TODO_update_smt_usage;
}
else if ((TREE_CODE (rhs) == BIT_NOT_EXPR
|| TREE_CODE (rhs) == NEGATE_EXPR)
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 316c3d2c1b6..49741dab1ee 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -619,7 +619,7 @@ determine_invariantness_stmt (struct dom_walk_data *dw_data ATTRIBUTE_UNUSED,
&& outermost_invariant_loop_expr (rhs,
loop_containing_stmt (stmt)) == NULL)
{
- tree lhs, stmt1, stmt2, var, name;
+ tree lhs, stmt1, stmt2, var, name, tmp;
lhs = GENERIC_TREE_OPERAND (stmt, 0);
@@ -627,15 +627,15 @@ determine_invariantness_stmt (struct dom_walk_data *dw_data ATTRIBUTE_UNUSED,
var = create_tmp_var (TREE_TYPE (rhs), "reciptmp");
add_referenced_var (var);
- stmt1 = build2 (GIMPLE_MODIFY_STMT, void_type_node, var,
- build2 (RDIV_EXPR, TREE_TYPE (rhs),
- build_real (TREE_TYPE (rhs), dconst1),
- TREE_OPERAND (rhs, 1)));
+ tmp = build2 (RDIV_EXPR, TREE_TYPE (rhs),
+ build_real (TREE_TYPE (rhs), dconst1),
+ TREE_OPERAND (rhs, 1));
+ stmt1 = build_gimple_modify_stmt (var, tmp);
name = make_ssa_name (var, stmt1);
GIMPLE_STMT_OPERAND (stmt1, 0) = name;
- stmt2 = build2 (GIMPLE_MODIFY_STMT, void_type_node, lhs,
- build2 (MULT_EXPR, TREE_TYPE (rhs),
- name, TREE_OPERAND (rhs, 0)));
+ tmp = build2 (MULT_EXPR, TREE_TYPE (rhs),
+ name, TREE_OPERAND (rhs, 0));
+ stmt2 = build_gimple_modify_stmt (lhs, tmp);
/* Replace division stmt with reciprocal and multiply stmts.
The multiply stmt is not invariant, so update iterator
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 56ef2e90e8c..f105d2b636e 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -42,9 +42,14 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "flags.h"
#include "toplev.h"
#include "tree-inline.h"
+#include "gmp.h"
#define SWAP(X, Y) do { void *tmp = (X); (X) = (Y); (Y) = tmp; } while (0)
+/* The maximum number of dominator BBs we search for conditions
+ of loop header copies we use for simplifying a conditional
+ expression. */
+#define MAX_DOMINATORS_TO_WALK 8
/*
@@ -52,6 +57,492 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
*/
+/* Bounds on some value, BELOW <= X <= UP. */
+
+typedef struct
+{
+ mpz_t below, up;
+} bounds;
+
+/* Sets RESULT to VAL, taken unsigned if UNS is true and as signed
+ otherwise. */
+
+static void
+mpz_set_double_int (mpz_t result, double_int val, bool uns)
+{
+ bool negate = false;
+ unsigned HOST_WIDE_INT vp[2];
+
+ if (!uns && double_int_negative_p (val))
+ {
+ negate = true;
+ val = double_int_neg (val);
+ }
+
+ vp[0] = val.low;
+ vp[1] = (unsigned HOST_WIDE_INT) val.high;
+ mpz_import (result, 2, -1, sizeof (HOST_WIDE_INT), 0, 0, vp);
+
+ if (negate)
+ mpz_neg (result, result);
+}
+
+/* Stores bounds of TYPE to MIN and MAX. */
+
+static void
+get_type_bounds (tree type, mpz_t min, mpz_t max)
+{
+ if (TYPE_UNSIGNED (type))
+ {
+ mpz_set_ui (min, 0);
+ mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)), true);
+ }
+ else
+ {
+ double_int mx, mn;
+
+ mx = double_int_mask (TYPE_PRECISION (type) - 1);
+ mn = double_int_sext (double_int_add (mx, double_int_one),
+ TYPE_PRECISION (type));
+ mpz_set_double_int (max, mx, true);
+ mpz_set_double_int (min, mn, false);
+ }
+}
+
+/* Returns VAL converted to TYPE. If VAL does not fit in TYPE,
+ the minimum or maximum value of the type is returned instead. */
+
+static double_int
+mpz_to_double_int (tree type, mpz_t val)
+{
+ mpz_t min, max;
+ unsigned HOST_WIDE_INT vp[2];
+ bool negate = false;
+ size_t count;
+ double_int res;
+
+ mpz_init (min);
+ mpz_init (max);
+ get_type_bounds (type, min, max);
+
+ if (mpz_cmp (val, min) < 0)
+ mpz_set (val, min);
+ else if (mpz_cmp (val, max) > 0)
+ mpz_set (val, max);
+
+ if (mpz_sgn (val) < 0)
+ negate = true;
+
+ vp[0] = 0;
+ vp[1] = 0;
+ mpz_export (vp, &count, -1, sizeof (HOST_WIDE_INT), 0, 0, val);
+ gcc_assert (count <= 2);
+
+ mpz_clear (min);
+ mpz_clear (max);
+
+ res.low = vp[0];
+ res.high = (HOST_WIDE_INT) vp[1];
+
+ res = double_int_ext (res, TYPE_PRECISION (type), TYPE_UNSIGNED (type));
+ if (negate)
+ res = double_int_neg (res);
+
+ return res;
+}
+
+/* Splits expression EXPR to a variable part VAR and constant OFFSET. */
+
+static void
+split_to_var_and_offset (tree expr, tree *var, mpz_t offset)
+{
+ tree type = TREE_TYPE (expr);
+ tree op0, op1;
+ double_int off;
+ bool negate = false;
+
+ *var = expr;
+ mpz_set_ui (offset, 0);
+
+ switch (TREE_CODE (expr))
+ {
+ case MINUS_EXPR:
+ negate = true;
+ /* Fallthru. */
+
+ case PLUS_EXPR:
+ op0 = TREE_OPERAND (expr, 0);
+ op1 = TREE_OPERAND (expr, 1);
+
+ if (TREE_CODE (op1) != INTEGER_CST)
+ break;
+
+ *var = op0;
+ /* Always sign extend the offset. */
+ off = double_int_sext (tree_to_double_int (op1),
+ TYPE_PRECISION (type));
+ mpz_set_double_int (offset, off, false);
+ break;
+
+ case INTEGER_CST:
+ *var = build_int_cst_type (type, 0);
+ off = tree_to_double_int (expr);
+ mpz_set_double_int (offset, off, TYPE_UNSIGNED (type));
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* Stores estimate on the minimum/maximum value of the expression VAR + OFF
+ in TYPE to MIN and MAX. */
+
+static void
+determine_value_range (tree type, tree var, mpz_t off,
+ mpz_t min, mpz_t max)
+{
+ /* If the expression is a constant, we know its value exactly. */
+ if (integer_zerop (var))
+ {
+ mpz_set (min, off);
+ mpz_set (max, off);
+ return;
+ }
+
+ /* If the computation may wrap, we know nothing about the value, except for
+ the range of the type. */
+ get_type_bounds (type, min, max);
+ if (!nowrap_type_p (type))
+ return;
+
+ /* Since the addition of OFF does not wrap, if OFF is positive, then we may
+ add it to MIN, otherwise to MAX. */
+ if (mpz_sgn (off) < 0)
+ mpz_add (max, max, off);
+ else
+ mpz_add (min, min, off);
+}
+
+/* Stores the bounds on the difference of the values of the expressions
+ (var + X) and (var + Y), computed in TYPE, to BNDS. */
+
+static void
+bound_difference_of_offsetted_base (tree type, mpz_t x, mpz_t y,
+ bounds *bnds)
+{
+ int rel = mpz_cmp (x, y);
+ bool may_wrap = !nowrap_type_p (type);
+ mpz_t m;
+
+ /* If X == Y, then the expressions are always equal.
+ If X > Y, there are the following possibilities:
+ a) neither of var + X and var + Y overflow or underflow, or both of
+ them do. Then their difference is X - Y.
+ b) var + X overflows, and var + Y does not. Then the values of the
+ expressions are var + X - M and var + Y, where M is the range of
+ the type, and their difference is X - Y - M.
+ c) var + Y underflows and var + X does not. Their difference again
+ is M - X + Y.
+ Therefore, if the arithmetics in type does not overflow, then the
+ bounds are (X - Y, X - Y), otherwise they are (X - Y - M, X - Y)
+ Similarly, if X < Y, the bounds are either (X - Y, X - Y) or
+ (X - Y, X - Y + M). */
+
+ if (rel == 0)
+ {
+ mpz_set_ui (bnds->below, 0);
+ mpz_set_ui (bnds->up, 0);
+ return;
+ }
+
+ mpz_init (m);
+ mpz_set_double_int (m, double_int_mask (TYPE_PRECISION (type)), true);
+ mpz_add_ui (m, m, 1);
+ mpz_sub (bnds->up, x, y);
+ mpz_set (bnds->below, bnds->up);
+
+ if (may_wrap)
+ {
+ if (rel > 0)
+ mpz_sub (bnds->below, bnds->below, m);
+ else
+ mpz_add (bnds->up, bnds->up, m);
+ }
+
+ mpz_clear (m);
+}
+
+/* From condition C0 CMP C1 derives information regarding the
+ difference of values of VARX + OFFX and VARY + OFFY, computed in TYPE,
+ and stores it to BNDS. */
+
+static void
+refine_bounds_using_guard (tree type, tree varx, mpz_t offx,
+ tree vary, mpz_t offy,
+ tree c0, enum tree_code cmp, tree c1,
+ bounds *bnds)
+{
+ tree varc0, varc1, tmp;
+ mpz_t offc0, offc1, loffx, loffy, bnd;
+ bool lbound = false;
+ bool no_wrap = nowrap_type_p (type);
+ bool x_ok, y_ok;
+
+ switch (cmp)
+ {
+ case LT_EXPR:
+ case LE_EXPR:
+ case GT_EXPR:
+ case GE_EXPR:
+ break;
+
+ case EQ_EXPR:
+ /* We could derive quite precise information from EQ_EXPR, however, such
+ a guard is unlikely to appear, so we do not bother with handling it.
+ TODO. */
+ return;
+
+ case NE_EXPR:
+ /* NE_EXPR comparisons do not contain much of useful information (except for
+ special cases like comparing with the bounds of the type, TODO). */
+ return;
+ default:
+ return;
+ }
+
+ mpz_init (offc0);
+ mpz_init (offc1);
+ split_to_var_and_offset (expand_simple_operations (c0), &varc0, offc0);
+ split_to_var_and_offset (expand_simple_operations (c1), &varc1, offc1);
+
+ /* We are only interested in comparisons of expressions based on VARX and
+ VARY. TODO -- we might also be able to derive some bounds from
+ expressions containing just one of the variables. */
+
+ if (operand_equal_p (varx, varc1, 0))
+ {
+ tmp = varc0; varc0 = varc1; varc1 = tmp;
+ mpz_swap (offc0, offc1);
+ cmp = swap_tree_comparison (cmp);
+ }
+
+ if (!operand_equal_p (varx, varc0, 0)
+ || !operand_equal_p (vary, varc1, 0))
+ goto end;
+
+ mpz_init_set (loffx, offx);
+ mpz_init_set (loffy, offy);
+
+ if (cmp == GT_EXPR || cmp == GE_EXPR)
+ {
+ tmp = varx; varx = vary; vary = tmp;
+ mpz_swap (offc0, offc1);
+ mpz_swap (loffx, loffy);
+ cmp = swap_tree_comparison (cmp);
+ lbound = true;
+ }
+
+ /* If there is no overflow, the condition implies that
+
+ (VARX + OFFX) cmp (VARY + OFFY) + (OFFX - OFFY + OFFC1 - OFFC0).
+
+ The overflows and underflows may complicate things a bit; each
+ overflow decreases the appropriate offset by M, and underflow
+ increases it by M. The above inequality would not necessarily be
+ true if
+
+ -- VARX + OFFX underflows and VARX + OFFC0 does not, or
+ VARX + OFFC0 overflows, but VARX + OFFX does not.
+ This may only happen if OFFX < OFFC0.
+ -- VARY + OFFY overflows and VARY + OFFC1 does not, or
+ VARY + OFFC1 underflows and VARY + OFFY does not.
+ This may only happen if OFFY > OFFC1. */
+
+ if (no_wrap)
+ {
+ x_ok = true;
+ y_ok = true;
+ }
+ else
+ {
+ x_ok = (integer_zerop (varx)
+ || mpz_cmp (loffx, offc0) >= 0);
+ y_ok = (integer_zerop (vary)
+ || mpz_cmp (loffy, offc1) <= 0);
+ }
+
+ if (x_ok && y_ok)
+ {
+ mpz_init (bnd);
+ mpz_sub (bnd, loffx, loffy);
+ mpz_add (bnd, bnd, offc1);
+ mpz_sub (bnd, bnd, offc0);
+
+ if (cmp == LT_EXPR)
+ mpz_sub_ui (bnd, bnd, 1);
+
+ if (lbound)
+ {
+ mpz_neg (bnd, bnd);
+ if (mpz_cmp (bnds->below, bnd) < 0)
+ mpz_set (bnds->below, bnd);
+ }
+ else
+ {
+ if (mpz_cmp (bnd, bnds->up) < 0)
+ mpz_set (bnds->up, bnd);
+ }
+ mpz_clear (bnd);
+ }
+
+ mpz_clear (loffx);
+ mpz_clear (loffy);
+end:
+ mpz_clear (offc0);
+ mpz_clear (offc1);
+}
+
+/* Stores the bounds on the value of the expression X - Y in LOOP to BNDS.
+ The subtraction is considered to be performed in arbitrary precision,
+ without overflows.
+
+ We do not attempt to be too clever regarding the value ranges of X and
+ Y; most of the time, they are just integers or ssa names offsetted by
+ integer. However, we try to use the information contained in the
+ comparisons before the loop (usually created by loop header copying). */
+
+static void
+bound_difference (struct loop *loop, tree x, tree y, bounds *bnds)
+{
+ tree type = TREE_TYPE (x);
+ tree varx, vary;
+ mpz_t offx, offy;
+ mpz_t minx, maxx, miny, maxy;
+ int cnt = 0;
+ edge e;
+ basic_block bb;
+ tree cond, c0, c1, ctype;
+ enum tree_code cmp;
+
+ mpz_init (bnds->below);
+ mpz_init (bnds->up);
+ mpz_init (offx);
+ mpz_init (offy);
+ split_to_var_and_offset (x, &varx, offx);
+ split_to_var_and_offset (y, &vary, offy);
+
+ if (!integer_zerop (varx)
+ && operand_equal_p (varx, vary, 0))
+ {
+ /* Special case VARX == VARY -- we just need to compare the
+ offsets. The matters are a bit more complicated in the
+ case addition of offsets may wrap. */
+ bound_difference_of_offsetted_base (type, offx, offy, bnds);
+ }
+ else
+ {
+ /* Otherwise, use the value ranges to determine the initial
+ estimates on below and up. */
+ mpz_init (minx);
+ mpz_init (maxx);
+ mpz_init (miny);
+ mpz_init (maxy);
+ determine_value_range (type, varx, offx, minx, maxx);
+ determine_value_range (type, vary, offy, miny, maxy);
+
+ mpz_sub (bnds->below, minx, maxy);
+ mpz_sub (bnds->up, maxx, miny);
+ mpz_clear (minx);
+ mpz_clear (maxx);
+ mpz_clear (miny);
+ mpz_clear (maxy);
+ }
+
+ /* If both X and Y are constants, we cannot get any more precise. */
+ if (integer_zerop (varx) && integer_zerop (vary))
+ goto end;
+
+ /* Now walk the dominators of the loop header and use the entry
+ guards to refine the estimates. */
+ for (bb = loop->header;
+ bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK;
+ bb = get_immediate_dominator (CDI_DOMINATORS, bb))
+ {
+ if (!single_pred_p (bb))
+ continue;
+ e = single_pred_edge (bb);
+
+ if (!(e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)))
+ continue;
+
+ cond = COND_EXPR_COND (last_stmt (e->src));
+ if (!COMPARISON_CLASS_P (cond))
+ continue;
+ c0 = TREE_OPERAND (cond, 0);
+ cmp = TREE_CODE (cond);
+ c1 = TREE_OPERAND (cond, 1);
+ ctype = TREE_TYPE (c0);
+
+ if (!tree_ssa_useless_type_conversion_1 (ctype, type))
+ continue;
+
+ if (e->flags & EDGE_FALSE_VALUE)
+ cmp = invert_tree_comparison (cmp, false);
+
+ refine_bounds_using_guard (type, varx, offx, vary, offy,
+ c0, cmp, c1, bnds);
+ ++cnt;
+ }
+
+end:
+ mpz_clear (offx);
+ mpz_clear (offy);
+}
+
+/* Update the bounds in BNDS that restrict the value of X to the bounds
+ that restrict the value of X + DELTA. X can be obtained as a
+ difference of two values in TYPE. */
+
+static void
+bounds_add (bounds *bnds, double_int delta, tree type)
+{
+ mpz_t mdelta, max;
+
+ mpz_init (mdelta);
+ mpz_set_double_int (mdelta, delta, false);
+
+ mpz_init (max);
+ mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)), true);
+
+ mpz_add (bnds->up, bnds->up, mdelta);
+ mpz_add (bnds->below, bnds->below, mdelta);
+
+ if (mpz_cmp (bnds->up, max) > 0)
+ mpz_set (bnds->up, max);
+
+ mpz_neg (max, max);
+ if (mpz_cmp (bnds->below, max) < 0)
+ mpz_set (bnds->below, max);
+
+ mpz_clear (mdelta);
+ mpz_clear (max);
+}
+
+/* Update the bounds in BNDS that restrict the value of X to the bounds
+ that restrict the value of -X. */
+
+static void
+bounds_negate (bounds *bnds)
+{
+ mpz_t tmp;
+
+ mpz_init_set (tmp, bnds->up);
+ mpz_neg (bnds->up, bnds->below);
+ mpz_neg (bnds->below, tmp);
+ mpz_clear (tmp);
+}
+
/* Returns inverse of X modulo 2^s, where MASK = 2^s-1. */
static tree
@@ -96,26 +587,71 @@ inverse (tree x, tree mask)
return rslt;
}
+/* Derives the upper bound BND on the number of executions of loop with exit
+ condition S * i <> C, assuming that the loop is not infinite. If
+ NO_OVERFLOW is true, then the control variable of the loop does not
+ overflow. If NO_OVERFLOW is true or BNDS.below >= 0, then BNDS.up
+ contains the upper bound on the value of C. */
+
+static void
+number_of_iterations_ne_max (mpz_t bnd, bool no_overflow, tree c, tree s,
+ bounds *bnds)
+{
+ double_int max;
+ mpz_t d;
+
+ /* If the control variable does not overflow, the number of iterations is
+ at most c / s. Otherwise it is at most the period of the control
+ variable. */
+ if (!no_overflow && !multiple_of_p (TREE_TYPE (c), c, s))
+ {
+ max = double_int_mask (TYPE_PRECISION (TREE_TYPE (c))
+ - tree_low_cst (num_ending_zeros (s), 1));
+ mpz_set_double_int (bnd, max, true);
+ return;
+ }
+
+ /* Determine the upper bound on C. */
+ if (no_overflow || mpz_sgn (bnds->below) >= 0)
+ mpz_set (bnd, bnds->up);
+ else if (TREE_CODE (c) == INTEGER_CST)
+ mpz_set_double_int (bnd, tree_to_double_int (c), true);
+ else
+ mpz_set_double_int (bnd, double_int_mask (TYPE_PRECISION (TREE_TYPE (c))),
+ true);
+
+ mpz_init (d);
+ mpz_set_double_int (d, tree_to_double_int (s), true);
+ mpz_fdiv_q (bnd, bnd, d);
+ mpz_clear (d);
+}
+
/* Determines number of iterations of loop whose ending condition
is IV <> FINAL. TYPE is the type of the iv. The number of
iterations is stored to NITER. NEVER_INFINITE is true if
we know that the exit must be taken eventually, i.e., that the IV
ever reaches the value FINAL (we derived this earlier, and possibly set
- NITER->assumptions to make sure this is the case). */
+ NITER->assumptions to make sure this is the case). BNDS contains the
+ bounds on the difference FINAL - IV->base. */
static bool
number_of_iterations_ne (tree type, affine_iv *iv, tree final,
- struct tree_niter_desc *niter, bool never_infinite)
+ struct tree_niter_desc *niter, bool never_infinite,
+ bounds *bnds)
{
tree niter_type = unsigned_type_for (type);
tree s, c, d, bits, assumption, tmp, bound;
+ mpz_t max;
niter->control = *iv;
niter->bound = final;
niter->cmp = NE_EXPR;
- /* Rearrange the terms so that we get inequality s * i <> c, with s
- positive. Also cast everything to the unsigned type. */
+ /* Rearrange the terms so that we get inequality S * i <> C, with S
+ positive. Also cast everything to the unsigned type. If IV does
+ not overflow, BNDS bounds the value of C. Also, this is the
+ case if the computation |FINAL - IV->base| does not overflow, i.e.,
+ if BNDS->below in the result is nonnegative. */
if (tree_int_cst_sign_bit (iv->step))
{
s = fold_convert (niter_type,
@@ -123,6 +659,7 @@ number_of_iterations_ne (tree type, affine_iv *iv, tree final,
c = fold_build2 (MINUS_EXPR, niter_type,
fold_convert (niter_type, iv->base),
fold_convert (niter_type, final));
+ bounds_negate (bnds);
}
else
{
@@ -132,6 +669,11 @@ number_of_iterations_ne (tree type, affine_iv *iv, tree final,
fold_convert (niter_type, iv->base));
}
+ mpz_init (max);
+ number_of_iterations_ne_max (max, iv->no_overflow, c, s, bnds);
+ niter->max = mpz_to_double_int (niter_type, max);
+ mpz_clear (max);
+
/* First the trivial cases -- when the step is 1. */
if (integer_onep (s))
{
@@ -175,17 +717,21 @@ number_of_iterations_ne (tree type, affine_iv *iv, tree final,
of the step. The assumptions necessary to ensure that the computation
of the final value does not overflow are recorded in NITER. If we
find the final value, we adjust DELTA and return TRUE. Otherwise
- we return false. */
+ we return false. BNDS bounds the value of IV1->base - IV0->base,
+ and will be updated by the same amount as DELTA. */
static bool
number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
struct tree_niter_desc *niter,
- tree *delta, tree step)
+ tree *delta, tree step,
+ bounds *bnds)
{
tree niter_type = TREE_TYPE (step);
tree mod = fold_build2 (FLOOR_MOD_EXPR, niter_type, *delta, step);
tree tmod;
+ mpz_t mmod;
tree assumption = boolean_true_node, bound, noloop;
+ bool ret = false;
if (TREE_CODE (mod) != INTEGER_CST)
return false;
@@ -193,6 +739,10 @@ number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
mod = fold_build2 (MINUS_EXPR, niter_type, step, mod);
tmod = fold_convert (type, mod);
+ mpz_init (mmod);
+ mpz_set_double_int (mmod, tree_to_double_int (mod), true);
+ mpz_neg (mmod, mmod);
+
if (integer_nonzerop (iv0->step))
{
/* The final value of the iv is iv1->base + MOD, assuming that this
@@ -205,12 +755,15 @@ number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
assumption = fold_build2 (LE_EXPR, boolean_type_node,
iv1->base, bound);
if (integer_zerop (assumption))
- return false;
+ goto end;
}
- noloop = fold_build2 (GT_EXPR, boolean_type_node,
- iv0->base,
- fold_build2 (PLUS_EXPR, type,
- iv1->base, tmod));
+ if (mpz_cmp (mmod, bnds->below) < 0)
+ noloop = boolean_false_node;
+ else
+ noloop = fold_build2 (GT_EXPR, boolean_type_node,
+ iv0->base,
+ fold_build2 (PLUS_EXPR, type,
+ iv1->base, tmod));
}
else
{
@@ -224,12 +777,15 @@ number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
assumption = fold_build2 (GE_EXPR, boolean_type_node,
iv0->base, bound);
if (integer_zerop (assumption))
- return false;
+ goto end;
}
- noloop = fold_build2 (GT_EXPR, boolean_type_node,
- fold_build2 (MINUS_EXPR, type,
- iv0->base, tmod),
- iv1->base);
+ if (mpz_cmp (mmod, bnds->below) < 0)
+ noloop = boolean_false_node;
+ else
+ noloop = fold_build2 (GT_EXPR, boolean_type_node,
+ fold_build2 (MINUS_EXPR, type,
+ iv0->base, tmod),
+ iv1->base);
}
if (!integer_nonzerop (assumption))
@@ -240,8 +796,13 @@ number_of_iterations_lt_to_ne (tree type, affine_iv *iv0, affine_iv *iv1,
niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
niter->may_be_zero,
noloop);
+ bounds_add (bnds, tree_to_double_int (mod), type);
*delta = fold_build2 (PLUS_EXPR, niter_type, *delta, mod);
- return true;
+
+ ret = true;
+end:
+ mpz_clear (mmod);
+ return ret;
}
/* Add assertions to NITER that ensure that the control variable of the loop
@@ -315,14 +876,75 @@ assert_no_overflow_lt (tree type, affine_iv *iv0, affine_iv *iv1,
}
/* Add an assumption to NITER that a loop whose ending condition
- is IV0 < IV1 rolls. TYPE is the type of the control iv. */
+ is IV0 < IV1 rolls. TYPE is the type of the control iv. BNDS
+ bounds the value of IV1->base - IV0->base. */
static void
assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
- struct tree_niter_desc *niter)
+ struct tree_niter_desc *niter, bounds *bnds)
{
tree assumption = boolean_true_node, bound, diff;
tree mbz, mbzl, mbzr;
+ bool rolls_p, no_overflow_p;
+ double_int dstep;
+ mpz_t mstep, max;
+
+ /* We are going to compute the number of iterations as
+ (iv1->base - iv0->base + step - 1) / step, computed in the unsigned
+ variant of TYPE. This formula only works if
+
+ -step + 1 <= (iv1->base - iv0->base) <= MAX - step + 1
+
+ (where MAX is the maximum value of the unsigned variant of TYPE, and
+ the computations in this formula are performed in full precision
+ (without overflows).
+
+ Usually, for loops with exit condition iv0->base + step * i < iv1->base,
+ we have a condition of form iv0->base - step < iv1->base before the loop,
+ and for loops iv0->base < iv1->base - step * i the condition
+ iv0->base < iv1->base + step, due to loop header copying, which enable us
+ to prove the lower bound.
+
+ The upper bound is more complicated. Unless the expressions for initial
+ and final value themselves contain enough information, we usually cannot
+ derive it from the context. */
+
+ /* First check whether the answer does not follow from the bounds we gathered
+ before. */
+ if (integer_nonzerop (iv0->step))
+ dstep = tree_to_double_int (iv0->step);
+ else
+ {
+ dstep = double_int_sext (tree_to_double_int (iv1->step),
+ TYPE_PRECISION (type));
+ dstep = double_int_neg (dstep);
+ }
+
+ mpz_init (mstep);
+ mpz_set_double_int (mstep, dstep, true);
+ mpz_neg (mstep, mstep);
+ mpz_add_ui (mstep, mstep, 1);
+
+ rolls_p = mpz_cmp (mstep, bnds->below) <= 0;
+
+ mpz_init (max);
+ mpz_set_double_int (max, double_int_mask (TYPE_PRECISION (type)), true);
+ mpz_add (max, max, mstep);
+ no_overflow_p = (mpz_cmp (bnds->up, max) <= 0
+ /* For pointers, only values lying inside a single object
+ can be compared or manipulated by pointer arithmetics.
+ Gcc in general does not allow or handle objects larger
+ than half of the address space, hence the upper bound
+ is satisfied for pointers. */
+ || POINTER_TYPE_P (type));
+ mpz_clear (mstep);
+ mpz_clear (max);
+
+ if (rolls_p && no_overflow_p)
+ return;
+
+ /* Now the hard part; we must formulate the assumption(s) as expressions, and
+ we must be careful not to introduce overflow. */
if (integer_nonzerop (iv0->step))
{
@@ -362,27 +984,31 @@ assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
mbzr = fold_build2 (MINUS_EXPR, type, iv1->base, diff);
}
- mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
-
if (!integer_nonzerop (assumption))
niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
niter->assumptions, assumption);
- if (!integer_zerop (mbz))
- niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
- niter->may_be_zero, mbz);
+ if (!rolls_p)
+ {
+ mbz = fold_build2 (GT_EXPR, boolean_type_node, mbzl, mbzr);
+ niter->may_be_zero = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
+ niter->may_be_zero, mbz);
+ }
}
/* Determines number of iterations of loop whose ending condition
is IV0 < IV1. TYPE is the type of the iv. The number of
- iterations is stored to NITER. */
+ iterations is stored to NITER. BNDS bounds the difference
+ IV1->base - IV0->base. */
static bool
number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
struct tree_niter_desc *niter,
- bool never_infinite ATTRIBUTE_UNUSED)
+ bool never_infinite ATTRIBUTE_UNUSED,
+ bounds *bnds)
{
tree niter_type = unsigned_type_for (type);
tree delta, step, s;
+ mpz_t mstep, tmp;
if (integer_nonzerop (iv0->step))
{
@@ -412,10 +1038,18 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
for (i = iv1->base; i > iv0->base; i--).
In both cases # of iterations is iv1->base - iv0->base, assuming that
- iv1->base >= iv0->base. */
- niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
- iv1->base, iv0->base);
+ iv1->base >= iv0->base.
+
+ First try to derive a lower bound on the value of
+ iv1->base - iv0->base, computed in full precision. If the difference
+ is nonnegative, we are done, otherwise we must record the
+ condition. */
+
+ if (mpz_sgn (bnds->below) < 0)
+ niter->may_be_zero = fold_build2 (LT_EXPR, boolean_type_node,
+ iv1->base, iv0->base);
niter->niter = delta;
+ niter->max = mpz_to_double_int (niter_type, bnds->up);
return true;
}
@@ -428,7 +1062,8 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
/* If we can determine the final value of the control iv exactly, we can
transform the condition to != comparison. In particular, this will be
the case if DELTA is constant. */
- if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step))
+ if (number_of_iterations_lt_to_ne (type, iv0, iv1, niter, &delta, step,
+ bnds))
{
affine_iv zps;
@@ -438,7 +1073,7 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
zps does not overflow. */
zps.no_overflow = true;
- return number_of_iterations_ne (type, &zps, delta, niter, true);
+ return number_of_iterations_ne (type, &zps, delta, niter, true, bnds);
}
/* Make sure that the control iv does not overflow. */
@@ -448,12 +1083,23 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
/* We determine the number of iterations as (delta + step - 1) / step. For
this to work, we must know that iv1->base >= iv0->base - step + 1,
otherwise the loop does not roll. */
- assert_loop_rolls_lt (type, iv0, iv1, niter);
+ assert_loop_rolls_lt (type, iv0, iv1, niter, bnds);
s = fold_build2 (MINUS_EXPR, niter_type,
step, build_int_cst (niter_type, 1));
delta = fold_build2 (PLUS_EXPR, niter_type, delta, s);
niter->niter = fold_build2 (FLOOR_DIV_EXPR, niter_type, delta, step);
+
+ mpz_init (mstep);
+ mpz_init (tmp);
+ mpz_set_double_int (mstep, tree_to_double_int (step), true);
+ mpz_add (tmp, bnds->up, mstep);
+ mpz_sub_ui (tmp, tmp, 1);
+ mpz_fdiv_q (tmp, tmp, mstep);
+ niter->max = mpz_to_double_int (niter_type, tmp);
+ mpz_clear (mstep);
+ mpz_clear (tmp);
+
return true;
}
@@ -462,11 +1108,12 @@ number_of_iterations_lt (tree type, affine_iv *iv0, affine_iv *iv1,
iterations is stored to NITER. NEVER_INFINITE is true if
we know that this condition must eventually become false (we derived this
earlier, and possibly set NITER->assumptions to make sure this
- is the case). */
+ is the case). BNDS bounds the difference IV1->base - IV0->base. */
static bool
number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
- struct tree_niter_desc *niter, bool never_infinite)
+ struct tree_niter_desc *niter, bool never_infinite,
+ bounds *bnds)
{
tree assumption;
@@ -497,7 +1144,28 @@ number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
else
iv0->base = fold_build2 (MINUS_EXPR, type,
iv0->base, build_int_cst (type, 1));
- return number_of_iterations_lt (type, iv0, iv1, niter, never_infinite);
+
+ bounds_add (bnds, double_int_one, type);
+
+ return number_of_iterations_lt (type, iv0, iv1, niter, never_infinite, bnds);
+}
+
+/* Dumps description of affine induction variable IV to FILE. */
+
+static void
+dump_affine_iv (FILE *file, affine_iv *iv)
+{
+ if (!integer_zerop (iv->step))
+ fprintf (file, "[");
+
+ print_generic_expr (dump_file, iv->base, TDF_SLIM);
+
+ if (!integer_zerop (iv->step))
+ {
+ fprintf (file, ", + , ");
+ print_generic_expr (dump_file, iv->step, TDF_SLIM);
+ fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
+ }
}
/* Determine the number of iterations according to condition (for staying
@@ -507,6 +1175,8 @@ number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
type TYPE, which must be an integer or pointer type. The steps of the
ivs must be constants (or NULL_TREE, which is interpreted as constant zero).
+ LOOP is the loop whose number of iterations we are determining.
+
ONLY_EXIT is true if we are sure this is the only way the loop could be
exited (including possibly non-returning function calls, exceptions, etc.)
-- in this case we can use the information whether the control induction
@@ -518,11 +1188,13 @@ number_of_iterations_le (tree type, affine_iv *iv0, affine_iv *iv1,
was determined (possibly with some assumptions). */
static bool
-number_of_iterations_cond (tree type, affine_iv *iv0, enum tree_code code,
+number_of_iterations_cond (struct loop *loop,
+ tree type, affine_iv *iv0, enum tree_code code,
affine_iv *iv1, struct tree_niter_desc *niter,
bool only_exit)
{
- bool never_infinite;
+ bool never_infinite, ret;
+ bounds bnds;
/* The meaning of these assumptions is this:
if !assumptions
@@ -532,7 +1204,7 @@ number_of_iterations_cond (tree type, affine_iv *iv0, enum tree_code code,
niter->assumptions = boolean_true_node;
niter->may_be_zero = boolean_false_node;
niter->niter = NULL_TREE;
- niter->additional_info = boolean_true_node;
+ niter->max = double_int_zero;
niter->bound = NULL_TREE;
niter->cmp = ERROR_MARK;
@@ -618,23 +1290,89 @@ number_of_iterations_cond (tree type, affine_iv *iv0, enum tree_code code,
if (integer_zerop (fold_build2 (code, boolean_type_node, iv0->base, iv1->base)))
{
niter->niter = build_int_cst (unsigned_type_for (type), 0);
+ niter->max = double_int_zero;
return true;
}
-
+
/* OK, now we know we have a senseful loop. Handle several cases, depending
on what comparison operator is used. */
+ bound_difference (loop, iv1->base, iv0->base, &bnds);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Analysing # of iterations of loop %d\n", loop->num);
+
+ fprintf (dump_file, " exit condition ");
+ dump_affine_iv (dump_file, iv0);
+ fprintf (dump_file, " %s ",
+ code == NE_EXPR ? "!="
+ : code == LT_EXPR ? "<"
+ : "<=");
+ dump_affine_iv (dump_file, iv1);
+ fprintf (dump_file, "\n");
+
+ fprintf (dump_file, " bounds on difference of bases: ");
+ mpz_out_str (dump_file, 10, bnds.below);
+ fprintf (dump_file, " ... ");
+ mpz_out_str (dump_file, 10, bnds.up);
+ fprintf (dump_file, "\n");
+ }
+
switch (code)
{
case NE_EXPR:
gcc_assert (integer_zerop (iv1->step));
- return number_of_iterations_ne (type, iv0, iv1->base, niter, never_infinite);
+ ret = number_of_iterations_ne (type, iv0, iv1->base, niter,
+ never_infinite, &bnds);
+ break;
+
case LT_EXPR:
- return number_of_iterations_lt (type, iv0, iv1, niter, never_infinite);
+ ret = number_of_iterations_lt (type, iv0, iv1, niter, never_infinite,
+ &bnds);
+ break;
+
case LE_EXPR:
- return number_of_iterations_le (type, iv0, iv1, niter, never_infinite);
+ ret = number_of_iterations_le (type, iv0, iv1, niter, never_infinite,
+ &bnds);
+ break;
+
default:
gcc_unreachable ();
}
+
+ mpz_clear (bnds.up);
+ mpz_clear (bnds.below);
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ if (ret)
+ {
+ fprintf (dump_file, " result:\n");
+ if (!integer_nonzerop (niter->assumptions))
+ {
+ fprintf (dump_file, " under assumptions ");
+ print_generic_expr (dump_file, niter->assumptions, TDF_SLIM);
+ fprintf (dump_file, "\n");
+ }
+
+ if (!integer_zerop (niter->may_be_zero))
+ {
+ fprintf (dump_file, " zero if ");
+ print_generic_expr (dump_file, niter->may_be_zero, TDF_SLIM);
+ fprintf (dump_file, "\n");
+ }
+
+ fprintf (dump_file, " # of iterations ");
+ print_generic_expr (dump_file, niter->niter, TDF_SLIM);
+ fprintf (dump_file, ", bounded by ");
+ dump_double_int (dump_file, niter->max, true);
+ fprintf (dump_file, "\n");
+ }
+ else
+ fprintf (dump_file, " failed\n\n");
+ }
+ return ret;
}
/* Substitute NEW for OLD in EXPR and fold the result. */
@@ -718,6 +1456,24 @@ expand_simple_operations (tree expr)
return expr;
stmt = SSA_NAME_DEF_STMT (expr);
+ if (TREE_CODE (stmt) == PHI_NODE)
+ {
+ basic_block src, dest;
+
+ if (PHI_NUM_ARGS (stmt) != 1)
+ return expr;
+ e = PHI_ARG_DEF (stmt, 0);
+
+ /* Avoid propagating through loop exit phi nodes, which
+ could break loop-closed SSA form restrictions. */
+ dest = bb_for_stmt (stmt);
+ src = single_pred (dest);
+ if (TREE_CODE (e) == SSA_NAME
+ && src->loop_father != dest->loop_father)
+ return expr;
+
+ return expand_simple_operations (e);
+ }
if (TREE_CODE (stmt) != GIMPLE_MODIFY_STMT)
return expr;
@@ -861,23 +1617,16 @@ tree_simplify_using_condition (tree cond, tree expr)
return tree_simplify_using_condition_1 (cond, expr);
}
-/* The maximum number of dominator BBs we search for conditions
- of loop header copies we use for simplifying a conditional
- expression. */
-#define MAX_DOMINATORS_TO_WALK 8
-
/* Tries to simplify EXPR using the conditions on entry to LOOP.
- Record the conditions used for simplification to CONDS_USED.
Returns the simplified expression (or EXPR unchanged, if no
simplification was possible).*/
static tree
-simplify_using_initial_conditions (struct loop *loop, tree expr,
- tree *conds_used)
+simplify_using_initial_conditions (struct loop *loop, tree expr)
{
edge e;
basic_block bb;
- tree exp, cond;
+ tree cond;
int cnt = 0;
if (TREE_CODE (expr) == INTEGER_CST)
@@ -900,15 +1649,7 @@ simplify_using_initial_conditions (struct loop *loop, tree expr,
cond = COND_EXPR_COND (last_stmt (e->src));
if (e->flags & EDGE_FALSE_VALUE)
cond = invert_truthvalue (cond);
- exp = tree_simplify_using_condition (cond, expr);
-
- if (exp != expr)
- *conds_used = fold_build2 (TRUTH_AND_EXPR,
- boolean_type_node,
- *conds_used,
- cond);
-
- expr = exp;
+ expr = tree_simplify_using_condition (cond, expr);
++cnt;
}
@@ -1065,7 +1806,7 @@ number_of_iterations_exit (struct loop *loop, edge exit,
iv0.base = expand_simple_operations (iv0.base);
iv1.base = expand_simple_operations (iv1.base);
- if (!number_of_iterations_cond (type, &iv0, code, &iv1, niter,
+ if (!number_of_iterations_cond (loop, type, &iv0, code, &iv1, niter,
loop_only_exit_p (loop, exit)))
{
fold_undefer_and_ignore_overflow_warnings ();
@@ -1081,15 +1822,12 @@ number_of_iterations_exit (struct loop *loop, edge exit,
niter->niter = simplify_using_outer_evolutions (loop, niter->niter);
}
- niter->additional_info = boolean_true_node;
niter->assumptions
= simplify_using_initial_conditions (loop,
- niter->assumptions,
- &niter->additional_info);
+ niter->assumptions);
niter->may_be_zero
= simplify_using_initial_conditions (loop,
- niter->may_be_zero,
- &niter->additional_info);
+ niter->may_be_zero);
fold_undefer_and_ignore_overflow_warnings ();
@@ -1469,55 +2207,12 @@ find_loop_niter_by_eval (struct loop *loop, edge *exit)
*/
-/* Returns true if we can prove that COND ==> VAL >= 0. */
-
-static bool
-implies_nonnegative_p (tree cond, tree val)
-{
- tree type = TREE_TYPE (val);
- tree compare;
-
- if (tree_expr_nonnegative_p (val))
- return true;
-
- if (integer_nonzerop (cond))
- return false;
-
- compare = fold_build2 (GE_EXPR,
- boolean_type_node, val, build_int_cst (type, 0));
- compare = tree_simplify_using_condition_1 (cond, compare);
-
- return integer_nonzerop (compare);
-}
-
-/* Returns true if we can prove that COND ==> A >= B. */
-
-static bool
-implies_ge_p (tree cond, tree a, tree b)
-{
- tree compare = fold_build2 (GE_EXPR, boolean_type_node, a, b);
-
- if (integer_nonzerop (compare))
- return true;
-
- if (integer_nonzerop (cond))
- return false;
-
- compare = tree_simplify_using_condition_1 (cond, compare);
-
- return integer_nonzerop (compare);
-}
-
/* Returns a constant upper bound on the value of expression VAL. VAL
is considered to be unsigned. If its type is signed, its value must
- be nonnegative.
-
- The condition ADDITIONAL must be satisfied (for example, if VAL is
- "(unsigned) n" and ADDITIONAL is "n > 0", then we can derive that
- VAL is at most (unsigned) MAX_INT). */
+ be nonnegative. */
static double_int
-derive_constant_upper_bound (tree val, tree additional)
+derive_constant_upper_bound (tree val)
{
tree type = TREE_TYPE (val);
tree op0, op1, subtype, maxt;
@@ -1544,7 +2239,7 @@ derive_constant_upper_bound (tree val, tree additional)
/* If TYPE is also signed, the fact that VAL is nonnegative implies
that OP0 is nonnegative. */
&& TYPE_UNSIGNED (type)
- && !implies_nonnegative_p (additional, op0))
+ && !tree_expr_nonnegative_p (op0))
{
/* If we cannot prove that the casted expression is nonnegative,
we cannot establish more useful upper bound than the precision
@@ -1554,7 +2249,7 @@ derive_constant_upper_bound (tree val, tree additional)
/* We now know that op0 is an nonnegative value. Try deriving an upper
bound for it. */
- bnd = derive_constant_upper_bound (op0, additional);
+ bnd = derive_constant_upper_bound (op0);
/* If the bound does not fit in TYPE, max. value of TYPE could be
attained. */
@@ -1569,7 +2264,7 @@ derive_constant_upper_bound (tree val, tree additional)
op1 = TREE_OPERAND (val, 1);
if (TREE_CODE (op1) != INTEGER_CST
- || !implies_nonnegative_p (additional, op0))
+ || !tree_expr_nonnegative_p (op0))
return max;
/* Canonicalize to OP0 - CST. Consider CST to be signed, in order to
@@ -1580,7 +2275,7 @@ derive_constant_upper_bound (tree val, tree additional)
if (TREE_CODE (val) == PLUS_EXPR)
cst = double_int_neg (cst);
- bnd = derive_constant_upper_bound (op0, additional);
+ bnd = derive_constant_upper_bound (op0);
if (double_int_negative_p (cst))
{
@@ -1611,15 +2306,18 @@ derive_constant_upper_bound (tree val, tree additional)
*/
/* This should only happen if the type is unsigned; however, for
- programs that use overflowing signed arithmetics even with
+ buggy programs that use overflowing signed arithmetics even with
-fno-wrapv, this condition may also be true for signed values. */
if (double_int_ucmp (bnd, cst) < 0)
return max;
- if (TYPE_UNSIGNED (type)
- && !implies_ge_p (additional,
- op0, double_int_to_tree (type, cst)))
- return max;
+ if (TYPE_UNSIGNED (type))
+ {
+ tree tem = fold_binary (GE_EXPR, boolean_type_node, op0,
+ double_int_to_tree (type, cst));
+ if (!tem || integer_nonzerop (tem))
+ return max;
+ }
bnd = double_int_add (bnd, double_int_neg (cst));
}
@@ -1634,7 +2332,7 @@ derive_constant_upper_bound (tree val, tree additional)
|| tree_int_cst_sign_bit (op1))
return max;
- bnd = derive_constant_upper_bound (op0, additional);
+ bnd = derive_constant_upper_bound (op0);
return double_int_udiv (bnd, tree_to_double_int (op1), FLOOR_DIV_EXPR);
case BIT_AND_EXPR:
@@ -1649,27 +2347,25 @@ derive_constant_upper_bound (tree val, tree additional)
if (TREE_CODE (stmt) != GIMPLE_MODIFY_STMT
|| GIMPLE_STMT_OPERAND (stmt, 0) != val)
return max;
- return derive_constant_upper_bound (GIMPLE_STMT_OPERAND (stmt, 1),
- additional);
+ return derive_constant_upper_bound (GIMPLE_STMT_OPERAND (stmt, 1));
default:
return max;
}
}
-/* Records that AT_STMT is executed at most BOUND + 1 times in LOOP. The
- additional condition ADDITIONAL is recorded with the bound. IS_EXIT
+/* Records that AT_STMT is executed at most BOUND + 1 times in LOOP. IS_EXIT
is true if the loop is exited immediately after STMT, and this exit
is taken at last when the STMT is executed BOUND + 1 times.
REALISTIC is true if the estimate comes from a reliable source
- (number of iterations analysis, or size of data accessed in the loop). */
+ (number of iterations analysis, or size of data accessed in the loop).
+ I_BOUND is an unsigned double_int upper estimate on BOUND. */
static void
-record_estimate (struct loop *loop, tree bound, tree additional, tree at_stmt,
- bool is_exit, bool realistic)
+record_estimate (struct loop *loop, tree bound, double_int i_bound,
+ tree at_stmt, bool is_exit, bool realistic)
{
struct nb_iter_bound *elt = xmalloc (sizeof (struct nb_iter_bound));
- double_int i_bound = derive_constant_upper_bound (bound, additional);
if (dump_file && (dump_flags & TDF_DETAILS))
{
@@ -1701,6 +2397,7 @@ record_nonwrapping_iv (struct loop *loop, tree base, tree step, tree stmt,
{
tree niter_bound, extreme, delta;
tree type = TREE_TYPE (base), unsigned_type;
+ double_int max;
if (TREE_CODE (step) != INTEGER_CST || integer_zerop (step))
return;
@@ -1741,8 +2438,8 @@ record_nonwrapping_iv (struct loop *loop, tree base, tree step, tree stmt,
/* STMT is executed at most NITER_BOUND + 1 times, since otherwise the value
would get out of the range. */
niter_bound = fold_build2 (FLOOR_DIV_EXPR, unsigned_type, delta, step);
- record_estimate (loop, niter_bound, boolean_true_node, stmt,
- false, data_size_bounds_p);
+ max = derive_constant_upper_bound (niter_bound);
+ record_estimate (loop, niter_bound, max, stmt, false, data_size_bounds_p);
}
/* Initialize LOOP->ESTIMATED_NB_ITERATIONS with the lowest safe
@@ -1752,6 +2449,8 @@ static void
compute_estimated_nb_iterations (struct loop *loop)
{
struct nb_iter_bound *bound;
+ double_int bnd_val, delta;
+ edge exit;
gcc_assert (loop->estimate_state == EST_NOT_AVAILABLE);
@@ -1760,17 +2459,79 @@ compute_estimated_nb_iterations (struct loop *loop)
if (!bound->realistic)
continue;
+ bnd_val = bound->bound;
+ /* If bound->stmt is an exit, then every statement in the loop is
+ executed at most BND_VAL + 1 times. If it is not an exit, then
+ some of the statements before it could be executed BND_VAL + 2
+ times, if an exit of LOOP is before stmt. */
+ exit = single_exit (loop);
+
+ if (bound->is_exit
+ || (exit != NULL
+ && dominated_by_p (CDI_DOMINATORS,
+ exit->src, bb_for_stmt (bound->stmt))))
+ delta = double_int_one;
+ else
+ delta = double_int_two;
+ bnd_val = double_int_add (bnd_val, delta);
+
+ /* If an overflow occured, ignore the result. */
+ if (double_int_ucmp (bnd_val, delta) < 0)
+ continue;
+
/* Update only when there is no previous estimation, or when the current
estimation is smaller. */
if (loop->estimate_state == EST_NOT_AVAILABLE
- || double_int_ucmp (bound->bound, loop->estimated_nb_iterations) < 0)
+ || double_int_ucmp (bnd_val, loop->estimated_nb_iterations) < 0)
{
loop->estimate_state = EST_AVAILABLE;
- loop->estimated_nb_iterations = bound->bound;
+ loop->estimated_nb_iterations = bnd_val;
}
}
}
+/* Returns true if REF is a reference to an array at the end of a dynamically
+ allocated structure. If this is the case, the array may be allocated larger
+ than its upper bound implies. */
+
+static bool
+array_at_struct_end_p (tree ref)
+{
+ tree base = get_base_address (ref);
+ tree parent, field;
+
+ /* Unless the reference is through a pointer, the size of the array matches
+ its declaration. */
+ if (!base || !INDIRECT_REF_P (base))
+ return false;
+
+ for (;handled_component_p (ref); ref = parent)
+ {
+ parent = TREE_OPERAND (ref, 0);
+
+ if (TREE_CODE (ref) == COMPONENT_REF)
+ {
+ /* All fields of a union are at its end. */
+ if (TREE_CODE (TREE_TYPE (parent)) == UNION_TYPE)
+ continue;
+
+ /* Unless the field is at the end of the struct, we are done. */
+ field = TREE_OPERAND (ref, 1);
+ if (TREE_CHAIN (field))
+ return false;
+ }
+
+ /* The other options are ARRAY_REF, ARRAY_RANGE_REF, VIEW_CONVERT_EXPR.
+ In all these cases, we might be accessing the last element, and
+ although in practice this will probably never happen, it is legal for
+ the indices of this last element to exceed the bounds of the array.
+ Therefore, continue checking. */
+ }
+
+ gcc_assert (INDIRECT_REF_P (ref));
+ return true;
+}
+
/* Determine information about number of iterations a LOOP from the index
IDX of a data reference accessed in STMT. Callback for for_each_index. */
@@ -1789,7 +2550,8 @@ idx_infer_loop_bounds (tree base, tree *idx, void *dta)
bool sign;
struct loop *loop = data->loop;
- if (TREE_CODE (base) != ARRAY_REF)
+ if (TREE_CODE (base) != ARRAY_REF
+ || array_at_struct_end_p (base))
return true;
ev = instantiate_parameters (loop, analyze_scalar_evolution (loop, *idx));
@@ -1974,7 +2736,7 @@ infer_loop_bounds_from_undefined (struct loop *loop)
/* Records estimates on numbers of iterations of LOOP. */
-static void
+void
estimate_numbers_of_iterations_loop (struct loop *loop)
{
VEC (edge, heap) *exits;
@@ -2000,8 +2762,7 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
niter = build3 (COND_EXPR, type, niter_desc.may_be_zero,
build_int_cst (type, 0),
niter);
- record_estimate (loop, niter,
- niter_desc.additional_info,
+ record_estimate (loop, niter, niter_desc.max,
last_stmt (ex->src),
true, true);
}
diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c
index e0612b9a56e..53977d8bddd 100644
--- a/gcc/tree-ssa-loop-prefetch.c
+++ b/gcc/tree-ssa-loop-prefetch.c
@@ -885,13 +885,14 @@ should_unroll_loop_p (struct loop *loop, struct tree_niter_desc *desc,
/* Determine the coefficient by that unroll LOOP, from the information
contained in the list of memory references REFS. Description of
- umber of iterations of LOOP is stored to DESC. AHEAD is the number
- of iterations ahead that we need to prefetch. NINSNS is number of
- insns of the LOOP. */
+ umber of iterations of LOOP is stored to DESC. NINSNS is the number of
+ insns of the LOOP. EST_NITER is the estimated number of iterations of
+ the loop, or -1 if no estimate is available. */
static unsigned
determine_unroll_factor (struct loop *loop, struct mem_ref_group *refs,
- unsigned ninsns, struct tree_niter_desc *desc)
+ unsigned ninsns, struct tree_niter_desc *desc,
+ HOST_WIDE_INT est_niter)
{
unsigned upper_bound;
unsigned nfactor, factor, mod_constraint;
@@ -906,6 +907,12 @@ determine_unroll_factor (struct loop *loop, struct mem_ref_group *refs,
gains from better scheduling and decreasing loop overhead, which is not
the case here. */
upper_bound = PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS) / ninsns;
+
+ /* If we unrolled the loop more times than it iterates, the unrolled version
+ of the loop would be never entered. */
+ if (est_niter >= 0 && est_niter < (HOST_WIDE_INT) upper_bound)
+ upper_bound = est_niter;
+
if (upper_bound <= 1)
return 1;
@@ -935,7 +942,8 @@ static bool
loop_prefetch_arrays (struct loop *loop)
{
struct mem_ref_group *refs;
- unsigned ahead, ninsns, unroll_factor;
+ unsigned ahead, ninsns, time, unroll_factor;
+ HOST_WIDE_INT est_niter;
struct tree_niter_desc desc;
bool unrolled = false;
@@ -950,21 +958,24 @@ loop_prefetch_arrays (struct loop *loop)
/* Step 3: determine the ahead and unroll factor. */
- /* FIXME: We should use not size of the loop, but the average number of
- instructions executed per iteration of the loop. */
- ninsns = tree_num_loop_insns (loop, &eni_time_weights);
- ahead = (PREFETCH_LATENCY + ninsns - 1) / ninsns;
- unroll_factor = determine_unroll_factor (loop, refs, ninsns, &desc);
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, "Ahead %d, unroll factor %d\n", ahead, unroll_factor);
+ /* FIXME: the time should be weighted by the probabilities of the blocks in
+ the loop body. */
+ time = tree_num_loop_insns (loop, &eni_time_weights);
+ ahead = (PREFETCH_LATENCY + time - 1) / time;
+ est_niter = estimated_loop_iterations_int (loop, false);
- /* If the loop rolls less than the required unroll factor, prefetching
- is useless. */
- if (unroll_factor > 1
- && cst_and_fits_in_hwi (desc.niter)
- && (unsigned HOST_WIDE_INT) int_cst_value (desc.niter) < unroll_factor)
+ /* The prefetches will run for AHEAD iterations of the original loop. Unless
+ the loop rolls at least AHEAD times, prefetching the references does not
+ make sense. */
+ if (est_niter >= 0 && est_niter <= (HOST_WIDE_INT) ahead)
goto fail;
+ ninsns = tree_num_loop_insns (loop, &eni_size_weights);
+ unroll_factor = determine_unroll_factor (loop, refs, ninsns, &desc,
+ est_niter);
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Ahead %d, unroll factor %d\n", ahead, unroll_factor);
+
/* Step 4: what to prefetch? */
if (!schedule_prefetches (refs, unroll_factor, ahead))
goto fail;
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index bdf7ade94a5..7457e5396d9 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -1,5 +1,5 @@
/* Loop optimizations over tree-ssa.
- Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -241,6 +241,41 @@ struct tree_opt_pass pass_linear_transform =
0 /* letter */
};
+/* Check the correctness of the data dependence analyzers. */
+
+static unsigned int
+check_data_deps (void)
+{
+ if (!current_loops)
+ return 0;
+
+ tree_check_data_deps ();
+ return 0;
+}
+
+static bool
+gate_check_data_deps (void)
+{
+ return flag_check_data_deps != 0;
+}
+
+struct tree_opt_pass pass_check_data_deps =
+{
+ "ckdd", /* name */
+ gate_check_data_deps, /* gate */
+ check_data_deps, /* execute */
+ NULL, /* sub */
+ NULL, /* next */
+ 0, /* static_pass_number */
+ TV_CHECK_DATA_DEPS, /* tv_id */
+ PROP_cfg | PROP_ssa, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ TODO_dump_func, /* todo_flags_finish */
+ 0 /* letter */
+};
+
/* Canonical induction variable creation pass. */
static unsigned int
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 1861f3e298c..0bb999c40d6 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -1,5 +1,5 @@
/* Global, SSA-based optimizations using mathematical identities.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -303,9 +303,10 @@ insert_reciprocals (block_stmt_iterator *def_bsi, struct occurrence *occ,
/* Make a variable with the replacement and substitute it. */
type = TREE_TYPE (def);
recip_def = make_rename_temp (type, "reciptmp");
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, recip_def,
- fold_build2 (RDIV_EXPR, type, build_one_cst (type),
- def));
+ new_stmt = build_gimple_modify_stmt (recip_def,
+ fold_build2 (RDIV_EXPR, type,
+ build_one_cst (type),
+ def));
if (occ->bb_has_division)
@@ -607,7 +608,7 @@ execute_cse_sincos_1 (tree name)
return;
res = make_rename_temp (TREE_TYPE (TREE_TYPE (fndecl)), "sincostmp");
call = build_call_expr (fndecl, 1, name);
- stmt = build2 (GIMPLE_MODIFY_STMT, NULL_TREE, res, call);
+ stmt = build_gimple_modify_stmt (res, call);
def_stmt = SSA_NAME_DEF_STMT (name);
if (bb_for_stmt (def_stmt) == top_bb
&& TREE_CODE (def_stmt) == GIMPLE_MODIFY_STMT)
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index be9cd6b9a24..26f4963ab5b 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -142,6 +142,7 @@ static VEC(tree,heap) *build_vuses;
/* Bitmap obstack for our datastructures that needs to survive across
compilations of multiple functions. */
static bitmap_obstack operands_bitmap_obstack;
+
/* Set for building all the loaded symbols. */
static bitmap build_loads;
@@ -1433,12 +1434,13 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
get_expr_operands. FULL_REF is a tree that contains the entire
pointer dereference expression, if available, or NULL otherwise.
OFFSET and SIZE come from the memory access expression that
- generated this virtual operand. */
+ generated this virtual operand. IS_CALL_SITE is true if the
+ affected statement is a call site. */
static void
add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
tree full_ref, HOST_WIDE_INT offset,
- HOST_WIDE_INT size)
+ HOST_WIDE_INT size, bool is_call_site)
{
bitmap aliases = NULL;
tree sym;
@@ -1480,10 +1482,12 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
if (MTAG_P (var))
aliases = MTAG_ALIASES (var);
+
if (aliases == NULL)
{
if (s_ann && !gimple_aliases_computed_p (cfun))
s_ann->has_volatile_ops = true;
+
/* The variable is not aliased or it is an alias tag. */
if (flags & opf_def)
append_vdef (var);
@@ -1508,18 +1512,34 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
al = referenced_var (i);
if (!access_can_touch_variable (full_ref, al, offset, size))
continue;
-
+
+ /* Call-clobbered tags may have non-call-clobbered
+ symbols in their alias sets. Ignore them if we are
+ adding VOPs for a call site. */
+ if (is_call_site && !is_call_clobbered (al))
+ continue;
+
none_added = false;
append_vdef (al);
}
- /* Even if no aliases have been added, we still need to
- establish def-use and use-def chains, lest
- transformations think that this is not a memory
- reference. For an example of this scenario, see
- testsuite/g++.dg/opt/cleanup1.C. */
- if (none_added)
- append_vdef (var);
+ /* If the variable is also an alias tag, add a virtual
+ operand for it, otherwise we will miss representing
+ references to the members of the variable's alias set.
+ This fixes the bug in gcc.c-torture/execute/20020503-1.c.
+
+ It is also necessary to add bare defs on clobbers for
+ SMT's, so that bare SMT uses caused by pruning all the
+ aliases will link up properly with calls. In order to
+ keep the number of these bare defs we add down to the
+ minimum necessary, we keep track of which SMT's were used
+ alone in statement vdefs or VUSEs. */
+ if (none_added
+ || (TREE_CODE (var) == SYMBOL_MEMORY_TAG
+ && is_call_site))
+ {
+ append_vdef (var);
+ }
}
else
{
@@ -1529,6 +1549,13 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
al = referenced_var (i);
if (!access_can_touch_variable (full_ref, al, offset, size))
continue;
+
+ /* Call-clobbered tags may have non-call-clobbered
+ symbols in their alias sets. Ignore them if we are
+ adding VOPs for a call site. */
+ if (is_call_site && !is_call_clobbered (al))
+ continue;
+
none_added = false;
append_vuse (al);
}
@@ -1575,7 +1602,7 @@ add_stmt_operand (tree *var_p, stmt_ann_t s_ann, int flags)
append_use (var_p);
}
else
- add_virtual_operand (var, s_ann, flags, NULL_TREE, 0, -1);
+ add_virtual_operand (var, s_ann, flags, NULL_TREE, 0, -1, false);
}
@@ -1622,7 +1649,7 @@ get_indirect_ref_operands (tree stmt, tree expr, int flags,
{
/* PTR has its own memory tag. Use it. */
add_virtual_operand (pi->name_mem_tag, s_ann, flags,
- full_ref, offset, size);
+ full_ref, offset, size, false);
}
else
{
@@ -1651,10 +1678,12 @@ get_indirect_ref_operands (tree stmt, tree expr, int flags,
if (v_ann->symbol_mem_tag)
add_virtual_operand (v_ann->symbol_mem_tag, s_ann, flags,
- full_ref, offset, size);
- /* Aliasing information is missing; mark statement as volatile so we
- won't optimize it out too actively. */
- else if (s_ann && !gimple_aliases_computed_p (cfun)
+ full_ref, offset, size, false);
+
+ /* Aliasing information is missing; mark statement as
+ volatile so we won't optimize it out too actively. */
+ else if (s_ann
+ && !gimple_aliases_computed_p (cfun)
&& (flags & opf_def))
s_ann->has_volatile_ops = true;
}
@@ -1743,12 +1772,11 @@ add_call_clobber_ops (tree stmt, tree callee)
if (s_ann)
s_ann->makes_clobbering_call = true;
- /* If we created .GLOBAL_VAR earlier, just use it. See compute_may_aliases
- for the heuristic used to decide whether to create .GLOBAL_VAR or not. */
+ /* If we created .GLOBAL_VAR earlier, just use it. */
if (gimple_global_var (cfun))
{
tree var = gimple_global_var (cfun);
- add_stmt_operand (&var, s_ann, opf_def);
+ add_virtual_operand (var, s_ann, opf_def, NULL, 0, -1, true);
return;
}
@@ -1772,10 +1800,13 @@ add_call_clobber_ops (tree stmt, tree callee)
if (TREE_CODE (var) == STRUCT_FIELD_TAG)
real_var = SFT_PARENT_VAR (var);
- not_read = not_read_b ? bitmap_bit_p (not_read_b,
- DECL_UID (real_var)) : false;
- not_written = not_written_b ? bitmap_bit_p (not_written_b,
- DECL_UID (real_var)) : false;
+ not_read = not_read_b
+ ? bitmap_bit_p (not_read_b, DECL_UID (real_var))
+ : false;
+
+ not_written = not_written_b
+ ? bitmap_bit_p (not_written_b, DECL_UID (real_var))
+ : false;
gcc_assert (!unmodifiable_var_p (var));
clobber_stats.clobbered_vars++;
@@ -1789,7 +1820,7 @@ add_call_clobber_ops (tree stmt, tree callee)
tree call = get_call_expr_in (stmt);
if (call_expr_flags (call) & (ECF_CONST | ECF_PURE))
{
- add_stmt_operand (&var, s_ann, opf_use);
+ add_virtual_operand (var, s_ann, opf_use, NULL, 0, -1, true);
clobber_stats.unescapable_clobbers_avoided++;
continue;
}
@@ -1804,12 +1835,12 @@ add_call_clobber_ops (tree stmt, tree callee)
{
clobber_stats.static_write_clobbers_avoided++;
if (!not_read)
- add_stmt_operand (&var, s_ann, opf_use);
+ add_virtual_operand (var, s_ann, opf_use, NULL, 0, -1, true);
else
clobber_stats.static_read_clobbers_avoided++;
}
else
- add_virtual_operand (var, s_ann, opf_def, NULL, 0, -1);
+ add_virtual_operand (var, s_ann, opf_def, NULL, 0, -1, true);
}
}
@@ -1831,7 +1862,7 @@ add_call_read_ops (tree stmt, tree callee)
if (gimple_global_var (cfun))
{
tree var = gimple_global_var (cfun);
- add_stmt_operand (&var, s_ann, opf_use);
+ add_virtual_operand (var, s_ann, opf_use, NULL, 0, -1, true);
return;
}
@@ -1861,7 +1892,7 @@ add_call_read_ops (tree stmt, tree callee)
continue;
}
- add_stmt_operand (&var, s_ann, opf_use | opf_implicit);
+ add_virtual_operand (var, s_ann, opf_use, NULL, 0, -1, true);
}
}
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 1bfb56c6eae..1981fa1783b 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -1112,7 +1112,7 @@ fold_predicate_in (tree stmt)
else
return false;
- val = vrp_evaluate_conditional (*pred_p, true);
+ val = vrp_evaluate_conditional (*pred_p, stmt);
if (val)
{
if (modify_stmt_p)
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index a6a2a68c3ca..b29619ec205 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -256,10 +256,6 @@ struct variable_info
/* Old points-to set for this variable. */
bitmap oldsolution;
- /* Finished points-to set for this variable (IE what is returned
- from find_what_p_points_to. */
- bitmap finished_solution;
-
/* Variable ids represented by this node. */
bitmap variables;
@@ -330,7 +326,7 @@ static tree
heapvar_lookup (tree from)
{
struct tree_map *h, in;
- in.from = from;
+ in.base.from = from;
h = htab_find_with_hash (heapvar_for_stmt, &in, htab_hash_pointer (from));
if (h)
@@ -349,7 +345,7 @@ heapvar_insert (tree from, tree to)
h = ggc_alloc (sizeof (struct tree_map));
h->hash = htab_hash_pointer (from);
- h->from = from;
+ h->base.from = from;
h->to = to;
loc = htab_find_slot_with_hash (heapvar_for_stmt, h, h->hash, INSERT);
*(struct tree_map **) loc = h;
@@ -374,7 +370,6 @@ new_var_info (tree t, unsigned int id, const char *name)
ret->has_union = false;
ret->solution = BITMAP_ALLOC (&pta_obstack);
ret->oldsolution = BITMAP_ALLOC (&oldpta_obstack);
- ret->finished_solution = NULL;
ret->next = NULL;
ret->collapsed_to = NULL;
return ret;
@@ -2312,9 +2307,11 @@ could_have_pointers (tree t)
{
tree type = TREE_TYPE (t);
- if (POINTER_TYPE_P (type) || AGGREGATE_TYPE_P (type)
+ if (POINTER_TYPE_P (type)
+ || AGGREGATE_TYPE_P (type)
|| TREE_CODE (type) == COMPLEX_TYPE)
return true;
+
return false;
}
@@ -2524,6 +2521,7 @@ get_constraint_for (tree t, VEC (ce_s, heap) **results)
tree pttype = TREE_TYPE (TREE_TYPE (t));
get_constraint_for (exp, results);
+
/* Make sure we capture constraints to all elements
of an array. */
if ((handled_component_p (exp)
@@ -3001,6 +2999,7 @@ do_structure_copy (tree lhsop, tree rhsop)
}
}
+
/* Update related alias information kept in AI. This is used when
building name tags, alias sets and deciding grouping heuristics.
STMT is the statement to process. This function also updates
@@ -3326,9 +3325,9 @@ find_func_aliases (tree origt)
}
}
/* In IPA mode, we need to generate constraints to pass call
- arguments through their calls. There are two case, either a
- modify_expr when we are returning a value, or just a plain
- call_expr when we are not. */
+ arguments through their calls. There are two cases, either a
+ GIMPLE_MODIFY_STMT when we are returning a value, or just a plain
+ CALL_EXPR when we are not. */
else if (in_ipa_mode
&& ((TREE_CODE (t) == GIMPLE_MODIFY_STMT
&& TREE_CODE (GIMPLE_STMT_OPERAND (t, 1)) == CALL_EXPR
@@ -3399,6 +3398,7 @@ find_func_aliases (tree origt)
}
i++;
}
+
/* If we are returning a value, assign it to the result. */
if (lhsop)
{
@@ -4099,8 +4099,8 @@ intra_create_variable_infos (void)
tree t;
struct constraint_expr lhs, rhs;
- /* For each incoming pointer argument arg, ARG = ANYTHING or a
- dummy variable if flag_argument_noalias > 2. */
+ /* For each incoming pointer argument arg, create the constraint ARG
+ = ANYTHING or a dummy variable if flag_argument_noalias is set. */
for (t = DECL_ARGUMENTS (current_function_decl); t; t = TREE_CHAIN (t))
{
varinfo_t p;
@@ -4154,6 +4154,75 @@ intra_create_variable_infos (void)
}
}
+/* Structure used to put solution bitmaps in a hashtable so they can
+ be shared among variables with the same points-to set. */
+
+typedef struct shared_bitmap_info
+{
+ bitmap pt_vars;
+ hashval_t hashcode;
+} *shared_bitmap_info_t;
+
+static htab_t shared_bitmap_table;
+
+/* Hash function for a shared_bitmap_info_t */
+
+static hashval_t
+shared_bitmap_hash (const void *p)
+{
+ const shared_bitmap_info_t bi = (shared_bitmap_info_t) p;
+ return bi->hashcode;
+}
+
+/* Equality function for two shared_bitmap_info_t's. */
+
+static int
+shared_bitmap_eq (const void *p1, const void *p2)
+{
+ const shared_bitmap_info_t sbi1 = (shared_bitmap_info_t) p1;
+ const shared_bitmap_info_t sbi2 = (shared_bitmap_info_t) p2;
+ return bitmap_equal_p (sbi1->pt_vars, sbi2->pt_vars);
+}
+
+/* Lookup a bitmap in the shared bitmap hashtable, and return an already
+ existing instance if there is one, NULL otherwise. */
+
+static bitmap
+shared_bitmap_lookup (bitmap pt_vars)
+{
+ void **slot;
+ struct shared_bitmap_info sbi;
+
+ sbi.pt_vars = pt_vars;
+ sbi.hashcode = bitmap_hash (pt_vars);
+
+ slot = htab_find_slot_with_hash (shared_bitmap_table, &sbi,
+ sbi.hashcode, NO_INSERT);
+ if (!slot)
+ return NULL;
+ else
+ return ((shared_bitmap_info_t) *slot)->pt_vars;
+}
+
+
+/* Add a bitmap to the shared bitmap hashtable. */
+
+static void
+shared_bitmap_add (bitmap pt_vars)
+{
+ void **slot;
+ shared_bitmap_info_t sbi = XNEW (struct shared_bitmap_info);
+
+ sbi->pt_vars = pt_vars;
+ sbi->hashcode = bitmap_hash (pt_vars);
+
+ slot = htab_find_slot_with_hash (shared_bitmap_table, sbi,
+ sbi->hashcode, INSERT);
+ gcc_assert (!*slot);
+ *slot = (void *) sbi;
+}
+
+
/* Set bits in INTO corresponding to the variable uids in solution set
FROM, which came from variable PTR.
For variables that are actually dereferenced, we also use type
@@ -4277,12 +4346,12 @@ set_used_smts (void)
}
}
-/* Merge the necessary SMT's into the solution set for VI, which is
+/* Merge the necessary SMT's into the bitmap INTO, which is
P's varinfo. This involves merging all SMT's that are a subset of
the SMT necessary for P. */
static void
-merge_smts_into (tree p, varinfo_t vi)
+merge_smts_into (tree p, bitmap solution)
{
unsigned int i;
bitmap_iterator bi;
@@ -4300,7 +4369,7 @@ merge_smts_into (tree p, varinfo_t vi)
/* Need to set the SMT subsets first before this
will work properly. */
- bitmap_set_bit (vi->finished_solution, DECL_UID (smt));
+ bitmap_set_bit (solution, DECL_UID (smt));
EXECUTE_IF_SET_IN_BITMAP (used_smts, 0, i, bi)
{
tree newsmt = referenced_var (i);
@@ -4308,12 +4377,12 @@ merge_smts_into (tree p, varinfo_t vi)
if (alias_set_subset_of (get_alias_set (newsmttype),
smtset))
- bitmap_set_bit (vi->finished_solution, i);
+ bitmap_set_bit (solution, i);
}
aliases = MTAG_ALIASES (smt);
if (aliases)
- bitmap_ior_into (vi->finished_solution, aliases);
+ bitmap_ior_into (solution, aliases);
}
}
@@ -4366,7 +4435,9 @@ find_what_p_points_to (tree p)
unsigned int i;
bitmap_iterator bi;
bool was_pt_anything = false;
-
+ bitmap finished_solution;
+ bitmap result;
+
if (!pi->is_dereferenced)
return false;
@@ -4398,32 +4469,31 @@ find_what_p_points_to (tree p)
}
}
- /* Share the final set of variables between the SSA_NAME
- pointer infos for collapsed nodes that are collapsed to
- non-special variables. This is because special vars have
- no real types associated with them, so while we know the
- pointers are equivalent to them, we need to generate the
- solution separately since it will include SMT's from the
- original non-collapsed variable. */
- if (!vi->is_special_var && vi->finished_solution)
+ /* Share the final set of variables when possible. */
+
+ finished_solution = BITMAP_GGC_ALLOC ();
+ stats.points_to_sets_created++;
+
+ /* Instead of using pt_anything, we instead merge in the SMT
+ aliases for the underlying SMT. */
+ if (was_pt_anything)
+ {
+ merge_smts_into (p, finished_solution);
+ pi->pt_global_mem = 1;
+ }
+
+ set_uids_in_ptset (vi->decl, finished_solution, vi->solution);
+ result = shared_bitmap_lookup (finished_solution);
+
+ if (!result)
{
- pi->pt_vars = vi->finished_solution;
+ shared_bitmap_add (finished_solution);
+ pi->pt_vars = finished_solution;
}
else
{
- vi->finished_solution = BITMAP_GGC_ALLOC ();
- stats.points_to_sets_created++;
-
- /* Instead of using pt_anything, we instead merge in the SMT
- aliases for the underlying SMT. */
- if (was_pt_anything)
- {
- merge_smts_into (p, vi);
- pi->pt_global_mem = 1;
- }
-
- set_uids_in_ptset (vi->decl, vi->finished_solution, vi->solution);
- pi->pt_vars = vi->finished_solution;
+ pi->pt_vars = result;
+ bitmap_clear (finished_solution);
}
if (bitmap_empty_p (pi->pt_vars))
@@ -4597,7 +4667,8 @@ init_alias_vars (void)
vi_for_tree = pointer_map_create ();
memset (&stats, 0, sizeof (stats));
-
+ shared_bitmap_table = htab_create (511, shared_bitmap_hash,
+ shared_bitmap_eq, free);
init_base_vars ();
}
@@ -4732,6 +4803,7 @@ delete_points_to_sets (void)
varinfo_t v;
int i;
+ htab_delete (shared_bitmap_table);
if (dump_file && (dump_flags & TDF_STATS))
fprintf (dump_file, "Points to sets created:%d\n",
stats.points_to_sets_created);
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index 72018c02ede..777685af652 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -211,7 +211,8 @@ record_temporary_equivalences_from_phis (edge e, VEC(tree, heap) **stack)
static tree
record_temporary_equivalences_from_stmts_at_dest (edge e,
VEC(tree, heap) **stack,
- tree (*simplify) (tree))
+ tree (*simplify) (tree,
+ tree))
{
block_stmt_iterator bsi;
tree stmt = NULL;
@@ -315,7 +316,7 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
cached_lhs = fold (pre_fold_expr);
if (TREE_CODE (cached_lhs) != SSA_NAME
&& !is_gimple_min_invariant (cached_lhs))
- cached_lhs = (*simplify) (stmt);
+ cached_lhs = (*simplify) (stmt, stmt);
}
/* Restore the statement's original uses/defs. */
@@ -353,7 +354,7 @@ static tree
simplify_control_stmt_condition (edge e,
tree stmt,
tree dummy_cond,
- tree (*simplify) (tree),
+ tree (*simplify) (tree, tree),
bool handle_dominating_asserts)
{
tree cond, cached_lhs;
@@ -439,7 +440,7 @@ simplify_control_stmt_condition (edge e,
/* If we have not simplified the condition down to an invariant,
then use the pass specific callback to simplify the condition. */
if (! is_gimple_min_invariant (cached_lhs))
- cached_lhs = (*simplify) (dummy_cond);
+ cached_lhs = (*simplify) (dummy_cond, stmt);
}
/* We can have conditionals which just test the state of a variable
@@ -466,7 +467,7 @@ simplify_control_stmt_condition (edge e,
/* If we haven't simplified to an invariant yet, then use the
pass specific callback to try and simplify it further. */
if (cached_lhs && ! is_gimple_min_invariant (cached_lhs))
- cached_lhs = (*simplify) (stmt);
+ cached_lhs = (*simplify) (stmt, stmt);
}
else
cached_lhs = NULL;
@@ -494,7 +495,7 @@ thread_across_edge (tree dummy_cond,
edge e,
bool handle_dominating_asserts,
VEC(tree, heap) **stack,
- tree (*simplify) (tree))
+ tree (*simplify) (tree, tree))
{
tree stmt;
diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c
index 7889cbb8644..fa63637fb6d 100644
--- a/gcc/tree-tailcall.c
+++ b/gcc/tree-tailcall.c
@@ -1,5 +1,5 @@
/* Tail call optimization on trees.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -560,8 +560,9 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
var = m_acc;
else
{
- stmt = build2 (GIMPLE_MODIFY_STMT, ret_type, NULL_TREE,
- build2 (MULT_EXPR, ret_type, m_acc, a));
+ stmt = build_gimple_modify_stmt (NULL_TREE,
+ build2 (MULT_EXPR, ret_type,
+ m_acc, a));
tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_var (tmp);
@@ -574,8 +575,8 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
else
var = a;
- stmt = build2 (GIMPLE_MODIFY_STMT, ret_type, NULL_TREE,
- build2 (PLUS_EXPR, ret_type, a_acc, var));
+ stmt = build_gimple_modify_stmt (NULL_TREE, build2 (PLUS_EXPR, ret_type,
+ a_acc, var));
var = make_ssa_name (SSA_NAME_VAR (a_acc), stmt);
GIMPLE_STMT_OPERAND (stmt, 0) = var;
bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
@@ -584,8 +585,9 @@ adjust_accumulator_values (block_stmt_iterator bsi, tree m, tree a, edge back)
if (m)
{
- stmt = build2 (GIMPLE_MODIFY_STMT, ret_type, NULL_TREE,
- build2 (MULT_EXPR, ret_type, m_acc, m));
+ stmt = build_gimple_modify_stmt (NULL_TREE,
+ build2 (MULT_EXPR, ret_type,
+ m_acc, m));
var = make_ssa_name (SSA_NAME_VAR (m_acc), stmt);
GIMPLE_STMT_OPERAND (stmt, 0) = var;
bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
@@ -638,8 +640,9 @@ adjust_return_value (basic_block bb, tree m, tree a)
if (m)
{
- stmt = build2 (GIMPLE_MODIFY_STMT, ret_type, NULL_TREE,
- build2 (MULT_EXPR, ret_type, m_acc, ret_var));
+ stmt = build_gimple_modify_stmt (NULL_TREE,
+ build2 (MULT_EXPR, ret_type,
+ m_acc, ret_var));
tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_var (tmp);
@@ -653,8 +656,9 @@ adjust_return_value (basic_block bb, tree m, tree a)
if (a)
{
- stmt = build2 (GIMPLE_MODIFY_STMT, ret_type, NULL_TREE,
- build2 (PLUS_EXPR, ret_type, a_acc, var));
+ stmt = build_gimple_modify_stmt (NULL_TREE,
+ build2 (PLUS_EXPR, ret_type,
+ a_acc, var));
tmp = create_tmp_var (ret_type, "acc_tmp");
add_referenced_var (tmp);
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 30741952b7f..63255bd3fb1 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -1,5 +1,5 @@
/* Analysis Utilities for Loop Vectorization.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007 Free Software Foundation, Inc.
Contributed by Dorit Nuzman <dorit@il.ibm.com>
This file is part of GCC.
@@ -674,8 +674,7 @@ vect_pattern_recog_1 (
var = create_tmp_var (pattern_type, "patt");
add_referenced_var (var);
var_name = make_ssa_name (var, NULL_TREE);
- pattern_expr = build2 (GIMPLE_MODIFY_STMT, void_type_node, var_name,
- pattern_expr);
+ pattern_expr = build_gimple_modify_stmt (var_name, pattern_expr);
SSA_NAME_DEF_STMT (var_name) = pattern_expr;
bsi_insert_before (&si, pattern_expr, BSI_SAME_STMT);
ann = stmt_ann (pattern_expr);
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 109705d7e14..6938841628d 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -1,5 +1,5 @@
/* Transformation Utilities for Loop Vectorization.
- Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Dorit Naishlos <dorit@il.ibm.com>
This file is part of GCC.
@@ -323,7 +323,7 @@ vect_create_data_ref_ptr (tree stmt,
/* Create: p = (vectype *) initial_base */
vec_stmt = fold_convert (vect_ptr_type, new_temp);
- vec_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vect_ptr, vec_stmt);
+ vec_stmt = build_gimple_modify_stmt (vect_ptr, vec_stmt);
vect_ptr_init = make_ssa_name (vect_ptr, vec_stmt);
GIMPLE_STMT_OPERAND (vec_stmt, 0) = vect_ptr_init;
new_bb = bsi_insert_on_edge_immediate (pe, vec_stmt);
@@ -416,8 +416,9 @@ bump_vector_ptr (tree dataref_ptr, tree ptr_incr, block_stmt_iterator *bsi,
use_operand_p use_p;
tree new_dataref_ptr;
- incr_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, ptr_var,
- build2 (PLUS_EXPR, vptr_type, dataref_ptr, update));
+ incr_stmt = build_gimple_modify_stmt (ptr_var,
+ build2 (PLUS_EXPR, vptr_type,
+ dataref_ptr, update));
new_dataref_ptr = make_ssa_name (ptr_var, incr_stmt);
GIMPLE_STMT_OPERAND (incr_stmt, 0) = new_dataref_ptr;
vect_finish_stmt_generation (stmt, incr_stmt, bsi);
@@ -491,7 +492,7 @@ vect_init_vector (tree stmt, tree vector_var, tree vector_type)
new_var = vect_get_new_vect_var (vector_type, vect_simple_var, "cst_");
add_referenced_var (new_var);
- init_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, new_var, vector_var);
+ init_stmt = build_gimple_modify_stmt (new_var, vector_var);
new_temp = make_ssa_name (new_var, init_stmt);
GIMPLE_STMT_OPERAND (init_stmt, 0) = new_temp;
@@ -579,11 +580,13 @@ get_initial_def_for_induction (tree stmt, tree iv_phi)
t = tree_cons (NULL_TREE, init_expr, t);
for (i = 1; i < nunits; i++)
{
+ tree tmp;
+
/* Create: new_name = new_name + step_expr */
new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
add_referenced_var (new_var);
- init_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, new_var,
- fold_build2 (PLUS_EXPR, scalar_type, new_name, step_expr));
+ tmp = fold_build2 (PLUS_EXPR, scalar_type, new_name, step_expr);
+ init_stmt = build_gimple_modify_stmt (new_var, tmp);
new_name = make_ssa_name (new_var, init_stmt);
GIMPLE_STMT_OPERAND (init_stmt, 0) = new_name;
@@ -631,8 +634,9 @@ get_initial_def_for_induction (tree stmt, tree iv_phi)
induc_def = PHI_RESULT (induction_phi);
/* Create the iv update inside the loop */
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, NULL_TREE,
- build2 (PLUS_EXPR, vectype, induc_def, vec_step));
+ new_stmt = build_gimple_modify_stmt (NULL_TREE,
+ build2 (PLUS_EXPR, vectype,
+ induc_def, vec_step));
vec_def = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = vec_def;
bsi = bsi_for_stmt (stmt);
@@ -666,10 +670,11 @@ get_initial_def_for_induction (tree stmt, tree iv_phi)
prev_stmt_vinfo = vinfo_for_stmt (induction_phi);
for (i = 1; i < ncopies; i++)
{
+ tree tmp;
+
/* vec_i = vec_prev + vec_{step*nunits} */
-
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, NULL_TREE,
- build2 (PLUS_EXPR, vectype, vec_def, vec_step));
+ tmp = build2 (PLUS_EXPR, vectype, vec_def, vec_step);
+ new_stmt = build_gimple_modify_stmt (NULL_TREE, tmp);
vec_def = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = vec_def;
bsi = bsi_for_stmt (stmt);
@@ -1237,6 +1242,8 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
if (reduc_code < NUM_TREE_CODES)
{
+ tree tmp;
+
/*** Case 1: Create:
v_out2 = reduc_expr <v_out1> */
@@ -1244,8 +1251,8 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
fprintf (vect_dump, "Reduce using direct vector reduction.");
vec_dest = vect_create_destination_var (scalar_dest, vectype);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- build1 (reduc_code, vectype, PHI_RESULT (new_phi)));
+ tmp = build1 (reduc_code, vectype, PHI_RESULT (new_phi));
+ epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_temp = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1301,19 +1308,14 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
bit_offset /= 2)
{
tree bitpos = size_int (bit_offset);
-
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- vec_dest,
- build2 (shift_code, vectype,
- new_temp, bitpos));
+ tree tmp = build2 (shift_code, vectype, new_temp, bitpos);
+ epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_name = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_name;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- vec_dest,
- build2 (code, vectype,
- new_name, new_temp));
+ tmp = build2 (code, vectype, new_name, new_temp);
+ epilog_stmt = build_gimple_modify_stmt (vec_dest, tmp);
new_temp = make_ssa_name (vec_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1343,8 +1345,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
rhs = build3 (BIT_FIELD_REF, scalar_type, vec_temp, bitsize,
bitsize_zero_node);
BIT_FIELD_REF_UNSIGNED (rhs) = TYPE_UNSIGNED (scalar_type);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_scalar_dest, rhs);
+ epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1353,20 +1354,19 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
bit_offset < vec_size_in_bits;
bit_offset += element_bitsize)
{
+ tree tmp;
tree bitpos = bitsize_int (bit_offset);
tree rhs = build3 (BIT_FIELD_REF, scalar_type, vec_temp, bitsize,
bitpos);
BIT_FIELD_REF_UNSIGNED (rhs) = TYPE_UNSIGNED (scalar_type);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_scalar_dest, rhs);
+ epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_name = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_name;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_scalar_dest,
- build2 (code, scalar_type, new_name, new_temp));
+ tmp = build2 (code, scalar_type, new_name, new_temp);
+ epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, tmp);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1395,8 +1395,7 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
rhs = build3 (BIT_FIELD_REF, scalar_type, new_temp, bitsize, bitpos);
BIT_FIELD_REF_UNSIGNED (rhs) = TYPE_UNSIGNED (scalar_type);
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_scalar_dest, rhs);
+ epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, rhs);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1411,9 +1410,8 @@ vect_create_epilog_for_reduction (tree vect_def, tree stmt,
if (scalar_initial_def)
{
- epilog_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_scalar_dest,
- build2 (code, scalar_type, new_temp, scalar_initial_def));
+ tree tmp = build2 (code, scalar_type, new_temp, scalar_initial_def);
+ epilog_stmt = build_gimple_modify_stmt (new_scalar_dest, tmp);
new_temp = make_ssa_name (new_scalar_dest, epilog_stmt);
GIMPLE_STMT_OPERAND (epilog_stmt, 0) = new_temp;
bsi_insert_after (&exit_bsi, epilog_stmt, BSI_NEW_STMT);
@@ -1745,7 +1743,7 @@ vectorizable_reduction (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
else
expr = build3 (code, vectype, loop_vec_def0, loop_vec_def1,
reduc_def);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest, expr);
+ new_stmt = build_gimple_modify_stmt (vec_dest, expr);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -1844,7 +1842,7 @@ vectorizable_call (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
}
rhs_type = TREE_TYPE (op);
- if (!vect_is_simple_use (op, loop_vinfo, &def_stmt, &def, &dt[nargs]))
+ if (!vect_is_simple_use (op, loop_vinfo, &def_stmt, &def, &dt[nargs-1]))
{
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "use not simple.");
@@ -1928,7 +1926,7 @@ vectorizable_call (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
vargs = nreverse (vargs);
rhs = build_function_call_expr (fndecl, vargs);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, NULL_TREE, vec_dest, rhs);
+ new_stmt = build_gimple_modify_stmt (vec_dest, rhs);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
@@ -2080,8 +2078,7 @@ vectorizable_conversion (tree stmt, block_stmt_iterator * bsi,
new_stmt = build_call_expr (builtin_decl, 1, vec_oprnd0);
/* Arguments are ready. create the new vector stmt. */
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- new_stmt);
+ new_stmt = build_gimple_modify_stmt (vec_dest, new_stmt);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -2168,7 +2165,7 @@ vectorizable_assignment (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
vec_oprnd = vect_get_vec_def_for_operand (op, stmt, NULL);
/* Arguments are ready. create the new vector stmt. */
- *vec_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest, vec_oprnd);
+ *vec_stmt = build_gimple_modify_stmt (vec_dest, vec_oprnd);
new_temp = make_ssa_name (vec_dest, *vec_stmt);
GIMPLE_STMT_OPERAND (*vec_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, *vec_stmt, bsi);
@@ -2453,10 +2450,10 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
/* Arguments are ready. create the new vector stmt. */
if (op_type == binary_op)
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
+ new_stmt = build_gimple_modify_stmt (vec_dest,
build2 (code, vectype, vec_oprnd0, vec_oprnd1));
else
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
+ new_stmt = build_gimple_modify_stmt (vec_dest,
build1 (code, vectype, vec_oprnd0));
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
@@ -2609,7 +2606,7 @@ vectorizable_type_demotion (tree stmt, block_stmt_iterator *bsi,
/* Arguments are ready. Create the new vector stmt. */
expr = build2 (code, vectype_out, vec_oprnd0, vec_oprnd1);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest, expr);
+ new_stmt = build_gimple_modify_stmt (vec_dest, expr);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -2666,7 +2663,7 @@ vect_gen_widened_results_half (enum tree_code code, tree vectype, tree decl,
else
expr = build1 (code, vectype, vec_oprnd0);
}
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest, expr);
+ new_stmt = build_gimple_modify_stmt (vec_dest, expr);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -2958,7 +2955,7 @@ vect_permute_store_chain (VEC(tree,heap) *dr_chain,
{
tree perm_dest, perm_stmt, vect1, vect2, high, low;
tree vectype = STMT_VINFO_VECTYPE (vinfo_for_stmt (stmt));
- tree scalar_dest;
+ tree scalar_dest, tmp;
int i;
unsigned int j;
VEC(tree,heap) *first, *second;
@@ -2989,13 +2986,10 @@ vect_permute_store_chain (VEC(tree,heap) *dr_chain,
DECL_GIMPLE_REG_P (perm_dest) = 1;
add_referenced_var (perm_dest);
if (BYTES_BIG_ENDIAN)
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_INTERLEAVE_HIGH_EXPR, vectype,
- vect1, vect2));
+ tmp = build2 (VEC_INTERLEAVE_HIGH_EXPR, vectype, vect1, vect2);
else
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_INTERLEAVE_LOW_EXPR, vectype,
- vect1, vect2));
+ tmp = build2 (VEC_INTERLEAVE_LOW_EXPR, vectype, vect1, vect2);
+ perm_stmt = build_gimple_modify_stmt (perm_dest, tmp);
high = make_ssa_name (perm_dest, perm_stmt);
GIMPLE_STMT_OPERAND (perm_stmt, 0) = high;
vect_finish_stmt_generation (stmt, perm_stmt, bsi);
@@ -3010,13 +3004,10 @@ vect_permute_store_chain (VEC(tree,heap) *dr_chain,
DECL_GIMPLE_REG_P (perm_dest) = 1;
add_referenced_var (perm_dest);
if (BYTES_BIG_ENDIAN)
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_INTERLEAVE_LOW_EXPR, vectype,
- vect1, vect2));
+ tmp = build2 (VEC_INTERLEAVE_LOW_EXPR, vectype, vect1, vect2);
else
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_INTERLEAVE_HIGH_EXPR, vectype,
- vect1, vect2));
+ tmp = build2 (VEC_INTERLEAVE_HIGH_EXPR, vectype, vect1, vect2);
+ perm_stmt = build_gimple_modify_stmt (perm_dest, tmp);
low = make_ssa_name (perm_dest, perm_stmt);
GIMPLE_STMT_OPERAND (perm_stmt, 0) = low;
vect_finish_stmt_generation (stmt, perm_stmt, bsi);
@@ -3252,8 +3243,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
data_ref = build_fold_indirect_ref (dataref_ptr);
/* Arguments are ready. Create the new vector stmt. */
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, data_ref,
- vec_oprnd);
+ new_stmt = build_gimple_modify_stmt (data_ref, vec_oprnd);
vect_finish_stmt_generation (stmt, new_stmt, bsi);
/* Set the VDEFs for the vector pointer. If this virtual def
@@ -3364,7 +3354,7 @@ vect_setup_realignment (tree stmt, block_stmt_iterator *bsi,
ptr = vect_create_data_ref_ptr (stmt, bsi, NULL_TREE, &init_addr, &inc, true,
NULL_TREE);
data_ref = build1 (ALIGN_INDIRECT_REF, vectype, ptr);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest, data_ref);
+ new_stmt = build_gimple_modify_stmt (vec_dest, data_ref);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
new_bb = bsi_insert_on_edge_immediate (pe, new_stmt);
@@ -3382,8 +3372,7 @@ vect_setup_realignment (tree stmt, block_stmt_iterator *bsi,
new_stmt = build_call_expr (builtin_decl, 1, init_addr);
vec_dest = vect_create_destination_var (scalar_dest,
TREE_TYPE (new_stmt));
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- new_stmt);
+ new_stmt = build_gimple_modify_stmt (vec_dest, new_stmt);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
new_bb = bsi_insert_on_edge_immediate (pe, new_stmt);
@@ -3540,6 +3529,7 @@ vect_permute_load_chain (VEC(tree,heap) *dr_chain,
{
tree perm_dest, perm_stmt, data_ref, first_vect, second_vect;
tree vectype = STMT_VINFO_VECTYPE (vinfo_for_stmt (stmt));
+ tree tmp;
int i;
unsigned int j;
@@ -3559,10 +3549,10 @@ vect_permute_load_chain (VEC(tree,heap) *dr_chain,
perm_dest = create_tmp_var (vectype, "vect_perm_even");
DECL_GIMPLE_REG_P (perm_dest) = 1;
add_referenced_var (perm_dest);
-
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_EXTRACT_EVEN_EXPR, vectype,
- first_vect, second_vect));
+
+ tmp = build2 (VEC_EXTRACT_EVEN_EXPR, vectype,
+ first_vect, second_vect);
+ perm_stmt = build_gimple_modify_stmt (perm_dest, tmp);
data_ref = make_ssa_name (perm_dest, perm_stmt);
GIMPLE_STMT_OPERAND (perm_stmt, 0) = data_ref;
@@ -3576,9 +3566,9 @@ vect_permute_load_chain (VEC(tree,heap) *dr_chain,
DECL_GIMPLE_REG_P (perm_dest) = 1;
add_referenced_var (perm_dest);
- perm_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, perm_dest,
- build2 (VEC_EXTRACT_ODD_EXPR, vectype,
- first_vect, second_vect));
+ tmp = build2 (VEC_EXTRACT_ODD_EXPR, vectype,
+ first_vect, second_vect);
+ perm_stmt = build_gimple_modify_stmt (perm_dest, tmp);
data_ref = make_ssa_name (perm_dest, perm_stmt);
GIMPLE_STMT_OPERAND (perm_stmt, 0) = data_ref;
vect_finish_stmt_generation (stmt, perm_stmt, bsi);
@@ -3940,8 +3930,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
gcc_unreachable ();
}
vec_dest = vect_create_destination_var (scalar_dest, vectype);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- data_ref);
+ new_stmt = build_gimple_modify_stmt (vec_dest, data_ref);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -3959,8 +3948,7 @@ vectorizable_load (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
vec_dest = vect_create_destination_var (scalar_dest, vectype);
new_stmt =
build3 (REALIGN_LOAD_EXPR, vectype, msq, lsq, realignment_token);
- new_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- new_stmt);
+ new_stmt = build_gimple_modify_stmt (vec_dest, new_stmt);
new_temp = make_ssa_name (vec_dest, new_stmt);
GIMPLE_STMT_OPERAND (new_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, new_stmt, bsi);
@@ -4208,8 +4196,7 @@ vectorizable_condition (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt)
vec_cond_expr = build3 (VEC_COND_EXPR, vectype,
vec_compare, vec_then_clause, vec_else_clause);
- *vec_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node, vec_dest,
- vec_cond_expr);
+ *vec_stmt = build_gimple_modify_stmt (vec_dest, vec_cond_expr);
new_temp = make_ssa_name (vec_dest, *vec_stmt);
GIMPLE_STMT_OPERAND (*vec_stmt, 0) = new_temp;
vect_finish_stmt_generation (stmt, *vec_stmt, bsi);
@@ -4953,7 +4940,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
{
VEC(tree,heap) *may_misalign_stmts
= LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo);
- tree ref_stmt;
+ tree ref_stmt, tmp;
int mask = LOOP_VINFO_PTR_MASK (loop_vinfo);
tree mask_cst;
unsigned int i;
@@ -4997,8 +4984,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
add_referenced_var (addr_tmp);
addr_tmp_name = make_ssa_name (addr_tmp, NULL_TREE);
addr_stmt = fold_convert (int_ptrsize_type, addr_base);
- addr_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- addr_tmp_name, addr_stmt);
+ addr_stmt = build_gimple_modify_stmt (addr_tmp_name, addr_stmt);
SSA_NAME_DEF_STMT (addr_tmp_name) = addr_stmt;
append_to_statement_list_force (addr_stmt, cond_expr_stmt_list);
@@ -5011,11 +4997,9 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
or_tmp = create_tmp_var (int_ptrsize_type, tmp_name);
add_referenced_var (or_tmp);
new_or_tmp_name = make_ssa_name (or_tmp, NULL_TREE);
- or_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- new_or_tmp_name,
- build2 (BIT_IOR_EXPR, int_ptrsize_type,
- or_tmp_name,
- addr_tmp_name));
+ tmp = build2 (BIT_IOR_EXPR, int_ptrsize_type,
+ or_tmp_name, addr_tmp_name);
+ or_stmt = build_gimple_modify_stmt (new_or_tmp_name, tmp);
SSA_NAME_DEF_STMT (new_or_tmp_name) = or_stmt;
append_to_statement_list_force (or_stmt, cond_expr_stmt_list);
or_tmp_name = new_or_tmp_name;
@@ -5032,10 +5016,8 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
add_referenced_var (and_tmp);
and_tmp_name = make_ssa_name (and_tmp, NULL_TREE);
- and_stmt = build2 (GIMPLE_MODIFY_STMT, void_type_node,
- and_tmp_name,
- build2 (BIT_AND_EXPR, int_ptrsize_type,
- or_tmp_name, mask_cst));
+ tmp = build2 (BIT_AND_EXPR, int_ptrsize_type, or_tmp_name, mask_cst);
+ and_stmt = build_gimple_modify_stmt (and_tmp_name, tmp);
SSA_NAME_DEF_STMT (and_tmp_name) = and_stmt;
append_to_statement_list_force (and_stmt, cond_expr_stmt_list);
@@ -5059,7 +5041,7 @@ vect_transform_loop (loop_vec_info loop_vinfo)
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
int nbbs = loop->num_nodes;
- block_stmt_iterator si;
+ block_stmt_iterator si, next_si;
int i;
tree ratio = NULL;
int vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
@@ -5212,12 +5194,14 @@ vect_transform_loop (loop_vec_info loop_vinfo)
while (next)
{
+ next_si = bsi_for_stmt (next);
next_stmt_info = vinfo_for_stmt (next);
/* Free the attached stmt_vec_info and remove the stmt. */
ann = stmt_ann (next);
tmp = DR_GROUP_NEXT_DR (next_stmt_info);
free (next_stmt_info);
set_stmt_info (ann, NULL);
+ bsi_remove (&next_si, true);
next = tmp;
}
bsi_remove (&si, true);
@@ -5233,16 +5217,6 @@ vect_transform_loop (loop_vec_info loop_vinfo)
continue;
}
}
- else
- {
- if (strided_store)
- {
- /* This is case of skipped interleaved store. We don't free
- its stmt_vec_info. */
- bsi_remove (&si, true);
- continue;
- }
- }
bsi_next (&si);
} /* stmts in BB */
} /* BBs in loop */
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index fab57234ed9..b0aedf74b2c 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -1935,14 +1935,35 @@ vect_is_simple_reduction (struct loop *loop, tree phi)
int op_type;
tree operation, op1, op2;
tree type;
+ int nloop_uses;
+ tree name;
+ imm_use_iterator imm_iter;
+ use_operand_p use_p;
- if (TREE_CODE (loop_arg) != SSA_NAME)
+ name = PHI_RESULT (phi);
+ nloop_uses = 0;
+ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
{
- if (vect_print_dump_info (REPORT_DETAILS))
+ tree use_stmt = USE_STMT (use_p);
+ if (flow_bb_inside_loop_p (loop, bb_for_stmt (use_stmt))
+ && vinfo_for_stmt (use_stmt)
+ && !is_pattern_stmt_p (vinfo_for_stmt (use_stmt)))
+ nloop_uses++;
+ if (nloop_uses > 1)
{
- fprintf (vect_dump, "reduction: not ssa_name: ");
- print_generic_expr (vect_dump, loop_arg, TDF_SLIM);
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "reduction used in loop.");
+ return NULL_TREE;
}
+ }
+
+ if (TREE_CODE (loop_arg) != SSA_NAME)
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ {
+ fprintf (vect_dump, "reduction: not ssa_name: ");
+ print_generic_expr (vect_dump, loop_arg, TDF_SLIM);
+ }
return NULL_TREE;
}
@@ -1950,19 +1971,34 @@ vect_is_simple_reduction (struct loop *loop, tree phi)
if (!def_stmt)
{
if (vect_print_dump_info (REPORT_DETAILS))
- fprintf (vect_dump, "reduction: no def_stmt.");
+ fprintf (vect_dump, "reduction: no def_stmt.");
return NULL_TREE;
}
if (TREE_CODE (def_stmt) != GIMPLE_MODIFY_STMT)
{
if (vect_print_dump_info (REPORT_DETAILS))
- {
- print_generic_expr (vect_dump, def_stmt, TDF_SLIM);
- }
+ print_generic_expr (vect_dump, def_stmt, TDF_SLIM);
return NULL_TREE;
}
+ name = GIMPLE_STMT_OPERAND (def_stmt, 0);
+ nloop_uses = 0;
+ FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
+ {
+ tree use_stmt = USE_STMT (use_p);
+ if (flow_bb_inside_loop_p (loop, bb_for_stmt (use_stmt))
+ && vinfo_for_stmt (use_stmt)
+ && !is_pattern_stmt_p (vinfo_for_stmt (use_stmt)))
+ nloop_uses++;
+ if (nloop_uses > 1)
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "reduction used in loop.");
+ return NULL_TREE;
+ }
+ }
+
operation = GIMPLE_STMT_OPERAND (def_stmt, 1);
code = TREE_CODE (operation);
if (!commutative_tree_code (code) || !associative_tree_code (code))
@@ -2160,6 +2196,12 @@ vectorize_loops (void)
loop_iterator li;
struct loop *loop;
+ vect_loops_num = number_of_loops ();
+
+ /* Bail out if there are no loops. */
+ if (vect_loops_num <= 1)
+ return 0;
+
/* Fix the verbosity level if not defined explicitly by the user. */
vect_set_dump_settings ();
@@ -2172,7 +2214,6 @@ vectorize_loops (void)
/* If some loop was duplicated, it gets bigger number
than all previously defined loops. This fact allows us to run
only over initial loops skipping newly generated ones. */
- vect_loops_num = number_of_loops ();
FOR_EACH_LOOP (li, loop, 0)
{
loop_vec_info loop_vinfo;
@@ -2189,7 +2230,9 @@ vectorize_loops (void)
}
vect_loop_location = UNKNOWN_LOC;
- if (vect_print_dump_info (REPORT_VECTORIZED_LOOPS))
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)
+ || (vect_print_dump_info (REPORT_VECTORIZED_LOOPS)
+ && num_vectorized_loops > 0))
fprintf (vect_dump, "vectorized %u loops in function.\n",
num_vectorized_loops);
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index dd41f2b2b15..4f0e7b95e82 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -175,7 +175,15 @@ enum stmt_vec_info_type {
/* Indicates whether/how a variable is used in the loop. */
enum vect_relevant {
vect_unused_in_loop = 0,
+
+ /* defs that feed computations that end up (only) in a reduction. These
+ defs may be used by non-reduction stmts, but eventually, any
+ computations/values that are affected by these defs are used to compute
+ a reduction (i.e. don't get stored to memory, for example). We use this
+ to identify computations that we can change the order in which they are
+ computed. */
vect_used_by_reduction,
+
vect_used_in_loop
};
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index b3223a5e59b..b137628c975 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -33,6 +33,7 @@ Boston, MA 02110-1301, USA. */
#include "timevar.h"
#include "diagnostic.h"
#include "toplev.h"
+#include "intl.h"
#include "cfgloop.h"
#include "tree-scalar-evolution.h"
#include "tree-ssa-propagate.h"
@@ -44,7 +45,9 @@ static sbitmap found_in_subgraph;
/* Local functions. */
static int compare_values (tree val1, tree val2);
+static int compare_values_warnv (tree val1, tree val2, bool *);
static void vrp_meet (value_range_t *, value_range_t *);
+static tree vrp_evaluate_conditional_warnv (tree, bool, bool *);
/* Location information for ASSERT_EXPRs. Each instance of this
structure describes an ASSERT_EXPR for an SSA name. Since a single
@@ -93,6 +96,107 @@ static sbitmap blocks_visited;
static value_range_t **vr_value;
+/* Return whether TYPE should use an overflow infinity distinct from
+ TYPE_{MIN,MAX}_VALUE. We use an overflow infinity value to
+ represent a signed overflow during VRP computations. An infinity
+ is distinct from a half-range, which will go from some number to
+ TYPE_{MIN,MAX}_VALUE. */
+
+static inline bool
+needs_overflow_infinity (tree type)
+{
+ return INTEGRAL_TYPE_P (type) && !TYPE_OVERFLOW_WRAPS (type);
+}
+
+/* Return whether TYPE can support our overflow infinity
+ representation: we use the TREE_OVERFLOW flag, which only exists
+ for constants. If TYPE doesn't support this, we don't optimize
+ cases which would require signed overflow--we drop them to
+ VARYING. */
+
+static inline bool
+supports_overflow_infinity (tree type)
+{
+#ifdef ENABLE_CHECKING
+ gcc_assert (needs_overflow_infinity (type));
+#endif
+ return (TYPE_MIN_VALUE (type) != NULL_TREE
+ && CONSTANT_CLASS_P (TYPE_MIN_VALUE (type))
+ && TYPE_MAX_VALUE (type) != NULL_TREE
+ && CONSTANT_CLASS_P (TYPE_MAX_VALUE (type)));
+}
+
+/* VAL is the maximum or minimum value of a type. Return a
+ corresponding overflow infinity. */
+
+static inline tree
+make_overflow_infinity (tree val)
+{
+#ifdef ENABLE_CHECKING
+ gcc_assert (val != NULL_TREE && CONSTANT_CLASS_P (val));
+#endif
+ val = copy_node (val);
+ TREE_OVERFLOW (val) = 1;
+ return val;
+}
+
+/* Return a negative overflow infinity for TYPE. */
+
+static inline tree
+negative_overflow_infinity (tree type)
+{
+#ifdef ENABLE_CHECKING
+ gcc_assert (supports_overflow_infinity (type));
+#endif
+ return make_overflow_infinity (TYPE_MIN_VALUE (type));
+}
+
+/* Return a positive overflow infinity for TYPE. */
+
+static inline tree
+positive_overflow_infinity (tree type)
+{
+#ifdef ENABLE_CHECKING
+ gcc_assert (supports_overflow_infinity (type));
+#endif
+ return make_overflow_infinity (TYPE_MAX_VALUE (type));
+}
+
+/* Return whether VAL is a negative overflow infinity. */
+
+static inline bool
+is_negative_overflow_infinity (tree val)
+{
+ return (needs_overflow_infinity (TREE_TYPE (val))
+ && CONSTANT_CLASS_P (val)
+ && TREE_OVERFLOW (val)
+ && operand_equal_p (val, TYPE_MIN_VALUE (TREE_TYPE (val)), 0));
+}
+
+/* Return whether VAL is a positive overflow infinity. */
+
+static inline bool
+is_positive_overflow_infinity (tree val)
+{
+ return (needs_overflow_infinity (TREE_TYPE (val))
+ && CONSTANT_CLASS_P (val)
+ && TREE_OVERFLOW (val)
+ && operand_equal_p (val, TYPE_MAX_VALUE (TREE_TYPE (val)), 0));
+}
+
+/* Return whether VAL is a positive or negative overflow infinity. */
+
+static inline bool
+is_overflow_infinity (tree val)
+{
+ return (needs_overflow_infinity (TREE_TYPE (val))
+ && CONSTANT_CLASS_P (val)
+ && TREE_OVERFLOW (val)
+ && (operand_equal_p (val, TYPE_MAX_VALUE (TREE_TYPE (val)), 0)
+ || operand_equal_p (val, TYPE_MIN_VALUE (TREE_TYPE (val)), 0)));
+}
+
+
/* Return true if ARG is marked with the nonnull attribute in the
current function signature. */
@@ -156,8 +260,10 @@ set_value_range (value_range_t *vr, enum value_range_type t, tree min,
gcc_assert (min && max);
if (INTEGRAL_TYPE_P (TREE_TYPE (min)) && t == VR_ANTI_RANGE)
- gcc_assert (min != TYPE_MIN_VALUE (TREE_TYPE (min))
- || max != TYPE_MAX_VALUE (TREE_TYPE (max)));
+ gcc_assert ((min != TYPE_MIN_VALUE (TREE_TYPE (min))
+ && !is_negative_overflow_infinity (min))
+ || (max != TYPE_MAX_VALUE (TREE_TYPE (max))
+ && !is_positive_overflow_infinity (max)));
cmp = compare_values (min, max);
gcc_assert (cmp == 0 || cmp == -1 || cmp == -2);
@@ -197,13 +303,42 @@ copy_value_range (value_range_t *to, value_range_t *from)
set_value_range (to, from->type, from->min, from->max, from->equiv);
}
-/* Set value range VR to a non-negative range of type TYPE. */
+
+/* Set value range VR to VR_VARYING. */
static inline void
-set_value_range_to_nonnegative (value_range_t *vr, tree type)
+set_value_range_to_varying (value_range_t *vr)
{
- tree zero = build_int_cst (type, 0);
- set_value_range (vr, VR_RANGE, zero, TYPE_MAX_VALUE (type), vr->equiv);
+ vr->type = VR_VARYING;
+ vr->min = vr->max = NULL_TREE;
+ if (vr->equiv)
+ bitmap_clear (vr->equiv);
+}
+
+/* Set value range VR to a non-negative range of type TYPE.
+ OVERFLOW_INFINITY indicates whether to use a overflow infinity
+ rather than TYPE_MAX_VALUE; this should be true if we determine
+ that the range is nonnegative based on the assumption that signed
+ overflow does not occur. */
+
+static inline void
+set_value_range_to_nonnegative (value_range_t *vr, tree type,
+ bool overflow_infinity)
+{
+ tree zero;
+
+ if (overflow_infinity && !supports_overflow_infinity (type))
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+
+ zero = build_int_cst (type, 0);
+ set_value_range (vr, VR_RANGE, zero,
+ (overflow_infinity
+ ? positive_overflow_infinity (type)
+ : TYPE_MAX_VALUE (type)),
+ vr->equiv);
}
/* Set value range VR to a non-NULL range of type TYPE. */
@@ -226,18 +361,6 @@ set_value_range_to_null (value_range_t *vr, tree type)
}
-/* Set value range VR to VR_VARYING. */
-
-static inline void
-set_value_range_to_varying (value_range_t *vr)
-{
- vr->type = VR_VARYING;
- vr->min = vr->max = NULL_TREE;
- if (vr->equiv)
- bitmap_clear (vr->equiv);
-}
-
-
/* Set value range VR to a range of a truthvalue of type TYPE. */
static inline void
@@ -314,9 +437,13 @@ get_value_range (tree var)
static inline bool
vrp_operand_equal_p (tree val1, tree val2)
{
- return (val1 == val2
- || (val1 && val2
- && operand_equal_p (val1, val2, 0)));
+ if (val1 == val2)
+ return true;
+ if (!val1 || !val2 || !operand_equal_p (val1, val2, 0))
+ return false;
+ if (is_overflow_infinity (val1))
+ return is_overflow_infinity (val2);
+ return true;
}
/* Return true, if the bitmaps B1 and B2 are equal. */
@@ -408,28 +535,58 @@ symbolic_range_p (value_range_t *vr)
|| !is_gimple_min_invariant (vr->max));
}
-/* Like tree_expr_nonnegative_p, but this function uses value ranges
- obtained so far. */
+/* Return true if value range VR uses a overflow infinity. */
+
+static inline bool
+overflow_infinity_range_p (value_range_t *vr)
+{
+ return (vr->type == VR_RANGE
+ && (is_overflow_infinity (vr->min)
+ || is_overflow_infinity (vr->max)));
+}
+
+/* Return false if we can not make a valid comparison based on VR;
+ this will be the case if it uses an overflow infinity and overflow
+ is not undefined (i.e., -fno-strict-overflow is in effect).
+ Otherwise return true, and set *STRICT_OVERFLOW_P to true if VR
+ uses an overflow infinity. */
static bool
-vrp_expr_computes_nonnegative (tree expr)
+usable_range_p (value_range_t *vr, bool *strict_overflow_p)
{
- bool ovf;
+ gcc_assert (vr->type == VR_RANGE);
+ if (is_overflow_infinity (vr->min))
+ {
+ *strict_overflow_p = true;
+ if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (vr->min)))
+ return false;
+ }
+ if (is_overflow_infinity (vr->max))
+ {
+ *strict_overflow_p = true;
+ if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (vr->max)))
+ return false;
+ }
+ return true;
+}
+
+
+/* Like tree_expr_nonnegative_warnv_p, but this function uses value
+ ranges obtained so far. */
- /* FIXME: May need to record overflow information here. */
- return tree_expr_nonnegative_warnv_p (expr, &ovf);
+static bool
+vrp_expr_computes_nonnegative (tree expr, bool *strict_overflow_p)
+{
+ return tree_expr_nonnegative_warnv_p (expr, strict_overflow_p);
}
-/* Like tree_expr_nonzero_p, but this function uses value ranges
+/* Like tree_expr_nonzero_warnv_p, but this function uses value ranges
obtained so far. */
static bool
-vrp_expr_computes_nonzero (tree expr)
+vrp_expr_computes_nonzero (tree expr, bool *strict_overflow_p)
{
- bool ovf;
-
- /* FIXME: May need to record overflow information here. */
- if (tree_expr_nonzero_warnv_p (expr, &ovf))
+ if (tree_expr_nonzero_warnv_p (expr, strict_overflow_p))
return true;
/* If we have an expression of the form &X->a, then the expression
@@ -475,20 +632,36 @@ valid_value_p (tree expr)
static inline int
operand_less_p (tree val, tree val2)
{
- tree tcmp;
/* LT is folded faster than GE and others. Inline the common case. */
if (TREE_CODE (val) == INTEGER_CST && TREE_CODE (val2) == INTEGER_CST)
{
if (TYPE_UNSIGNED (TREE_TYPE (val)))
return INT_CST_LT_UNSIGNED (val, val2);
else
- return INT_CST_LT (val, val2);
+ {
+ if (INT_CST_LT (val, val2))
+ return 1;
+ }
}
else
- tcmp = fold_binary_to_constant (LT_EXPR, boolean_type_node, val, val2);
- if (!tcmp)
- return -2;
- return !integer_zerop (tcmp);
+ {
+ tree tcmp;
+
+ tcmp = fold_binary_to_constant (LT_EXPR, boolean_type_node, val, val2);
+ if (!tcmp)
+ return -2;
+
+ if (!integer_zerop (tcmp))
+ return 1;
+ }
+
+ /* val >= val2, not considering overflow infinity. */
+ if (is_negative_overflow_infinity (val))
+ return is_negative_overflow_infinity (val2) ? 0 : 1;
+ else if (is_positive_overflow_infinity (val2))
+ return is_positive_overflow_infinity (val) ? 0 : 1;
+
+ return 0;
}
/* Compare two values VAL1 and VAL2. Return
@@ -500,10 +673,14 @@ operand_less_p (tree val, tree val2)
+2 if VAL1 != VAL2
This is similar to tree_int_cst_compare but supports pointer values
- and values that cannot be compared at compile time. */
+ and values that cannot be compared at compile time.
+
+ If STRICT_OVERFLOW_P is not NULL, then set *STRICT_OVERFLOW_P to
+ true if the return value is only valid if we assume that signed
+ overflow is undefined. */
static int
-compare_values (tree val1, tree val2)
+compare_values_warnv (tree val1, tree val2, bool *strict_overflow_p)
{
if (val1 == val2)
return 0;
@@ -539,6 +716,8 @@ compare_values (tree val1, tree val2)
c1 = TREE_OPERAND (val1, 1);
if (tree_int_cst_sgn (c1) == -1)
{
+ if (is_negative_overflow_infinity (c1))
+ return -2;
c1 = fold_unary_to_constant (NEGATE_EXPR, TREE_TYPE (c1), c1);
if (!c1)
return -2;
@@ -559,6 +738,8 @@ compare_values (tree val1, tree val2)
c2 = TREE_OPERAND (val2, 1);
if (tree_int_cst_sgn (c2) == -1)
{
+ if (is_negative_overflow_infinity (c2))
+ return -2;
c2 = fold_unary_to_constant (NEGATE_EXPR, TREE_TYPE (c2), c2);
if (!c2)
return -2;
@@ -579,6 +760,9 @@ compare_values (tree val1, tree val2)
if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (val1)))
return -2;
+ if (strict_overflow_p != NULL)
+ *strict_overflow_p = true;
+
if (code1 == SSA_NAME)
{
if (code2 == PLUS_EXPR)
@@ -595,7 +779,7 @@ compare_values (tree val1, tree val2)
return 1;
else if (code2 == PLUS_EXPR)
/* NAME + CST1 > NAME + CST2, if CST1 > CST2 */
- return compare_values (c1, c2);
+ return compare_values_warnv (c1, c2, strict_overflow_p);
else if (code2 == MINUS_EXPR)
/* NAME + CST1 > NAME - CST2 */
return 1;
@@ -611,7 +795,7 @@ compare_values (tree val1, tree val2)
else if (code2 == MINUS_EXPR)
/* NAME - CST1 > NAME - CST2, if CST1 < CST2. Notice that
C1 and C2 are swapped in the call to compare_values. */
- return compare_values (c2, c1);
+ return compare_values_warnv (c2, c1, strict_overflow_p);
}
gcc_unreachable ();
@@ -623,9 +807,22 @@ compare_values (tree val1, tree val2)
if (!POINTER_TYPE_P (TREE_TYPE (val1)))
{
- /* We cannot compare overflowed values. */
+ /* We cannot compare overflowed values, except for overflow
+ infinities. */
if (TREE_OVERFLOW (val1) || TREE_OVERFLOW (val2))
- return -2;
+ {
+ if (strict_overflow_p != NULL)
+ *strict_overflow_p = true;
+ if (is_negative_overflow_infinity (val1))
+ return is_negative_overflow_infinity (val2) ? 0 : -1;
+ else if (is_negative_overflow_infinity (val2))
+ return 1;
+ else if (is_positive_overflow_infinity (val1))
+ return is_positive_overflow_infinity (val2) ? 0 : 1;
+ else if (is_positive_overflow_infinity (val2))
+ return -1;
+ return -2;
+ }
return tree_int_cst_compare (val1, val2);
}
@@ -661,6 +858,23 @@ compare_values (tree val1, tree val2)
}
}
+/* Compare values like compare_values_warnv, but treat comparisons of
+ nonconstants which rely on undefined overflow as incomparable. */
+
+static int
+compare_values (tree val1, tree val2)
+{
+ bool sop;
+ int ret;
+
+ sop = false;
+ ret = compare_values_warnv (val1, val2, &sop);
+ if (sop
+ && (!is_gimple_min_invariant (val1) || !is_gimple_min_invariant (val2)))
+ ret = -2;
+ return ret;
+}
+
/* Return 1 if VAL is inside value range VR (VR->MIN <= VAL <= VR->MAX),
0 if VAL is not inside VR,
@@ -926,8 +1140,10 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
/* If MIN and MAX cover the whole range for their type, then
just use the original LIMIT. */
if (INTEGRAL_TYPE_P (type)
- && min == TYPE_MIN_VALUE (type)
- && max == TYPE_MAX_VALUE (type))
+ && (min == TYPE_MIN_VALUE (type)
+ || is_negative_overflow_infinity (min))
+ && (max == TYPE_MAX_VALUE (type)
+ || is_positive_overflow_infinity (max)))
min = max = limit;
set_value_range (vr_p, VR_ANTI_RANGE, min, max, vr_p->equiv);
@@ -949,7 +1165,9 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
/* If the maximum value forces us to be out of bounds, simply punt.
It would be pointless to try and do anything more since this
all should be optimized away above us. */
- if (cond_code == LT_EXPR && compare_values (max, min) == 0)
+ if ((cond_code == LT_EXPR
+ && compare_values (max, min) == 0)
+ || is_overflow_infinity (max))
set_value_range_to_varying (vr_p);
else
{
@@ -980,7 +1198,9 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
/* If the minimum value forces us to be out of bounds, simply punt.
It would be pointless to try and do anything more since this
all should be optimized away above us. */
- if (cond_code == GT_EXPR && compare_values (min, max) == 0)
+ if ((cond_code == GT_EXPR
+ && compare_values (min, max) == 0)
+ || is_overflow_infinity (min))
set_value_range_to_varying (vr_p);
else
{
@@ -1156,9 +1376,21 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
|| cmp == 0)
&& compare_values (anti_max, real_max) == -1)
{
- min = fold_build2 (PLUS_EXPR, TREE_TYPE (var_vr->min),
- anti_max,
- build_int_cst (TREE_TYPE (var_vr->min), 1));
+ gcc_assert (!is_positive_overflow_infinity (anti_max));
+ if (needs_overflow_infinity (TREE_TYPE (anti_max))
+ && anti_max == TYPE_MAX_VALUE (TREE_TYPE (anti_max)))
+ {
+ if (!supports_overflow_infinity (TREE_TYPE (var_vr->min)))
+ {
+ set_value_range_to_varying (vr_p);
+ return;
+ }
+ min = positive_overflow_infinity (TREE_TYPE (var_vr->min));
+ }
+ else
+ min = fold_build2 (PLUS_EXPR, TREE_TYPE (var_vr->min),
+ anti_max,
+ build_int_cst (TREE_TYPE (var_vr->min), 1));
max = real_max;
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
}
@@ -1169,9 +1401,21 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
&& ((cmp = compare_values (anti_min, real_max)) == -1
|| cmp == 0))
{
- max = fold_build2 (MINUS_EXPR, TREE_TYPE (var_vr->min),
- anti_min,
- build_int_cst (TREE_TYPE (var_vr->min), 1));
+ gcc_assert (!is_negative_overflow_infinity (anti_min));
+ if (needs_overflow_infinity (TREE_TYPE (anti_min))
+ && anti_min == TYPE_MIN_VALUE (TREE_TYPE (anti_min)))
+ {
+ if (!supports_overflow_infinity (TREE_TYPE (var_vr->min)))
+ {
+ set_value_range_to_varying (vr_p);
+ return;
+ }
+ max = negative_overflow_infinity (TREE_TYPE (var_vr->min));
+ }
+ else
+ max = fold_build2 (MINUS_EXPR, TREE_TYPE (var_vr->min),
+ anti_min,
+ build_int_cst (TREE_TYPE (var_vr->min), 1));
min = real_min;
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
}
@@ -1209,9 +1453,11 @@ extract_range_from_ssa_name (value_range_t *vr, tree var)
/* Wrapper around int_const_binop. If the operation overflows and we
are not using wrapping arithmetic, then adjust the result to be
- -INF or +INF depending on CODE, VAL1 and VAL2. */
+ -INF or +INF depending on CODE, VAL1 and VAL2. This can return
+ NULL_TREE if we need to use an overflow infinity representation but
+ the type does not support it. */
-static inline tree
+static tree
vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
{
tree res;
@@ -1257,9 +1503,11 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
}
}
- else if (TREE_OVERFLOW (res)
- && !TREE_OVERFLOW (val1)
- && !TREE_OVERFLOW (val2))
+ else if ((TREE_OVERFLOW (res)
+ && !TREE_OVERFLOW (val1)
+ && !TREE_OVERFLOW (val2))
+ || is_overflow_infinity (val1)
+ || is_overflow_infinity (val2))
{
/* If the operation overflowed but neither VAL1 nor VAL2 are
overflown, return -INF or +INF depending on the operation
@@ -1267,6 +1515,30 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
int sgn1 = tree_int_cst_sgn (val1);
int sgn2 = tree_int_cst_sgn (val2);
+ if (needs_overflow_infinity (TREE_TYPE (res))
+ && !supports_overflow_infinity (TREE_TYPE (res)))
+ return NULL_TREE;
+
+ /* We have to punt on adding infinities of different signs,
+ since we can't tell what the sign of the result should be.
+ Likewise for subtracting infinities of the same sign. */
+ if (((code == PLUS_EXPR && sgn1 != sgn2)
+ || (code == MINUS_EXPR && sgn1 == sgn2))
+ && is_overflow_infinity (val1)
+ && is_overflow_infinity (val2))
+ return NULL_TREE;
+
+ /* Don't try to handle division or shifting of infinities. */
+ if ((code == TRUNC_DIV_EXPR
+ || code == FLOOR_DIV_EXPR
+ || code == CEIL_DIV_EXPR
+ || code == EXACT_DIV_EXPR
+ || code == ROUND_DIV_EXPR
+ || code == RSHIFT_EXPR)
+ && (is_overflow_infinity (val1)
+ || is_overflow_infinity (val2)))
+ return NULL_TREE;
+
/* Notice that we only need to handle the restricted set of
operations handled by extract_range_from_binary_expr.
Among them, only multiplication, addition and subtraction
@@ -1280,24 +1552,42 @@ vrp_int_const_binop (enum tree_code code, tree val1, tree val2)
if ((code == MULT_EXPR && sgn1 == sgn2)
/* For addition, the operands must be of the same sign
to yield an overflow. Its sign is therefore that
- of one of the operands, for example the first. */
- || (code == PLUS_EXPR && sgn1 > 0)
- /* For subtraction, the operands must be of different
- signs to yield an overflow. Its sign is therefore
- that of the first operand or the opposite of that
- of the second operand. A first operand of 0 counts
- as positive here, for the corner case 0 - (-INF),
- which overflows, but must yield +INF. */
- || (code == MINUS_EXPR && sgn1 >= 0)
+ of one of the operands, for example the first. For
+ infinite operands X + -INF is negative, not positive. */
+ || (code == PLUS_EXPR
+ && (sgn1 >= 0
+ ? !is_negative_overflow_infinity (val2)
+ : is_positive_overflow_infinity (val2)))
+ /* For subtraction, non-infinite operands must be of
+ different signs to yield an overflow. Its sign is
+ therefore that of the first operand or the opposite of
+ that of the second operand. A first operand of 0 counts
+ as positive here, for the corner case 0 - (-INF), which
+ overflows, but must yield +INF. For infinite operands 0
+ - INF is negative, not positive. */
+ || (code == MINUS_EXPR
+ && (sgn1 >= 0
+ ? !is_positive_overflow_infinity (val2)
+ : is_negative_overflow_infinity (val2)))
+ /* We only get in here with positive shift count, so the
+ overflow direction is the same as the sign of val1.
+ Actually rshift does not overflow at all, but we only
+ handle the case of shifting overflowed -INF and +INF. */
+ || (code == RSHIFT_EXPR
+ && sgn1 >= 0)
/* For division, the only case is -INF / -1 = +INF. */
|| code == TRUNC_DIV_EXPR
|| code == FLOOR_DIV_EXPR
|| code == CEIL_DIV_EXPR
|| code == EXACT_DIV_EXPR
|| code == ROUND_DIV_EXPR)
- return TYPE_MAX_VALUE (TREE_TYPE (res));
+ return (needs_overflow_infinity (TREE_TYPE (res))
+ ? positive_overflow_infinity (TREE_TYPE (res))
+ : TYPE_MAX_VALUE (TREE_TYPE (res)));
else
- return TYPE_MIN_VALUE (TREE_TYPE (res));
+ return (needs_overflow_infinity (TREE_TYPE (res))
+ ? negative_overflow_infinity (TREE_TYPE (res))
+ : TYPE_MIN_VALUE (TREE_TYPE (res)));
}
return res;
@@ -1327,6 +1617,7 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
&& code != CEIL_DIV_EXPR
&& code != EXACT_DIV_EXPR
&& code != ROUND_DIV_EXPR
+ && code != RSHIFT_EXPR
&& code != MIN_EXPR
&& code != MAX_EXPR
&& code != BIT_AND_EXPR
@@ -1451,7 +1742,9 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
&& vr1.type != VR_VARYING
&& vr0.type == vr1.type
&& !symbolic_range_p (&vr0)
- && !symbolic_range_p (&vr1))
+ && !overflow_infinity_range_p (&vr0)
+ && !symbolic_range_p (&vr1)
+ && !overflow_infinity_range_p (&vr1))
{
/* Boolean expressions cannot be folded with int_const_binop. */
min = fold_binary (code, TREE_TYPE (expr), vr0.min, vr1.min);
@@ -1492,10 +1785,12 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
|| code == FLOOR_DIV_EXPR
|| code == CEIL_DIV_EXPR
|| code == EXACT_DIV_EXPR
- || code == ROUND_DIV_EXPR)
+ || code == ROUND_DIV_EXPR
+ || code == RSHIFT_EXPR)
{
tree val[4];
size_t i;
+ bool sop;
/* If we have an unsigned MULT_EXPR with two VR_ANTI_RANGEs,
drop to VR_VARYING. It would take more effort to compute a
@@ -1513,6 +1808,17 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
return;
}
+ /* If we have a RSHIFT_EXPR with a possibly negative shift
+ count or an anti-range shift count drop to VR_VARYING.
+ We currently cannot handle the overflow cases correctly. */
+ if (code == RSHIFT_EXPR
+ && (vr1.type == VR_ANTI_RANGE
+ || !vrp_expr_computes_nonnegative (op1, &sop)))
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+
/* Multiplications and divisions are a bit tricky to handle,
depending on the mix of signs we have in the two ranges, we
need to operate on different values to get the minimum and
@@ -1527,7 +1833,8 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
the new range. */
/* Divisions by zero result in a VARYING value. */
- if (code != MULT_EXPR
+ if ((code != MULT_EXPR
+ && code != RSHIFT_EXPR)
&& (vr0.type == VR_ANTI_RANGE || range_includes_zero_p (&vr1)))
{
set_value_range_to_varying (vr);
@@ -1535,19 +1842,43 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
}
/* Compute the 4 cross operations. */
+ sop = false;
val[0] = vrp_int_const_binop (code, vr0.min, vr1.min);
+ if (val[0] == NULL_TREE)
+ sop = true;
- val[1] = (vr1.max != vr1.min)
- ? vrp_int_const_binop (code, vr0.min, vr1.max)
- : NULL_TREE;
+ if (vr1.max == vr1.min)
+ val[1] = NULL_TREE;
+ else
+ {
+ val[1] = vrp_int_const_binop (code, vr0.min, vr1.max);
+ if (val[1] == NULL_TREE)
+ sop = true;
+ }
+
+ if (vr0.max == vr0.min)
+ val[2] = NULL_TREE;
+ else
+ {
+ val[2] = vrp_int_const_binop (code, vr0.max, vr1.min);
+ if (val[2] == NULL_TREE)
+ sop = true;
+ }
- val[2] = (vr0.max != vr0.min)
- ? vrp_int_const_binop (code, vr0.max, vr1.min)
- : NULL_TREE;
+ if (vr0.min == vr0.max || vr1.min == vr1.max)
+ val[3] = NULL_TREE;
+ else
+ {
+ val[3] = vrp_int_const_binop (code, vr0.max, vr1.max);
+ if (val[3] == NULL_TREE)
+ sop = true;
+ }
- val[3] = (vr0.min != vr0.max && vr1.min != vr1.max)
- ? vrp_int_const_binop (code, vr0.max, vr1.max)
- : NULL_TREE;
+ if (sop)
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
/* Set MIN to the minimum of VAL[i] and MAX to the maximum
of VAL[i]. */
@@ -1555,13 +1886,17 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
max = val[0];
for (i = 1; i < 4; i++)
{
- if (!is_gimple_min_invariant (min) || TREE_OVERFLOW (min)
- || !is_gimple_min_invariant (max) || TREE_OVERFLOW (max))
+ if (!is_gimple_min_invariant (min)
+ || (TREE_OVERFLOW (min) && !is_overflow_infinity (min))
+ || !is_gimple_min_invariant (max)
+ || (TREE_OVERFLOW (max) && !is_overflow_infinity (max)))
break;
if (val[i])
{
- if (!is_gimple_min_invariant (val[i]) || TREE_OVERFLOW (val[i]))
+ if (!is_gimple_min_invariant (val[i])
+ || (TREE_OVERFLOW (val[i])
+ && !is_overflow_infinity (val[i])))
{
/* If we found an overflowed value, set MIN and MAX
to it so that we set the resulting range to
@@ -1602,16 +1937,18 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
{
if (vr0.type == VR_RANGE
&& vr0.min == vr0.max
- && tree_expr_nonnegative_p (vr0.max)
- && TREE_CODE (vr0.max) == INTEGER_CST)
+ && TREE_CODE (vr0.max) == INTEGER_CST
+ && !TREE_OVERFLOW (vr0.max)
+ && tree_int_cst_sgn (vr0.max) >= 0)
{
min = build_int_cst (TREE_TYPE (expr), 0);
max = vr0.max;
}
else if (vr1.type == VR_RANGE
- && vr1.min == vr1.max
- && tree_expr_nonnegative_p (vr1.max)
- && TREE_CODE (vr1.max) == INTEGER_CST)
+ && vr1.min == vr1.max
+ && TREE_CODE (vr1.max) == INTEGER_CST
+ && !TREE_OVERFLOW (vr1.max)
+ && tree_int_cst_sgn (vr1.max) >= 0)
{
type = VR_RANGE;
min = build_int_cst (TREE_TYPE (expr), 0);
@@ -1627,9 +1964,23 @@ extract_range_from_binary_expr (value_range_t *vr, tree expr)
gcc_unreachable ();
/* If either MIN or MAX overflowed, then set the resulting range to
- VARYING. */
- if (!is_gimple_min_invariant (min) || TREE_OVERFLOW (min)
- || !is_gimple_min_invariant (max) || TREE_OVERFLOW (max))
+ VARYING. But we do accept an overflow infinity
+ representation. */
+ if (min == NULL_TREE
+ || !is_gimple_min_invariant (min)
+ || (TREE_OVERFLOW (min) && !is_overflow_infinity (min))
+ || max == NULL_TREE
+ || !is_gimple_min_invariant (max)
+ || (TREE_OVERFLOW (max) && !is_overflow_infinity (max)))
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+
+ if ((min == TYPE_MIN_VALUE (TREE_TYPE (min))
+ || is_negative_overflow_infinity (min))
+ && (max == TYPE_MAX_VALUE (TREE_TYPE (max))
+ || is_positive_overflow_infinity (max)))
{
set_value_range_to_varying (vr);
return;
@@ -1703,10 +2054,12 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
determining if it evaluates to NULL [0, 0] or non-NULL (~[0, 0]). */
if (POINTER_TYPE_P (TREE_TYPE (expr)) || POINTER_TYPE_P (TREE_TYPE (op0)))
{
- bool ovf;
+ bool sop;
- /* FIXME: May need to record overflow information here. */
- if (range_is_nonnull (&vr0) || tree_expr_nonzero_warnv_p (expr, &ovf))
+ sop = false;
+ if (range_is_nonnull (&vr0)
+ || (tree_expr_nonzero_warnv_p (expr, &sop)
+ && !sop))
set_value_range_to_nonnull (vr, TREE_TYPE (expr));
else if (range_is_null (&vr0))
set_value_range_to_null (vr, TREE_TYPE (expr));
@@ -1729,7 +2082,8 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
or equal to the new max, then we can safely use the newly
computed range for EXPR. This allows us to compute
accurate ranges through many casts. */
- if (vr0.type == VR_RANGE
+ if ((vr0.type == VR_RANGE
+ && !overflow_infinity_range_p (&vr0))
|| (vr0.type == VR_VARYING
&& TYPE_PRECISION (outer_type) > TYPE_PRECISION (inner_type)))
{
@@ -1797,22 +2151,44 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
&& !TYPE_UNSIGNED (TREE_TYPE (expr)))
{
/* NEGATE_EXPR flips the range around. We need to treat
- TYPE_MIN_VALUE specially dependent on wrapping, range type
- and if it was used as minimum or maximum value:
- -~[MIN, MIN] == ~[MIN, MIN]
- -[MIN, 0] == [0, MAX] for -fno-wrapv
- -[MIN, 0] == [0, MIN] for -fwrapv (will be set to varying later) */
- min = vr0.max == TYPE_MIN_VALUE (TREE_TYPE (expr))
- ? TYPE_MIN_VALUE (TREE_TYPE (expr))
- : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
-
- max = (vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr))
- ? ((vr0.type == VR_ANTI_RANGE
- || TYPE_OVERFLOW_WRAPS (TREE_TYPE (expr)))
- ? TYPE_MIN_VALUE (TREE_TYPE (expr))
- : TYPE_MAX_VALUE (TREE_TYPE (expr)))
- : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min));
-
+ TYPE_MIN_VALUE specially. */
+ if (is_positive_overflow_infinity (vr0.max))
+ min = negative_overflow_infinity (TREE_TYPE (expr));
+ else if (is_negative_overflow_infinity (vr0.max))
+ min = positive_overflow_infinity (TREE_TYPE (expr));
+ else if (vr0.max != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ min = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
+ else if (needs_overflow_infinity (TREE_TYPE (expr)))
+ {
+ if (supports_overflow_infinity (TREE_TYPE (expr)))
+ min = positive_overflow_infinity (TREE_TYPE (expr));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+ }
+ else
+ min = TYPE_MIN_VALUE (TREE_TYPE (expr));
+
+ if (is_positive_overflow_infinity (vr0.min))
+ max = negative_overflow_infinity (TREE_TYPE (expr));
+ else if (is_negative_overflow_infinity (vr0.min))
+ max = positive_overflow_infinity (TREE_TYPE (expr));
+ else if (vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
+ else if (needs_overflow_infinity (TREE_TYPE (expr)))
+ {
+ if (supports_overflow_infinity (TREE_TYPE (expr)))
+ max = positive_overflow_infinity (TREE_TYPE (expr));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+ }
+ else
+ max = TYPE_MIN_VALUE (TREE_TYPE (expr));
}
else if (code == NEGATE_EXPR
&& TYPE_UNSIGNED (TREE_TYPE (expr)))
@@ -1849,11 +2225,33 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
/* ABS_EXPR may flip the range around, if the original range
included negative values. */
- min = (vr0.min == TYPE_MIN_VALUE (TREE_TYPE (expr)))
- ? TYPE_MAX_VALUE (TREE_TYPE (expr))
- : fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
+ if (is_overflow_infinity (vr0.min))
+ min = positive_overflow_infinity (TREE_TYPE (expr));
+ else if (vr0.min != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ min = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
+ else if (!needs_overflow_infinity (TREE_TYPE (expr)))
+ min = TYPE_MAX_VALUE (TREE_TYPE (expr));
+ else if (supports_overflow_infinity (TREE_TYPE (expr)))
+ min = positive_overflow_infinity (TREE_TYPE (expr));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
- max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
+ if (is_overflow_infinity (vr0.max))
+ max = positive_overflow_infinity (TREE_TYPE (expr));
+ else if (vr0.max != TYPE_MIN_VALUE (TREE_TYPE (expr)))
+ max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
+ else if (!needs_overflow_infinity (TREE_TYPE (expr)))
+ max = TYPE_MAX_VALUE (TREE_TYPE (expr));
+ else if (supports_overflow_infinity (TREE_TYPE (expr)))
+ max = positive_overflow_infinity (TREE_TYPE (expr));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
cmp = compare_values (min, max);
@@ -1863,8 +2261,6 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
{
if (range_includes_zero_p (&vr0))
{
- tree type_min_value = TYPE_MIN_VALUE (TREE_TYPE (expr));
-
/* Take the lower of the two values. */
if (cmp != 1)
max = min;
@@ -1873,12 +2269,22 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
or ~[-INF + 1, min (abs(MIN), abs(MAX))] when
flag_wrapv is set and the original anti-range doesn't include
TYPE_MIN_VALUE, remember -TYPE_MIN_VALUE = TYPE_MIN_VALUE. */
- min = ((TYPE_OVERFLOW_WRAPS (TREE_TYPE (expr))
- && vr0.min != type_min_value)
- ? int_const_binop (PLUS_EXPR,
- type_min_value,
- integer_one_node, 0)
- : type_min_value);
+ if (TYPE_OVERFLOW_WRAPS (TREE_TYPE (expr)))
+ {
+ tree type_min_value = TYPE_MIN_VALUE (TREE_TYPE (expr));
+
+ min = (vr0.min != type_min_value
+ ? int_const_binop (PLUS_EXPR, type_min_value,
+ integer_one_node, 0)
+ : type_min_value);
+ }
+ else
+ {
+ if (overflow_infinity_range_p (&vr0))
+ min = negative_overflow_infinity (TREE_TYPE (expr));
+ else
+ min = TYPE_MIN_VALUE (TREE_TYPE (expr));
+ }
}
else
{
@@ -1887,7 +2293,18 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
anti-range. */
vr0.type = VR_RANGE;
min = build_int_cst (TREE_TYPE (expr), 0);
- max = TYPE_MAX_VALUE (TREE_TYPE (expr));
+ if (needs_overflow_infinity (TREE_TYPE (expr)))
+ {
+ if (supports_overflow_infinity (TREE_TYPE (expr)))
+ max = positive_overflow_infinity (TREE_TYPE (expr));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+ }
+ else
+ max = TYPE_MAX_VALUE (TREE_TYPE (expr));
}
}
@@ -1915,6 +2332,40 @@ extract_range_from_unary_expr (value_range_t *vr, tree expr)
/* Otherwise, operate on each end of the range. */
min = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.min);
max = fold_unary_to_constant (code, TREE_TYPE (expr), vr0.max);
+
+ if (needs_overflow_infinity (TREE_TYPE (expr)))
+ {
+ gcc_assert (code != NEGATE_EXPR && code != ABS_EXPR);
+ if (is_overflow_infinity (vr0.min))
+ min = vr0.min;
+ else if (TREE_OVERFLOW (min))
+ {
+ if (supports_overflow_infinity (TREE_TYPE (expr)))
+ min = (tree_int_cst_sgn (min) >= 0
+ ? positive_overflow_infinity (TREE_TYPE (min))
+ : negative_overflow_infinity (TREE_TYPE (min)));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+ }
+
+ if (is_overflow_infinity (vr0.max))
+ max = vr0.max;
+ else if (TREE_OVERFLOW (max))
+ {
+ if (supports_overflow_infinity (TREE_TYPE (expr)))
+ max = (tree_int_cst_sgn (max) >= 0
+ ? positive_overflow_infinity (TREE_TYPE (max))
+ : negative_overflow_infinity (TREE_TYPE (max)));
+ else
+ {
+ set_value_range_to_varying (vr);
+ return;
+ }
+ }
+ }
}
cmp = compare_values (min, max);
@@ -1970,8 +2421,15 @@ extract_range_from_cond_expr (value_range_t *vr, tree expr)
static void
extract_range_from_comparison (value_range_t *vr, tree expr)
{
- tree val = vrp_evaluate_conditional (expr, false);
- if (val)
+ bool sop = false;
+ tree val = vrp_evaluate_conditional_warnv (expr, false, &sop);
+
+ /* A disadvantage of using a special infinity as an overflow
+ representation is that we lose the ability to record overflow
+ when we don't have an infinity. So we have to ignore a result
+ which relies on overflow. */
+
+ if (val && !is_overflow_infinity (val) && !sop)
{
/* Since this expression was found on the RHS of an assignment,
its type may be different from _Bool. Convert VAL to EXPR's
@@ -2021,10 +2479,14 @@ extract_range_from_expr (value_range_t *vr, tree expr)
with range data. */
if (vr->type == VR_VARYING)
{
+ bool sop = false;
+
if (INTEGRAL_TYPE_P (TREE_TYPE (expr))
- && vrp_expr_computes_nonnegative (expr))
- set_value_range_to_nonnegative (vr, TREE_TYPE (expr));
- else if (vrp_expr_computes_nonzero (expr))
+ && vrp_expr_computes_nonnegative (expr, &sop))
+ set_value_range_to_nonnegative (vr, TREE_TYPE (expr),
+ sop || is_overflow_infinity (expr));
+ else if (vrp_expr_computes_nonzero (expr, &sop)
+ && !sop)
set_value_range_to_nonnull (vr, TREE_TYPE (expr));
}
}
@@ -2070,6 +2532,11 @@ adjust_range_with_scev (value_range_t *vr, struct loop *loop, tree stmt,
true))
return;
+ /* We use TYPE_MIN_VALUE and TYPE_MAX_VALUE here instead of
+ negative_overflow_infinity and positive_overflow_infinity,
+ because we have concluded that the loop probably does not
+ wrap. */
+
type = TREE_TYPE (var);
if (POINTER_TYPE_P (type) || !TYPE_MIN_VALUE (type))
tmin = lower_bound_in_type (type, type);
@@ -2149,11 +2616,15 @@ adjust_range_with_scev (value_range_t *vr, struct loop *loop, tree stmt,
- Return BOOLEAN_FALSE_NODE if the comparison always returns false.
- Return NULL_TREE if it is not always possible to determine the
- value of the comparison. */
+ value of the comparison.
+
+ Also set *STRICT_OVERFLOW_P to indicate whether a range with an
+ overflow infinity was used in the test. */
static tree
-compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
+compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1,
+ bool *strict_overflow_p)
{
/* VARYING or UNDEFINED ranges cannot be compared. */
if (vr0->type == VR_VARYING
@@ -2189,13 +2660,17 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
gcc_assert (comp == NE_EXPR || comp == EQ_EXPR);
- if (compare_values (vr0->min, vr1->min) == 0
- && compare_values (vr0->max, vr1->max) == 0)
+ if (compare_values_warnv (vr0->min, vr1->min, strict_overflow_p) == 0
+ && compare_values_warnv (vr0->max, vr1->max, strict_overflow_p) == 0)
return (comp == NE_EXPR) ? boolean_true_node : boolean_false_node;
return NULL_TREE;
}
+ if (!usable_range_p (vr0, strict_overflow_p)
+ || !usable_range_p (vr1, strict_overflow_p))
+ return NULL_TREE;
+
/* Simplify processing. If COMP is GT_EXPR or GE_EXPR, switch the
operands around and change the comparison code. */
if (comp == GT_EXPR || comp == GE_EXPR)
@@ -2211,19 +2686,23 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
{
/* Equality may only be computed if both ranges represent
exactly one value. */
- if (compare_values (vr0->min, vr0->max) == 0
- && compare_values (vr1->min, vr1->max) == 0)
+ if (compare_values_warnv (vr0->min, vr0->max, strict_overflow_p) == 0
+ && compare_values_warnv (vr1->min, vr1->max, strict_overflow_p) == 0)
{
- int cmp_min = compare_values (vr0->min, vr1->min);
- int cmp_max = compare_values (vr0->max, vr1->max);
+ int cmp_min = compare_values_warnv (vr0->min, vr1->min,
+ strict_overflow_p);
+ int cmp_max = compare_values_warnv (vr0->max, vr1->max,
+ strict_overflow_p);
if (cmp_min == 0 && cmp_max == 0)
return boolean_true_node;
else if (cmp_min != -2 && cmp_max != -2)
return boolean_false_node;
}
/* If [V0_MIN, V1_MAX] < [V1_MIN, V1_MAX] then V0 != V1. */
- else if (compare_values (vr0->min, vr1->max) == 1
- || compare_values (vr1->min, vr0->max) == 1)
+ else if (compare_values_warnv (vr0->min, vr1->max,
+ strict_overflow_p) == 1
+ || compare_values_warnv (vr1->min, vr0->max,
+ strict_overflow_p) == 1)
return boolean_false_node;
return NULL_TREE;
@@ -2237,17 +2716,21 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
make sure that both comparisons yield similar results to
avoid comparing values that cannot be compared at
compile-time. */
- cmp1 = compare_values (vr0->max, vr1->min);
- cmp2 = compare_values (vr0->min, vr1->max);
+ cmp1 = compare_values_warnv (vr0->max, vr1->min, strict_overflow_p);
+ cmp2 = compare_values_warnv (vr0->min, vr1->max, strict_overflow_p);
if ((cmp1 == -1 && cmp2 == -1) || (cmp1 == 1 && cmp2 == 1))
return boolean_true_node;
/* If VR0 and VR1 represent a single value and are identical,
return false. */
- else if (compare_values (vr0->min, vr0->max) == 0
- && compare_values (vr1->min, vr1->max) == 0
- && compare_values (vr0->min, vr1->min) == 0
- && compare_values (vr0->max, vr1->max) == 0)
+ else if (compare_values_warnv (vr0->min, vr0->max,
+ strict_overflow_p) == 0
+ && compare_values_warnv (vr1->min, vr1->max,
+ strict_overflow_p) == 0
+ && compare_values_warnv (vr0->min, vr1->min,
+ strict_overflow_p) == 0
+ && compare_values_warnv (vr0->max, vr1->max,
+ strict_overflow_p) == 0)
return boolean_false_node;
/* Otherwise, they may or may not be different. */
@@ -2259,16 +2742,26 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
int tst;
/* If VR0 is to the left of VR1, return true. */
- tst = compare_values (vr0->max, vr1->min);
+ tst = compare_values_warnv (vr0->max, vr1->min, strict_overflow_p);
if ((comp == LT_EXPR && tst == -1)
|| (comp == LE_EXPR && (tst == -1 || tst == 0)))
- return boolean_true_node;
+ {
+ if (overflow_infinity_range_p (vr0)
+ || overflow_infinity_range_p (vr1))
+ *strict_overflow_p = true;
+ return boolean_true_node;
+ }
/* If VR0 is to the right of VR1, return false. */
- tst = compare_values (vr0->min, vr1->max);
+ tst = compare_values_warnv (vr0->min, vr1->max, strict_overflow_p);
if ((comp == LT_EXPR && (tst == 0 || tst == 1))
|| (comp == LE_EXPR && tst == 1))
- return boolean_false_node;
+ {
+ if (overflow_infinity_range_p (vr0)
+ || overflow_infinity_range_p (vr1))
+ *strict_overflow_p = true;
+ return boolean_false_node;
+ }
/* Otherwise, we don't know. */
return NULL_TREE;
@@ -2282,10 +2775,13 @@ compare_ranges (enum tree_code comp, value_range_t *vr0, value_range_t *vr1)
BOOLEAN_TRUE_NODE if VR COMP VAL always returns true for all the
values in VR. Return BOOLEAN_FALSE_NODE if the comparison
always returns false. Return NULL_TREE if it is not always
- possible to determine the value of the comparison. */
+ possible to determine the value of the comparison. Also set
+ *STRICT_OVERFLOW_P to indicate whether a range with an overflow
+ infinity was used in the test. */
static tree
-compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val)
+compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val,
+ bool *strict_overflow_p)
{
if (vr->type == VR_VARYING || vr->type == VR_UNDEFINED)
return NULL_TREE;
@@ -2308,20 +2804,23 @@ compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val)
return NULL_TREE;
}
+ if (!usable_range_p (vr, strict_overflow_p))
+ return NULL_TREE;
+
if (comp == EQ_EXPR)
{
/* EQ_EXPR may only be computed if VR represents exactly
one value. */
- if (compare_values (vr->min, vr->max) == 0)
+ if (compare_values_warnv (vr->min, vr->max, strict_overflow_p) == 0)
{
- int cmp = compare_values (vr->min, val);
+ int cmp = compare_values_warnv (vr->min, val, strict_overflow_p);
if (cmp == 0)
return boolean_true_node;
else if (cmp == -1 || cmp == 1 || cmp == 2)
return boolean_false_node;
}
- else if (compare_values (val, vr->min) == -1
- || compare_values (vr->max, val) == -1)
+ else if (compare_values_warnv (val, vr->min, strict_overflow_p) == -1
+ || compare_values_warnv (vr->max, val, strict_overflow_p) == -1)
return boolean_false_node;
return NULL_TREE;
@@ -2329,14 +2828,14 @@ compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val)
else if (comp == NE_EXPR)
{
/* If VAL is not inside VR, then they are always different. */
- if (compare_values (vr->max, val) == -1
- || compare_values (vr->min, val) == 1)
+ if (compare_values_warnv (vr->max, val, strict_overflow_p) == -1
+ || compare_values_warnv (vr->min, val, strict_overflow_p) == 1)
return boolean_true_node;
/* If VR represents exactly one value equal to VAL, then return
false. */
- if (compare_values (vr->min, vr->max) == 0
- && compare_values (vr->min, val) == 0)
+ if (compare_values_warnv (vr->min, vr->max, strict_overflow_p) == 0
+ && compare_values_warnv (vr->min, val, strict_overflow_p) == 0)
return boolean_false_node;
/* Otherwise, they may or may not be different. */
@@ -2347,16 +2846,24 @@ compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val)
int tst;
/* If VR is to the left of VAL, return true. */
- tst = compare_values (vr->max, val);
+ tst = compare_values_warnv (vr->max, val, strict_overflow_p);
if ((comp == LT_EXPR && tst == -1)
|| (comp == LE_EXPR && (tst == -1 || tst == 0)))
- return boolean_true_node;
+ {
+ if (overflow_infinity_range_p (vr))
+ *strict_overflow_p = true;
+ return boolean_true_node;
+ }
/* If VR is to the right of VAL, return false. */
- tst = compare_values (vr->min, val);
+ tst = compare_values_warnv (vr->min, val, strict_overflow_p);
if ((comp == LT_EXPR && (tst == 0 || tst == 1))
|| (comp == LE_EXPR && tst == 1))
- return boolean_false_node;
+ {
+ if (overflow_infinity_range_p (vr))
+ *strict_overflow_p = true;
+ return boolean_false_node;
+ }
/* Otherwise, we don't know. */
return NULL_TREE;
@@ -2366,16 +2873,24 @@ compare_range_with_value (enum tree_code comp, value_range_t *vr, tree val)
int tst;
/* If VR is to the right of VAL, return true. */
- tst = compare_values (vr->min, val);
+ tst = compare_values_warnv (vr->min, val, strict_overflow_p);
if ((comp == GT_EXPR && tst == 1)
|| (comp == GE_EXPR && (tst == 0 || tst == 1)))
- return boolean_true_node;
+ {
+ if (overflow_infinity_range_p (vr))
+ *strict_overflow_p = true;
+ return boolean_true_node;
+ }
/* If VR is to the left of VAL, return false. */
- tst = compare_values (vr->max, val);
+ tst = compare_values_warnv (vr->max, val, strict_overflow_p);
if ((comp == GT_EXPR && (tst == -1 || tst == 0))
|| (comp == GE_EXPR && tst == -1))
- return boolean_false_node;
+ {
+ if (overflow_infinity_range_p (vr))
+ *strict_overflow_p = true;
+ return boolean_false_node;
+ }
/* Otherwise, we don't know. */
return NULL_TREE;
@@ -2414,6 +2929,9 @@ dump_value_range (FILE *file, value_range_t *vr)
&& !TYPE_UNSIGNED (type)
&& vr->min == TYPE_MIN_VALUE (type))
fprintf (file, "-INF");
+ else if (needs_overflow_infinity (type)
+ && is_negative_overflow_infinity (vr->min))
+ fprintf (file, "-INF(OVF)");
else
print_generic_expr (file, vr->min, 0);
@@ -2422,6 +2940,9 @@ dump_value_range (FILE *file, value_range_t *vr)
if (INTEGRAL_TYPE_P (type)
&& vr->max == TYPE_MAX_VALUE (type))
fprintf (file, "+INF");
+ else if (needs_overflow_infinity (type)
+ && is_positive_overflow_infinity (vr->max))
+ fprintf (file, "+INF(OVF)");
else
print_generic_expr (file, vr->max, 0);
@@ -2507,22 +3028,20 @@ build_assert_expr_for (tree cond, tree v)
if (COMPARISON_CLASS_P (cond))
{
tree a = build2 (ASSERT_EXPR, TREE_TYPE (v), v, cond);
- assertion = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (v), n, a);
+ assertion = build_gimple_modify_stmt (n, a);
}
else if (TREE_CODE (cond) == TRUTH_NOT_EXPR)
{
/* Given !V, build the assignment N = false. */
tree op0 = TREE_OPERAND (cond, 0);
gcc_assert (op0 == v);
- assertion = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (v), n,
- boolean_false_node);
+ assertion = build_gimple_modify_stmt (n, boolean_false_node);
}
else if (TREE_CODE (cond) == SSA_NAME)
{
/* Given V, build the assignment N = true. */
gcc_assert (v == cond);
- assertion = build2 (GIMPLE_MODIFY_STMT,
- TREE_TYPE (v), n, boolean_true_node);
+ assertion = build_gimple_modify_stmt (n, boolean_true_node);
}
else
gcc_unreachable ();
@@ -3871,15 +4390,18 @@ vrp_visit_assignment (tree stmt, tree *output_p)
/* Compare all the value ranges for names equivalent to VAR with VAL
using comparison code COMP. Return the same value returned by
- compare_range_with_value. */
+ compare_range_with_value, including the setting of
+ *STRICT_OVERFLOW_P. */
static tree
-compare_name_with_value (enum tree_code comp, tree var, tree val)
+compare_name_with_value (enum tree_code comp, tree var, tree val,
+ bool *strict_overflow_p)
{
bitmap_iterator bi;
unsigned i;
bitmap e;
tree retval, t;
+ int used_strict_overflow;
t = retval = NULL_TREE;
@@ -3891,8 +4413,14 @@ compare_name_with_value (enum tree_code comp, tree var, tree val)
the body of the loop just to check VAR's value range). */
bitmap_set_bit (e, SSA_NAME_VERSION (var));
+ /* Start at -1. Set it to 0 if we do a comparison without relying
+ on overflow, or 1 if all comparisons rely on overflow. */
+ used_strict_overflow = -1;
+
EXECUTE_IF_SET_IN_BITMAP (e, 0, i, bi)
{
+ bool sop;
+
value_range_t equiv_vr = *(vr_value[i]);
/* If name N_i does not have a valid range, use N_i as its own
@@ -3905,7 +4433,8 @@ compare_name_with_value (enum tree_code comp, tree var, tree val)
equiv_vr.max = ssa_name (i);
}
- t = compare_range_with_value (comp, &equiv_vr, val);
+ sop = false;
+ t = compare_range_with_value (comp, &equiv_vr, val, &sop);
if (t)
{
/* If we get different answers from different members
@@ -3919,6 +4448,11 @@ compare_name_with_value (enum tree_code comp, tree var, tree val)
break;
}
retval = t;
+
+ if (!sop)
+ used_strict_overflow = 0;
+ else if (used_strict_overflow < 0)
+ used_strict_overflow = 1;
}
}
@@ -3926,7 +4460,11 @@ compare_name_with_value (enum tree_code comp, tree var, tree val)
bitmap_clear_bit (e, SSA_NAME_VERSION (var));
if (retval)
- return retval;
+ {
+ if (used_strict_overflow > 0)
+ *strict_overflow_p = true;
+ return retval;
+ }
/* We couldn't find a non-NULL value for the predicate. */
return NULL_TREE;
@@ -3936,15 +4474,19 @@ compare_name_with_value (enum tree_code comp, tree var, tree val)
/* Given a comparison code COMP and names N1 and N2, compare all the
ranges equivalent to N1 against all the ranges equivalent to N2
to determine the value of N1 COMP N2. Return the same value
- returned by compare_ranges. */
+ returned by compare_ranges. Set *STRICT_OVERFLOW_P to indicate
+ whether we relied on an overflow infinity in the comparison. */
+
static tree
-compare_names (enum tree_code comp, tree n1, tree n2)
+compare_names (enum tree_code comp, tree n1, tree n2,
+ bool *strict_overflow_p)
{
tree t, retval;
bitmap e1, e2;
bitmap_iterator bi1, bi2;
unsigned i1, i2;
+ int used_strict_overflow;
/* Compare the ranges of every name equivalent to N1 against the
ranges of every name equivalent to N2. */
@@ -3969,6 +4511,10 @@ compare_names (enum tree_code comp, tree n1, tree n2)
: boolean_false_node;
}
+ /* Start at -1. Set it to 0 if we do a comparison without relying
+ on overflow, or 1 if all comparisons rely on overflow. */
+ used_strict_overflow = -1;
+
/* Otherwise, compare all the equivalent ranges. First, add N1 and
N2 to their own set of equivalences to avoid duplicating the body
of the loop just to check N1 and N2 ranges. */
@@ -3987,6 +4533,8 @@ compare_names (enum tree_code comp, tree n1, tree n2)
t = retval = NULL_TREE;
EXECUTE_IF_SET_IN_BITMAP (e2, 0, i2, bi2)
{
+ bool sop;
+
value_range_t vr2 = *(vr_value[i2]);
if (vr2.type == VR_VARYING || vr2.type == VR_UNDEFINED)
@@ -3996,7 +4544,7 @@ compare_names (enum tree_code comp, tree n1, tree n2)
vr2.max = ssa_name (i2);
}
- t = compare_ranges (comp, &vr1, &vr2);
+ t = compare_ranges (comp, &vr1, &vr2, &sop);
if (t)
{
/* If we get different answers from different members
@@ -4011,6 +4559,11 @@ compare_names (enum tree_code comp, tree n1, tree n2)
return NULL_TREE;
}
retval = t;
+
+ if (!sop)
+ used_strict_overflow = 0;
+ else if (used_strict_overflow < 0)
+ used_strict_overflow = 1;
}
}
@@ -4018,6 +4571,8 @@ compare_names (enum tree_code comp, tree n1, tree n2)
{
bitmap_clear_bit (e1, SSA_NAME_VERSION (n1));
bitmap_clear_bit (e2, SSA_NAME_VERSION (n2));
+ if (used_strict_overflow > 0)
+ *strict_overflow_p = true;
return retval;
}
}
@@ -4039,10 +4594,14 @@ compare_names (enum tree_code comp, tree n1, tree n2)
If USE_EQUIV_P is true, the ranges of all the names equivalent with
the operands in COND are used when trying to compute its value.
This is only used during final substitution. During propagation,
- we only check the range of each variable and not its equivalents. */
+ we only check the range of each variable and not its equivalents.
-tree
-vrp_evaluate_conditional (tree cond, bool use_equiv_p)
+ Set *STRICT_OVERFLOW_P to indicate whether we relied on an overflow
+ infinity to produce the result. */
+
+static tree
+vrp_evaluate_conditional_warnv (tree cond, bool use_equiv_p,
+ bool *strict_overflow_p)
{
gcc_assert (TREE_CODE (cond) == SSA_NAME
|| TREE_CODE_CLASS (TREE_CODE (cond)) == tcc_comparison);
@@ -4053,11 +4612,13 @@ vrp_evaluate_conditional (tree cond, bool use_equiv_p)
tree retval;
if (use_equiv_p)
- retval = compare_name_with_value (NE_EXPR, cond, boolean_false_node);
+ retval = compare_name_with_value (NE_EXPR, cond, boolean_false_node,
+ strict_overflow_p);
else
{
value_range_t *vr = get_value_range (cond);
- retval = compare_range_with_value (NE_EXPR, vr, boolean_false_node);
+ retval = compare_range_with_value (NE_EXPR, vr, boolean_false_node,
+ strict_overflow_p);
}
/* If COND has a known boolean range, return it. */
@@ -4083,12 +4644,15 @@ vrp_evaluate_conditional (tree cond, bool use_equiv_p)
if (use_equiv_p)
{
if (TREE_CODE (op0) == SSA_NAME && TREE_CODE (op1) == SSA_NAME)
- return compare_names (TREE_CODE (cond), op0, op1);
+ return compare_names (TREE_CODE (cond), op0, op1,
+ strict_overflow_p);
else if (TREE_CODE (op0) == SSA_NAME)
- return compare_name_with_value (TREE_CODE (cond), op0, op1);
+ return compare_name_with_value (TREE_CODE (cond), op0, op1,
+ strict_overflow_p);
else if (TREE_CODE (op1) == SSA_NAME)
- return compare_name_with_value (
- swap_tree_comparison (TREE_CODE (cond)), op1, op0);
+ return (compare_name_with_value
+ (swap_tree_comparison (TREE_CODE (cond)), op1, op0,
+ strict_overflow_p));
}
else
{
@@ -4098,12 +4662,15 @@ vrp_evaluate_conditional (tree cond, bool use_equiv_p)
vr1 = (TREE_CODE (op1) == SSA_NAME) ? get_value_range (op1) : NULL;
if (vr0 && vr1)
- return compare_ranges (TREE_CODE (cond), vr0, vr1);
+ return compare_ranges (TREE_CODE (cond), vr0, vr1,
+ strict_overflow_p);
else if (vr0 && vr1 == NULL)
- return compare_range_with_value (TREE_CODE (cond), vr0, op1);
+ return compare_range_with_value (TREE_CODE (cond), vr0, op1,
+ strict_overflow_p);
else if (vr0 == NULL && vr1)
- return compare_range_with_value (
- swap_tree_comparison (TREE_CODE (cond)), vr1, op0);
+ return (compare_range_with_value
+ (swap_tree_comparison (TREE_CODE (cond)), vr1, op0,
+ strict_overflow_p));
}
}
@@ -4111,6 +4678,55 @@ vrp_evaluate_conditional (tree cond, bool use_equiv_p)
return NULL_TREE;
}
+/* Given COND within STMT, try to simplify it based on value range
+ information. Return NULL if the conditional can not be evaluated.
+ The ranges of all the names equivalent with the operands in COND
+ will be used when trying to compute the value. If the result is
+ based on undefined signed overflow, issue a warning if
+ appropriate. */
+
+tree
+vrp_evaluate_conditional (tree cond, tree stmt)
+{
+ bool sop;
+ tree ret;
+
+ sop = false;
+ ret = vrp_evaluate_conditional_warnv (cond, true, &sop);
+
+ if (ret && sop)
+ {
+ enum warn_strict_overflow_code wc;
+ const char* warnmsg;
+
+ if (is_gimple_min_invariant (ret))
+ {
+ wc = WARN_STRICT_OVERFLOW_CONDITIONAL;
+ warnmsg = G_("assuming signed overflow does not occur when "
+ "simplifying conditional to constant");
+ }
+ else
+ {
+ wc = WARN_STRICT_OVERFLOW_COMPARISON;
+ warnmsg = G_("assuming signed overflow does not occur when "
+ "simplifying conditional");
+ }
+
+ if (issue_strict_overflow_warning (wc))
+ {
+ location_t locus;
+
+ if (!EXPR_HAS_LOCATION (stmt))
+ locus = input_location;
+ else
+ locus = EXPR_LOCATION (stmt);
+ warning (OPT_Wstrict_overflow, "%H%s", &locus, warnmsg);
+ }
+ }
+
+ return ret;
+}
+
/* Visit conditional statement STMT. If we can determine which edge
will be taken out of STMT's basic block, record it in
@@ -4121,6 +4737,7 @@ static enum ssa_prop_result
vrp_visit_cond_stmt (tree stmt, edge *taken_edge_p)
{
tree cond, val;
+ bool sop;
*taken_edge_p = NULL;
@@ -4193,9 +4810,21 @@ vrp_visit_cond_stmt (tree stmt, edge *taken_edge_p)
additional checking. Testing on several code bases (GCC, DLV,
MICO, TRAMP3D and SPEC2000) showed that doing this results in
4 more predicates folded in SPEC. */
- val = vrp_evaluate_conditional (cond, false);
+ sop = false;
+ val = vrp_evaluate_conditional_warnv (cond, false, &sop);
if (val)
- *taken_edge_p = find_taken_edge (bb_for_stmt (stmt), val);
+ {
+ if (!sop)
+ *taken_edge_p = find_taken_edge (bb_for_stmt (stmt), val);
+ else
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ "\nIgnoring predicate evaluation because "
+ "it assumes that signed overflow is undefined");
+ val = NULL_TREE;
+ }
+ }
if (dump_file && (dump_flags & TDF_DETAILS))
{
@@ -4487,18 +5116,42 @@ vrp_visit_phi_node (tree phi)
other case to avoid infinite bouncing between different
minimums. */
if (cmp_min > 0 || cmp_min < 0)
- vr_result.min = TYPE_MIN_VALUE (TREE_TYPE (vr_result.min));
+ {
+ /* If we will end up with a (-INF, +INF) range, set it
+ to VARYING. */
+ if (is_positive_overflow_infinity (vr_result.max)
+ || (vr_result.max
+ == TYPE_MAX_VALUE (TREE_TYPE (vr_result.max))))
+ goto varying;
+
+ if (!needs_overflow_infinity (TREE_TYPE (vr_result.min)))
+ vr_result.min = TYPE_MIN_VALUE (TREE_TYPE (vr_result.min));
+ else if (supports_overflow_infinity (TREE_TYPE (vr_result.min)))
+ vr_result.min =
+ negative_overflow_infinity (TREE_TYPE (vr_result.min));
+ else
+ goto varying;
+ }
/* Similarly, if the new maximum is smaller or larger than
the previous one, go all the way to +INF. */
if (cmp_max < 0 || cmp_max > 0)
- vr_result.max = TYPE_MAX_VALUE (TREE_TYPE (vr_result.max));
-
- /* If we ended up with a (-INF, +INF) range, set it to
- VARYING. */
- if (vr_result.min == TYPE_MIN_VALUE (TREE_TYPE (vr_result.min))
- && vr_result.max == TYPE_MAX_VALUE (TREE_TYPE (vr_result.max)))
- goto varying;
+ {
+ /* If we will end up with a (-INF, +INF) range, set it
+ to VARYING. */
+ if (is_negative_overflow_infinity (vr_result.min)
+ || (vr_result.min
+ == TYPE_MIN_VALUE (TREE_TYPE (vr_result.min))))
+ goto varying;
+
+ if (!needs_overflow_infinity (TREE_TYPE (vr_result.max)))
+ vr_result.max = TYPE_MAX_VALUE (TREE_TYPE (vr_result.max));
+ else if (supports_overflow_infinity (TREE_TYPE (vr_result.max)))
+ vr_result.max =
+ positive_overflow_infinity (TREE_TYPE (vr_result.max));
+ else
+ goto varying;
+ }
}
}
@@ -4533,7 +5186,26 @@ simplify_div_or_mod_using_ranges (tree stmt, tree rhs, enum tree_code rhs_code)
}
else
{
- val = compare_range_with_value (GT_EXPR, vr, integer_zero_node);
+ bool sop = false;
+
+ val = compare_range_with_value (GT_EXPR, vr, integer_zero_node, &sop);
+
+ if (val
+ && sop
+ && integer_onep (val)
+ && issue_strict_overflow_warning (WARN_STRICT_OVERFLOW_MISC))
+ {
+ location_t locus;
+
+ if (!EXPR_HAS_LOCATION (stmt))
+ locus = input_location;
+ else
+ locus = EXPR_LOCATION (stmt);
+ warning (OPT_Wstrict_overflow,
+ ("%Hassuming signed overflow does not occur when "
+ "simplifying / or %% to >> or &"),
+ &locus);
+ }
}
if (val && integer_onep (val))
@@ -4578,10 +5250,14 @@ simplify_abs_using_ranges (tree stmt, tree rhs)
}
else if (vr)
{
- val = compare_range_with_value (LE_EXPR, vr, integer_zero_node);
+ bool sop = false;
+
+ val = compare_range_with_value (LE_EXPR, vr, integer_zero_node, &sop);
if (!val)
{
- val = compare_range_with_value (GE_EXPR, vr, integer_zero_node);
+ sop = false;
+ val = compare_range_with_value (GE_EXPR, vr, integer_zero_node,
+ &sop);
if (val)
{
@@ -4597,6 +5273,20 @@ simplify_abs_using_ranges (tree stmt, tree rhs)
{
tree t;
+ if (sop && issue_strict_overflow_warning (WARN_STRICT_OVERFLOW_MISC))
+ {
+ location_t locus;
+
+ if (!EXPR_HAS_LOCATION (stmt))
+ locus = input_location;
+ else
+ locus = EXPR_LOCATION (stmt);
+ warning (OPT_Wstrict_overflow,
+ ("%Hassuming signed overflow does not occur when "
+ "simplifying abs (X) to X or -X"),
+ &locus);
+ }
+
if (integer_onep (val))
t = build1 (NEGATE_EXPR, TREE_TYPE (op), op);
else
@@ -4625,10 +5315,12 @@ test_for_singularity (enum tree_code cond_code, tree op0,
the conditional as it was written. */
if (cond_code == LE_EXPR || cond_code == LT_EXPR)
{
+ /* This should not be negative infinity; there is no overflow
+ here. */
min = TYPE_MIN_VALUE (TREE_TYPE (op0));
max = op1;
- if (cond_code == LT_EXPR)
+ if (cond_code == LT_EXPR && !is_overflow_infinity (max))
{
tree one = build_int_cst (TREE_TYPE (op0), 1);
max = fold_build2 (MINUS_EXPR, TREE_TYPE (op0), max, one);
@@ -4636,10 +5328,12 @@ test_for_singularity (enum tree_code cond_code, tree op0,
}
else if (cond_code == GE_EXPR || cond_code == GT_EXPR)
{
+ /* This should not be positive infinity; there is no overflow
+ here. */
max = TYPE_MAX_VALUE (TREE_TYPE (op0));
min = op1;
- if (cond_code == GT_EXPR)
+ if (cond_code == GT_EXPR && !is_overflow_infinity (min))
{
tree one = build_int_cst (TREE_TYPE (op0), 1);
min = fold_build2 (PLUS_EXPR, TREE_TYPE (op0), min, one);
@@ -4785,10 +5479,13 @@ simplify_stmt_using_ranges (tree stmt)
restored. */
static VEC(tree,heap) *stack;
-/* A trivial wrapper so that we can present the generic jump
- threading code with a simple API for simplifying statements. */
+/* A trivial wrapper so that we can present the generic jump threading
+ code with a simple API for simplifying statements. STMT is the
+ statement we want to simplify, WITHIN_STMT provides the location
+ for any overflow warnings. */
+
static tree
-simplify_stmt_for_jump_threading (tree stmt)
+simplify_stmt_for_jump_threading (tree stmt, tree within_stmt)
{
/* We only use VRP information to simplify conditionals. This is
overly conservative, but it's unclear if doing more would be
@@ -4796,7 +5493,7 @@ simplify_stmt_for_jump_threading (tree stmt)
if (TREE_CODE (stmt) != COND_EXPR)
return NULL;
- return vrp_evaluate_conditional (COND_EXPR_COND (stmt), true);
+ return vrp_evaluate_conditional (COND_EXPR_COND (stmt), within_stmt);
}
/* Blocks which have more than one predecessor and more than
@@ -5094,7 +5791,6 @@ struct tree_opt_pass pass_vrp =
| TODO_ggc_collect
| TODO_verify_ssa
| TODO_dump_func
- | TODO_update_ssa
- | TODO_update_smt_usage, /* todo_flags_finish */
+ | TODO_update_ssa, /* todo_flags_finish */
0 /* letter */
};
diff --git a/gcc/tree.c b/gcc/tree.c
index d9982e8b2ec..baf94b2db0a 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -146,7 +146,8 @@ static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
htab_t value_expr_for_decl;
-static GTY ((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
+static GTY ((if_marked ("tree_priority_map_marked_p"),
+ param_is (struct tree_priority_map)))
htab_t init_priority_for_decl;
static GTY ((if_marked ("tree_map_marked_p"), param_is (struct tree_map)))
@@ -220,8 +221,8 @@ init_ttree (void)
value_expr_for_decl = htab_create_ggc (512, tree_map_hash,
tree_map_eq, 0);
- init_priority_for_decl = htab_create_ggc (512, tree_int_map_hash,
- tree_int_map_eq, 0);
+ init_priority_for_decl = htab_create_ggc (512, tree_priority_map_hash,
+ tree_priority_map_eq, 0);
restrict_base_for_decl = htab_create_ggc (256, tree_map_hash,
tree_map_eq, 0);
@@ -4195,18 +4196,18 @@ build_variant_type_copy (tree type)
/* Return true if the from tree in both tree maps are equal. */
int
-tree_map_eq (const void *va, const void *vb)
+tree_map_base_eq (const void *va, const void *vb)
{
- const struct tree_map *a = va, *b = vb;
+ const struct tree_map_base *a = va, *b = vb;
return (a->from == b->from);
}
/* Hash a from tree in a tree_map. */
unsigned int
-tree_map_hash (const void *item)
+tree_map_base_hash (const void *item)
{
- return (((const struct tree_map *) item)->hash);
+ return htab_hash_pointer (((const struct tree_map_base *)item)->from);
}
/* Return true if this tree map structure is marked for garbage collection
@@ -4214,70 +4215,97 @@ tree_map_hash (const void *item)
structure goes away when the from tree goes away. */
int
-tree_map_marked_p (const void *p)
+tree_map_base_marked_p (const void *p)
{
- tree from = ((struct tree_map *) p)->from;
+ return ggc_marked_p (((struct tree_map_base *) p)->from);
+}
- return ggc_marked_p (from);
+unsigned int
+tree_map_hash (const void *item)
+{
+ return (((const struct tree_map *) item)->hash);
}
-/* Return true if the trees in the tree_int_map *'s VA and VB are equal. */
+/* Return the initialization priority for DECL. */
-int
-tree_int_map_eq (const void *va, const void *vb)
+priority_type
+decl_init_priority_lookup (tree decl)
{
- const struct tree_int_map *a = va, *b = vb;
- return (a->from == b->from);
+ struct tree_priority_map *h;
+ struct tree_map_base in;
+
+ gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
+ gcc_assert (TREE_CODE (decl) == VAR_DECL
+ ? DECL_HAS_INIT_PRIORITY_P (decl)
+ : DECL_STATIC_CONSTRUCTOR (decl));
+ in.from = decl;
+ h = htab_find (init_priority_for_decl, &in);
+ return h ? h->init : DEFAULT_INIT_PRIORITY;
}
-/* Hash a from tree in the tree_int_map * ITEM. */
+/* Return the finalization priority for DECL. */
-unsigned int
-tree_int_map_hash (const void *item)
+priority_type
+decl_fini_priority_lookup (tree decl)
{
- return htab_hash_pointer (((const struct tree_int_map *)item)->from);
+ struct tree_priority_map *h;
+ struct tree_map_base in;
+
+ gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+ gcc_assert (DECL_STATIC_DESTRUCTOR (decl));
+ in.from = decl;
+ h = htab_find (init_priority_for_decl, &in);
+ return h ? h->fini : DEFAULT_INIT_PRIORITY;
}
-/* Return true if this tree int map structure is marked for garbage collection
- purposes. We simply return true if the from tree_int_map *P's from tree is marked, so that this
- structure goes away when the from tree goes away. */
+/* Return the initialization and finalization priority information for
+ DECL. If there is no previous priority information, a freshly
+ allocated structure is returned. */
-int
-tree_int_map_marked_p (const void *p)
+static struct tree_priority_map *
+decl_priority_info (tree decl)
{
- tree from = ((struct tree_int_map *) p)->from;
+ struct tree_priority_map in;
+ struct tree_priority_map *h;
+ void **loc;
+
+ in.base.from = decl;
+ loc = htab_find_slot (init_priority_for_decl, &in, INSERT);
+ h = *loc;
+ if (!h)
+ {
+ h = GGC_CNEW (struct tree_priority_map);
+ *loc = h;
+ h->base.from = decl;
+ h->init = DEFAULT_INIT_PRIORITY;
+ h->fini = DEFAULT_INIT_PRIORITY;
+ }
- return ggc_marked_p (from);
+ return h;
}
-/* Lookup an init priority for FROM, and return it if we find one. */
-unsigned short
-decl_init_priority_lookup (tree from)
+/* Set the initialization priority for DECL to PRIORITY. */
+
+void
+decl_init_priority_insert (tree decl, priority_type priority)
{
- struct tree_int_map *h, in;
- in.from = from;
+ struct tree_priority_map *h;
- h = htab_find_with_hash (init_priority_for_decl,
- &in, htab_hash_pointer (from));
- if (h)
- return h->to;
- return 0;
-}
+ gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
+ h = decl_priority_info (decl);
+ h->init = priority;
+}
-/* Insert a mapping FROM->TO in the init priority hashtable. */
+/* Set the finalization priority for DECL to PRIORITY. */
void
-decl_init_priority_insert (tree from, unsigned short to)
+decl_fini_priority_insert (tree decl, priority_type priority)
{
- struct tree_int_map *h;
- void **loc;
+ struct tree_priority_map *h;
- h = ggc_alloc (sizeof (struct tree_int_map));
- h->from = from;
- h->to = to;
- loc = htab_find_slot_with_hash (init_priority_for_decl, h,
- htab_hash_pointer (from), INSERT);
- *(struct tree_int_map **) loc = h;
+ gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
+ h = decl_priority_info (decl);
+ h->fini = priority;
}
/* Look up a restrict qualified base decl for FROM. */
@@ -4288,7 +4316,7 @@ decl_restrict_base_lookup (tree from)
struct tree_map *h;
struct tree_map in;
- in.from = from;
+ in.base.from = from;
h = htab_find_with_hash (restrict_base_for_decl, &in,
htab_hash_pointer (from));
return h ? h->to : NULL_TREE;
@@ -4304,7 +4332,7 @@ decl_restrict_base_insert (tree from, tree to)
h = ggc_alloc (sizeof (struct tree_map));
h->hash = htab_hash_pointer (from);
- h->from = from;
+ h->base.from = from;
h->to = to;
loc = htab_find_slot_with_hash (restrict_base_for_decl, h, h->hash, INSERT);
*(struct tree_map **) loc = h;
@@ -4352,7 +4380,7 @@ tree
decl_debug_expr_lookup (tree from)
{
struct tree_map *h, in;
- in.from = from;
+ in.base.from = from;
h = htab_find_with_hash (debug_expr_for_decl, &in, htab_hash_pointer (from));
if (h)
@@ -4370,7 +4398,7 @@ decl_debug_expr_insert (tree from, tree to)
h = ggc_alloc (sizeof (struct tree_map));
h->hash = htab_hash_pointer (from);
- h->from = from;
+ h->base.from = from;
h->to = to;
loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
*(struct tree_map **) loc = h;
@@ -4382,7 +4410,7 @@ tree
decl_value_expr_lookup (tree from)
{
struct tree_map *h, in;
- in.from = from;
+ in.base.from = from;
h = htab_find_with_hash (value_expr_for_decl, &in, htab_hash_pointer (from));
if (h)
@@ -4400,7 +4428,7 @@ decl_value_expr_insert (tree from, tree to)
h = ggc_alloc (sizeof (struct tree_map));
h->hash = htab_hash_pointer (from);
- h->from = from;
+ h->base.from = from;
h->to = to;
loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
*(struct tree_map **) loc = h;
@@ -6469,7 +6497,7 @@ get_file_function_name (const char *type)
clean_symbol_name (q);
sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
- crc32_string (0, flag_random_seed));
+ crc32_string (0, get_random_seed (false)));
p = q;
}
@@ -6697,7 +6725,7 @@ tree_contains_struct_check_failed (const tree node,
const char *function)
{
internal_error
- ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
+ ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
TS_ENUM_NAME(en),
tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
}
@@ -7914,10 +7942,12 @@ walk_type_fields (tree type, walk_tree_fn func, void *data,
break;
case ARRAY_TYPE:
- /* Don't follow this nodes's type if a pointer for fear that we'll
- have infinite recursion. Those types are uninteresting anyway. */
- if (!POINTER_TYPE_P (TREE_TYPE (type))
- && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
+ /* Don't follow this nodes's type if a pointer for fear that
+ we'll have infinite recursion. If we have a PSET, then we
+ need not fear. */
+ if (pset
+ || (!POINTER_TYPE_P (TREE_TYPE (type))
+ && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
WALK_SUBTREE (TREE_TYPE (type));
WALK_SUBTREE (TYPE_DOMAIN (type));
break;
diff --git a/gcc/tree.h b/gcc/tree.h
index b656e1bfa48..6cd846d7cc0 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2599,13 +2599,6 @@ struct tree_memory_partition_tag GTY(())
a C99 "extern inline" function. */
#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_2)
-/* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority
- initializations. */
-#define DEFAULT_INIT_PRIORITY 65535
-#define MAX_INIT_PRIORITY 65535
-#define MAX_RESERVED_INIT_PRIORITY 100
-
-
/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
@@ -3065,20 +3058,46 @@ extern void decl_debug_expr_insert (tree, tree);
#define SET_DECL_DEBUG_EXPR(NODE, VAL) \
(decl_debug_expr_insert (VAR_DECL_CHECK (NODE), VAL))
+/* An initializationp priority. */
+typedef unsigned short priority_type;
-extern unsigned short decl_init_priority_lookup (tree);
-extern void decl_init_priority_insert (tree, unsigned short);
-
-/* In a non-local VAR_DECL with static storage duration, this is the
- initialization priority. If this value is zero, the NODE will be
- initialized at the DEFAULT_INIT_PRIORITY. Only used by C++ FE*/
+extern priority_type decl_init_priority_lookup (tree);
+extern priority_type decl_fini_priority_lookup (tree);
+extern void decl_init_priority_insert (tree, priority_type);
+extern void decl_fini_priority_insert (tree, priority_type);
+/* In a non-local VAR_DECL with static storage duration, true if the
+ variable has an initialization priority. If false, the variable
+ will be initialized at the DEFAULT_INIT_PRIORITY. */
#define DECL_HAS_INIT_PRIORITY_P(NODE) \
(VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
+
+/* For a VAR_DECL or FUNCTION_DECL with DECL_HAS_INIT_PRIORITY_P set,
+ the initialization priority of NODE. */
#define DECL_INIT_PRIORITY(NODE) \
- (decl_init_priority_lookup (VAR_DECL_CHECK (NODE)))
+ (decl_init_priority_lookup (NODE))
+/* Set the initialization priority for NODE to VAL. */
#define SET_DECL_INIT_PRIORITY(NODE, VAL) \
- (decl_init_priority_insert (VAR_DECL_CHECK (NODE), VAL))
+ (decl_init_priority_insert (NODE, VAL))
+
+/* For a FUNCTION_DECL with DECL_HAS_INIT_PRIORITY_P set, the
+ finalization priority of NODE. */
+#define DECL_FINI_PRIORITY(NODE) \
+ (decl_fini_priority_lookup (NODE))
+/* Set the finalization priority for NODE to VAL. */
+#define SET_DECL_FINI_PRIORITY(NODE, VAL) \
+ (decl_fini_priority_insert (NODE, VAL))
+
+/* The initialization priority for entities for which no explicit
+ initialization priority has been specified. */
+#define DEFAULT_INIT_PRIORITY 65535
+
+/* The maximum allowed initialization priority. */
+#define MAX_INIT_PRIORITY 65535
+
+/* The largest priority value reserved for use by system runtime
+ libraries. */
+#define MAX_RESERVED_INIT_PRIORITY 100
/* In a VAR_DECL, the model to use if the data should be allocated from
thread-local storage. */
@@ -4378,8 +4397,8 @@ extern tree fold_build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DE
extern tree fold_build1_initializer (enum tree_code, tree, tree);
extern tree fold_build2_initializer (enum tree_code, tree, tree, tree);
extern tree fold_build3_initializer (enum tree_code, tree, tree, tree, tree);
-extern tree fold_build_call_list (tree, tree, tree);
-extern tree fold_build_call_list_initializer (tree, tree, tree);
+extern tree fold_build_call_array (tree, tree, int, tree *);
+extern tree fold_build_call_array_initializer (tree, tree, int, tree *);
extern tree fold_convert (tree, tree);
extern tree fold_single_bit_test (enum tree_code, tree, tree, tree);
extern tree fold_ignored_result (tree);
@@ -4435,7 +4454,7 @@ enum operand_equal_flag
};
extern int operand_equal_p (tree, tree, unsigned int);
-
+extern int multiple_of_p (tree, tree, tree);
extern tree omit_one_operand (tree, tree, tree);
extern tree omit_two_operands (tree, tree, tree, tree);
extern tree invert_truthvalue (tree);
@@ -4462,6 +4481,7 @@ extern enum tree_code invert_tree_comparison (enum tree_code, bool);
extern bool tree_expr_nonzero_p (tree);
extern bool tree_expr_nonzero_warnv_p (tree, bool *);
+extern int multiple_of_p (tree, tree, tree);
/* In builtins.c */
extern tree fold_call_expr (tree, bool);
@@ -4478,8 +4498,7 @@ extern bool fold_builtin_next_arg (tree, bool);
extern enum built_in_function builtin_mathfn_code (tree);
extern tree build_function_call_expr (tree, tree);
extern tree fold_build_call_expr (tree, tree, tree, tree);
-extern tree fold_builtin_call_list (tree, tree, tree);
-extern tree fold_builtin_call_valist (tree, tree, int, va_list);
+extern tree fold_builtin_call_array (tree, tree, int, tree *);
extern tree build_call_expr (tree, int, ...);
extern tree mathfn_built_in (tree, enum built_in_function fn);
extern tree strip_float_extensions (tree);
@@ -4800,26 +4819,53 @@ extern tree get_base_address (tree t);
extern void vect_set_verbosity_level (const char *);
/* In tree.c. */
+
+struct tree_map_base GTY(())
+{
+ tree from;
+};
+
+extern int tree_map_base_eq (const void *, const void *);
+extern unsigned int tree_map_base_hash (const void *);
+extern int tree_map_base_marked_p (const void *);
+
+/* Map from a tree to another tree. */
+
struct tree_map GTY(())
{
+ struct tree_map_base base;
unsigned int hash;
- tree from;
tree to;
};
+#define tree_map_eq tree_map_base_eq
extern unsigned int tree_map_hash (const void *);
-extern int tree_map_marked_p (const void *);
-extern int tree_map_eq (const void *, const void *);
+#define tree_map_marked_p tree_map_base_marked_p
+
+/* Map from a tree to an int. */
struct tree_int_map GTY(())
{
- tree from;
+ struct tree_map_base base;
unsigned int to;
};
-extern unsigned int tree_int_map_hash (const void *);
-extern int tree_int_map_eq (const void *, const void *);
-extern int tree_int_map_marked_p (const void *);
+#define tree_int_map_eq tree_map_base_eq
+#define tree_int_map_hash tree_map_base_hash
+#define tree_int_map_marked_p tree_map_base_marked_p
+
+/* Map from a tree to initialization/finalization priorities. */
+
+struct tree_priority_map GTY(())
+{
+ struct tree_map_base base;
+ priority_type init;
+ priority_type fini;
+};
+
+#define tree_priority_map_eq tree_map_base_eq
+#define tree_priority_map_hash tree_map_base_hash
+#define tree_priority_map_marked_p tree_map_base_marked_p
/* In tree-ssa-address.c. */
extern tree tree_mem_ref_addr (tree, tree);
diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog
index 1b4a9415f97..0f08dd69870 100644
--- a/gcc/treelang/ChangeLog
+++ b/gcc/treelang/ChangeLog
@@ -1,3 +1,13 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Make-lang.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+
+2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * treelang.texi: Standardize title page, remove version number
+ from copyright page.
+
2006-10-23 Rafael Avila de Espindola <rafael.espindola@gmail.com>
* treetree.c (builtin_function): Remove.
diff --git a/gcc/treelang/Make-lang.in b/gcc/treelang/Make-lang.in
index 00d9ac88a31..0a297a06275 100644
--- a/gcc/treelang/Make-lang.in
+++ b/gcc/treelang/Make-lang.in
@@ -24,8 +24,8 @@
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.dvi, foo.pdf
-# foo.html, foo.uninstall,
+# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
+# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -160,7 +160,9 @@ treelang.srcinfo: doc/treelang.info
treelang.dvi: doc/treelang.dvi
-treelang.pdf: doc/treelang.pdf
+TREELANG_PDFFILES = doc/treelang.pdf
+
+treelang.pdf: $(TREELANG_PDFFILES)
TEXI_TREELANG_FILES = treelang/treelang.texi \
$(gcc_docdir)/include/gcc-common.texi \
@@ -210,6 +212,16 @@ treelang.install.common.done: installdirs treelang.done
# We might not be able to build the info files
treelang.install-info: $(DESTDIR)$(infodir)/treelang.info
+treelang.install-pdf: $(TREELANG_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
+ @list='$(TREELANG_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
+ done
+
treelang.install-man:
treelang.uninstall:
diff --git a/gcc/treelang/treelang.texi b/gcc/treelang/treelang.texi
index f19074944aa..27504506f92 100644
--- a/gcc/treelang/treelang.texi
+++ b/gcc/treelang/treelang.texi
@@ -133,8 +133,7 @@ Boston, MA 02110-1301 USA
@titlepage
@ifset INTERNALS
@ifset USING
-@center @titlefont{Using and Maintaining GNU Treelang}
-
+@title Using and Maintaining GNU Treelang
@end ifset
@end ifset
@ifclear INTERNALS
@@ -143,12 +142,10 @@ Boston, MA 02110-1301 USA
@ifclear USING
@title Maintaining GNU Treelang
@end ifclear
-@sp 2
-@center Tim Josling
+@versionsubtitle
+@author Tim Josling
@page
@vskip 0pt plus 1filll
-For the @value{which-treelang} Version*
-@sp 1
Published by the Free Software Foundation @*
51 Franklin Street, Fifth Floor@*
Boston, MA 02110-1301, USA@*
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 56718641866..cf880e83b16 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -343,7 +343,7 @@ emutls_decl (tree decl)
of the decl's pointer. In emutls_finish we iterate through the
hash table, and we want this traversal to be predictable. */
in.hash = htab_hash_string (IDENTIFIER_POINTER (name));
- in.from = decl;
+ in.base.from = decl;
loc = htab_find_slot_with_hash (emutls_htab, &in, in.hash, INSERT);
h = *loc;
if (h != NULL)
@@ -355,7 +355,7 @@ emutls_decl (tree decl)
h = ggc_alloc (sizeof (struct tree_map));
h->hash = in.hash;
- h->from = decl;
+ h->base.from = decl;
h->to = to;
*(struct tree_map **) loc = h;
@@ -394,9 +394,9 @@ emutls_common_1 (void **loc, void *xstmts)
tree args, x, *pstmts = (tree *) xstmts;
tree word_type_node;
- if (! DECL_COMMON (h->from)
- || (DECL_INITIAL (h->from)
- && DECL_INITIAL (h->from) != error_mark_node))
+ if (! DECL_COMMON (h->base.from)
+ || (DECL_INITIAL (h->base.from)
+ && DECL_INITIAL (h->base.from) != error_mark_node))
return 1;
word_type_node = lang_hooks.types.type_for_mode (word_mode, 1);
@@ -407,9 +407,9 @@ emutls_common_1 (void **loc, void *xstmts)
output. */
x = null_pointer_node;
args = tree_cons (NULL, x, NULL);
- x = build_int_cst (word_type_node, DECL_ALIGN_UNIT (h->from));
+ x = build_int_cst (word_type_node, DECL_ALIGN_UNIT (h->base.from));
args = tree_cons (NULL, x, args);
- x = fold_convert (word_type_node, DECL_SIZE_UNIT (h->from));
+ x = fold_convert (word_type_node, DECL_SIZE_UNIT (h->base.from));
args = tree_cons (NULL, x, args);
x = build_fold_addr_expr (h->to);
args = tree_cons (NULL, x, args);
@@ -1403,17 +1403,6 @@ make_decl_rtl (tree decl)
if (flag_mudflap && TREE_CODE (decl) == VAR_DECL)
mudflap_enqueue_decl (decl);
}
-
-/* Make the rtl for variable VAR be volatile.
- Use this only for static variables. */
-
-void
-make_var_volatile (tree var)
-{
- gcc_assert (MEM_P (DECL_RTL (var)));
-
- MEM_VOLATILE_P (DECL_RTL (var)) = 1;
-}
/* Output a string of literal assembler code
for an `asm' keyword used between functions. */
@@ -1448,26 +1437,44 @@ default_stabs_asm_out_destructor (rtx symbol ATTRIBUTE_UNUSED,
#endif
}
-void
-default_named_section_asm_out_destructor (rtx symbol, int priority)
+/* Write the address of the entity given by SYMBOL to SEC. */
+void
+assemble_addr_to_section (rtx symbol, section *sec)
+{
+ switch_to_section (sec);
+ assemble_align (POINTER_SIZE);
+ assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
+}
+
+/* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
+ not) section for PRIORITY. */
+section *
+get_cdtor_priority_section (int priority, bool constructor_p)
{
- const char *section = ".dtors";
char buf[16];
/* ??? This only works reliably with the GNU linker. */
+ sprintf (buf, "%s.%.5u",
+ constructor_p ? ".ctors" : ".dtors",
+ /* Invert the numbering so the linker puts us in the proper
+ order; constructors are run from right to left, and the
+ linker sorts in increasing order. */
+ MAX_INIT_PRIORITY - priority);
+ return get_section (buf, SECTION_WRITE, NULL);
+}
+
+void
+default_named_section_asm_out_destructor (rtx symbol, int priority)
+{
+ section *sec;
+
if (priority != DEFAULT_INIT_PRIORITY)
- {
- sprintf (buf, ".dtors.%.5u",
- /* Invert the numbering so the linker puts us in the proper
- order; constructors are run from right to left, and the
- linker sorts in increasing order. */
- MAX_INIT_PRIORITY - priority);
- section = buf;
- }
+ sec = get_cdtor_priority_section (priority,
+ /*constructor_p=*/false);
+ else
+ sec = get_section (".dtors", SECTION_WRITE, NULL);
- switch_to_section (get_section (section, SECTION_WRITE, NULL));
- assemble_align (POINTER_SIZE);
- assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
+ assemble_addr_to_section (symbol, sec);
}
#ifdef DTORS_SECTION_ASM_OP
@@ -1475,9 +1482,7 @@ void
default_dtor_section_asm_out_destructor (rtx symbol,
int priority ATTRIBUTE_UNUSED)
{
- switch_to_section (dtors_section);
- assemble_align (POINTER_SIZE);
- assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
+ assemble_addr_to_section (symbol, dtors_section);
}
#endif
@@ -1501,23 +1506,15 @@ default_stabs_asm_out_constructor (rtx symbol ATTRIBUTE_UNUSED,
void
default_named_section_asm_out_constructor (rtx symbol, int priority)
{
- const char *section = ".ctors";
- char buf[16];
+ section *sec;
- /* ??? This only works reliably with the GNU linker. */
if (priority != DEFAULT_INIT_PRIORITY)
- {
- sprintf (buf, ".ctors.%.5u",
- /* Invert the numbering so the linker puts us in the proper
- order; constructors are run from right to left, and the
- linker sorts in increasing order. */
- MAX_INIT_PRIORITY - priority);
- section = buf;
- }
+ sec = get_cdtor_priority_section (priority,
+ /*constructor_p=*/true);
+ else
+ sec = get_section (".ctors", SECTION_WRITE, NULL);
- switch_to_section (get_section (section, SECTION_WRITE, NULL));
- assemble_align (POINTER_SIZE);
- assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
+ assemble_addr_to_section (symbol, sec);
}
#ifdef CTORS_SECTION_ASM_OP
@@ -1525,9 +1522,7 @@ void
default_ctor_section_asm_out_constructor (rtx symbol,
int priority ATTRIBUTE_UNUSED)
{
- switch_to_section (ctors_section);
- assemble_align (POINTER_SIZE);
- assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
+ assemble_addr_to_section (symbol, ctors_section);
}
#endif
@@ -5542,18 +5537,11 @@ decl_default_tls_model (tree decl)
unsigned int
default_section_type_flags (tree decl, const char *name, int reloc)
{
- return default_section_type_flags_1 (decl, name, reloc, flag_pic);
-}
-
-unsigned int
-default_section_type_flags_1 (tree decl, const char *name, int reloc,
- int shlib)
-{
unsigned int flags;
if (decl && TREE_CODE (decl) == FUNCTION_DECL)
flags = SECTION_CODE;
- else if (decl && decl_readonly_section_1 (decl, reloc, shlib))
+ else if (decl && decl_readonly_section (decl, reloc))
flags = 0;
else if (current_function_decl
&& cfun
@@ -5753,7 +5741,7 @@ default_select_section (tree decl, int reloc,
}
enum section_category
-categorize_decl_for_section (tree decl, int reloc, int shlib)
+categorize_decl_for_section (tree decl, int reloc)
{
enum section_category ret;
@@ -5774,17 +5762,17 @@ categorize_decl_for_section (tree decl, int reloc, int shlib)
|| TREE_SIDE_EFFECTS (decl)
|| ! TREE_CONSTANT (DECL_INITIAL (decl)))
{
- if (shlib && (reloc & 2))
- ret = SECCAT_DATA_REL;
- else if (shlib && reloc)
- ret = SECCAT_DATA_REL_LOCAL;
+ /* Here the reloc_rw_mask is not testing whether the section should
+ be read-only or not, but whether the dynamic link will have to
+ do something. If so, we wish to segregate the data in order to
+ minimize cache misses inside the dynamic linker. */
+ if (reloc & targetm.asm_out.reloc_rw_mask ())
+ ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL;
else
ret = SECCAT_DATA;
}
- else if (shlib && (reloc & 2))
- ret = SECCAT_DATA_REL_RO;
- else if (shlib && reloc)
- ret = SECCAT_DATA_REL_RO_LOCAL;
+ else if (reloc & targetm.asm_out.reloc_rw_mask ())
+ ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO;
else if (reloc || flag_merge_constants < 2)
/* C and C++ don't allow different variables to share the same
location. -fmerge-all-constants allows even that (at the
@@ -5797,7 +5785,7 @@ categorize_decl_for_section (tree decl, int reloc, int shlib)
}
else if (TREE_CODE (decl) == CONSTRUCTOR)
{
- if ((shlib && reloc)
+ if ((reloc & targetm.asm_out.reloc_rw_mask ())
|| TREE_SIDE_EFFECTS (decl)
|| ! TREE_CONSTANT (decl))
ret = SECCAT_DATA;
@@ -5837,13 +5825,7 @@ categorize_decl_for_section (tree decl, int reloc, int shlib)
bool
decl_readonly_section (tree decl, int reloc)
{
- return decl_readonly_section_1 (decl, reloc, flag_pic);
-}
-
-bool
-decl_readonly_section_1 (tree decl, int reloc, int shlib)
-{
- switch (categorize_decl_for_section (decl, reloc, shlib))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_RODATA:
case SECCAT_RODATA_MERGE_STR:
@@ -5864,15 +5846,8 @@ section *
default_elf_select_section (tree decl, int reloc,
unsigned HOST_WIDE_INT align)
{
- return default_elf_select_section_1 (decl, reloc, align, flag_pic);
-}
-
-section *
-default_elf_select_section_1 (tree decl, int reloc,
- unsigned HOST_WIDE_INT align, int shlib)
-{
const char *sname;
- switch (categorize_decl_for_section (decl, reloc, shlib))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_TEXT:
/* We're not supposed to be called on FUNCTION_DECLs. */
@@ -5934,19 +5909,13 @@ default_elf_select_section_1 (tree decl, int reloc,
void
default_unique_section (tree decl, int reloc)
{
- default_unique_section_1 (decl, reloc, flag_pic);
-}
-
-void
-default_unique_section_1 (tree decl, int reloc, int shlib)
-{
/* We only need to use .gnu.linkonce if we don't have COMDAT groups. */
bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
const char *prefix, *name;
size_t nlen, plen;
char *string;
- switch (categorize_decl_for_section (decl, reloc, shlib))
+ switch (categorize_decl_for_section (decl, reloc))
{
case SECCAT_TEXT:
prefix = one_only ? ".gnu.linkonce.t." : ".text.";
@@ -6007,45 +5976,76 @@ default_unique_section_1 (tree decl, int reloc, int shlib)
DECL_SECTION_NAME (decl) = build_string (nlen + plen, string);
}
+/* Like compute_reloc_for_constant, except for an RTX. The return value
+ is a mask for which bit 1 indicates a global relocation, and bit 0
+ indicates a local relocation. */
+
+static int
+compute_reloc_for_rtx_1 (rtx *xp, void *data)
+{
+ int *preloc = data;
+ rtx x = *xp;
+
+ switch (GET_CODE (x))
+ {
+ case SYMBOL_REF:
+ *preloc |= SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
+ break;
+ case LABEL_REF:
+ *preloc |= 1;
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static int
+compute_reloc_for_rtx (rtx x)
+{
+ int reloc;
+
+ switch (GET_CODE (x))
+ {
+ case CONST:
+ case SYMBOL_REF:
+ case LABEL_REF:
+ reloc = 0;
+ for_each_rtx (&x, compute_reloc_for_rtx_1, &reloc);
+ return reloc;
+
+ default:
+ return 0;
+ }
+}
+
section *
default_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
rtx x,
unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
{
- if (flag_pic)
- switch (GET_CODE (x))
- {
- case CONST:
- case SYMBOL_REF:
- case LABEL_REF:
- return data_section;
-
- default:
- break;
- }
-
- return readonly_data_section;
+ if (compute_reloc_for_rtx (x) & targetm.asm_out.reloc_rw_mask ())
+ return data_section;
+ else
+ return readonly_data_section;
}
section *
default_elf_select_rtx_section (enum machine_mode mode, rtx x,
unsigned HOST_WIDE_INT align)
{
- /* ??? Handle small data here somehow. */
+ int reloc = compute_reloc_for_rtx (x);
- if (flag_pic)
- switch (GET_CODE (x))
- {
- case CONST:
- case SYMBOL_REF:
- return get_named_section (NULL, ".data.rel.ro", 3);
+ /* ??? Handle small data here somehow. */
- case LABEL_REF:
+ if (reloc & targetm.asm_out.reloc_rw_mask ())
+ {
+ if (reloc == 1)
return get_named_section (NULL, ".data.rel.ro.local", 1);
-
- default:
- break;
- }
+ else
+ return get_named_section (NULL, ".data.rel.ro", 3);
+ }
return mergeable_constant_section (mode, align, 0);
}
diff --git a/gcc/varpool.c b/gcc/varpool.c
index 65c22d491b4..7791ada4bc3 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -430,6 +430,9 @@ varpool_assemble_pending_decls (void)
else
node->next_needed = NULL;
}
+ /* varpool_nodes_queue is now empty, clear the pointer to the last element
+ in the queue. */
+ varpool_last_needed_node = NULL;
return changed;
}
diff --git a/gnattools/ChangeLog b/gnattools/ChangeLog
index 08429b372d8..948b733cf11 100644
--- a/gnattools/ChangeLog
+++ b/gnattools/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
2007-02-11 Andreas Schwab <schwab@suse.de>
* configure.ac: Update TOOLS_TARGET_PAIRS configuration to match
diff --git a/gnattools/Makefile.in b/gnattools/Makefile.in
index fe408ea4d02..830fffb93b3 100644
--- a/gnattools/Makefile.in
+++ b/gnattools/Makefile.in
@@ -315,6 +315,8 @@ install:
install-info:
+install-pdf:
+
install-html:
# Cleaning rules.
diff --git a/include/ChangeLog b/include/ChangeLog
index dc04f662427..e0556667d10 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-06 Jan Hubicka <jh@suse.cz>
+
+ * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New.
+
2007-02-09 Joseph S. Myers <joseph@codesourcery.com>
* libiberty.h (pex_write_input): Remove prototype.
diff --git a/include/ansidecl.h b/include/ansidecl.h
index 16adc47a1bf..c19955a98a6 100644
--- a/include/ansidecl.h
+++ b/include/ansidecl.h
@@ -367,6 +367,22 @@ So instead we use the macro below and test it against specific values. */
# define ATTRIBUTE_PACKED __attribute__ ((packed))
#endif
+/* Attribute `hot' and `cold' was valid as of gcc 4.3. */
+#ifndef ATTRIBUTE_COLD
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+# define ATTRIBUTE_COLD
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_COLD */
+#ifndef ATTRIBUTE_HOT
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_HOT __attribute__ ((__hot__))
+# else
+# define ATTRIBUTE_HOT
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_HOT */
+
/* We use __extension__ in some places to suppress -pedantic warnings
about GCC extensions. This feature didn't work properly before
gcc 2.8. */
diff --git a/libada/ChangeLog b/libada/ChangeLog
index b62e3c31643..6572311bbdd 100644
--- a/libada/ChangeLog
+++ b/libada/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
2007-01-23 Richard Guenther <rguenther@suse.de>
PR bootstrap/30541
diff --git a/libada/Makefile.in b/libada/Makefile.in
index 1e5f8b5e2fd..8375078e748 100644
--- a/libada/Makefile.in
+++ b/libada/Makefile.in
@@ -129,6 +129,8 @@ install:
install-info:
+install-pdf:
+
install-html:
# Cleaning rules.
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index ea5f1ff9806..1da9b3f474e 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
2007-01-30 Tom Tromey <tromey@redhat.com>
PR preprocessor/30468:
diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in
index f565fa2f2a9..166f1faaee0 100644
--- a/libcpp/Makefile.in
+++ b/libcpp/Makefile.in
@@ -184,6 +184,7 @@ pdf:
html:
info:
install-info:
+install-pdf:
install-man:
install-html:
diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog
index b84b46eac9e..7edfe1b06f9 100644
--- a/libcpp/po/ChangeLog
+++ b/libcpp/po/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * cpplib.pot: Regenerate.
+
2006-10-22 Joseph S. Myers <joseph@codesourcery.com>
* cpplib.pot: Regenerate.
diff --git a/libcpp/po/cpplib.pot b/libcpp/po/cpplib.pot
index 7ab0efbc0c6..00a14c7c62b 100644
--- a/libcpp/po/cpplib.pot
+++ b/libcpp/po/cpplib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
-"POT-Creation-Date: 2006-10-22 12:14+0000\n"
+"POT-Creation-Date: 2007-03-07 17:59+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -74,7 +74,7 @@ msgid "%.*s is not a valid universal character"
msgstr ""
#: charset.c:1008
-#: lex.c:472
+#: lex.c:484
msgid "'$' in identifier or number"
msgstr ""
@@ -154,230 +154,230 @@ msgstr ""
msgid "failure to convert %s to %s"
msgstr ""
-#: directives.c:214
-#: directives.c:240
+#: directives.c:215
+#: directives.c:241
#, c-format
msgid "extra tokens at end of #%s directive"
msgstr ""
-#: directives.c:343
+#: directives.c:344
#, c-format
msgid "#%s is a GCC extension"
msgstr ""
-#: directives.c:355
+#: directives.c:356
msgid "suggest not using #elif in traditional C"
msgstr ""
-#: directives.c:358
+#: directives.c:359
#, c-format
msgid "traditional C ignores #%s with the # indented"
msgstr ""
-#: directives.c:362
+#: directives.c:363
#, c-format
msgid "suggest hiding #%s from traditional C with an indented #"
msgstr ""
-#: directives.c:388
+#: directives.c:389
msgid "embedding a directive within macro arguments is not portable"
msgstr ""
-#: directives.c:408
+#: directives.c:409
msgid "style of line directive is a GCC extension"
msgstr ""
-#: directives.c:458
+#: directives.c:459
#, c-format
msgid "invalid preprocessing directive #%s"
msgstr ""
-#: directives.c:524
+#: directives.c:527
msgid "\"defined\" cannot be used as a macro name"
msgstr ""
-#: directives.c:530
+#: directives.c:533
#, c-format
msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
msgstr ""
-#: directives.c:533
+#: directives.c:536
#, c-format
msgid "no macro name given in #%s directive"
msgstr ""
-#: directives.c:536
+#: directives.c:539
msgid "macro names must be identifiers"
msgstr ""
-#: directives.c:577
+#: directives.c:580
#, c-format
msgid "undefining \"%s\""
msgstr ""
-#: directives.c:632
+#: directives.c:635
msgid "missing terminating > character"
msgstr ""
-#: directives.c:687
+#: directives.c:690
#, c-format
msgid "#%s expects \"FILENAME\" or <FILENAME>"
msgstr ""
-#: directives.c:727
+#: directives.c:730
#, c-format
msgid "empty filename in #%s"
msgstr ""
-#: directives.c:737
+#: directives.c:740
msgid "#include nested too deeply"
msgstr ""
-#: directives.c:778
+#: directives.c:781
msgid "#include_next in primary source file"
msgstr ""
-#: directives.c:804
+#: directives.c:807
#, c-format
msgid "invalid flag \"%s\" in line directive"
msgstr ""
-#: directives.c:856
+#: directives.c:859
#, c-format
msgid "\"%s\" after #line is not a positive integer"
msgstr ""
-#: directives.c:862
+#: directives.c:865
msgid "line number out of range"
msgstr ""
-#: directives.c:875
-#: directives.c:952
+#: directives.c:878
+#: directives.c:955
#, c-format
msgid "\"%s\" is not a valid filename"
msgstr ""
-#: directives.c:912
+#: directives.c:915
#, c-format
msgid "\"%s\" after # is not a positive integer"
msgstr ""
-#: directives.c:1014
+#: directives.c:1017
#, c-format
msgid "invalid #%s directive"
msgstr ""
-#: directives.c:1077
+#: directives.c:1080
#, c-format
msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
msgstr ""
-#: directives.c:1086
+#: directives.c:1089
#, c-format
msgid "registering pragma \"%s\" with name expansion and no namespace"
msgstr ""
-#: directives.c:1104
+#: directives.c:1107
#, c-format
msgid "registering \"%s\" as both a pragma and a pragma namespace"
msgstr ""
-#: directives.c:1107
+#: directives.c:1110
#, c-format
msgid "#pragma %s %s is already registered"
msgstr ""
-#: directives.c:1110
+#: directives.c:1113
#, c-format
msgid "#pragma %s is already registered"
msgstr ""
-#: directives.c:1140
+#: directives.c:1143
msgid "registering pragma with NULL handler"
msgstr ""
-#: directives.c:1350
+#: directives.c:1353
msgid "#pragma once in main file"
msgstr ""
-#: directives.c:1373
+#: directives.c:1376
msgid "invalid #pragma GCC poison directive"
msgstr ""
-#: directives.c:1382
+#: directives.c:1385
#, c-format
msgid "poisoning existing macro \"%s\""
msgstr ""
-#: directives.c:1403
+#: directives.c:1404
msgid "#pragma system_header ignored outside include file"
msgstr ""
-#: directives.c:1427
+#: directives.c:1428
#, c-format
msgid "cannot find source file %s"
msgstr ""
-#: directives.c:1431
+#: directives.c:1432
#, c-format
msgid "current file is older than %s"
msgstr ""
-#: directives.c:1599
+#: directives.c:1600
msgid "_Pragma takes a parenthesized string literal"
msgstr ""
-#: directives.c:1671
+#: directives.c:1672
msgid "#else without #if"
msgstr ""
-#: directives.c:1676
+#: directives.c:1677
msgid "#else after #else"
msgstr ""
-#: directives.c:1678
-#: directives.c:1711
+#: directives.c:1679
+#: directives.c:1712
msgid "the conditional began here"
msgstr ""
-#: directives.c:1704
+#: directives.c:1705
msgid "#elif without #if"
msgstr ""
-#: directives.c:1709
+#: directives.c:1710
msgid "#elif after #else"
msgstr ""
-#: directives.c:1739
+#: directives.c:1740
msgid "#endif without #if"
msgstr ""
-#: directives.c:1816
+#: directives.c:1817
msgid "missing '(' after predicate"
msgstr ""
-#: directives.c:1831
+#: directives.c:1832
msgid "missing ')' to complete answer"
msgstr ""
-#: directives.c:1851
+#: directives.c:1852
msgid "predicate's answer is empty"
msgstr ""
-#: directives.c:1878
+#: directives.c:1879
msgid "assertion without predicate"
msgstr ""
-#: directives.c:1880
+#: directives.c:1881
msgid "predicate must be an identifier"
msgstr ""
-#: directives.c:1966
+#: directives.c:1967
#, c-format
msgid "\"%s\" re-asserted"
msgstr ""
-#: directives.c:2190
+#: directives.c:2191
#, c-format
msgid "unterminated #%s"
msgstr ""
@@ -605,125 +605,125 @@ msgstr ""
msgid "Multiple include guards may be useful for:\n"
msgstr ""
-#: init.c:407
+#: init.c:409
msgid "cppchar_t must be an unsigned type"
msgstr ""
-#: init.c:411
+#: init.c:413
#, c-format
msgid ""
"preprocessor arithmetic has maximum precision of %lu bits; target requires %"
"lu bits"
msgstr ""
-#: init.c:418
+#: init.c:420
msgid "CPP arithmetic must be at least as precise as a target int"
msgstr ""
-#: init.c:421
+#: init.c:423
msgid "target char is less than 8 bits wide"
msgstr ""
-#: init.c:425
+#: init.c:427
msgid "target wchar_t is narrower than target char"
msgstr ""
-#: init.c:429
+#: init.c:431
msgid "target int is narrower than target char"
msgstr ""
-#: init.c:434
+#: init.c:436
msgid "CPP half-integer narrower than CPP character"
msgstr ""
-#: init.c:438
+#: init.c:440
#, c-format
msgid ""
"CPP on this host cannot handle wide character constants over %lu bits, but "
"the target requires %lu bits"
msgstr ""
-#: lex.c:271
+#: lex.c:283
msgid "backslash and newline separated by space"
msgstr ""
-#: lex.c:276
+#: lex.c:288
msgid "backslash-newline at end of file"
msgstr ""
-#: lex.c:291
+#: lex.c:303
#, c-format
msgid "trigraph ??%c converted to %c"
msgstr ""
-#: lex.c:298
+#: lex.c:310
#, c-format
msgid "trigraph ??%c ignored, use -trigraphs to enable"
msgstr ""
-#: lex.c:344
+#: lex.c:356
msgid "\"/*\" within comment"
msgstr ""
-#: lex.c:402
+#: lex.c:414
#, c-format
msgid "%s in preprocessing directive"
msgstr ""
-#: lex.c:411
+#: lex.c:423
msgid "null character(s) ignored"
msgstr ""
-#: lex.c:448
+#: lex.c:460
#, c-format
msgid "`%.*s' is not in NFKC"
msgstr ""
-#: lex.c:451
+#: lex.c:463
#, c-format
msgid "`%.*s' is not in NFC"
msgstr ""
-#: lex.c:539
+#: lex.c:551
#, c-format
msgid "attempt to use poisoned \"%s\""
msgstr ""
-#: lex.c:547
+#: lex.c:559
msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
msgstr ""
-#: lex.c:647
+#: lex.c:659
msgid "null character(s) preserved in literal"
msgstr ""
-#: lex.c:650
+#: lex.c:662
#, c-format
msgid "missing terminating %c character"
msgstr ""
-#: lex.c:842
+#: lex.c:859
msgid "no newline at end of file"
msgstr ""
-#: lex.c:1002
+#: lex.c:1019
#: traditional.c:162
msgid "unterminated comment"
msgstr ""
-#: lex.c:1013
+#: lex.c:1030
msgid "C++ style comments are not allowed in ISO C90"
msgstr ""
-#: lex.c:1015
+#: lex.c:1032
msgid "(this will be reported only once per input file)"
msgstr ""
-#: lex.c:1020
+#: lex.c:1037
msgid "multi-line comment"
msgstr ""
-#: lex.c:1333
+#: lex.c:1350
#, c-format
msgid "unspellable token %s"
msgstr ""
@@ -740,119 +740,119 @@ msgid ""
" from %s:%u"
msgstr ""
-#: macro.c:83
+#: macro.c:84
#, c-format
msgid "macro \"%s\" is not used"
msgstr ""
-#: macro.c:122 macro.c:312
+#: macro.c:123 macro.c:313
#, c-format
msgid "invalid built-in macro \"%s\""
msgstr ""
-#: macro.c:156
+#: macro.c:157
msgid "could not determine file timestamp"
msgstr ""
-#: macro.c:253
+#: macro.c:254
msgid "could not determine date and time"
msgstr ""
-#: macro.c:416
+#: macro.c:417
msgid "invalid string literal, ignoring final '\\'"
msgstr ""
-#: macro.c:466
+#: macro.c:467
#, c-format
msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
msgstr ""
-#: macro.c:538
+#: macro.c:539
msgid "ISO C99 requires rest arguments to be used"
msgstr ""
-#: macro.c:543
+#: macro.c:544
#, c-format
msgid "macro \"%s\" requires %u arguments, but only %u given"
msgstr ""
-#: macro.c:548
+#: macro.c:549
#, c-format
msgid "macro \"%s\" passed %u arguments, but takes just %u"
msgstr ""
-#: macro.c:659
+#: macro.c:660
#: traditional.c:675
#, c-format
msgid "unterminated argument list invoking macro \"%s\""
msgstr ""
-#: macro.c:762
+#: macro.c:763
#, c-format
msgid "function-like macro \"%s\" must be used with arguments in traditional C"
msgstr ""
-#: macro.c:1278
+#: macro.c:1279
#, c-format
msgid "duplicate macro parameter \"%s\""
msgstr ""
-#: macro.c:1324
+#: macro.c:1325
#, c-format
msgid "\"%s\" may not appear in macro parameter list"
msgstr ""
-#: macro.c:1332
+#: macro.c:1333
msgid "macro parameters must be comma-separated"
msgstr ""
-#: macro.c:1349
+#: macro.c:1350
msgid "parameter name missing"
msgstr ""
-#: macro.c:1366
+#: macro.c:1367
msgid "anonymous variadic macros were introduced in C99"
msgstr ""
-#: macro.c:1371
+#: macro.c:1372
msgid "ISO C does not permit named variadic macros"
msgstr ""
-#: macro.c:1380
+#: macro.c:1381
msgid "missing ')' in macro parameter list"
msgstr ""
-#: macro.c:1458
+#: macro.c:1461
msgid "ISO C99 requires whitespace after the macro name"
msgstr ""
-#: macro.c:1482
+#: macro.c:1485
msgid "missing whitespace after the macro name"
msgstr ""
-#: macro.c:1512
+#: macro.c:1515
msgid "'#' is not followed by a macro parameter"
msgstr ""
-#: macro.c:1531
+#: macro.c:1534
msgid "'##' cannot appear at either end of a macro expansion"
msgstr ""
-#: macro.c:1629
+#: macro.c:1626
#, c-format
msgid "\"%s\" redefined"
msgstr ""
-#: macro.c:1634
+#: macro.c:1631
msgid "this is the location of the previous definition"
msgstr ""
-#: macro.c:1684
+#: macro.c:1681
#, c-format
msgid "macro argument \"%s\" would be stringified in traditional C"
msgstr ""
-#: macro.c:1707
+#: macro.c:1704
#, c-format
msgid "invalid hash type %d in cpp_macro_definition"
msgstr ""
diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog
index 3579b7c610b..5f84c4053e2 100644
--- a/libdecnumber/ChangeLog
+++ b/libdecnumber/ChangeLog
@@ -1,3 +1,15 @@
+2007-03-08 Ben Elliston <bje@au.ibm.com>
+
+ * decContext.c, decContext.h, decDPD.h, decimal128.c,
+ decimal128.h, decimal32.c, decimal32.h, decimal64.c, decimal64.h,
+ decLibrary.c, decNumber.c, decNumber.h, decNumberLocal.h,
+ decRound.c, decRound.h, decUtility.c, decUtility.h: Add
+ libgcc-style license exception clause.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
2007-01-29 Janis Johnson <janis187@us.ibm.com>
* decExcept.c: New.
diff --git a/libdecnumber/Makefile.in b/libdecnumber/Makefile.in
index 8e0849cdb28..899a1b5e167 100644
--- a/libdecnumber/Makefile.in
+++ b/libdecnumber/Makefile.in
@@ -136,13 +136,14 @@ pdf:
html:
info:
install-info:
+install-pdf:
install-man:
install-html:
install:
.PHONY: installdirs install install-strip mostlyclean clean distclean \
maintainer-clean check installcheck dvi pdf html info install-info \
- install-man update-po install-html
+ install-pdf install-man update-po install-html
COMPILE = source='$<' object='$@' libtool=no $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(ALL_CFLAGS) -c
diff --git a/libdecnumber/decContext.c b/libdecnumber/decContext.c
index 428c77e191b..66da2ae7956 100644
--- a/libdecnumber/decContext.c
+++ b/libdecnumber/decContext.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decContext.h b/libdecnumber/decContext.h
index 41c4b52a400..5252b33d529 100644
--- a/libdecnumber/decContext.h
+++ b/libdecnumber/decContext.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decDPD.h b/libdecnumber/decDPD.h
index 40ff37a6ec0..159683bb960 100644
--- a/libdecnumber/decDPD.h
+++ b/libdecnumber/decDPD.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decLibrary.c b/libdecnumber/decLibrary.c
index f757ffa67d0..5a172502ef0 100644
--- a/libdecnumber/decLibrary.c
+++ b/libdecnumber/decLibrary.c
@@ -8,6 +8,15 @@
the Free Software Foundation; either version 2, or (at your option)
any later version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decNumber.c b/libdecnumber/decNumber.c
index 039d19a4592..dbc42148985 100644
--- a/libdecnumber/decNumber.c
+++ b/libdecnumber/decNumber.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decNumber.h b/libdecnumber/decNumber.h
index 2357fbeab37..05a2d869e3e 100644
--- a/libdecnumber/decNumber.h
+++ b/libdecnumber/decNumber.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decNumberLocal.h b/libdecnumber/decNumberLocal.h
index 22d8d952bf7..0386736c6f0 100644
--- a/libdecnumber/decNumberLocal.h
+++ b/libdecnumber/decNumberLocal.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decRound.c b/libdecnumber/decRound.c
index 45c642f1c76..6e51eb6b5ba 100644
--- a/libdecnumber/decRound.c
+++ b/libdecnumber/decRound.c
@@ -9,6 +9,15 @@
the Free Software Foundation; either version 2, or (at your option)
any later version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decRound.h b/libdecnumber/decRound.h
index 2a708f8cb17..5d2781ec5d3 100644
--- a/libdecnumber/decRound.h
+++ b/libdecnumber/decRound.h
@@ -9,6 +9,15 @@
the Free Software Foundation; either version 2, or (at your option)
any later version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decUtility.c b/libdecnumber/decUtility.c
index 83f388665ad..2cbed947ba7 100644
--- a/libdecnumber/decUtility.c
+++ b/libdecnumber/decUtility.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decUtility.h b/libdecnumber/decUtility.h
index dec7e269717..4cf65e542ba 100644
--- a/libdecnumber/decUtility.h
+++ b/libdecnumber/decUtility.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal128.c b/libdecnumber/decimal128.c
index 90f400912e4..92b4f618eff 100644
--- a/libdecnumber/decimal128.c
+++ b/libdecnumber/decimal128.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal128.h b/libdecnumber/decimal128.h
index cabe600e113..bcc75a12bd6 100644
--- a/libdecnumber/decimal128.h
+++ b/libdecnumber/decimal128.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal32.c b/libdecnumber/decimal32.c
index 8e4f1ce8ad2..86912864c9f 100644
--- a/libdecnumber/decimal32.c
+++ b/libdecnumber/decimal32.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal32.h b/libdecnumber/decimal32.h
index f824b58af10..bb228243299 100644
--- a/libdecnumber/decimal32.h
+++ b/libdecnumber/decimal32.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal64.c b/libdecnumber/decimal64.c
index 8ae6f102920..c1c1c7c9b09 100644
--- a/libdecnumber/decimal64.c
+++ b/libdecnumber/decimal64.c
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libdecnumber/decimal64.h b/libdecnumber/decimal64.h
index cb7810bbf0e..2c7131c53de 100644
--- a/libdecnumber/decimal64.h
+++ b/libdecnumber/decimal64.h
@@ -9,6 +9,15 @@
Software Foundation; either version 2, or (at your option) any later
version.
+ In addition to the permissions in the GNU General Public License,
+ the Free Software Foundation gives you unlimited permission to link
+ the compiled version of this file into combinations with other
+ programs, and to distribute those combinations without any
+ restriction coming from the use of this file. (The General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into a combine executable.)
+
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
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 5a67ccdda30..ecd75cf978a 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,69 @@
+2007-03-08 Alexandre Oliva <aoliva@redhat.com>
+
+ * src/powerpc/ffi.c (flush_icache): Fix left-over from previous
+ patch.
+ (ffi_prep_closure_loc): Remove unneeded casts. Add needed ones.
+
+2007-03-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New.
+ (ffi_prep_closure_loc): New.
+ (ffi_prep_raw_closure_loc): New.
+ (ffi_prep_java_raw_closure_loc): New.
+ * src/closures.c: New file.
+ * src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment):
+ Replace sflags with exec_offset.
+ [FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset,
+ sub_segment_exec_offset): New macros.
+ (get_segment_flags, set_segment_flags, check_segment_merge): New
+ macros.
+ (is_mmapped_segment, is_extern_segment): Use get_segment_flags.
+ (add_segment, sys_alloc, create_mspace, create_mspace_with_base,
+ destroy_mspace): Use new macros.
+ (sys_alloc): Silence warning.
+ * Makefile.am (libffi_la_SOURCES): Add src/closures.c.
+ * Makefile.in: Rebuilt.
+ * src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in
+ terms of ffi_prep_closure_loc.
+ * src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted
+ from...
+ (ffi_prep_raw_closure): ... this. Re-implement in terms of the
+ renamed version.
+ * src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and
+ adjusted from...
+ (ffi_prep_java_raw_closure): ... this. Re-implement in terms of
+ the renamed version.
+ * src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from
+ (ffi_prep_closure): ... this.
+ * src/pa/ffi.c: Likewise.
+ * src/cris/ffi.c: Likewise. Adjust.
+ * src/frv/ffi.c: Likewise.
+ * src/ia64/ffi.c: Likewise.
+ * src/mips/ffi.c: Likewise.
+ * src/powerpc/ffi_darwin.c: Likewise.
+ * src/s390/ffi.c: Likewise.
+ * src/sh/ffi.c: Likewise.
+ * src/sh64/ffi.c: Likewise.
+ * src/sparc/ffi.c: Likewise.
+ * src/x86/ffi64.c: Likewise.
+ * src/x86/ffi.c: Likewise.
+ (FFI_INIT_TRAMPOLINE): Adjust.
+ (ffi_prep_raw_closure_loc): Renamed and adjusted from...
+ (ffi_prep_raw_closure): ... this.
+ * src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from
+ (ffi_prep_closure): ... this.
+ (flush_icache): Adjust.
+
+2007-03-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * src/dlmalloc.c: New file, imported version 2.8.3 of Doug
+ Lea's malloc.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
2007-02-13 Andreas Krebbel <krebbel1@de.ibm.com>
* src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep,
diff --git a/libffi/Makefile.am b/libffi/Makefile.am
index 0924857a2c7..36fa5fcaf2f 100644
--- a/libffi/Makefile.am
+++ b/libffi/Makefile.am
@@ -78,7 +78,7 @@ toolexeclib_LTLIBRARIES = libffi.la
noinst_LTLIBRARIES = libffi_convenience.la
libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
- src/raw_api.c src/java_raw_api.c
+ src/raw_api.c src/java_raw_api.c src/closures.c
nodist_libffi_la_SOURCES =
@@ -162,9 +162,10 @@ libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version`
AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
AM_CCASFLAGS = $(AM_CPPFLAGS)
-# No install-html support
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Multilib support. Automake should provide these on its own.
all-recursive: all-multi
diff --git a/libffi/Makefile.in b/libffi/Makefile.in
index 37bf645040b..3a3e33fdff0 100644
--- a/libffi/Makefile.in
+++ b/libffi/Makefile.in
@@ -92,7 +92,7 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
libffi_la_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
am_libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \
- src/raw_api.lo src/java_raw_api.lo
+ src/raw_api.lo src/java_raw_api.lo src/closures.lo
@MIPS_IRIX_TRUE@am__objects_1 = src/mips/ffi.lo src/mips/o32.lo \
@MIPS_IRIX_TRUE@ src/mips/n32.lo
@MIPS_LINUX_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo
@@ -141,7 +141,7 @@ libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \
$(nodist_libffi_la_OBJECTS)
libffi_convenience_la_LIBADD =
am__objects_24 = src/debug.lo src/prep_cif.lo src/types.lo \
- src/raw_api.lo src/java_raw_api.lo
+ src/raw_api.lo src/java_raw_api.lo src/closures.lo
am_libffi_convenience_la_OBJECTS = $(am__objects_24)
am__objects_25 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
$(am__objects_4) $(am__objects_5) $(am__objects_6) \
@@ -416,7 +416,7 @@ MAKEOVERRIDES =
toolexeclib_LTLIBRARIES = libffi.la
noinst_LTLIBRARIES = libffi_convenience.la
libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \
- src/raw_api.c src/java_raw_api.c
+ src/raw_api.c src/java_raw_api.c src/closures.c
nodist_libffi_la_SOURCES = $(am__append_1) $(am__append_2) \
$(am__append_3) $(am__append_4) $(am__append_5) \
@@ -534,6 +534,7 @@ src/prep_cif.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/types.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/java_raw_api.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/closures.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/mips/$(am__dirstamp):
@$(mkdir_p) src/mips
@: > src/mips/$(am__dirstamp)
@@ -729,6 +730,8 @@ mostlyclean-compile:
-rm -f src/arm/ffi.lo
-rm -f src/arm/sysv.$(OBJEXT)
-rm -f src/arm/sysv.lo
+ -rm -f src/closures.$(OBJEXT)
+ -rm -f src/closures.lo
-rm -f src/cris/ffi.$(OBJEXT)
-rm -f src/cris/ffi.lo
-rm -f src/cris/sysv.$(OBJEXT)
@@ -827,6 +830,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/closures.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/debug.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/java_raw_api.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prep_cif.Plo@am__quote@
@@ -1341,9 +1345,10 @@ uninstall-info: uninstall-info-recursive
uninstall-toolexeclibLTLIBRARIES
-# No install-html support
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Multilib support. Automake should provide these on its own.
all-recursive: all-multi
diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in
index fee88baa0cd..be32981d53f 100644
--- a/libffi/include/ffi.h.in
+++ b/libffi/include/ffi.h.in
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------*-C-*-
- libffi @VERSION@ - Copyright (c) 1996-2003 Red Hat, Inc.
+ libffi @VERSION@ - Copyright (c) 1996-2003, 2007 Red Hat, Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -228,12 +228,22 @@ typedef struct {
void *user_data;
} ffi_closure __attribute__((aligned (8)));
+void *ffi_closure_alloc (size_t size, void **code);
+void ffi_closure_free (void *);
+
ffi_status
ffi_prep_closure (ffi_closure*,
ffi_cif *,
void (*fun)(ffi_cif*,void*,void**,void*),
void *user_data);
+ffi_status
+ffi_prep_closure_loc (ffi_closure*,
+ ffi_cif *,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data,
+ void*codeloc);
+
typedef struct {
char tramp[FFI_TRAMPOLINE_SIZE];
@@ -262,11 +272,25 @@ ffi_prep_raw_closure (ffi_raw_closure*,
void *user_data);
ffi_status
+ffi_prep_raw_closure_loc (ffi_raw_closure*,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data,
+ void *codeloc);
+
+ffi_status
ffi_prep_java_raw_closure (ffi_raw_closure*,
ffi_cif *cif,
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
void *user_data);
+ffi_status
+ffi_prep_java_raw_closure_loc (ffi_raw_closure*,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data,
+ void *codeloc);
+
#endif /* FFI_CLOSURES */
/* ---- Public interface definition -------------------------------------- */
diff --git a/libffi/src/alpha/ffi.c b/libffi/src/alpha/ffi.c
index 00d33790109..d139423f90e 100644
--- a/libffi/src/alpha/ffi.c
+++ b/libffi/src/alpha/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1998, 2001 Red Hat, Inc.
+ ffi.c - Copyright (c) 1998, 2001, 2007 Red Hat, Inc.
Alpha Foreign Function Interface
@@ -146,10 +146,11 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp;
diff --git a/libffi/src/closures.c b/libffi/src/closures.c
new file mode 100644
index 00000000000..99be5acfd79
--- /dev/null
+++ b/libffi/src/closures.c
@@ -0,0 +1,513 @@
+/* -----------------------------------------------------------------------
+ closures.c - Copyright (c) 2007 Red Hat, Inc.
+
+ Code to allocate and deallocate memory for closures.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ ``Software''), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+#include <ffi.h>
+#include <ffi_common.h>
+
+#ifndef FFI_MMAP_EXEC_WRIT
+# if __gnu_linux__
+/* This macro indicates it may be forbidden to map anonymous memory
+ with both write and execute permission. Code compiled when this
+ option is defined will attempt to map such pages once, but if it
+ fails, it falls back to creating a temporary file in a writable and
+ executable filesystem and mapping pages from it into separate
+ locations in the virtual memory space, one location writable and
+ another executable. */
+# define FFI_MMAP_EXEC_WRIT 1
+# endif
+#endif
+
+#if FFI_CLOSURES
+
+# if FFI_MMAP_EXEC_WRIT
+
+#define USE_LOCKS 1
+#define USE_DL_PREFIX 1
+#define USE_BUILTIN_FFS 1
+
+/* We need to use mmap, not sbrk. */
+#define HAVE_MORECORE 0
+
+/* We could, in theory, support mremap, but it wouldn't buy us anything. */
+#define HAVE_MREMAP 0
+
+/* We have no use for this, so save some code and data. */
+#define NO_MALLINFO 1
+
+/* We need all allocations to be in regular segments, otherwise we
+ lose track of the corresponding code address. */
+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
+
+/* Don't allocate more than a page unless needed. */
+#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize)
+
+#if FFI_CLOSURE_TEST
+/* Don't release single pages, to avoid a worst-case scenario of
+ continuously allocating and releasing single pages, but release
+ pairs of pages, which should do just as well given that allocations
+ are likely to be small. */
+#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize)
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <mntent.h>
+#include <sys/param.h>
+#include <pthread.h>
+
+/* We don't want sys/mman.h to be included after we redefine mmap and
+ dlmunmap. */
+#include <sys/mman.h>
+#define LACKS_SYS_MMAN_H 1
+
+#define MAYBE_UNUSED __attribute__((__unused__))
+
+/* Declare all functions defined in dlmalloc.c as static. */
+static void *dlmalloc(size_t);
+static void dlfree(void*);
+static void *dlcalloc(size_t, size_t) MAYBE_UNUSED;
+static void *dlrealloc(void *, size_t) MAYBE_UNUSED;
+static void *dlmemalign(size_t, size_t) MAYBE_UNUSED;
+static void *dlvalloc(size_t) MAYBE_UNUSED;
+static int dlmallopt(int, int) MAYBE_UNUSED;
+static size_t dlmalloc_footprint(void) MAYBE_UNUSED;
+static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED;
+static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED;
+static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED;
+static void *dlpvalloc(size_t) MAYBE_UNUSED;
+static int dlmalloc_trim(size_t) MAYBE_UNUSED;
+static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED;
+static void dlmalloc_stats(void) MAYBE_UNUSED;
+
+/* Use these for mmap and munmap within dlmalloc.c. */
+static void *dlmmap(void *, size_t, int, int, int, off_t);
+static int dlmunmap(void *, size_t);
+
+#define mmap dlmmap
+#define munmap dlmunmap
+
+#include "dlmalloc.c"
+
+#undef mmap
+#undef munmap
+
+/* A mutex used to synchronize access to *exec* variables in this file. */
+static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* A file descriptor of a temporary file from which we'll map
+ executable pages. */
+static int execfd = -1;
+
+/* The amount of space already allocated from the temporary file. */
+static size_t execsize = 0;
+
+/* Open a temporary file name, and immediately unlink it. */
+static int
+open_temp_exec_file_name (char *name)
+{
+ int fd = mkstemp (name);
+
+ if (fd != -1)
+ unlink (name);
+
+ return fd;
+}
+
+/* Open a temporary file in the named directory. */
+static int
+open_temp_exec_file_dir (const char *dir)
+{
+ static const char suffix[] = "/ffiXXXXXX";
+ int lendir = strlen (dir);
+ char *tempname = __builtin_alloca (lendir + sizeof (suffix));
+
+ if (!tempname)
+ return -1;
+
+ memcpy (tempname, dir, lendir);
+ memcpy (tempname + lendir, suffix, sizeof (suffix));
+
+ return open_temp_exec_file_name (tempname);
+}
+
+/* Open a temporary file in the directory in the named environment
+ variable. */
+static int
+open_temp_exec_file_env (const char *envvar)
+{
+ const char *value = getenv (envvar);
+
+ if (!value)
+ return -1;
+
+ return open_temp_exec_file_dir (value);
+}
+
+/* Open a temporary file in an executable and writable mount point
+ listed in the mounts file. Subsequent calls with the same mounts
+ keep searching for mount points in the same file. Providing NULL
+ as the mounts file closes the file. */
+static int
+open_temp_exec_file_mnt (const char *mounts)
+{
+ static const char *last_mounts;
+ static FILE *last_mntent;
+
+ if (mounts != last_mounts)
+ {
+ if (last_mntent)
+ endmntent (last_mntent);
+
+ last_mounts = mounts;
+
+ if (mounts)
+ last_mntent = setmntent (mounts, "r");
+ else
+ last_mntent = NULL;
+ }
+
+ if (!last_mntent)
+ return -1;
+
+ for (;;)
+ {
+ int fd;
+ struct mntent mnt;
+ char buf[MAXPATHLEN * 3];
+
+ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)))
+ return -1;
+
+ if (hasmntopt (&mnt, "ro")
+ || hasmntopt (&mnt, "noexec")
+ || access (mnt.mnt_dir, W_OK))
+ continue;
+
+ fd = open_temp_exec_file_dir (mnt.mnt_dir);
+
+ if (fd != -1)
+ return fd;
+ }
+}
+
+/* Instructions to look for a location to hold a temporary file that
+ can be mapped in for execution. */
+static struct
+{
+ int (*func)(const char *);
+ const char *arg;
+ int repeat;
+} open_temp_exec_file_opts[] = {
+ { open_temp_exec_file_env, "TMPDIR", 0 },
+ { open_temp_exec_file_dir, "/tmp", 0 },
+ { open_temp_exec_file_dir, "/var/tmp", 0 },
+ { open_temp_exec_file_dir, "/dev/shm", 0 },
+ { open_temp_exec_file_env, "HOME", 0 },
+ { open_temp_exec_file_mnt, "/etc/mtab", 1 },
+ { open_temp_exec_file_mnt, "/proc/mounts", 1 },
+};
+
+/* Current index into open_temp_exec_file_opts. */
+static int open_temp_exec_file_opts_idx = 0;
+
+/* Reset a current multi-call func, then advances to the next entry.
+ If we're at the last, go back to the first and return nonzero,
+ otherwise return zero. */
+static int
+open_temp_exec_file_opts_next (void)
+{
+ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat)
+ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL);
+
+ open_temp_exec_file_opts_idx++;
+ if (open_temp_exec_file_opts_idx
+ == (sizeof (open_temp_exec_file_opts)
+ / sizeof (*open_temp_exec_file_opts)))
+ {
+ open_temp_exec_file_opts_idx = 0;
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Return a file descriptor of a temporary zero-sized file in a
+ writable and exexutable filesystem. */
+static int
+open_temp_exec_file (void)
+{
+ int fd;
+
+ do
+ {
+ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func
+ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg);
+
+ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat
+ || fd == -1)
+ {
+ if (open_temp_exec_file_opts_next ())
+ break;
+ }
+ }
+ while (fd == -1);
+
+ return fd;
+}
+
+/* Map in a chunk of memory from the temporary exec file into separate
+ locations in the virtual memory address space, one writable and one
+ executable. Returns the address of the writable portion, after
+ storing an offset to the corresponding executable portion at the
+ last word of the requested chunk. */
+static void *
+dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset)
+{
+ void *ptr;
+
+ if (execfd == -1)
+ {
+ open_temp_exec_file_opts_idx = 0;
+ retry_open:
+ execfd = open_temp_exec_file ();
+ if (execfd == -1)
+ return MFAIL;
+ }
+
+ offset = execsize;
+
+ if (ftruncate (execfd, offset + length))
+ return MFAIL;
+
+ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS);
+ flags |= MAP_SHARED;
+
+ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC,
+ flags, execfd, offset);
+ if (ptr == MFAIL)
+ {
+ if (!offset)
+ {
+ close (execfd);
+ goto retry_open;
+ }
+ ftruncate (execfd, offset);
+ return MFAIL;
+ }
+ else if (!offset
+ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat)
+ open_temp_exec_file_opts_next ();
+
+ start = mmap (start, length, prot, flags, execfd, offset);
+
+ if (start == MFAIL)
+ {
+ munmap (ptr, length);
+ ftruncate (execfd, offset);
+ return start;
+ }
+
+ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start;
+
+ execsize += length;
+
+ return start;
+}
+
+/* Map in a writable and executable chunk of memory if possible.
+ Failing that, fall back to dlmmap_locked. */
+static void *
+dlmmap (void *start, size_t length, int prot,
+ int flags, int fd, off_t offset)
+{
+ void *ptr;
+
+ assert (start == NULL && length % malloc_getpagesize == 0
+ && prot == (PROT_READ | PROT_WRITE)
+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS)
+ && fd == -1 && offset == 0);
+
+#if FFI_CLOSURE_TEST
+ printf ("mapping in %zi\n", length);
+#endif
+
+ if (execfd == -1)
+ {
+ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset);
+
+ if (ptr != MFAIL || (errno != EPERM && errno != EACCES))
+ /* Cool, no need to mess with separate segments. */
+ return ptr;
+
+ /* If MREMAP_DUP is ever introduced and implemented, try mmap
+ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with
+ MREMAP_DUP and prot at this point. */
+ }
+
+ if (execsize == 0 || execfd == -1)
+ {
+ pthread_mutex_lock (&open_temp_exec_file_mutex);
+ ptr = dlmmap_locked (start, length, prot, flags, offset);
+ pthread_mutex_unlock (&open_temp_exec_file_mutex);
+
+ return ptr;
+ }
+
+ return dlmmap_locked (start, length, prot, flags, offset);
+}
+
+/* Release memory at the given address, as well as the corresponding
+ executable page if it's separate. */
+static int
+dlmunmap (void *start, size_t length)
+{
+ /* We don't bother decreasing execsize or truncating the file, since
+ we can't quite tell whether we're unmapping the end of the file.
+ We don't expect frequent deallocation anyway. If we did, we
+ could locate pages in the file by writing to the pages being
+ deallocated and checking that the file contents change.
+ Yuck. */
+ msegmentptr seg = segment_holding (gm, start);
+ void *code;
+
+#if FFI_CLOSURE_TEST
+ printf ("unmapping %zi\n", length);
+#endif
+
+ if (seg && (code = add_segment_exec_offset (start, seg)) != start)
+ {
+ int ret = munmap (code, length);
+ if (ret)
+ return ret;
+ }
+
+ return munmap (start, length);
+}
+
+#if FFI_CLOSURE_FREE_CODE
+/* Return segment holding given code address. */
+static msegmentptr
+segment_holding_code (mstate m, char* addr)
+{
+ msegmentptr sp = &m->seg;
+ for (;;) {
+ if (addr >= add_segment_exec_offset (sp->base, sp)
+ && addr < add_segment_exec_offset (sp->base, sp) + sp->size)
+ return sp;
+ if ((sp = sp->next) == 0)
+ return 0;
+ }
+}
+#endif
+
+/* Allocate a chunk of memory with the given size. Returns a pointer
+ to the writable address, and sets *CODE to the executable
+ corresponding virtual address. */
+void *
+ffi_closure_alloc (size_t size, void **code)
+{
+ void *ptr;
+
+ if (!code)
+ return NULL;
+
+ ptr = dlmalloc (size);
+
+ if (ptr)
+ {
+ msegmentptr seg = segment_holding (gm, ptr);
+
+ *code = add_segment_exec_offset (ptr, seg);
+ }
+
+ return ptr;
+}
+
+/* Release a chunk of memory allocated with ffi_closure_alloc. If
+ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the
+ writable or the executable address given. Otherwise, only the
+ writable address can be provided here. */
+void
+ffi_closure_free (void *ptr)
+{
+#if FFI_CLOSURE_FREE_CODE
+ msegmentptr seg = segment_holding_code (gm, ptr);
+
+ if (seg)
+ ptr = sub_segment_exec_offset (ptr, seg);
+#endif
+
+ dlfree (ptr);
+}
+
+
+#if FFI_CLOSURE_TEST
+/* Do some internal sanity testing to make sure allocation and
+ deallocation of pages are working as intended. */
+int main ()
+{
+ void *p[3];
+#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0)
+#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0)
+ GET (0, malloc_getpagesize / 2);
+ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*));
+ PUT (1);
+ GET (1, 2 * malloc_getpagesize);
+ GET (2, malloc_getpagesize / 2);
+ PUT (1);
+ PUT (0);
+ PUT (2);
+ return 0;
+}
+#endif /* FFI_CLOSURE_TEST */
+# else /* ! FFI_MMAP_EXEC_WRIT */
+
+/* On many systems, memory returned by malloc is writable and
+ executable, so just use it. */
+
+#include <stdlib.h>
+
+void *
+ffi_closure_alloc (size_t size, void **code)
+{
+ if (!code)
+ return NULL;
+
+ return *code = malloc (size);
+}
+
+void
+ffi_closure_free (void *ptr)
+{
+ free (ptr);
+}
+
+# endif /* ! FFI_MMAP_EXEC_WRIT */
+#endif /* FFI_CLOSURES */
diff --git a/libffi/src/cris/ffi.c b/libffi/src/cris/ffi.c
index 364c990f6f3..e9c39530c22 100644
--- a/libffi/src/cris/ffi.c
+++ b/libffi/src/cris/ffi.c
@@ -2,6 +2,7 @@
ffi.c - Copyright (c) 1998 Cygnus Solutions
Copyright (c) 2004 Simon Posnjak
Copyright (c) 2005 Axis Communications AB
+ Copyright (C) 2007 Free Software Foundation, Inc.
CRIS Foreign Function Interface
@@ -360,10 +361,11 @@ ffi_prep_closure_inner (void **params, ffi_closure* closure)
/* API function: Prepare the trampoline. */
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif *, void *, void **, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif *, void *, void **, void*),
+ void *user_data,
+ void *codeloc)
{
void *innerfn = ffi_prep_closure_inner;
FFI_ASSERT (cif->abi == FFI_SYSV);
@@ -375,7 +377,7 @@ ffi_prep_closure (ffi_closure* closure,
memcpy (closure->tramp + ffi_cris_trampoline_fn_offset,
&innerfn, sizeof (void *));
memcpy (closure->tramp + ffi_cris_trampoline_closure_offset,
- &closure, sizeof (void *));
+ &codeloc, sizeof (void *));
return FFI_OK;
}
diff --git a/libffi/src/dlmalloc.c b/libffi/src/dlmalloc.c
new file mode 100644
index 00000000000..c95e64a7e37
--- /dev/null
+++ b/libffi/src/dlmalloc.c
@@ -0,0 +1,5099 @@
+/*
+ This is a version (aka dlmalloc) of malloc/free/realloc written by
+ Doug Lea and released to the public domain, as explained at
+ http://creativecommons.org/licenses/publicdomain. Send questions,
+ comments, complaints, performance data, etc to dl@cs.oswego.edu
+
+* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee)
+
+ Note: There may be an updated version of this malloc obtainable at
+ ftp://gee.cs.oswego.edu/pub/misc/malloc.c
+ Check before installing!
+
+* Quickstart
+
+ This library is all in one file to simplify the most common usage:
+ ftp it, compile it (-O3), and link it into another program. All of
+ the compile-time options default to reasonable values for use on
+ most platforms. You might later want to step through various
+ compile-time and dynamic tuning options.
+
+ For convenience, an include file for code using this malloc is at:
+ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h
+ You don't really need this .h file unless you call functions not
+ defined in your system include files. The .h file contains only the
+ excerpts from this file needed for using this malloc on ANSI C/C++
+ systems, so long as you haven't changed compile-time options about
+ naming and tuning parameters. If you do, then you can create your
+ own malloc.h that does include all settings by cutting at the point
+ indicated below. Note that you may already by default be using a C
+ library containing a malloc that is based on some version of this
+ malloc (for example in linux). You might still want to use the one
+ in this file to customize settings or to avoid overheads associated
+ with library versions.
+
+* Vital statistics:
+
+ Supported pointer/size_t representation: 4 or 8 bytes
+ size_t MUST be an unsigned type of the same width as
+ pointers. (If you are using an ancient system that declares
+ size_t as a signed type, or need it to be a different width
+ than pointers, you can use a previous release of this malloc
+ (e.g. 2.7.2) supporting these.)
+
+ Alignment: 8 bytes (default)
+ This suffices for nearly all current machines and C compilers.
+ However, you can define MALLOC_ALIGNMENT to be wider than this
+ if necessary (up to 128bytes), at the expense of using more space.
+
+ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes)
+ 8 or 16 bytes (if 8byte sizes)
+ Each malloced chunk has a hidden word of overhead holding size
+ and status information, and additional cross-check word
+ if FOOTERS is defined.
+
+ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead)
+ 8-byte ptrs: 32 bytes (including overhead)
+
+ Even a request for zero bytes (i.e., malloc(0)) returns a
+ pointer to something of the minimum allocatable size.
+ The maximum overhead wastage (i.e., number of extra bytes
+ allocated than were requested in malloc) is less than or equal
+ to the minimum size, except for requests >= mmap_threshold that
+ are serviced via mmap(), where the worst case wastage is about
+ 32 bytes plus the remainder from a system page (the minimal
+ mmap unit); typically 4096 or 8192 bytes.
+
+ Security: static-safe; optionally more or less
+ The "security" of malloc refers to the ability of malicious
+ code to accentuate the effects of errors (for example, freeing
+ space that is not currently malloc'ed or overwriting past the
+ ends of chunks) in code that calls malloc. This malloc
+ guarantees not to modify any memory locations below the base of
+ heap, i.e., static variables, even in the presence of usage
+ errors. The routines additionally detect most improper frees
+ and reallocs. All this holds as long as the static bookkeeping
+ for malloc itself is not corrupted by some other means. This
+ is only one aspect of security -- these checks do not, and
+ cannot, detect all possible programming errors.
+
+ If FOOTERS is defined nonzero, then each allocated chunk
+ carries an additional check word to verify that it was malloced
+ from its space. These check words are the same within each
+ execution of a program using malloc, but differ across
+ executions, so externally crafted fake chunks cannot be
+ freed. This improves security by rejecting frees/reallocs that
+ could corrupt heap memory, in addition to the checks preventing
+ writes to statics that are always on. This may further improve
+ security at the expense of time and space overhead. (Note that
+ FOOTERS may also be worth using with MSPACES.)
+
+ By default detected errors cause the program to abort (calling
+ "abort()"). You can override this to instead proceed past
+ errors by defining PROCEED_ON_ERROR. In this case, a bad free
+ has no effect, and a malloc that encounters a bad address
+ caused by user overwrites will ignore the bad address by
+ dropping pointers and indices to all known memory. This may
+ be appropriate for programs that should continue if at all
+ possible in the face of programming errors, although they may
+ run out of memory because dropped memory is never reclaimed.
+
+ If you don't like either of these options, you can define
+ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything
+ else. And if if you are sure that your program using malloc has
+ no errors or vulnerabilities, you can define INSECURE to 1,
+ which might (or might not) provide a small performance improvement.
+
+ Thread-safety: NOT thread-safe unless USE_LOCKS defined
+ When USE_LOCKS is defined, each public call to malloc, free,
+ etc is surrounded with either a pthread mutex or a win32
+ spinlock (depending on WIN32). This is not especially fast, and
+ can be a major bottleneck. It is designed only to provide
+ minimal protection in concurrent environments, and to provide a
+ basis for extensions. If you are using malloc in a concurrent
+ program, consider instead using ptmalloc, which is derived from
+ a version of this malloc. (See http://www.malloc.de).
+
+ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP
+ This malloc can use unix sbrk or any emulation (invoked using
+ the CALL_MORECORE macro) and/or mmap/munmap or any emulation
+ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system
+ memory. On most unix systems, it tends to work best if both
+ MORECORE and MMAP are enabled. On Win32, it uses emulations
+ based on VirtualAlloc. It also uses common C library functions
+ like memset.
+
+ Compliance: I believe it is compliant with the Single Unix Specification
+ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably
+ others as well.
+
+* Overview of algorithms
+
+ This is not the fastest, most space-conserving, most portable, or
+ most tunable malloc ever written. However it is among the fastest
+ while also being among the most space-conserving, portable and
+ tunable. Consistent balance across these factors results in a good
+ general-purpose allocator for malloc-intensive programs.
+
+ In most ways, this malloc is a best-fit allocator. Generally, it
+ chooses the best-fitting existing chunk for a request, with ties
+ broken in approximately least-recently-used order. (This strategy
+ normally maintains low fragmentation.) However, for requests less
+ than 256bytes, it deviates from best-fit when there is not an
+ exactly fitting available chunk by preferring to use space adjacent
+ to that used for the previous small request, as well as by breaking
+ ties in approximately most-recently-used order. (These enhance
+ locality of series of small allocations.) And for very large requests
+ (>= 256Kb by default), it relies on system memory mapping
+ facilities, if supported. (This helps avoid carrying around and
+ possibly fragmenting memory used only for large chunks.)
+
+ All operations (except malloc_stats and mallinfo) have execution
+ times that are bounded by a constant factor of the number of bits in
+ a size_t, not counting any clearing in calloc or copying in realloc,
+ or actions surrounding MORECORE and MMAP that have times
+ proportional to the number of non-contiguous regions returned by
+ system allocation routines, which is often just 1.
+
+ The implementation is not very modular and seriously overuses
+ macros. Perhaps someday all C compilers will do as good a job
+ inlining modular code as can now be done by brute-force expansion,
+ but now, enough of them seem not to.
+
+ Some compilers issue a lot of warnings about code that is
+ dead/unreachable only on some platforms, and also about intentional
+ uses of negation on unsigned types. All known cases of each can be
+ ignored.
+
+ For a longer but out of date high-level description, see
+ http://gee.cs.oswego.edu/dl/html/malloc.html
+
+* MSPACES
+ If MSPACES is defined, then in addition to malloc, free, etc.,
+ this file also defines mspace_malloc, mspace_free, etc. These
+ are versions of malloc routines that take an "mspace" argument
+ obtained using create_mspace, to control all internal bookkeeping.
+ If ONLY_MSPACES is defined, only these versions are compiled.
+ So if you would like to use this allocator for only some allocations,
+ and your system malloc for others, you can compile with
+ ONLY_MSPACES and then do something like...
+ static mspace mymspace = create_mspace(0,0); // for example
+ #define mymalloc(bytes) mspace_malloc(mymspace, bytes)
+
+ (Note: If you only need one instance of an mspace, you can instead
+ use "USE_DL_PREFIX" to relabel the global malloc.)
+
+ You can similarly create thread-local allocators by storing
+ mspaces as thread-locals. For example:
+ static __thread mspace tlms = 0;
+ void* tlmalloc(size_t bytes) {
+ if (tlms == 0) tlms = create_mspace(0, 0);
+ return mspace_malloc(tlms, bytes);
+ }
+ void tlfree(void* mem) { mspace_free(tlms, mem); }
+
+ Unless FOOTERS is defined, each mspace is completely independent.
+ You cannot allocate from one and free to another (although
+ conformance is only weakly checked, so usage errors are not always
+ caught). If FOOTERS is defined, then each chunk carries around a tag
+ indicating its originating mspace, and frees are directed to their
+ originating spaces.
+
+ ------------------------- Compile-time options ---------------------------
+
+Be careful in setting #define values for numerical constants of type
+size_t. On some systems, literal values are not automatically extended
+to size_t precision unless they are explicitly casted.
+
+WIN32 default: defined if _WIN32 defined
+ Defining WIN32 sets up defaults for MS environment and compilers.
+ Otherwise defaults are for unix.
+
+MALLOC_ALIGNMENT default: (size_t)8
+ Controls the minimum alignment for malloc'ed chunks. It must be a
+ power of two and at least 8, even on machines for which smaller
+ alignments would suffice. It may be defined as larger than this
+ though. Note however that code and data structures are optimized for
+ the case of 8-byte alignment.
+
+MSPACES default: 0 (false)
+ If true, compile in support for independent allocation spaces.
+ This is only supported if HAVE_MMAP is true.
+
+ONLY_MSPACES default: 0 (false)
+ If true, only compile in mspace versions, not regular versions.
+
+USE_LOCKS default: 0 (false)
+ Causes each call to each public routine to be surrounded with
+ pthread or WIN32 mutex lock/unlock. (If set true, this can be
+ overridden on a per-mspace basis for mspace versions.)
+
+FOOTERS default: 0
+ If true, provide extra checking and dispatching by placing
+ information in the footers of allocated chunks. This adds
+ space and time overhead.
+
+INSECURE default: 0
+ If true, omit checks for usage errors and heap space overwrites.
+
+USE_DL_PREFIX default: NOT defined
+ Causes compiler to prefix all public routines with the string 'dl'.
+ This can be useful when you only want to use this malloc in one part
+ of a program, using your regular system malloc elsewhere.
+
+ABORT default: defined as abort()
+ Defines how to abort on failed checks. On most systems, a failed
+ check cannot die with an "assert" or even print an informative
+ message, because the underlying print routines in turn call malloc,
+ which will fail again. Generally, the best policy is to simply call
+ abort(). It's not very useful to do more than this because many
+ errors due to overwriting will show up as address faults (null, odd
+ addresses etc) rather than malloc-triggered checks, so will also
+ abort. Also, most compilers know that abort() does not return, so
+ can better optimize code conditionally calling it.
+
+PROCEED_ON_ERROR default: defined as 0 (false)
+ Controls whether detected bad addresses cause them to bypassed
+ rather than aborting. If set, detected bad arguments to free and
+ realloc are ignored. And all bookkeeping information is zeroed out
+ upon a detected overwrite of freed heap space, thus losing the
+ ability to ever return it from malloc again, but enabling the
+ application to proceed. If PROCEED_ON_ERROR is defined, the
+ static variable malloc_corruption_error_count is compiled in
+ and can be examined to see if errors have occurred. This option
+ generates slower code than the default abort policy.
+
+DEBUG default: NOT defined
+ The DEBUG setting is mainly intended for people trying to modify
+ this code or diagnose problems when porting to new platforms.
+ However, it may also be able to better isolate user errors than just
+ using runtime checks. The assertions in the check routines spell
+ out in more detail the assumptions and invariants underlying the
+ algorithms. The checking is fairly extensive, and will slow down
+ execution noticeably. Calling malloc_stats or mallinfo with DEBUG
+ set will attempt to check every non-mmapped allocated and free chunk
+ in the course of computing the summaries.
+
+ABORT_ON_ASSERT_FAILURE default: defined as 1 (true)
+ Debugging assertion failures can be nearly impossible if your
+ version of the assert macro causes malloc to be called, which will
+ lead to a cascade of further failures, blowing the runtime stack.
+ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(),
+ which will usually make debugging easier.
+
+MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32
+ The action to take before "return 0" when malloc fails to be able to
+ return memory because there is none available.
+
+HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES
+ True if this system supports sbrk or an emulation of it.
+
+MORECORE default: sbrk
+ The name of the sbrk-style system routine to call to obtain more
+ memory. See below for guidance on writing custom MORECORE
+ functions. The type of the argument to sbrk/MORECORE varies across
+ systems. It cannot be size_t, because it supports negative
+ arguments, so it is normally the signed type of the same width as
+ size_t (sometimes declared as "intptr_t"). It doesn't much matter
+ though. Internally, we only call it with arguments less than half
+ the max value of a size_t, which should work across all reasonable
+ possibilities, although sometimes generating compiler warnings. See
+ near the end of this file for guidelines for creating a custom
+ version of MORECORE.
+
+MORECORE_CONTIGUOUS default: 1 (true)
+ If true, take advantage of fact that consecutive calls to MORECORE
+ with positive arguments always return contiguous increasing
+ addresses. This is true of unix sbrk. It does not hurt too much to
+ set it true anyway, since malloc copes with non-contiguities.
+ Setting it false when definitely non-contiguous saves time
+ and possibly wasted space it would take to discover this though.
+
+MORECORE_CANNOT_TRIM default: NOT defined
+ True if MORECORE cannot release space back to the system when given
+ negative arguments. This is generally necessary only if you are
+ using a hand-crafted MORECORE function that cannot handle negative
+ arguments.
+
+HAVE_MMAP default: 1 (true)
+ True if this system supports mmap or an emulation of it. If so, and
+ HAVE_MORECORE is not true, MMAP is used for all system
+ allocation. If set and HAVE_MORECORE is true as well, MMAP is
+ primarily used to directly allocate very large blocks. It is also
+ used as a backup strategy in cases where MORECORE fails to provide
+ space from system. Note: A single call to MUNMAP is assumed to be
+ able to unmap memory that may have be allocated using multiple calls
+ to MMAP, so long as they are adjacent.
+
+HAVE_MREMAP default: 1 on linux, else 0
+ If true realloc() uses mremap() to re-allocate large blocks and
+ extend or shrink allocation spaces.
+
+MMAP_CLEARS default: 1 on unix
+ True if mmap clears memory so calloc doesn't need to. This is true
+ for standard unix mmap using /dev/zero.
+
+USE_BUILTIN_FFS default: 0 (i.e., not used)
+ Causes malloc to use the builtin ffs() function to compute indices.
+ Some compilers may recognize and intrinsify ffs to be faster than the
+ supplied C version. Also, the case of x86 using gcc is special-cased
+ to an asm instruction, so is already as fast as it can be, and so
+ this setting has no effect. (On most x86s, the asm version is only
+ slightly faster than the C version.)
+
+malloc_getpagesize default: derive from system includes, or 4096.
+ The system page size. To the extent possible, this malloc manages
+ memory from the system in page-size units. This may be (and
+ usually is) a function rather than a constant. This is ignored
+ if WIN32, where page size is determined using getSystemInfo during
+ initialization.
+
+USE_DEV_RANDOM default: 0 (i.e., not used)
+ Causes malloc to use /dev/random to initialize secure magic seed for
+ stamping footers. Otherwise, the current time is used.
+
+NO_MALLINFO default: 0
+ If defined, don't compile "mallinfo". This can be a simple way
+ of dealing with mismatches between system declarations and
+ those in this file.
+
+MALLINFO_FIELD_TYPE default: size_t
+ The type of the fields in the mallinfo struct. This was originally
+ defined as "int" in SVID etc, but is more usefully defined as
+ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set
+
+REALLOC_ZERO_BYTES_FREES default: not defined
+ This should be set if a call to realloc with zero bytes should
+ be the same as a call to free. Some people think it should. Otherwise,
+ since this malloc returns a unique pointer for malloc(0), so does
+ realloc(p, 0).
+
+LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H
+LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H
+LACKS_STDLIB_H default: NOT defined unless on WIN32
+ Define these if your system does not have these header files.
+ You might need to manually insert some of the declarations they provide.
+
+DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS,
+ system_info.dwAllocationGranularity in WIN32,
+ otherwise 64K.
+ Also settable using mallopt(M_GRANULARITY, x)
+ The unit for allocating and deallocating memory from the system. On
+ most systems with contiguous MORECORE, there is no reason to
+ make this more than a page. However, systems with MMAP tend to
+ either require or encourage larger granularities. You can increase
+ this value to prevent system allocation functions to be called so
+ often, especially if they are slow. The value must be at least one
+ page and must be a power of two. Setting to 0 causes initialization
+ to either page size or win32 region size. (Note: In previous
+ versions of malloc, the equivalent of this option was called
+ "TOP_PAD")
+
+DEFAULT_TRIM_THRESHOLD default: 2MB
+ Also settable using mallopt(M_TRIM_THRESHOLD, x)
+ The maximum amount of unused top-most memory to keep before
+ releasing via malloc_trim in free(). Automatic trimming is mainly
+ useful in long-lived programs using contiguous MORECORE. Because
+ trimming via sbrk can be slow on some systems, and can sometimes be
+ wasteful (in cases where programs immediately afterward allocate
+ more large chunks) the value should be high enough so that your
+ overall system performance would improve by releasing this much
+ memory. As a rough guide, you might set to a value close to the
+ average size of a process (program) running on your system.
+ Releasing this much memory would allow such a process to run in
+ memory. Generally, it is worth tuning trim thresholds when a
+ program undergoes phases where several large chunks are allocated
+ and released in ways that can reuse each other's storage, perhaps
+ mixed with phases where there are no such chunks at all. The trim
+ value must be greater than page size to have any useful effect. To
+ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick
+ some people use of mallocing a huge space and then freeing it at
+ program startup, in an attempt to reserve system memory, doesn't
+ have the intended effect under automatic trimming, since that memory
+ will immediately be returned to the system.
+
+DEFAULT_MMAP_THRESHOLD default: 256K
+ Also settable using mallopt(M_MMAP_THRESHOLD, x)
+ The request size threshold for using MMAP to directly service a
+ request. Requests of at least this size that cannot be allocated
+ using already-existing space will be serviced via mmap. (If enough
+ normal freed space already exists it is used instead.) Using mmap
+ segregates relatively large chunks of memory so that they can be
+ individually obtained and released from the host system. A request
+ serviced through mmap is never reused by any other request (at least
+ not directly; the system may just so happen to remap successive
+ requests to the same locations). Segregating space in this way has
+ the benefits that: Mmapped space can always be individually released
+ back to the system, which helps keep the system level memory demands
+ of a long-lived program low. Also, mapped memory doesn't become
+ `locked' between other chunks, as can happen with normally allocated
+ chunks, which means that even trimming via malloc_trim would not
+ release them. However, it has the disadvantage that the space
+ cannot be reclaimed, consolidated, and then used to service later
+ requests, as happens with normal chunks. The advantages of mmap
+ nearly always outweigh disadvantages for "large" chunks, but the
+ value of "large" may vary across systems. The default is an
+ empirically derived value that works well in most systems. You can
+ disable mmap by setting to MAX_SIZE_T.
+
+*/
+
+#ifndef WIN32
+#ifdef _WIN32
+#define WIN32 1
+#endif /* _WIN32 */
+#endif /* WIN32 */
+#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#define HAVE_MMAP 1
+#define HAVE_MORECORE 0
+#define LACKS_UNISTD_H
+#define LACKS_SYS_PARAM_H
+#define LACKS_SYS_MMAN_H
+#define LACKS_STRING_H
+#define LACKS_STRINGS_H
+#define LACKS_SYS_TYPES_H
+#define LACKS_ERRNO_H
+#define MALLOC_FAILURE_ACTION
+#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */
+#endif /* WIN32 */
+
+#if defined(DARWIN) || defined(_DARWIN)
+/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */
+#ifndef HAVE_MORECORE
+#define HAVE_MORECORE 0
+#define HAVE_MMAP 1
+#endif /* HAVE_MORECORE */
+#endif /* DARWIN */
+
+#ifndef LACKS_SYS_TYPES_H
+#include <sys/types.h> /* For size_t */
+#endif /* LACKS_SYS_TYPES_H */
+
+/* The maximum possible size_t value has all bits set */
+#define MAX_SIZE_T (~(size_t)0)
+
+#ifndef ONLY_MSPACES
+#define ONLY_MSPACES 0
+#endif /* ONLY_MSPACES */
+#ifndef MSPACES
+#if ONLY_MSPACES
+#define MSPACES 1
+#else /* ONLY_MSPACES */
+#define MSPACES 0
+#endif /* ONLY_MSPACES */
+#endif /* MSPACES */
+#ifndef MALLOC_ALIGNMENT
+#define MALLOC_ALIGNMENT ((size_t)8U)
+#endif /* MALLOC_ALIGNMENT */
+#ifndef FOOTERS
+#define FOOTERS 0
+#endif /* FOOTERS */
+#ifndef ABORT
+#define ABORT abort()
+#endif /* ABORT */
+#ifndef ABORT_ON_ASSERT_FAILURE
+#define ABORT_ON_ASSERT_FAILURE 1
+#endif /* ABORT_ON_ASSERT_FAILURE */
+#ifndef PROCEED_ON_ERROR
+#define PROCEED_ON_ERROR 0
+#endif /* PROCEED_ON_ERROR */
+#ifndef USE_LOCKS
+#define USE_LOCKS 0
+#endif /* USE_LOCKS */
+#ifndef INSECURE
+#define INSECURE 0
+#endif /* INSECURE */
+#ifndef HAVE_MMAP
+#define HAVE_MMAP 1
+#endif /* HAVE_MMAP */
+#ifndef MMAP_CLEARS
+#define MMAP_CLEARS 1
+#endif /* MMAP_CLEARS */
+#ifndef HAVE_MREMAP
+#ifdef linux
+#define HAVE_MREMAP 1
+#else /* linux */
+#define HAVE_MREMAP 0
+#endif /* linux */
+#endif /* HAVE_MREMAP */
+#ifndef MALLOC_FAILURE_ACTION
+#define MALLOC_FAILURE_ACTION errno = ENOMEM;
+#endif /* MALLOC_FAILURE_ACTION */
+#ifndef HAVE_MORECORE
+#if ONLY_MSPACES
+#define HAVE_MORECORE 0
+#else /* ONLY_MSPACES */
+#define HAVE_MORECORE 1
+#endif /* ONLY_MSPACES */
+#endif /* HAVE_MORECORE */
+#if !HAVE_MORECORE
+#define MORECORE_CONTIGUOUS 0
+#else /* !HAVE_MORECORE */
+#ifndef MORECORE
+#define MORECORE sbrk
+#endif /* MORECORE */
+#ifndef MORECORE_CONTIGUOUS
+#define MORECORE_CONTIGUOUS 1
+#endif /* MORECORE_CONTIGUOUS */
+#endif /* HAVE_MORECORE */
+#ifndef DEFAULT_GRANULARITY
+#if MORECORE_CONTIGUOUS
+#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */
+#else /* MORECORE_CONTIGUOUS */
+#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U)
+#endif /* MORECORE_CONTIGUOUS */
+#endif /* DEFAULT_GRANULARITY */
+#ifndef DEFAULT_TRIM_THRESHOLD
+#ifndef MORECORE_CANNOT_TRIM
+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
+#else /* MORECORE_CANNOT_TRIM */
+#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T
+#endif /* MORECORE_CANNOT_TRIM */
+#endif /* DEFAULT_TRIM_THRESHOLD */
+#ifndef DEFAULT_MMAP_THRESHOLD
+#if HAVE_MMAP
+#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U)
+#else /* HAVE_MMAP */
+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
+#endif /* HAVE_MMAP */
+#endif /* DEFAULT_MMAP_THRESHOLD */
+#ifndef USE_BUILTIN_FFS
+#define USE_BUILTIN_FFS 0
+#endif /* USE_BUILTIN_FFS */
+#ifndef USE_DEV_RANDOM
+#define USE_DEV_RANDOM 0
+#endif /* USE_DEV_RANDOM */
+#ifndef NO_MALLINFO
+#define NO_MALLINFO 0
+#endif /* NO_MALLINFO */
+#ifndef MALLINFO_FIELD_TYPE
+#define MALLINFO_FIELD_TYPE size_t
+#endif /* MALLINFO_FIELD_TYPE */
+
+/*
+ mallopt tuning options. SVID/XPG defines four standard parameter
+ numbers for mallopt, normally defined in malloc.h. None of these
+ are used in this malloc, so setting them has no effect. But this
+ malloc does support the following options.
+*/
+
+#define M_TRIM_THRESHOLD (-1)
+#define M_GRANULARITY (-2)
+#define M_MMAP_THRESHOLD (-3)
+
+/* ------------------------ Mallinfo declarations ------------------------ */
+
+#if !NO_MALLINFO
+/*
+ This version of malloc supports the standard SVID/XPG mallinfo
+ routine that returns a struct containing usage properties and
+ statistics. It should work on any system that has a
+ /usr/include/malloc.h defining struct mallinfo. The main
+ declaration needed is the mallinfo struct that is returned (by-copy)
+ by mallinfo(). The malloinfo struct contains a bunch of fields that
+ are not even meaningful in this version of malloc. These fields are
+ are instead filled by mallinfo() with other numbers that might be of
+ interest.
+
+ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a
+ /usr/include/malloc.h file that includes a declaration of struct
+ mallinfo. If so, it is included; else a compliant version is
+ declared below. These must be precisely the same for mallinfo() to
+ work. The original SVID version of this struct, defined on most
+ systems with mallinfo, declares all fields as ints. But some others
+ define as unsigned long. If your system defines the fields using a
+ type of different width than listed here, you MUST #include your
+ system version and #define HAVE_USR_INCLUDE_MALLOC_H.
+*/
+
+/* #define HAVE_USR_INCLUDE_MALLOC_H */
+
+#ifdef HAVE_USR_INCLUDE_MALLOC_H
+#include "/usr/include/malloc.h"
+#else /* HAVE_USR_INCLUDE_MALLOC_H */
+
+struct mallinfo {
+ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */
+ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */
+ MALLINFO_FIELD_TYPE smblks; /* always 0 */
+ MALLINFO_FIELD_TYPE hblks; /* always 0 */
+ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */
+ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */
+ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */
+ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */
+ MALLINFO_FIELD_TYPE fordblks; /* total free space */
+ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */
+};
+
+#endif /* HAVE_USR_INCLUDE_MALLOC_H */
+#endif /* NO_MALLINFO */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if !ONLY_MSPACES
+
+/* ------------------- Declarations of public routines ------------------- */
+
+#ifndef USE_DL_PREFIX
+#define dlcalloc calloc
+#define dlfree free
+#define dlmalloc malloc
+#define dlmemalign memalign
+#define dlrealloc realloc
+#define dlvalloc valloc
+#define dlpvalloc pvalloc
+#define dlmallinfo mallinfo
+#define dlmallopt mallopt
+#define dlmalloc_trim malloc_trim
+#define dlmalloc_stats malloc_stats
+#define dlmalloc_usable_size malloc_usable_size
+#define dlmalloc_footprint malloc_footprint
+#define dlmalloc_max_footprint malloc_max_footprint
+#define dlindependent_calloc independent_calloc
+#define dlindependent_comalloc independent_comalloc
+#endif /* USE_DL_PREFIX */
+
+
+/*
+ malloc(size_t n)
+ Returns a pointer to a newly allocated chunk of at least n bytes, or
+ null if no space is available, in which case errno is set to ENOMEM
+ on ANSI C systems.
+
+ If n is zero, malloc returns a minimum-sized chunk. (The minimum
+ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit
+ systems.) Note that size_t is an unsigned type, so calls with
+ arguments that would be negative if signed are interpreted as
+ requests for huge amounts of space, which will often fail. The
+ maximum supported value of n differs across systems, but is in all
+ cases less than the maximum representable value of a size_t.
+*/
+void* dlmalloc(size_t);
+
+/*
+ free(void* p)
+ Releases the chunk of memory pointed to by p, that had been previously
+ allocated using malloc or a related routine such as realloc.
+ It has no effect if p is null. If p was not malloced or already
+ freed, free(p) will by default cause the current program to abort.
+*/
+void dlfree(void*);
+
+/*
+ calloc(size_t n_elements, size_t element_size);
+ Returns a pointer to n_elements * element_size bytes, with all locations
+ set to zero.
+*/
+void* dlcalloc(size_t, size_t);
+
+/*
+ realloc(void* p, size_t n)
+ Returns a pointer to a chunk of size n that contains the same data
+ as does chunk p up to the minimum of (n, p's size) bytes, or null
+ if no space is available.
+
+ The returned pointer may or may not be the same as p. The algorithm
+ prefers extending p in most cases when possible, otherwise it
+ employs the equivalent of a malloc-copy-free sequence.
+
+ If p is null, realloc is equivalent to malloc.
+
+ If space is not available, realloc returns null, errno is set (if on
+ ANSI) and p is NOT freed.
+
+ if n is for fewer bytes than already held by p, the newly unused
+ space is lopped off and freed if possible. realloc with a size
+ argument of zero (re)allocates a minimum-sized chunk.
+
+ The old unix realloc convention of allowing the last-free'd chunk
+ to be used as an argument to realloc is not supported.
+*/
+
+void* dlrealloc(void*, size_t);
+
+/*
+ memalign(size_t alignment, size_t n);
+ Returns a pointer to a newly allocated chunk of n bytes, aligned
+ in accord with the alignment argument.
+
+ The alignment argument should be a power of two. If the argument is
+ not a power of two, the nearest greater power is used.
+ 8-byte alignment is guaranteed by normal malloc calls, so don't
+ bother calling memalign with an argument of 8 or less.
+
+ Overreliance on memalign is a sure way to fragment space.
+*/
+void* dlmemalign(size_t, size_t);
+
+/*
+ valloc(size_t n);
+ Equivalent to memalign(pagesize, n), where pagesize is the page
+ size of the system. If the pagesize is unknown, 4096 is used.
+*/
+void* dlvalloc(size_t);
+
+/*
+ mallopt(int parameter_number, int parameter_value)
+ Sets tunable parameters The format is to provide a
+ (parameter-number, parameter-value) pair. mallopt then sets the
+ corresponding parameter to the argument value if it can (i.e., so
+ long as the value is meaningful), and returns 1 if successful else
+ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt,
+ normally defined in malloc.h. None of these are use in this malloc,
+ so setting them has no effect. But this malloc also supports other
+ options in mallopt. See below for details. Briefly, supported
+ parameters are as follows (listed defaults are for "typical"
+ configurations).
+
+ Symbol param # default allowed param values
+ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables)
+ M_GRANULARITY -2 page size any power of 2 >= page size
+ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support)
+*/
+int dlmallopt(int, int);
+
+/*
+ malloc_footprint();
+ Returns the number of bytes obtained from the system. The total
+ number of bytes allocated by malloc, realloc etc., is less than this
+ value. Unlike mallinfo, this function returns only a precomputed
+ result, so can be called frequently to monitor memory consumption.
+ Even if locks are otherwise defined, this function does not use them,
+ so results might not be up to date.
+*/
+size_t dlmalloc_footprint(void);
+
+/*
+ malloc_max_footprint();
+ Returns the maximum number of bytes obtained from the system. This
+ value will be greater than current footprint if deallocated space
+ has been reclaimed by the system. The peak number of bytes allocated
+ by malloc, realloc etc., is less than this value. Unlike mallinfo,
+ this function returns only a precomputed result, so can be called
+ frequently to monitor memory consumption. Even if locks are
+ otherwise defined, this function does not use them, so results might
+ not be up to date.
+*/
+size_t dlmalloc_max_footprint(void);
+
+#if !NO_MALLINFO
+/*
+ mallinfo()
+ Returns (by copy) a struct containing various summary statistics:
+
+ arena: current total non-mmapped bytes allocated from system
+ ordblks: the number of free chunks
+ smblks: always zero.
+ hblks: current number of mmapped regions
+ hblkhd: total bytes held in mmapped regions
+ usmblks: the maximum total allocated space. This will be greater
+ than current total if trimming has occurred.
+ fsmblks: always zero
+ uordblks: current total allocated space (normal or mmapped)
+ fordblks: total free space
+ keepcost: the maximum number of bytes that could ideally be released
+ back to system via malloc_trim. ("ideally" means that
+ it ignores page restrictions etc.)
+
+ Because these fields are ints, but internal bookkeeping may
+ be kept as longs, the reported values may wrap around zero and
+ thus be inaccurate.
+*/
+struct mallinfo dlmallinfo(void);
+#endif /* NO_MALLINFO */
+
+/*
+ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]);
+
+ independent_calloc is similar to calloc, but instead of returning a
+ single cleared space, it returns an array of pointers to n_elements
+ independent elements that can hold contents of size elem_size, each
+ of which starts out cleared, and can be independently freed,
+ realloc'ed etc. The elements are guaranteed to be adjacently
+ allocated (this is not guaranteed to occur with multiple callocs or
+ mallocs), which may also improve cache locality in some
+ applications.
+
+ The "chunks" argument is optional (i.e., may be null, which is
+ probably the most typical usage). If it is null, the returned array
+ is itself dynamically allocated and should also be freed when it is
+ no longer needed. Otherwise, the chunks array must be of at least
+ n_elements in length. It is filled in with the pointers to the
+ chunks.
+
+ In either case, independent_calloc returns this pointer array, or
+ null if the allocation failed. If n_elements is zero and "chunks"
+ is null, it returns a chunk representing an array with zero elements
+ (which should be freed if not wanted).
+
+ Each element must be individually freed when it is no longer
+ needed. If you'd like to instead be able to free all at once, you
+ should instead use regular calloc and assign pointers into this
+ space to represent elements. (In this case though, you cannot
+ independently free elements.)
+
+ independent_calloc simplifies and speeds up implementations of many
+ kinds of pools. It may also be useful when constructing large data
+ structures that initially have a fixed number of fixed-sized nodes,
+ but the number is not known at compile time, and some of the nodes
+ may later need to be freed. For example:
+
+ struct Node { int item; struct Node* next; };
+
+ struct Node* build_list() {
+ struct Node** pool;
+ int n = read_number_of_nodes_needed();
+ if (n <= 0) return 0;
+ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0);
+ if (pool == 0) die();
+ // organize into a linked list...
+ struct Node* first = pool[0];
+ for (i = 0; i < n-1; ++i)
+ pool[i]->next = pool[i+1];
+ free(pool); // Can now free the array (or not, if it is needed later)
+ return first;
+ }
+*/
+void** dlindependent_calloc(size_t, size_t, void**);
+
+/*
+ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]);
+
+ independent_comalloc allocates, all at once, a set of n_elements
+ chunks with sizes indicated in the "sizes" array. It returns
+ an array of pointers to these elements, each of which can be
+ independently freed, realloc'ed etc. The elements are guaranteed to
+ be adjacently allocated (this is not guaranteed to occur with
+ multiple callocs or mallocs), which may also improve cache locality
+ in some applications.
+
+ The "chunks" argument is optional (i.e., may be null). If it is null
+ the returned array is itself dynamically allocated and should also
+ be freed when it is no longer needed. Otherwise, the chunks array
+ must be of at least n_elements in length. It is filled in with the
+ pointers to the chunks.
+
+ In either case, independent_comalloc returns this pointer array, or
+ null if the allocation failed. If n_elements is zero and chunks is
+ null, it returns a chunk representing an array with zero elements
+ (which should be freed if not wanted).
+
+ Each element must be individually freed when it is no longer
+ needed. If you'd like to instead be able to free all at once, you
+ should instead use a single regular malloc, and assign pointers at
+ particular offsets in the aggregate space. (In this case though, you
+ cannot independently free elements.)
+
+ independent_comallac differs from independent_calloc in that each
+ element may have a different size, and also that it does not
+ automatically clear elements.
+
+ independent_comalloc can be used to speed up allocation in cases
+ where several structs or objects must always be allocated at the
+ same time. For example:
+
+ struct Head { ... }
+ struct Foot { ... }
+
+ void send_message(char* msg) {
+ int msglen = strlen(msg);
+ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) };
+ void* chunks[3];
+ if (independent_comalloc(3, sizes, chunks) == 0)
+ die();
+ struct Head* head = (struct Head*)(chunks[0]);
+ char* body = (char*)(chunks[1]);
+ struct Foot* foot = (struct Foot*)(chunks[2]);
+ // ...
+ }
+
+ In general though, independent_comalloc is worth using only for
+ larger values of n_elements. For small values, you probably won't
+ detect enough difference from series of malloc calls to bother.
+
+ Overuse of independent_comalloc can increase overall memory usage,
+ since it cannot reuse existing noncontiguous small chunks that
+ might be available for some of the elements.
+*/
+void** dlindependent_comalloc(size_t, size_t*, void**);
+
+
+/*
+ pvalloc(size_t n);
+ Equivalent to valloc(minimum-page-that-holds(n)), that is,
+ round up n to nearest pagesize.
+ */
+void* dlpvalloc(size_t);
+
+/*
+ malloc_trim(size_t pad);
+
+ If possible, gives memory back to the system (via negative arguments
+ to sbrk) if there is unused memory at the `high' end of the malloc
+ pool or in unused MMAP segments. You can call this after freeing
+ large blocks of memory to potentially reduce the system-level memory
+ requirements of a program. However, it cannot guarantee to reduce
+ memory. Under some allocation patterns, some large free blocks of
+ memory will be locked between two used chunks, so they cannot be
+ given back to the system.
+
+ The `pad' argument to malloc_trim represents the amount of free
+ trailing space to leave untrimmed. If this argument is zero, only
+ the minimum amount of memory to maintain internal data structures
+ will be left. Non-zero arguments can be supplied to maintain enough
+ trailing space to service future expected allocations without having
+ to re-obtain memory from the system.
+
+ Malloc_trim returns 1 if it actually released any memory, else 0.
+*/
+int dlmalloc_trim(size_t);
+
+/*
+ malloc_usable_size(void* p);
+
+ Returns the number of bytes you can actually use in
+ an allocated chunk, which may be more than you requested (although
+ often not) due to alignment and minimum size constraints.
+ You can use this many bytes without worrying about
+ overwriting other allocated objects. This is not a particularly great
+ programming practice. malloc_usable_size can be more useful in
+ debugging and assertions, for example:
+
+ p = malloc(n);
+ assert(malloc_usable_size(p) >= 256);
+*/
+size_t dlmalloc_usable_size(void*);
+
+/*
+ malloc_stats();
+ Prints on stderr the amount of space obtained from the system (both
+ via sbrk and mmap), the maximum amount (which may be more than
+ current if malloc_trim and/or munmap got called), and the current
+ number of bytes allocated via malloc (or realloc, etc) but not yet
+ freed. Note that this is the number of bytes allocated, not the
+ number requested. It will be larger than the number requested
+ because of alignment and bookkeeping overhead. Because it includes
+ alignment wastage as being in use, this figure may be greater than
+ zero even when no user-level chunks are allocated.
+
+ The reported current and maximum system memory can be inaccurate if
+ a program makes other calls to system memory allocation functions
+ (normally sbrk) outside of malloc.
+
+ malloc_stats prints only the most commonly interesting statistics.
+ More information can be obtained by calling mallinfo.
+*/
+void dlmalloc_stats(void);
+
+#endif /* ONLY_MSPACES */
+
+#if MSPACES
+
+/*
+ mspace is an opaque type representing an independent
+ region of space that supports mspace_malloc, etc.
+*/
+typedef void* mspace;
+
+/*
+ create_mspace creates and returns a new independent space with the
+ given initial capacity, or, if 0, the default granularity size. It
+ returns null if there is no system memory available to create the
+ space. If argument locked is non-zero, the space uses a separate
+ lock to control access. The capacity of the space will grow
+ dynamically as needed to service mspace_malloc requests. You can
+ control the sizes of incremental increases of this space by
+ compiling with a different DEFAULT_GRANULARITY or dynamically
+ setting with mallopt(M_GRANULARITY, value).
+*/
+mspace create_mspace(size_t capacity, int locked);
+
+/*
+ destroy_mspace destroys the given space, and attempts to return all
+ of its memory back to the system, returning the total number of
+ bytes freed. After destruction, the results of access to all memory
+ used by the space become undefined.
+*/
+size_t destroy_mspace(mspace msp);
+
+/*
+ create_mspace_with_base uses the memory supplied as the initial base
+ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this
+ space is used for bookkeeping, so the capacity must be at least this
+ large. (Otherwise 0 is returned.) When this initial space is
+ exhausted, additional memory will be obtained from the system.
+ Destroying this space will deallocate all additionally allocated
+ space (if possible) but not the initial base.
+*/
+mspace create_mspace_with_base(void* base, size_t capacity, int locked);
+
+/*
+ mspace_malloc behaves as malloc, but operates within
+ the given space.
+*/
+void* mspace_malloc(mspace msp, size_t bytes);
+
+/*
+ mspace_free behaves as free, but operates within
+ the given space.
+
+ If compiled with FOOTERS==1, mspace_free is not actually needed.
+ free may be called instead of mspace_free because freed chunks from
+ any space are handled by their originating spaces.
+*/
+void mspace_free(mspace msp, void* mem);
+
+/*
+ mspace_realloc behaves as realloc, but operates within
+ the given space.
+
+ If compiled with FOOTERS==1, mspace_realloc is not actually
+ needed. realloc may be called instead of mspace_realloc because
+ realloced chunks from any space are handled by their originating
+ spaces.
+*/
+void* mspace_realloc(mspace msp, void* mem, size_t newsize);
+
+/*
+ mspace_calloc behaves as calloc, but operates within
+ the given space.
+*/
+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
+
+/*
+ mspace_memalign behaves as memalign, but operates within
+ the given space.
+*/
+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes);
+
+/*
+ mspace_independent_calloc behaves as independent_calloc, but
+ operates within the given space.
+*/
+void** mspace_independent_calloc(mspace msp, size_t n_elements,
+ size_t elem_size, void* chunks[]);
+
+/*
+ mspace_independent_comalloc behaves as independent_comalloc, but
+ operates within the given space.
+*/
+void** mspace_independent_comalloc(mspace msp, size_t n_elements,
+ size_t sizes[], void* chunks[]);
+
+/*
+ mspace_footprint() returns the number of bytes obtained from the
+ system for this space.
+*/
+size_t mspace_footprint(mspace msp);
+
+/*
+ mspace_max_footprint() returns the peak number of bytes obtained from the
+ system for this space.
+*/
+size_t mspace_max_footprint(mspace msp);
+
+
+#if !NO_MALLINFO
+/*
+ mspace_mallinfo behaves as mallinfo, but reports properties of
+ the given space.
+*/
+struct mallinfo mspace_mallinfo(mspace msp);
+#endif /* NO_MALLINFO */
+
+/*
+ mspace_malloc_stats behaves as malloc_stats, but reports
+ properties of the given space.
+*/
+void mspace_malloc_stats(mspace msp);
+
+/*
+ mspace_trim behaves as malloc_trim, but
+ operates within the given space.
+*/
+int mspace_trim(mspace msp, size_t pad);
+
+/*
+ An alias for mallopt.
+*/
+int mspace_mallopt(int, int);
+
+#endif /* MSPACES */
+
+#ifdef __cplusplus
+}; /* end of extern "C" */
+#endif /* __cplusplus */
+
+/*
+ ========================================================================
+ To make a fully customizable malloc.h header file, cut everything
+ above this line, put into file malloc.h, edit to suit, and #include it
+ on the next line, as well as in programs that use this malloc.
+ ========================================================================
+*/
+
+/* #include "malloc.h" */
+
+/*------------------------------ internal #includes ---------------------- */
+
+#ifdef WIN32
+#pragma warning( disable : 4146 ) /* no "unsigned" warnings */
+#endif /* WIN32 */
+
+#include <stdio.h> /* for printing in malloc_stats */
+
+#ifndef LACKS_ERRNO_H
+#include <errno.h> /* for MALLOC_FAILURE_ACTION */
+#endif /* LACKS_ERRNO_H */
+#if FOOTERS
+#include <time.h> /* for magic initialization */
+#endif /* FOOTERS */
+#ifndef LACKS_STDLIB_H
+#include <stdlib.h> /* for abort() */
+#endif /* LACKS_STDLIB_H */
+#ifdef DEBUG
+#if ABORT_ON_ASSERT_FAILURE
+#define assert(x) if(!(x)) ABORT
+#else /* ABORT_ON_ASSERT_FAILURE */
+#include <assert.h>
+#endif /* ABORT_ON_ASSERT_FAILURE */
+#else /* DEBUG */
+#define assert(x)
+#endif /* DEBUG */
+#ifndef LACKS_STRING_H
+#include <string.h> /* for memset etc */
+#endif /* LACKS_STRING_H */
+#if USE_BUILTIN_FFS
+#ifndef LACKS_STRINGS_H
+#include <strings.h> /* for ffs */
+#endif /* LACKS_STRINGS_H */
+#endif /* USE_BUILTIN_FFS */
+#if HAVE_MMAP
+#ifndef LACKS_SYS_MMAN_H
+#include <sys/mman.h> /* for mmap */
+#endif /* LACKS_SYS_MMAN_H */
+#ifndef LACKS_FCNTL_H
+#include <fcntl.h>
+#endif /* LACKS_FCNTL_H */
+#endif /* HAVE_MMAP */
+#if HAVE_MORECORE
+#ifndef LACKS_UNISTD_H
+#include <unistd.h> /* for sbrk */
+#else /* LACKS_UNISTD_H */
+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
+extern void* sbrk(ptrdiff_t);
+#endif /* FreeBSD etc */
+#endif /* LACKS_UNISTD_H */
+#endif /* HAVE_MMAP */
+
+#ifndef WIN32
+#ifndef malloc_getpagesize
+# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */
+# ifndef _SC_PAGE_SIZE
+# define _SC_PAGE_SIZE _SC_PAGESIZE
+# endif
+# endif
+# ifdef _SC_PAGE_SIZE
+# define malloc_getpagesize sysconf(_SC_PAGE_SIZE)
+# else
+# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
+ extern size_t getpagesize();
+# define malloc_getpagesize getpagesize()
+# else
+# ifdef WIN32 /* use supplied emulation of getpagesize */
+# define malloc_getpagesize getpagesize()
+# else
+# ifndef LACKS_SYS_PARAM_H
+# include <sys/param.h>
+# endif
+# ifdef EXEC_PAGESIZE
+# define malloc_getpagesize EXEC_PAGESIZE
+# else
+# ifdef NBPG
+# ifndef CLSIZE
+# define malloc_getpagesize NBPG
+# else
+# define malloc_getpagesize (NBPG * CLSIZE)
+# endif
+# else
+# ifdef NBPC
+# define malloc_getpagesize NBPC
+# else
+# ifdef PAGESIZE
+# define malloc_getpagesize PAGESIZE
+# else /* just guess */
+# define malloc_getpagesize ((size_t)4096U)
+# endif
+# endif
+# endif
+# endif
+# endif
+# endif
+# endif
+#endif
+#endif
+
+/* ------------------- size_t and alignment properties -------------------- */
+
+/* The byte and bit size of a size_t */
+#define SIZE_T_SIZE (sizeof(size_t))
+#define SIZE_T_BITSIZE (sizeof(size_t) << 3)
+
+/* Some constants coerced to size_t */
+/* Annoying but necessary to avoid errors on some plaftorms */
+#define SIZE_T_ZERO ((size_t)0)
+#define SIZE_T_ONE ((size_t)1)
+#define SIZE_T_TWO ((size_t)2)
+#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1)
+#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2)
+#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
+#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U)
+
+/* The bit mask value corresponding to MALLOC_ALIGNMENT */
+#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE)
+
+/* True if address a has acceptable alignment */
+#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)
+
+/* the number of bytes to offset an address to align it */
+#define align_offset(A)\
+ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
+ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))
+
+/* -------------------------- MMAP preliminaries ------------------------- */
+
+/*
+ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and
+ checks to fail so compiler optimizer can delete code rather than
+ using so many "#if"s.
+*/
+
+
+/* MORECORE and MMAP must return MFAIL on failure */
+#define MFAIL ((void*)(MAX_SIZE_T))
+#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */
+
+#if !HAVE_MMAP
+#define IS_MMAPPED_BIT (SIZE_T_ZERO)
+#define USE_MMAP_BIT (SIZE_T_ZERO)
+#define CALL_MMAP(s) MFAIL
+#define CALL_MUNMAP(a, s) (-1)
+#define DIRECT_MMAP(s) MFAIL
+
+#else /* HAVE_MMAP */
+#define IS_MMAPPED_BIT (SIZE_T_ONE)
+#define USE_MMAP_BIT (SIZE_T_ONE)
+
+#ifndef WIN32
+#define CALL_MUNMAP(a, s) munmap((a), (s))
+#define MMAP_PROT (PROT_READ|PROT_WRITE)
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS MAP_ANON
+#endif /* MAP_ANON */
+#ifdef MAP_ANONYMOUS
+#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS)
+#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0)
+#else /* MAP_ANONYMOUS */
+/*
+ Nearly all versions of mmap support MAP_ANONYMOUS, so the following
+ is unlikely to be needed, but is supplied just in case.
+*/
+#define MMAP_FLAGS (MAP_PRIVATE)
+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
+#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \
+ (dev_zero_fd = open("/dev/zero", O_RDWR), \
+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \
+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0))
+#endif /* MAP_ANONYMOUS */
+
+#define DIRECT_MMAP(s) CALL_MMAP(s)
+#else /* WIN32 */
+
+/* Win32 MMAP via VirtualAlloc */
+static void* win32mmap(size_t size) {
+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+ return (ptr != 0)? ptr: MFAIL;
+}
+
+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
+static void* win32direct_mmap(size_t size) {
+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
+ PAGE_READWRITE);
+ return (ptr != 0)? ptr: MFAIL;
+}
+
+/* This function supports releasing coalesed segments */
+static int win32munmap(void* ptr, size_t size) {
+ MEMORY_BASIC_INFORMATION minfo;
+ char* cptr = ptr;
+ while (size) {
+ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0)
+ return -1;
+ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr ||
+ minfo.State != MEM_COMMIT || minfo.RegionSize > size)
+ return -1;
+ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0)
+ return -1;
+ cptr += minfo.RegionSize;
+ size -= minfo.RegionSize;
+ }
+ return 0;
+}
+
+#define CALL_MMAP(s) win32mmap(s)
+#define CALL_MUNMAP(a, s) win32munmap((a), (s))
+#define DIRECT_MMAP(s) win32direct_mmap(s)
+#endif /* WIN32 */
+#endif /* HAVE_MMAP */
+
+#if HAVE_MMAP && HAVE_MREMAP
+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv))
+#else /* HAVE_MMAP && HAVE_MREMAP */
+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
+#endif /* HAVE_MMAP && HAVE_MREMAP */
+
+#if HAVE_MORECORE
+#define CALL_MORECORE(S) MORECORE(S)
+#else /* HAVE_MORECORE */
+#define CALL_MORECORE(S) MFAIL
+#endif /* HAVE_MORECORE */
+
+/* mstate bit set if continguous morecore disabled or failed */
+#define USE_NONCONTIGUOUS_BIT (4U)
+
+/* segment bit set in create_mspace_with_base */
+#define EXTERN_BIT (8U)
+
+
+/* --------------------------- Lock preliminaries ------------------------ */
+
+#if USE_LOCKS
+
+/*
+ When locks are defined, there are up to two global locks:
+
+ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to
+ MORECORE. In many cases sys_alloc requires two calls, that should
+ not be interleaved with calls by other threads. This does not
+ protect against direct calls to MORECORE by other threads not
+ using this lock, so there is still code to cope the best we can on
+ interference.
+
+ * magic_init_mutex ensures that mparams.magic and other
+ unique mparams values are initialized only once.
+*/
+
+#ifndef WIN32
+/* By default use posix locks */
+#include <pthread.h>
+#define MLOCK_T pthread_mutex_t
+#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL)
+#define ACQUIRE_LOCK(l) pthread_mutex_lock(l)
+#define RELEASE_LOCK(l) pthread_mutex_unlock(l)
+
+#if HAVE_MORECORE
+static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif /* HAVE_MORECORE */
+
+static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#else /* WIN32 */
+/*
+ Because lock-protected regions have bounded times, and there
+ are no recursive lock calls, we can use simple spinlocks.
+*/
+
+#define MLOCK_T long
+static int win32_acquire_lock (MLOCK_T *sl) {
+ for (;;) {
+#ifdef InterlockedCompareExchangePointer
+ if (!InterlockedCompareExchange(sl, 1, 0))
+ return 0;
+#else /* Use older void* version */
+ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0))
+ return 0;
+#endif /* InterlockedCompareExchangePointer */
+ Sleep (0);
+ }
+}
+
+static void win32_release_lock (MLOCK_T *sl) {
+ InterlockedExchange (sl, 0);
+}
+
+#define INITIAL_LOCK(l) *(l)=0
+#define ACQUIRE_LOCK(l) win32_acquire_lock(l)
+#define RELEASE_LOCK(l) win32_release_lock(l)
+#if HAVE_MORECORE
+static MLOCK_T morecore_mutex;
+#endif /* HAVE_MORECORE */
+static MLOCK_T magic_init_mutex;
+#endif /* WIN32 */
+
+#define USE_LOCK_BIT (2U)
+#else /* USE_LOCKS */
+#define USE_LOCK_BIT (0U)
+#define INITIAL_LOCK(l)
+#endif /* USE_LOCKS */
+
+#if USE_LOCKS && HAVE_MORECORE
+#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex);
+#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex);
+#else /* USE_LOCKS && HAVE_MORECORE */
+#define ACQUIRE_MORECORE_LOCK()
+#define RELEASE_MORECORE_LOCK()
+#endif /* USE_LOCKS && HAVE_MORECORE */
+
+#if USE_LOCKS
+#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex);
+#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex);
+#else /* USE_LOCKS */
+#define ACQUIRE_MAGIC_INIT_LOCK()
+#define RELEASE_MAGIC_INIT_LOCK()
+#endif /* USE_LOCKS */
+
+
+/* ----------------------- Chunk representations ------------------------ */
+
+/*
+ (The following includes lightly edited explanations by Colin Plumb.)
+
+ The malloc_chunk declaration below is misleading (but accurate and
+ necessary). It declares a "view" into memory allowing access to
+ necessary fields at known offsets from a given base.
+
+ Chunks of memory are maintained using a `boundary tag' method as
+ originally described by Knuth. (See the paper by Paul Wilson
+ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such
+ techniques.) Sizes of free chunks are stored both in the front of
+ each chunk and at the end. This makes consolidating fragmented
+ chunks into bigger chunks fast. The head fields also hold bits
+ representing whether chunks are free or in use.
+
+ Here are some pictures to make it clearer. They are "exploded" to
+ show that the state of a chunk can be thought of as extending from
+ the high 31 bits of the head field of its header through the
+ prev_foot and PINUSE_BIT bit of the following chunk header.
+
+ A chunk that's in use looks like:
+
+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Size of previous chunk (if P = 1) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
+ | Size of this chunk 1| +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ +- -+
+ | |
+ +- -+
+ | :
+ +- size - sizeof(size_t) available payload bytes -+
+ : |
+ chunk-> +- -+
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1|
+ | Size of next chunk (may or may not be in use) | +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ And if it's free, it looks like this:
+
+ chunk-> +- -+
+ | User payload (must be in use, or we would have merged!) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
+ | Size of this chunk 0| +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Next pointer |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Prev pointer |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | :
+ +- size - sizeof(struct chunk) unused bytes -+
+ : |
+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Size of this chunk |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0|
+ | Size of next chunk (must be in use, or we would have merged)| +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | :
+ +- User payload -+
+ : |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ |0|
+ +-+
+ Note that since we always merge adjacent free chunks, the chunks
+ adjacent to a free chunk must be in use.
+
+ Given a pointer to a chunk (which can be derived trivially from the
+ payload pointer) we can, in O(1) time, find out whether the adjacent
+ chunks are free, and if so, unlink them from the lists that they
+ are on and merge them with the current chunk.
+
+ Chunks always begin on even word boundaries, so the mem portion
+ (which is returned to the user) is also on an even word boundary, and
+ thus at least double-word aligned.
+
+ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the
+ chunk size (which is always a multiple of two words), is an in-use
+ bit for the *previous* chunk. If that bit is *clear*, then the
+ word before the current chunk size contains the previous chunk
+ size, and can be used to find the front of the previous chunk.
+ The very first chunk allocated always has this bit set, preventing
+ access to non-existent (or non-owned) memory. If pinuse is set for
+ any given chunk, then you CANNOT determine the size of the
+ previous chunk, and might even get a memory addressing fault when
+ trying to do so.
+
+ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of
+ the chunk size redundantly records whether the current chunk is
+ inuse. This redundancy enables usage checks within free and realloc,
+ and reduces indirection when freeing and consolidating chunks.
+
+ Each freshly allocated chunk must have both cinuse and pinuse set.
+ That is, each allocated chunk borders either a previously allocated
+ and still in-use chunk, or the base of its memory arena. This is
+ ensured by making all allocations from the the `lowest' part of any
+ found chunk. Further, no free chunk physically borders another one,
+ so each free chunk is known to be preceded and followed by either
+ inuse chunks or the ends of memory.
+
+ Note that the `foot' of the current chunk is actually represented
+ as the prev_foot of the NEXT chunk. This makes it easier to
+ deal with alignments etc but can be very confusing when trying
+ to extend or adapt this code.
+
+ The exceptions to all this are
+
+ 1. The special chunk `top' is the top-most available chunk (i.e.,
+ the one bordering the end of available memory). It is treated
+ specially. Top is never included in any bin, is used only if
+ no other chunk is available, and is released back to the
+ system if it is very large (see M_TRIM_THRESHOLD). In effect,
+ the top chunk is treated as larger (and thus less well
+ fitting) than any other available chunk. The top chunk
+ doesn't update its trailing size field since there is no next
+ contiguous chunk that would have to index off it. However,
+ space is still allocated for it (TOP_FOOT_SIZE) to enable
+ separation or merging when space is extended.
+
+ 3. Chunks allocated via mmap, which have the lowest-order bit
+ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set
+ PINUSE_BIT in their head fields. Because they are allocated
+ one-by-one, each must carry its own prev_foot field, which is
+ also used to hold the offset this chunk has within its mmapped
+ region, which is needed to preserve alignment. Each mmapped
+ chunk is trailed by the first two fields of a fake next-chunk
+ for sake of usage checks.
+
+*/
+
+struct malloc_chunk {
+ size_t prev_foot; /* Size of previous chunk (if free). */
+ size_t head; /* Size and inuse bits. */
+ struct malloc_chunk* fd; /* double links -- used only if free. */
+ struct malloc_chunk* bk;
+};
+
+typedef struct malloc_chunk mchunk;
+typedef struct malloc_chunk* mchunkptr;
+typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */
+typedef unsigned int bindex_t; /* Described below */
+typedef unsigned int binmap_t; /* Described below */
+typedef unsigned int flag_t; /* The type of various bit flag sets */
+
+/* ------------------- Chunks sizes and alignments ----------------------- */
+
+#define MCHUNK_SIZE (sizeof(mchunk))
+
+#if FOOTERS
+#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
+#else /* FOOTERS */
+#define CHUNK_OVERHEAD (SIZE_T_SIZE)
+#endif /* FOOTERS */
+
+/* MMapped chunks need a second word of overhead ... */
+#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
+/* ... and additional padding for fake next-chunk at foot */
+#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES)
+
+/* The smallest size we can malloc is an aligned minimal chunk */
+#define MIN_CHUNK_SIZE\
+ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
+
+/* conversion from malloc headers to user pointers, and back */
+#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES))
+#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
+/* chunk associated with aligned address A */
+#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A)))
+
+/* Bounds on request (not chunk) sizes. */
+#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2)
+#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
+
+/* pad request bytes into a usable size */
+#define pad_request(req) \
+ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
+
+/* pad request, checking for minimum (but not maximum) */
+#define request2size(req) \
+ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
+
+
+/* ------------------ Operations on head and foot fields ----------------- */
+
+/*
+ The head field of a chunk is or'ed with PINUSE_BIT when previous
+ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in
+ use. If the chunk was obtained with mmap, the prev_foot field has
+ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the
+ mmapped region to the base of the chunk.
+*/
+
+#define PINUSE_BIT (SIZE_T_ONE)
+#define CINUSE_BIT (SIZE_T_TWO)
+#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT)
+
+/* Head value for fenceposts */
+#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE)
+
+/* extraction of fields from head words */
+#define cinuse(p) ((p)->head & CINUSE_BIT)
+#define pinuse(p) ((p)->head & PINUSE_BIT)
+#define chunksize(p) ((p)->head & ~(INUSE_BITS))
+
+#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT)
+#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT)
+
+/* Treat space at ptr +/- offset as a chunk */
+#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s)))
+#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s)))
+
+/* Ptr to next or previous physical malloc_chunk. */
+#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS)))
+#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))
+
+/* extract next chunk's pinuse bit */
+#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT)
+
+/* Get/set size at footer */
+#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot)
+#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))
+
+/* Set size, pinuse bit, and foot */
+#define set_size_and_pinuse_of_free_chunk(p, s)\
+ ((p)->head = (s|PINUSE_BIT), set_foot(p, s))
+
+/* Set size, pinuse bit, foot, and clear next pinuse */
+#define set_free_with_pinuse(p, s, n)\
+ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))
+
+#define is_mmapped(p)\
+ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT))
+
+/* Get the internal overhead associated with chunk p */
+#define overhead_for(p)\
+ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)
+
+/* Return true if malloced space is not necessarily cleared */
+#if MMAP_CLEARS
+#define calloc_must_clear(p) (!is_mmapped(p))
+#else /* MMAP_CLEARS */
+#define calloc_must_clear(p) (1)
+#endif /* MMAP_CLEARS */
+
+/* ---------------------- Overlaid data structures ----------------------- */
+
+/*
+ When chunks are not in use, they are treated as nodes of either
+ lists or trees.
+
+ "Small" chunks are stored in circular doubly-linked lists, and look
+ like this:
+
+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Size of previous chunk |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ `head:' | Size of chunk, in bytes |P|
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Forward pointer to next chunk in list |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Back pointer to previous chunk in list |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Unused space (may be 0 bytes long) .
+ . .
+ . |
+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ `foot:' | Size of chunk, in bytes |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Larger chunks are kept in a form of bitwise digital trees (aka
+ tries) keyed on chunksizes. Because malloc_tree_chunks are only for
+ free chunks greater than 256 bytes, their size doesn't impose any
+ constraints on user chunk sizes. Each node looks like:
+
+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Size of previous chunk |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ `head:' | Size of chunk, in bytes |P|
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Forward pointer to next chunk of same size |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Back pointer to previous chunk of same size |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Pointer to left child (child[0]) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Pointer to right child (child[1]) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Pointer to parent |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | bin index of this chunk |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Unused space .
+ . |
+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ `foot:' | Size of chunk, in bytes |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Each tree holding treenodes is a tree of unique chunk sizes. Chunks
+ of the same size are arranged in a circularly-linked list, with only
+ the oldest chunk (the next to be used, in our FIFO ordering)
+ actually in the tree. (Tree members are distinguished by a non-null
+ parent pointer.) If a chunk with the same size an an existing node
+ is inserted, it is linked off the existing node using pointers that
+ work in the same way as fd/bk pointers of small chunks.
+
+ Each tree contains a power of 2 sized range of chunk sizes (the
+ smallest is 0x100 <= x < 0x180), which is is divided in half at each
+ tree level, with the chunks in the smaller half of the range (0x100
+ <= x < 0x140 for the top nose) in the left subtree and the larger
+ half (0x140 <= x < 0x180) in the right subtree. This is, of course,
+ done by inspecting individual bits.
+
+ Using these rules, each node's left subtree contains all smaller
+ sizes than its right subtree. However, the node at the root of each
+ subtree has no particular ordering relationship to either. (The
+ dividing line between the subtree sizes is based on trie relation.)
+ If we remove the last chunk of a given size from the interior of the
+ tree, we need to replace it with a leaf node. The tree ordering
+ rules permit a node to be replaced by any leaf below it.
+
+ The smallest chunk in a tree (a common operation in a best-fit
+ allocator) can be found by walking a path to the leftmost leaf in
+ the tree. Unlike a usual binary tree, where we follow left child
+ pointers until we reach a null, here we follow the right child
+ pointer any time the left one is null, until we reach a leaf with
+ both child pointers null. The smallest chunk in the tree will be
+ somewhere along that path.
+
+ The worst case number of steps to add, find, or remove a node is
+ bounded by the number of bits differentiating chunks within
+ bins. Under current bin calculations, this ranges from 6 up to 21
+ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case
+ is of course much better.
+*/
+
+struct malloc_tree_chunk {
+ /* The first four fields must be compatible with malloc_chunk */
+ size_t prev_foot;
+ size_t head;
+ struct malloc_tree_chunk* fd;
+ struct malloc_tree_chunk* bk;
+
+ struct malloc_tree_chunk* child[2];
+ struct malloc_tree_chunk* parent;
+ bindex_t index;
+};
+
+typedef struct malloc_tree_chunk tchunk;
+typedef struct malloc_tree_chunk* tchunkptr;
+typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */
+
+/* A little helper macro for trees */
+#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])
+
+/* ----------------------------- Segments -------------------------------- */
+
+/*
+ Each malloc space may include non-contiguous segments, held in a
+ list headed by an embedded malloc_segment record representing the
+ top-most space. Segments also include flags holding properties of
+ the space. Large chunks that are directly allocated by mmap are not
+ included in this list. They are instead independently created and
+ destroyed without otherwise keeping track of them.
+
+ Segment management mainly comes into play for spaces allocated by
+ MMAP. Any call to MMAP might or might not return memory that is
+ adjacent to an existing segment. MORECORE normally contiguously
+ extends the current space, so this space is almost always adjacent,
+ which is simpler and faster to deal with. (This is why MORECORE is
+ used preferentially to MMAP when both are available -- see
+ sys_alloc.) When allocating using MMAP, we don't use any of the
+ hinting mechanisms (inconsistently) supported in various
+ implementations of unix mmap, or distinguish reserving from
+ committing memory. Instead, we just ask for space, and exploit
+ contiguity when we get it. It is probably possible to do
+ better than this on some systems, but no general scheme seems
+ to be significantly better.
+
+ Management entails a simpler variant of the consolidation scheme
+ used for chunks to reduce fragmentation -- new adjacent memory is
+ normally prepended or appended to an existing segment. However,
+ there are limitations compared to chunk consolidation that mostly
+ reflect the fact that segment processing is relatively infrequent
+ (occurring only when getting memory from system) and that we
+ don't expect to have huge numbers of segments:
+
+ * Segments are not indexed, so traversal requires linear scans. (It
+ would be possible to index these, but is not worth the extra
+ overhead and complexity for most programs on most platforms.)
+ * New segments are only appended to old ones when holding top-most
+ memory; if they cannot be prepended to others, they are held in
+ different segments.
+
+ Except for the top-most segment of an mstate, each segment record
+ is kept at the tail of its segment. Segments are added by pushing
+ segment records onto the list headed by &mstate.seg for the
+ containing mstate.
+
+ Segment flags control allocation/merge/deallocation policies:
+ * If EXTERN_BIT set, then we did not allocate this segment,
+ and so should not try to deallocate or merge with others.
+ (This currently holds only for the initial segment passed
+ into create_mspace_with_base.)
+ * If IS_MMAPPED_BIT set, the segment may be merged with
+ other surrounding mmapped segments and trimmed/de-allocated
+ using munmap.
+ * If neither bit is set, then the segment was obtained using
+ MORECORE so can be merged with surrounding MORECORE'd segments
+ and deallocated/trimmed using MORECORE with negative arguments.
+*/
+
+struct malloc_segment {
+ char* base; /* base address */
+ size_t size; /* allocated size */
+ struct malloc_segment* next; /* ptr to next segment */
+#if FFI_MMAP_EXEC_WRIT
+ /* The mmap magic is supposed to store the address of the executable
+ segment at the very end of the requested block. */
+
+# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t)))
+
+ /* We can only merge segments if their corresponding executable
+ segments are at identical offsets. */
+# define check_segment_merge(S,b,s) \
+ (mmap_exec_offset((b),(s)) == (S)->exec_offset)
+
+# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset)
+# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset)
+
+ /* The removal of sflags only works with HAVE_MORECORE == 0. */
+
+# define get_segment_flags(S) (IS_MMAPPED_BIT)
+# define set_segment_flags(S,v) \
+ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \
+ (((S)->exec_offset = \
+ mmap_exec_offset((S)->base, (S)->size)), \
+ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \
+ (S)->exec_offset) ? (ABORT, (v)) : \
+ (mmap_exec_offset((S)->base, (S)->size) = 0), (v)))
+
+ /* We use an offset here, instead of a pointer, because then, when
+ base changes, we don't have to modify this. On architectures
+ with segmented addresses, this might not work. */
+ ptrdiff_t exec_offset;
+#else
+
+# define get_segment_flags(S) ((S)->sflags)
+# define set_segment_flags(S,v) ((S)->sflags = (v))
+# define check_segment_merge(S,b,s) (1)
+
+ flag_t sflags; /* mmap and extern flag */
+#endif
+};
+
+#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT)
+#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT)
+
+typedef struct malloc_segment msegment;
+typedef struct malloc_segment* msegmentptr;
+
+/* ---------------------------- malloc_state ----------------------------- */
+
+/*
+ A malloc_state holds all of the bookkeeping for a space.
+ The main fields are:
+
+ Top
+ The topmost chunk of the currently active segment. Its size is
+ cached in topsize. The actual size of topmost space is
+ topsize+TOP_FOOT_SIZE, which includes space reserved for adding
+ fenceposts and segment records if necessary when getting more
+ space from the system. The size at which to autotrim top is
+ cached from mparams in trim_check, except that it is disabled if
+ an autotrim fails.
+
+ Designated victim (dv)
+ This is the preferred chunk for servicing small requests that
+ don't have exact fits. It is normally the chunk split off most
+ recently to service another small request. Its size is cached in
+ dvsize. The link fields of this chunk are not maintained since it
+ is not kept in a bin.
+
+ SmallBins
+ An array of bin headers for free chunks. These bins hold chunks
+ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains
+ chunks of all the same size, spaced 8 bytes apart. To simplify
+ use in double-linked lists, each bin header acts as a malloc_chunk
+ pointing to the real first node, if it exists (else pointing to
+ itself). This avoids special-casing for headers. But to avoid
+ waste, we allocate only the fd/bk pointers of bins, and then use
+ repositioning tricks to treat these as the fields of a chunk.
+
+ TreeBins
+ Treebins are pointers to the roots of trees holding a range of
+ sizes. There are 2 equally spaced treebins for each power of two
+ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything
+ larger.
+
+ Bin maps
+ There is one bit map for small bins ("smallmap") and one for
+ treebins ("treemap). Each bin sets its bit when non-empty, and
+ clears the bit when empty. Bit operations are then used to avoid
+ bin-by-bin searching -- nearly all "search" is done without ever
+ looking at bins that won't be selected. The bit maps
+ conservatively use 32 bits per map word, even if on 64bit system.
+ For a good description of some of the bit-based techniques used
+ here, see Henry S. Warren Jr's book "Hacker's Delight" (and
+ supplement at http://hackersdelight.org/). Many of these are
+ intended to reduce the branchiness of paths through malloc etc, as
+ well as to reduce the number of memory locations read or written.
+
+ Segments
+ A list of segments headed by an embedded malloc_segment record
+ representing the initial space.
+
+ Address check support
+ The least_addr field is the least address ever obtained from
+ MORECORE or MMAP. Attempted frees and reallocs of any address less
+ than this are trapped (unless INSECURE is defined).
+
+ Magic tag
+ A cross-check field that should always hold same value as mparams.magic.
+
+ Flags
+ Bits recording whether to use MMAP, locks, or contiguous MORECORE
+
+ Statistics
+ Each space keeps track of current and maximum system memory
+ obtained via MORECORE or MMAP.
+
+ Locking
+ If USE_LOCKS is defined, the "mutex" lock is acquired and released
+ around every public call using this mspace.
+*/
+
+/* Bin types, widths and sizes */
+#define NSMALLBINS (32U)
+#define NTREEBINS (32U)
+#define SMALLBIN_SHIFT (3U)
+#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT)
+#define TREEBIN_SHIFT (8U)
+#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT)
+#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE)
+#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)
+
+struct malloc_state {
+ binmap_t smallmap;
+ binmap_t treemap;
+ size_t dvsize;
+ size_t topsize;
+ char* least_addr;
+ mchunkptr dv;
+ mchunkptr top;
+ size_t trim_check;
+ size_t magic;
+ mchunkptr smallbins[(NSMALLBINS+1)*2];
+ tbinptr treebins[NTREEBINS];
+ size_t footprint;
+ size_t max_footprint;
+ flag_t mflags;
+#if USE_LOCKS
+ MLOCK_T mutex; /* locate lock among fields that rarely change */
+#endif /* USE_LOCKS */
+ msegment seg;
+};
+
+typedef struct malloc_state* mstate;
+
+/* ------------- Global malloc_state and malloc_params ------------------- */
+
+/*
+ malloc_params holds global properties, including those that can be
+ dynamically set using mallopt. There is a single instance, mparams,
+ initialized in init_mparams.
+*/
+
+struct malloc_params {
+ size_t magic;
+ size_t page_size;
+ size_t granularity;
+ size_t mmap_threshold;
+ size_t trim_threshold;
+ flag_t default_mflags;
+};
+
+static struct malloc_params mparams;
+
+/* The global malloc_state used for all non-"mspace" calls */
+static struct malloc_state _gm_;
+#define gm (&_gm_)
+#define is_global(M) ((M) == &_gm_)
+#define is_initialized(M) ((M)->top != 0)
+
+/* -------------------------- system alloc setup ------------------------- */
+
+/* Operations on mflags */
+
+#define use_lock(M) ((M)->mflags & USE_LOCK_BIT)
+#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT)
+#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT)
+
+#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT)
+#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT)
+#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT)
+
+#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT)
+#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT)
+
+#define set_lock(M,L)\
+ ((M)->mflags = (L)?\
+ ((M)->mflags | USE_LOCK_BIT) :\
+ ((M)->mflags & ~USE_LOCK_BIT))
+
+/* page-align a size */
+#define page_align(S)\
+ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE))
+
+/* granularity-align a size */
+#define granularity_align(S)\
+ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE))
+
+#define is_page_aligned(S)\
+ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
+#define is_granularity_aligned(S)\
+ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
+
+/* True if segment S holds address A */
+#define segment_holds(S, A)\
+ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
+
+/* Return segment holding given address */
+static msegmentptr segment_holding(mstate m, char* addr) {
+ msegmentptr sp = &m->seg;
+ for (;;) {
+ if (addr >= sp->base && addr < sp->base + sp->size)
+ return sp;
+ if ((sp = sp->next) == 0)
+ return 0;
+ }
+}
+
+/* Return true if segment contains a segment link */
+static int has_segment_link(mstate m, msegmentptr ss) {
+ msegmentptr sp = &m->seg;
+ for (;;) {
+ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size)
+ return 1;
+ if ((sp = sp->next) == 0)
+ return 0;
+ }
+}
+
+#ifndef MORECORE_CANNOT_TRIM
+#define should_trim(M,s) ((s) > (M)->trim_check)
+#else /* MORECORE_CANNOT_TRIM */
+#define should_trim(M,s) (0)
+#endif /* MORECORE_CANNOT_TRIM */
+
+/*
+ TOP_FOOT_SIZE is padding at the end of a segment, including space
+ that may be needed to place segment records and fenceposts when new
+ noncontiguous segments are added.
+*/
+#define TOP_FOOT_SIZE\
+ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
+
+
+/* ------------------------------- Hooks -------------------------------- */
+
+/*
+ PREACTION should be defined to return 0 on success, and nonzero on
+ failure. If you are not using locking, you can redefine these to do
+ anything you like.
+*/
+
+#if USE_LOCKS
+
+/* Ensure locks are initialized */
+#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams())
+
+#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0)
+#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); }
+#else /* USE_LOCKS */
+
+#ifndef PREACTION
+#define PREACTION(M) (0)
+#endif /* PREACTION */
+
+#ifndef POSTACTION
+#define POSTACTION(M)
+#endif /* POSTACTION */
+
+#endif /* USE_LOCKS */
+
+/*
+ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses.
+ USAGE_ERROR_ACTION is triggered on detected bad frees and
+ reallocs. The argument p is an address that might have triggered the
+ fault. It is ignored by the two predefined actions, but might be
+ useful in custom actions that try to help diagnose errors.
+*/
+
+#if PROCEED_ON_ERROR
+
+/* A count of the number of corruption errors causing resets */
+int malloc_corruption_error_count;
+
+/* default corruption action */
+static void reset_on_error(mstate m);
+
+#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m)
+#define USAGE_ERROR_ACTION(m, p)
+
+#else /* PROCEED_ON_ERROR */
+
+#ifndef CORRUPTION_ERROR_ACTION
+#define CORRUPTION_ERROR_ACTION(m) ABORT
+#endif /* CORRUPTION_ERROR_ACTION */
+
+#ifndef USAGE_ERROR_ACTION
+#define USAGE_ERROR_ACTION(m,p) ABORT
+#endif /* USAGE_ERROR_ACTION */
+
+#endif /* PROCEED_ON_ERROR */
+
+/* -------------------------- Debugging setup ---------------------------- */
+
+#if ! DEBUG
+
+#define check_free_chunk(M,P)
+#define check_inuse_chunk(M,P)
+#define check_malloced_chunk(M,P,N)
+#define check_mmapped_chunk(M,P)
+#define check_malloc_state(M)
+#define check_top_chunk(M,P)
+
+#else /* DEBUG */
+#define check_free_chunk(M,P) do_check_free_chunk(M,P)
+#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P)
+#define check_top_chunk(M,P) do_check_top_chunk(M,P)
+#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N)
+#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P)
+#define check_malloc_state(M) do_check_malloc_state(M)
+
+static void do_check_any_chunk(mstate m, mchunkptr p);
+static void do_check_top_chunk(mstate m, mchunkptr p);
+static void do_check_mmapped_chunk(mstate m, mchunkptr p);
+static void do_check_inuse_chunk(mstate m, mchunkptr p);
+static void do_check_free_chunk(mstate m, mchunkptr p);
+static void do_check_malloced_chunk(mstate m, void* mem, size_t s);
+static void do_check_tree(mstate m, tchunkptr t);
+static void do_check_treebin(mstate m, bindex_t i);
+static void do_check_smallbin(mstate m, bindex_t i);
+static void do_check_malloc_state(mstate m);
+static int bin_find(mstate m, mchunkptr x);
+static size_t traverse_and_check(mstate m);
+#endif /* DEBUG */
+
+/* ---------------------------- Indexing Bins ---------------------------- */
+
+#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)
+#define small_index(s) ((s) >> SMALLBIN_SHIFT)
+#define small_index2size(i) ((i) << SMALLBIN_SHIFT)
+#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE))
+
+/* addressing by index. See above about smallbin repositioning */
+#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))
+#define treebin_at(M,i) (&((M)->treebins[i]))
+
+/* assign tree index for size S to variable I */
+#if defined(__GNUC__) && defined(i386)
+#define compute_tree_index(S, I)\
+{\
+ size_t X = S >> TREEBIN_SHIFT;\
+ if (X == 0)\
+ I = 0;\
+ else if (X > 0xFFFF)\
+ I = NTREEBINS-1;\
+ else {\
+ unsigned int K;\
+ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\
+ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
+ }\
+}
+#else /* GNUC */
+#define compute_tree_index(S, I)\
+{\
+ size_t X = S >> TREEBIN_SHIFT;\
+ if (X == 0)\
+ I = 0;\
+ else if (X > 0xFFFF)\
+ I = NTREEBINS-1;\
+ else {\
+ unsigned int Y = (unsigned int)X;\
+ unsigned int N = ((Y - 0x100) >> 16) & 8;\
+ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\
+ N += K;\
+ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\
+ K = 14 - N + ((Y <<= K) >> 15);\
+ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\
+ }\
+}
+#endif /* GNUC */
+
+/* Bit representing maximum resolved size in a treebin at i */
+#define bit_for_tree_index(i) \
+ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)
+
+/* Shift placing maximum resolved bit in a treebin at i as sign bit */
+#define leftshift_for_tree_index(i) \
+ ((i == NTREEBINS-1)? 0 : \
+ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2)))
+
+/* The size of the smallest chunk held in bin with index i */
+#define minsize_for_tree_index(i) \
+ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \
+ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1)))
+
+
+/* ------------------------ Operations on bin maps ----------------------- */
+
+/* bit corresponding to given index */
+#define idx2bit(i) ((binmap_t)(1) << (i))
+
+/* Mark/Clear bits with given index */
+#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i))
+#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i))
+#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i))
+
+#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i))
+#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i))
+#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i))
+
+/* index corresponding to given bit */
+
+#if defined(__GNUC__) && defined(i386)
+#define compute_bit2idx(X, I)\
+{\
+ unsigned int J;\
+ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\
+ I = (bindex_t)J;\
+}
+
+#else /* GNUC */
+#if USE_BUILTIN_FFS
+#define compute_bit2idx(X, I) I = ffs(X)-1
+
+#else /* USE_BUILTIN_FFS */
+#define compute_bit2idx(X, I)\
+{\
+ unsigned int Y = X - 1;\
+ unsigned int K = Y >> (16-4) & 16;\
+ unsigned int N = K; Y >>= K;\
+ N += K = Y >> (8-3) & 8; Y >>= K;\
+ N += K = Y >> (4-2) & 4; Y >>= K;\
+ N += K = Y >> (2-1) & 2; Y >>= K;\
+ N += K = Y >> (1-0) & 1; Y >>= K;\
+ I = (bindex_t)(N + Y);\
+}
+#endif /* USE_BUILTIN_FFS */
+#endif /* GNUC */
+
+/* isolate the least set bit of a bitmap */
+#define least_bit(x) ((x) & -(x))
+
+/* mask with all bits to left of least bit of x on */
+#define left_bits(x) ((x<<1) | -(x<<1))
+
+/* mask with all bits to left of or equal to least bit of x on */
+#define same_or_left_bits(x) ((x) | -(x))
+
+
+/* ----------------------- Runtime Check Support ------------------------- */
+
+/*
+ For security, the main invariant is that malloc/free/etc never
+ writes to a static address other than malloc_state, unless static
+ malloc_state itself has been corrupted, which cannot occur via
+ malloc (because of these checks). In essence this means that we
+ believe all pointers, sizes, maps etc held in malloc_state, but
+ check all of those linked or offsetted from other embedded data
+ structures. These checks are interspersed with main code in a way
+ that tends to minimize their run-time cost.
+
+ When FOOTERS is defined, in addition to range checking, we also
+ verify footer fields of inuse chunks, which can be used guarantee
+ that the mstate controlling malloc/free is intact. This is a
+ streamlined version of the approach described by William Robertson
+ et al in "Run-time Detection of Heap-based Overflows" LISA'03
+ http://www.usenix.org/events/lisa03/tech/robertson.html The footer
+ of an inuse chunk holds the xor of its mstate and a random seed,
+ that is checked upon calls to free() and realloc(). This is
+ (probablistically) unguessable from outside the program, but can be
+ computed by any code successfully malloc'ing any chunk, so does not
+ itself provide protection against code that has already broken
+ security through some other means. Unlike Robertson et al, we
+ always dynamically check addresses of all offset chunks (previous,
+ next, etc). This turns out to be cheaper than relying on hashes.
+*/
+
+#if !INSECURE
+/* Check if address a is at least as high as any from MORECORE or MMAP */
+#define ok_address(M, a) ((char*)(a) >= (M)->least_addr)
+/* Check if address of next chunk n is higher than base chunk p */
+#define ok_next(p, n) ((char*)(p) < (char*)(n))
+/* Check if p has its cinuse bit on */
+#define ok_cinuse(p) cinuse(p)
+/* Check if p has its pinuse bit on */
+#define ok_pinuse(p) pinuse(p)
+
+#else /* !INSECURE */
+#define ok_address(M, a) (1)
+#define ok_next(b, n) (1)
+#define ok_cinuse(p) (1)
+#define ok_pinuse(p) (1)
+#endif /* !INSECURE */
+
+#if (FOOTERS && !INSECURE)
+/* Check if (alleged) mstate m has expected magic field */
+#define ok_magic(M) ((M)->magic == mparams.magic)
+#else /* (FOOTERS && !INSECURE) */
+#define ok_magic(M) (1)
+#endif /* (FOOTERS && !INSECURE) */
+
+
+/* In gcc, use __builtin_expect to minimize impact of checks */
+#if !INSECURE
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define RTCHECK(e) __builtin_expect(e, 1)
+#else /* GNUC */
+#define RTCHECK(e) (e)
+#endif /* GNUC */
+#else /* !INSECURE */
+#define RTCHECK(e) (1)
+#endif /* !INSECURE */
+
+/* macros to set up inuse chunks with or without footers */
+
+#if !FOOTERS
+
+#define mark_inuse_foot(M,p,s)
+
+/* Set cinuse bit and pinuse bit of next chunk */
+#define set_inuse(M,p,s)\
+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
+
+/* Set cinuse and pinuse of this chunk and pinuse of next chunk */
+#define set_inuse_and_pinuse(M,p,s)\
+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
+
+/* Set size, cinuse and pinuse bit of this chunk */
+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))
+
+#else /* FOOTERS */
+
+/* Set foot of inuse chunk to be xor of mstate and seed */
+#define mark_inuse_foot(M,p,s)\
+ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic))
+
+#define get_mstate_for(p)\
+ ((mstate)(((mchunkptr)((char*)(p) +\
+ (chunksize(p))))->prev_foot ^ mparams.magic))
+
+#define set_inuse(M,p,s)\
+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \
+ mark_inuse_foot(M,p,s))
+
+#define set_inuse_and_pinuse(M,p,s)\
+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\
+ mark_inuse_foot(M,p,s))
+
+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+ mark_inuse_foot(M, p, s))
+
+#endif /* !FOOTERS */
+
+/* ---------------------------- setting mparams -------------------------- */
+
+/* Initialize mparams */
+static int init_mparams(void) {
+ if (mparams.page_size == 0) {
+ size_t s;
+
+ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD;
+ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD;
+#if MORECORE_CONTIGUOUS
+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT;
+#else /* MORECORE_CONTIGUOUS */
+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT;
+#endif /* MORECORE_CONTIGUOUS */
+
+#if (FOOTERS && !INSECURE)
+ {
+#if USE_DEV_RANDOM
+ int fd;
+ unsigned char buf[sizeof(size_t)];
+ /* Try to use /dev/urandom, else fall back on using time */
+ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 &&
+ read(fd, buf, sizeof(buf)) == sizeof(buf)) {
+ s = *((size_t *) buf);
+ close(fd);
+ }
+ else
+#endif /* USE_DEV_RANDOM */
+ s = (size_t)(time(0) ^ (size_t)0x55555555U);
+
+ s |= (size_t)8U; /* ensure nonzero */
+ s &= ~(size_t)7U; /* improve chances of fault for bad values */
+
+ }
+#else /* (FOOTERS && !INSECURE) */
+ s = (size_t)0x58585858U;
+#endif /* (FOOTERS && !INSECURE) */
+ ACQUIRE_MAGIC_INIT_LOCK();
+ if (mparams.magic == 0) {
+ mparams.magic = s;
+ /* Set up lock for main malloc area */
+ INITIAL_LOCK(&gm->mutex);
+ gm->mflags = mparams.default_mflags;
+ }
+ RELEASE_MAGIC_INIT_LOCK();
+
+#ifndef WIN32
+ mparams.page_size = malloc_getpagesize;
+ mparams.granularity = ((DEFAULT_GRANULARITY != 0)?
+ DEFAULT_GRANULARITY : mparams.page_size);
+#else /* WIN32 */
+ {
+ SYSTEM_INFO system_info;
+ GetSystemInfo(&system_info);
+ mparams.page_size = system_info.dwPageSize;
+ mparams.granularity = system_info.dwAllocationGranularity;
+ }
+#endif /* WIN32 */
+
+ /* Sanity-check configuration:
+ size_t must be unsigned and as wide as pointer type.
+ ints must be at least 4 bytes.
+ alignment must be at least 8.
+ Alignment, min chunk size, and page size must all be powers of 2.
+ */
+ if ((sizeof(size_t) != sizeof(char*)) ||
+ (MAX_SIZE_T < MIN_CHUNK_SIZE) ||
+ (sizeof(int) < 4) ||
+ (MALLOC_ALIGNMENT < (size_t)8U) ||
+ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) ||
+ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) ||
+ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) ||
+ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0))
+ ABORT;
+ }
+ return 0;
+}
+
+/* support for mallopt */
+static int change_mparam(int param_number, int value) {
+ size_t val = (size_t)value;
+ init_mparams();
+ switch(param_number) {
+ case M_TRIM_THRESHOLD:
+ mparams.trim_threshold = val;
+ return 1;
+ case M_GRANULARITY:
+ if (val >= mparams.page_size && ((val & (val-1)) == 0)) {
+ mparams.granularity = val;
+ return 1;
+ }
+ else
+ return 0;
+ case M_MMAP_THRESHOLD:
+ mparams.mmap_threshold = val;
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+#if DEBUG
+/* ------------------------- Debugging Support --------------------------- */
+
+/* Check properties of any chunk, whether free, inuse, mmapped etc */
+static void do_check_any_chunk(mstate m, mchunkptr p) {
+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+ assert(ok_address(m, p));
+}
+
+/* Check properties of top chunk */
+static void do_check_top_chunk(mstate m, mchunkptr p) {
+ msegmentptr sp = segment_holding(m, (char*)p);
+ size_t sz = chunksize(p);
+ assert(sp != 0);
+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+ assert(ok_address(m, p));
+ assert(sz == m->topsize);
+ assert(sz > 0);
+ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE);
+ assert(pinuse(p));
+ assert(!next_pinuse(p));
+}
+
+/* Check properties of (inuse) mmapped chunks */
+static void do_check_mmapped_chunk(mstate m, mchunkptr p) {
+ size_t sz = chunksize(p);
+ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD);
+ assert(is_mmapped(p));
+ assert(use_mmap(m));
+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+ assert(ok_address(m, p));
+ assert(!is_small(sz));
+ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0);
+ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD);
+ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0);
+}
+
+/* Check properties of inuse chunks */
+static void do_check_inuse_chunk(mstate m, mchunkptr p) {
+ do_check_any_chunk(m, p);
+ assert(cinuse(p));
+ assert(next_pinuse(p));
+ /* If not pinuse and not mmapped, previous chunk has OK offset */
+ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p);
+ if (is_mmapped(p))
+ do_check_mmapped_chunk(m, p);
+}
+
+/* Check properties of free chunks */
+static void do_check_free_chunk(mstate m, mchunkptr p) {
+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
+ mchunkptr next = chunk_plus_offset(p, sz);
+ do_check_any_chunk(m, p);
+ assert(!cinuse(p));
+ assert(!next_pinuse(p));
+ assert (!is_mmapped(p));
+ if (p != m->dv && p != m->top) {
+ if (sz >= MIN_CHUNK_SIZE) {
+ assert((sz & CHUNK_ALIGN_MASK) == 0);
+ assert(is_aligned(chunk2mem(p)));
+ assert(next->prev_foot == sz);
+ assert(pinuse(p));
+ assert (next == m->top || cinuse(next));
+ assert(p->fd->bk == p);
+ assert(p->bk->fd == p);
+ }
+ else /* markers are always of size SIZE_T_SIZE */
+ assert(sz == SIZE_T_SIZE);
+ }
+}
+
+/* Check properties of malloced chunks at the point they are malloced */
+static void do_check_malloced_chunk(mstate m, void* mem, size_t s) {
+ if (mem != 0) {
+ mchunkptr p = mem2chunk(mem);
+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
+ do_check_inuse_chunk(m, p);
+ assert((sz & CHUNK_ALIGN_MASK) == 0);
+ assert(sz >= MIN_CHUNK_SIZE);
+ assert(sz >= s);
+ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */
+ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE));
+ }
+}
+
+/* Check a tree and its subtrees. */
+static void do_check_tree(mstate m, tchunkptr t) {
+ tchunkptr head = 0;
+ tchunkptr u = t;
+ bindex_t tindex = t->index;
+ size_t tsize = chunksize(t);
+ bindex_t idx;
+ compute_tree_index(tsize, idx);
+ assert(tindex == idx);
+ assert(tsize >= MIN_LARGE_SIZE);
+ assert(tsize >= minsize_for_tree_index(idx));
+ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1))));
+
+ do { /* traverse through chain of same-sized nodes */
+ do_check_any_chunk(m, ((mchunkptr)u));
+ assert(u->index == tindex);
+ assert(chunksize(u) == tsize);
+ assert(!cinuse(u));
+ assert(!next_pinuse(u));
+ assert(u->fd->bk == u);
+ assert(u->bk->fd == u);
+ if (u->parent == 0) {
+ assert(u->child[0] == 0);
+ assert(u->child[1] == 0);
+ }
+ else {
+ assert(head == 0); /* only one node on chain has parent */
+ head = u;
+ assert(u->parent != u);
+ assert (u->parent->child[0] == u ||
+ u->parent->child[1] == u ||
+ *((tbinptr*)(u->parent)) == u);
+ if (u->child[0] != 0) {
+ assert(u->child[0]->parent == u);
+ assert(u->child[0] != u);
+ do_check_tree(m, u->child[0]);
+ }
+ if (u->child[1] != 0) {
+ assert(u->child[1]->parent == u);
+ assert(u->child[1] != u);
+ do_check_tree(m, u->child[1]);
+ }
+ if (u->child[0] != 0 && u->child[1] != 0) {
+ assert(chunksize(u->child[0]) < chunksize(u->child[1]));
+ }
+ }
+ u = u->fd;
+ } while (u != t);
+ assert(head != 0);
+}
+
+/* Check all the chunks in a treebin. */
+static void do_check_treebin(mstate m, bindex_t i) {
+ tbinptr* tb = treebin_at(m, i);
+ tchunkptr t = *tb;
+ int empty = (m->treemap & (1U << i)) == 0;
+ if (t == 0)
+ assert(empty);
+ if (!empty)
+ do_check_tree(m, t);
+}
+
+/* Check all the chunks in a smallbin. */
+static void do_check_smallbin(mstate m, bindex_t i) {
+ sbinptr b = smallbin_at(m, i);
+ mchunkptr p = b->bk;
+ unsigned int empty = (m->smallmap & (1U << i)) == 0;
+ if (p == b)
+ assert(empty);
+ if (!empty) {
+ for (; p != b; p = p->bk) {
+ size_t size = chunksize(p);
+ mchunkptr q;
+ /* each chunk claims to be free */
+ do_check_free_chunk(m, p);
+ /* chunk belongs in bin */
+ assert(small_index(size) == i);
+ assert(p->bk == b || chunksize(p->bk) == chunksize(p));
+ /* chunk is followed by an inuse chunk */
+ q = next_chunk(p);
+ if (q->head != FENCEPOST_HEAD)
+ do_check_inuse_chunk(m, q);
+ }
+ }
+}
+
+/* Find x in a bin. Used in other check functions. */
+static int bin_find(mstate m, mchunkptr x) {
+ size_t size = chunksize(x);
+ if (is_small(size)) {
+ bindex_t sidx = small_index(size);
+ sbinptr b = smallbin_at(m, sidx);
+ if (smallmap_is_marked(m, sidx)) {
+ mchunkptr p = b;
+ do {
+ if (p == x)
+ return 1;
+ } while ((p = p->fd) != b);
+ }
+ }
+ else {
+ bindex_t tidx;
+ compute_tree_index(size, tidx);
+ if (treemap_is_marked(m, tidx)) {
+ tchunkptr t = *treebin_at(m, tidx);
+ size_t sizebits = size << leftshift_for_tree_index(tidx);
+ while (t != 0 && chunksize(t) != size) {
+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
+ sizebits <<= 1;
+ }
+ if (t != 0) {
+ tchunkptr u = t;
+ do {
+ if (u == (tchunkptr)x)
+ return 1;
+ } while ((u = u->fd) != t);
+ }
+ }
+ }
+ return 0;
+}
+
+/* Traverse each chunk and check it; return total */
+static size_t traverse_and_check(mstate m) {
+ size_t sum = 0;
+ if (is_initialized(m)) {
+ msegmentptr s = &m->seg;
+ sum += m->topsize + TOP_FOOT_SIZE;
+ while (s != 0) {
+ mchunkptr q = align_as_chunk(s->base);
+ mchunkptr lastq = 0;
+ assert(pinuse(q));
+ while (segment_holds(s, q) &&
+ q != m->top && q->head != FENCEPOST_HEAD) {
+ sum += chunksize(q);
+ if (cinuse(q)) {
+ assert(!bin_find(m, q));
+ do_check_inuse_chunk(m, q);
+ }
+ else {
+ assert(q == m->dv || bin_find(m, q));
+ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */
+ do_check_free_chunk(m, q);
+ }
+ lastq = q;
+ q = next_chunk(q);
+ }
+ s = s->next;
+ }
+ }
+ return sum;
+}
+
+/* Check all properties of malloc_state. */
+static void do_check_malloc_state(mstate m) {
+ bindex_t i;
+ size_t total;
+ /* check bins */
+ for (i = 0; i < NSMALLBINS; ++i)
+ do_check_smallbin(m, i);
+ for (i = 0; i < NTREEBINS; ++i)
+ do_check_treebin(m, i);
+
+ if (m->dvsize != 0) { /* check dv chunk */
+ do_check_any_chunk(m, m->dv);
+ assert(m->dvsize == chunksize(m->dv));
+ assert(m->dvsize >= MIN_CHUNK_SIZE);
+ assert(bin_find(m, m->dv) == 0);
+ }
+
+ if (m->top != 0) { /* check top chunk */
+ do_check_top_chunk(m, m->top);
+ assert(m->topsize == chunksize(m->top));
+ assert(m->topsize > 0);
+ assert(bin_find(m, m->top) == 0);
+ }
+
+ total = traverse_and_check(m);
+ assert(total <= m->footprint);
+ assert(m->footprint <= m->max_footprint);
+}
+#endif /* DEBUG */
+
+/* ----------------------------- statistics ------------------------------ */
+
+#if !NO_MALLINFO
+static struct mallinfo internal_mallinfo(mstate m) {
+ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ if (!PREACTION(m)) {
+ check_malloc_state(m);
+ if (is_initialized(m)) {
+ size_t nfree = SIZE_T_ONE; /* top always free */
+ size_t mfree = m->topsize + TOP_FOOT_SIZE;
+ size_t sum = mfree;
+ msegmentptr s = &m->seg;
+ while (s != 0) {
+ mchunkptr q = align_as_chunk(s->base);
+ while (segment_holds(s, q) &&
+ q != m->top && q->head != FENCEPOST_HEAD) {
+ size_t sz = chunksize(q);
+ sum += sz;
+ if (!cinuse(q)) {
+ mfree += sz;
+ ++nfree;
+ }
+ q = next_chunk(q);
+ }
+ s = s->next;
+ }
+
+ nm.arena = sum;
+ nm.ordblks = nfree;
+ nm.hblkhd = m->footprint - sum;
+ nm.usmblks = m->max_footprint;
+ nm.uordblks = m->footprint - mfree;
+ nm.fordblks = mfree;
+ nm.keepcost = m->topsize;
+ }
+
+ POSTACTION(m);
+ }
+ return nm;
+}
+#endif /* !NO_MALLINFO */
+
+static void internal_malloc_stats(mstate m) {
+ if (!PREACTION(m)) {
+ size_t maxfp = 0;
+ size_t fp = 0;
+ size_t used = 0;
+ check_malloc_state(m);
+ if (is_initialized(m)) {
+ msegmentptr s = &m->seg;
+ maxfp = m->max_footprint;
+ fp = m->footprint;
+ used = fp - (m->topsize + TOP_FOOT_SIZE);
+
+ while (s != 0) {
+ mchunkptr q = align_as_chunk(s->base);
+ while (segment_holds(s, q) &&
+ q != m->top && q->head != FENCEPOST_HEAD) {
+ if (!cinuse(q))
+ used -= chunksize(q);
+ q = next_chunk(q);
+ }
+ s = s->next;
+ }
+ }
+
+ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp));
+ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp));
+ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used));
+
+ POSTACTION(m);
+ }
+}
+
+/* ----------------------- Operations on smallbins ----------------------- */
+
+/*
+ Various forms of linking and unlinking are defined as macros. Even
+ the ones for trees, which are very long but have very short typical
+ paths. This is ugly but reduces reliance on inlining support of
+ compilers.
+*/
+
+/* Link a free chunk into a smallbin */
+#define insert_small_chunk(M, P, S) {\
+ bindex_t I = small_index(S);\
+ mchunkptr B = smallbin_at(M, I);\
+ mchunkptr F = B;\
+ assert(S >= MIN_CHUNK_SIZE);\
+ if (!smallmap_is_marked(M, I))\
+ mark_smallmap(M, I);\
+ else if (RTCHECK(ok_address(M, B->fd)))\
+ F = B->fd;\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ B->fd = P;\
+ F->bk = P;\
+ P->fd = F;\
+ P->bk = B;\
+}
+
+/* Unlink a chunk from a smallbin */
+#define unlink_small_chunk(M, P, S) {\
+ mchunkptr F = P->fd;\
+ mchunkptr B = P->bk;\
+ bindex_t I = small_index(S);\
+ assert(P != B);\
+ assert(P != F);\
+ assert(chunksize(P) == small_index2size(I));\
+ if (F == B)\
+ clear_smallmap(M, I);\
+ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\
+ (B == smallbin_at(M,I) || ok_address(M, B)))) {\
+ F->bk = B;\
+ B->fd = F;\
+ }\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+}
+
+/* Unlink the first chunk from a smallbin */
+#define unlink_first_small_chunk(M, B, P, I) {\
+ mchunkptr F = P->fd;\
+ assert(P != B);\
+ assert(P != F);\
+ assert(chunksize(P) == small_index2size(I));\
+ if (B == F)\
+ clear_smallmap(M, I);\
+ else if (RTCHECK(ok_address(M, F))) {\
+ B->fd = F;\
+ F->bk = B;\
+ }\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+}
+
+/* Replace dv node, binning the old one */
+/* Used only when dvsize known to be small */
+#define replace_dv(M, P, S) {\
+ size_t DVS = M->dvsize;\
+ if (DVS != 0) {\
+ mchunkptr DV = M->dv;\
+ assert(is_small(DVS));\
+ insert_small_chunk(M, DV, DVS);\
+ }\
+ M->dvsize = S;\
+ M->dv = P;\
+}
+
+/* ------------------------- Operations on trees ------------------------- */
+
+/* Insert chunk into tree */
+#define insert_large_chunk(M, X, S) {\
+ tbinptr* H;\
+ bindex_t I;\
+ compute_tree_index(S, I);\
+ H = treebin_at(M, I);\
+ X->index = I;\
+ X->child[0] = X->child[1] = 0;\
+ if (!treemap_is_marked(M, I)) {\
+ mark_treemap(M, I);\
+ *H = X;\
+ X->parent = (tchunkptr)H;\
+ X->fd = X->bk = X;\
+ }\
+ else {\
+ tchunkptr T = *H;\
+ size_t K = S << leftshift_for_tree_index(I);\
+ for (;;) {\
+ if (chunksize(T) != S) {\
+ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\
+ K <<= 1;\
+ if (*C != 0)\
+ T = *C;\
+ else if (RTCHECK(ok_address(M, C))) {\
+ *C = X;\
+ X->parent = T;\
+ X->fd = X->bk = X;\
+ break;\
+ }\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ break;\
+ }\
+ }\
+ else {\
+ tchunkptr F = T->fd;\
+ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\
+ T->fd = F->bk = X;\
+ X->fd = F;\
+ X->bk = T;\
+ X->parent = 0;\
+ break;\
+ }\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ break;\
+ }\
+ }\
+ }\
+ }\
+}
+
+/*
+ Unlink steps:
+
+ 1. If x is a chained node, unlink it from its same-sized fd/bk links
+ and choose its bk node as its replacement.
+ 2. If x was the last node of its size, but not a leaf node, it must
+ be replaced with a leaf node (not merely one with an open left or
+ right), to make sure that lefts and rights of descendents
+ correspond properly to bit masks. We use the rightmost descendent
+ of x. We could use any other leaf, but this is easy to locate and
+ tends to counteract removal of leftmosts elsewhere, and so keeps
+ paths shorter than minimally guaranteed. This doesn't loop much
+ because on average a node in a tree is near the bottom.
+ 3. If x is the base of a chain (i.e., has parent links) relink
+ x's parent and children to x's replacement (or null if none).
+*/
+
+#define unlink_large_chunk(M, X) {\
+ tchunkptr XP = X->parent;\
+ tchunkptr R;\
+ if (X->bk != X) {\
+ tchunkptr F = X->fd;\
+ R = X->bk;\
+ if (RTCHECK(ok_address(M, F))) {\
+ F->bk = R;\
+ R->fd = F;\
+ }\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ }\
+ else {\
+ tchunkptr* RP;\
+ if (((R = *(RP = &(X->child[1]))) != 0) ||\
+ ((R = *(RP = &(X->child[0]))) != 0)) {\
+ tchunkptr* CP;\
+ while ((*(CP = &(R->child[1])) != 0) ||\
+ (*(CP = &(R->child[0])) != 0)) {\
+ R = *(RP = CP);\
+ }\
+ if (RTCHECK(ok_address(M, RP)))\
+ *RP = 0;\
+ else {\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ }\
+ }\
+ if (XP != 0) {\
+ tbinptr* H = treebin_at(M, X->index);\
+ if (X == *H) {\
+ if ((*H = R) == 0) \
+ clear_treemap(M, X->index);\
+ }\
+ else if (RTCHECK(ok_address(M, XP))) {\
+ if (XP->child[0] == X) \
+ XP->child[0] = R;\
+ else \
+ XP->child[1] = R;\
+ }\
+ else\
+ CORRUPTION_ERROR_ACTION(M);\
+ if (R != 0) {\
+ if (RTCHECK(ok_address(M, R))) {\
+ tchunkptr C0, C1;\
+ R->parent = XP;\
+ if ((C0 = X->child[0]) != 0) {\
+ if (RTCHECK(ok_address(M, C0))) {\
+ R->child[0] = C0;\
+ C0->parent = R;\
+ }\
+ else\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ if ((C1 = X->child[1]) != 0) {\
+ if (RTCHECK(ok_address(M, C1))) {\
+ R->child[1] = C1;\
+ C1->parent = R;\
+ }\
+ else\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ }\
+ else\
+ CORRUPTION_ERROR_ACTION(M);\
+ }\
+ }\
+}
+
+/* Relays to large vs small bin operations */
+
+#define insert_chunk(M, P, S)\
+ if (is_small(S)) insert_small_chunk(M, P, S)\
+ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); }
+
+#define unlink_chunk(M, P, S)\
+ if (is_small(S)) unlink_small_chunk(M, P, S)\
+ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); }
+
+
+/* Relays to internal calls to malloc/free from realloc, memalign etc */
+
+#if ONLY_MSPACES
+#define internal_malloc(m, b) mspace_malloc(m, b)
+#define internal_free(m, mem) mspace_free(m,mem);
+#else /* ONLY_MSPACES */
+#if MSPACES
+#define internal_malloc(m, b)\
+ (m == gm)? dlmalloc(b) : mspace_malloc(m, b)
+#define internal_free(m, mem)\
+ if (m == gm) dlfree(mem); else mspace_free(m,mem);
+#else /* MSPACES */
+#define internal_malloc(m, b) dlmalloc(b)
+#define internal_free(m, mem) dlfree(mem)
+#endif /* MSPACES */
+#endif /* ONLY_MSPACES */
+
+/* ----------------------- Direct-mmapping chunks ----------------------- */
+
+/*
+ Directly mmapped chunks are set up with an offset to the start of
+ the mmapped region stored in the prev_foot field of the chunk. This
+ allows reconstruction of the required argument to MUNMAP when freed,
+ and also allows adjustment of the returned chunk to meet alignment
+ requirements (especially in memalign). There is also enough space
+ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain
+ the PINUSE bit so frees can be checked.
+*/
+
+/* Malloc using mmap */
+static void* mmap_alloc(mstate m, size_t nb) {
+ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
+ if (mmsize > nb) { /* Check for wrap around 0 */
+ char* mm = (char*)(DIRECT_MMAP(mmsize));
+ if (mm != CMFAIL) {
+ size_t offset = align_offset(chunk2mem(mm));
+ size_t psize = mmsize - offset - MMAP_FOOT_PAD;
+ mchunkptr p = (mchunkptr)(mm + offset);
+ p->prev_foot = offset | IS_MMAPPED_BIT;
+ (p)->head = (psize|CINUSE_BIT);
+ mark_inuse_foot(m, p, psize);
+ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD;
+ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0;
+
+ if (mm < m->least_addr)
+ m->least_addr = mm;
+ if ((m->footprint += mmsize) > m->max_footprint)
+ m->max_footprint = m->footprint;
+ assert(is_aligned(chunk2mem(p)));
+ check_mmapped_chunk(m, p);
+ return chunk2mem(p);
+ }
+ }
+ return 0;
+}
+
+/* Realloc using mmap */
+static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) {
+ size_t oldsize = chunksize(oldp);
+ if (is_small(nb)) /* Can't shrink mmap regions below small size */
+ return 0;
+ /* Keep old chunk if big enough but not too big */
+ if (oldsize >= nb + SIZE_T_SIZE &&
+ (oldsize - nb) <= (mparams.granularity << 1))
+ return oldp;
+ else {
+ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT;
+ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD;
+ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES +
+ CHUNK_ALIGN_MASK);
+ char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
+ oldmmsize, newmmsize, 1);
+ if (cp != CMFAIL) {
+ mchunkptr newp = (mchunkptr)(cp + offset);
+ size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
+ newp->head = (psize|CINUSE_BIT);
+ mark_inuse_foot(m, newp, psize);
+ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD;
+ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0;
+
+ if (cp < m->least_addr)
+ m->least_addr = cp;
+ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint)
+ m->max_footprint = m->footprint;
+ check_mmapped_chunk(m, newp);
+ return newp;
+ }
+ }
+ return 0;
+}
+
+/* -------------------------- mspace management -------------------------- */
+
+/* Initialize top chunk and its size */
+static void init_top(mstate m, mchunkptr p, size_t psize) {
+ /* Ensure alignment */
+ size_t offset = align_offset(chunk2mem(p));
+ p = (mchunkptr)((char*)p + offset);
+ psize -= offset;
+
+ m->top = p;
+ m->topsize = psize;
+ p->head = psize | PINUSE_BIT;
+ /* set size of fake trailing chunk holding overhead space only once */
+ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE;
+ m->trim_check = mparams.trim_threshold; /* reset on each update */
+}
+
+/* Initialize bins for a new mstate that is otherwise zeroed out */
+static void init_bins(mstate m) {
+ /* Establish circular links for smallbins */
+ bindex_t i;
+ for (i = 0; i < NSMALLBINS; ++i) {
+ sbinptr bin = smallbin_at(m,i);
+ bin->fd = bin->bk = bin;
+ }
+}
+
+#if PROCEED_ON_ERROR
+
+/* default corruption action */
+static void reset_on_error(mstate m) {
+ int i;
+ ++malloc_corruption_error_count;
+ /* Reinitialize fields to forget about all memory */
+ m->smallbins = m->treebins = 0;
+ m->dvsize = m->topsize = 0;
+ m->seg.base = 0;
+ m->seg.size = 0;
+ m->seg.next = 0;
+ m->top = m->dv = 0;
+ for (i = 0; i < NTREEBINS; ++i)
+ *treebin_at(m, i) = 0;
+ init_bins(m);
+}
+#endif /* PROCEED_ON_ERROR */
+
+/* Allocate chunk and prepend remainder with chunk in successor base. */
+static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
+ size_t nb) {
+ mchunkptr p = align_as_chunk(newbase);
+ mchunkptr oldfirst = align_as_chunk(oldbase);
+ size_t psize = (char*)oldfirst - (char*)p;
+ mchunkptr q = chunk_plus_offset(p, nb);
+ size_t qsize = psize - nb;
+ set_size_and_pinuse_of_inuse_chunk(m, p, nb);
+
+ assert((char*)oldfirst > (char*)q);
+ assert(pinuse(oldfirst));
+ assert(qsize >= MIN_CHUNK_SIZE);
+
+ /* consolidate remainder with first chunk of old base */
+ if (oldfirst == m->top) {
+ size_t tsize = m->topsize += qsize;
+ m->top = q;
+ q->head = tsize | PINUSE_BIT;
+ check_top_chunk(m, q);
+ }
+ else if (oldfirst == m->dv) {
+ size_t dsize = m->dvsize += qsize;
+ m->dv = q;
+ set_size_and_pinuse_of_free_chunk(q, dsize);
+ }
+ else {
+ if (!cinuse(oldfirst)) {
+ size_t nsize = chunksize(oldfirst);
+ unlink_chunk(m, oldfirst, nsize);
+ oldfirst = chunk_plus_offset(oldfirst, nsize);
+ qsize += nsize;
+ }
+ set_free_with_pinuse(q, qsize, oldfirst);
+ insert_chunk(m, q, qsize);
+ check_free_chunk(m, q);
+ }
+
+ check_malloced_chunk(m, chunk2mem(p), nb);
+ return chunk2mem(p);
+}
+
+
+/* Add a segment to hold a new noncontiguous region */
+static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
+ /* Determine locations and sizes of segment, fenceposts, old top */
+ char* old_top = (char*)m->top;
+ msegmentptr oldsp = segment_holding(m, old_top);
+ char* old_end = oldsp->base + oldsp->size;
+ size_t ssize = pad_request(sizeof(struct malloc_segment));
+ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
+ size_t offset = align_offset(chunk2mem(rawsp));
+ char* asp = rawsp + offset;
+ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp;
+ mchunkptr sp = (mchunkptr)csp;
+ msegmentptr ss = (msegmentptr)(chunk2mem(sp));
+ mchunkptr tnext = chunk_plus_offset(sp, ssize);
+ mchunkptr p = tnext;
+ int nfences = 0;
+
+ /* reset top to new space */
+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+
+ /* Set up segment record */
+ assert(is_aligned(ss));
+ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize);
+ *ss = m->seg; /* Push current record */
+ m->seg.base = tbase;
+ m->seg.size = tsize;
+ set_segment_flags(&m->seg, mmapped);
+ m->seg.next = ss;
+
+ /* Insert trailing fenceposts */
+ for (;;) {
+ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE);
+ p->head = FENCEPOST_HEAD;
+ ++nfences;
+ if ((char*)(&(nextp->head)) < old_end)
+ p = nextp;
+ else
+ break;
+ }
+ assert(nfences >= 2);
+
+ /* Insert the rest of old top into a bin as an ordinary free chunk */
+ if (csp != old_top) {
+ mchunkptr q = (mchunkptr)old_top;
+ size_t psize = csp - old_top;
+ mchunkptr tn = chunk_plus_offset(q, psize);
+ set_free_with_pinuse(q, psize, tn);
+ insert_chunk(m, q, psize);
+ }
+
+ check_top_chunk(m, m->top);
+}
+
+/* -------------------------- System allocation -------------------------- */
+
+/* Get memory from system using MORECORE or MMAP */
+static void* sys_alloc(mstate m, size_t nb) {
+ char* tbase = CMFAIL;
+ size_t tsize = 0;
+ flag_t mmap_flag = 0;
+
+ init_mparams();
+
+ /* Directly map large chunks */
+ if (use_mmap(m) && nb >= mparams.mmap_threshold) {
+ void* mem = mmap_alloc(m, nb);
+ if (mem != 0)
+ return mem;
+ }
+
+ /*
+ Try getting memory in any of three ways (in most-preferred to
+ least-preferred order):
+ 1. A call to MORECORE that can normally contiguously extend memory.
+ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or
+ or main space is mmapped or a previous contiguous call failed)
+ 2. A call to MMAP new space (disabled if not HAVE_MMAP).
+ Note that under the default settings, if MORECORE is unable to
+ fulfill a request, and HAVE_MMAP is true, then mmap is
+ used as a noncontiguous system allocator. This is a useful backup
+ strategy for systems with holes in address spaces -- in this case
+ sbrk cannot contiguously expand the heap, but mmap may be able to
+ find space.
+ 3. A call to MORECORE that cannot usually contiguously extend memory.
+ (disabled if not HAVE_MORECORE)
+ */
+
+ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) {
+ char* br = CMFAIL;
+ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top);
+ size_t asize = 0;
+ ACQUIRE_MORECORE_LOCK();
+
+ if (ss == 0) { /* First time through or recovery */
+ char* base = (char*)CALL_MORECORE(0);
+ if (base != CMFAIL) {
+ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
+ /* Adjust to end on a page boundary */
+ if (!is_page_aligned(base))
+ asize += (page_align((size_t)base) - (size_t)base);
+ /* Can't call MORECORE if size is negative when treated as signed */
+ if (asize < HALF_MAX_SIZE_T &&
+ (br = (char*)(CALL_MORECORE(asize))) == base) {
+ tbase = base;
+ tsize = asize;
+ }
+ }
+ }
+ else {
+ /* Subtract out existing available top space from MORECORE request. */
+ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE);
+ /* Use mem here only if it did continuously extend old space */
+ if (asize < HALF_MAX_SIZE_T &&
+ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) {
+ tbase = br;
+ tsize = asize;
+ }
+ }
+
+ if (tbase == CMFAIL) { /* Cope with partial failure */
+ if (br != CMFAIL) { /* Try to use/extend the space we did get */
+ if (asize < HALF_MAX_SIZE_T &&
+ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) {
+ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize);
+ if (esize < HALF_MAX_SIZE_T) {
+ char* end = (char*)CALL_MORECORE(esize);
+ if (end != CMFAIL)
+ asize += esize;
+ else { /* Can't use; try to release */
+ (void)CALL_MORECORE(-asize);
+ br = CMFAIL;
+ }
+ }
+ }
+ }
+ if (br != CMFAIL) { /* Use the space we did get */
+ tbase = br;
+ tsize = asize;
+ }
+ else
+ disable_contiguous(m); /* Don't try contiguous path in the future */
+ }
+
+ RELEASE_MORECORE_LOCK();
+ }
+
+ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */
+ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE;
+ size_t rsize = granularity_align(req);
+ if (rsize > nb) { /* Fail if wraps around zero */
+ char* mp = (char*)(CALL_MMAP(rsize));
+ if (mp != CMFAIL) {
+ tbase = mp;
+ tsize = rsize;
+ mmap_flag = IS_MMAPPED_BIT;
+ }
+ }
+ }
+
+ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */
+ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
+ if (asize < HALF_MAX_SIZE_T) {
+ char* br = CMFAIL;
+ char* end = CMFAIL;
+ ACQUIRE_MORECORE_LOCK();
+ br = (char*)(CALL_MORECORE(asize));
+ end = (char*)(CALL_MORECORE(0));
+ RELEASE_MORECORE_LOCK();
+ if (br != CMFAIL && end != CMFAIL && br < end) {
+ size_t ssize = end - br;
+ if (ssize > nb + TOP_FOOT_SIZE) {
+ tbase = br;
+ tsize = ssize;
+ }
+ }
+ }
+ }
+
+ if (tbase != CMFAIL) {
+
+ if ((m->footprint += tsize) > m->max_footprint)
+ m->max_footprint = m->footprint;
+
+ if (!is_initialized(m)) { /* first-time initialization */
+ m->seg.base = m->least_addr = tbase;
+ m->seg.size = tsize;
+ set_segment_flags(&m->seg, mmap_flag);
+ m->magic = mparams.magic;
+ init_bins(m);
+ if (is_global(m))
+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+ else {
+ /* Offset top by embedded malloc_state */
+ mchunkptr mn = next_chunk(mem2chunk(m));
+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE);
+ }
+ }
+
+ else {
+ /* Try to merge with an existing segment */
+ msegmentptr sp = &m->seg;
+ while (sp != 0 && tbase != sp->base + sp->size)
+ sp = sp->next;
+ if (sp != 0 &&
+ !is_extern_segment(sp) &&
+ check_segment_merge(sp, tbase, tsize) &&
+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag &&
+ segment_holds(sp, m->top)) { /* append */
+ sp->size += tsize;
+ init_top(m, m->top, m->topsize + tsize);
+ }
+ else {
+ if (tbase < m->least_addr)
+ m->least_addr = tbase;
+ sp = &m->seg;
+ while (sp != 0 && sp->base != tbase + tsize)
+ sp = sp->next;
+ if (sp != 0 &&
+ !is_extern_segment(sp) &&
+ check_segment_merge(sp, tbase, tsize) &&
+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) {
+ char* oldbase = sp->base;
+ sp->base = tbase;
+ sp->size += tsize;
+ return prepend_alloc(m, tbase, oldbase, nb);
+ }
+ else
+ add_segment(m, tbase, tsize, mmap_flag);
+ }
+ }
+
+ if (nb < m->topsize) { /* Allocate from new or extended top space */
+ size_t rsize = m->topsize -= nb;
+ mchunkptr p = m->top;
+ mchunkptr r = m->top = chunk_plus_offset(p, nb);
+ r->head = rsize | PINUSE_BIT;
+ set_size_and_pinuse_of_inuse_chunk(m, p, nb);
+ check_top_chunk(m, m->top);
+ check_malloced_chunk(m, chunk2mem(p), nb);
+ return chunk2mem(p);
+ }
+ }
+
+ MALLOC_FAILURE_ACTION;
+ return 0;
+}
+
+/* ----------------------- system deallocation -------------------------- */
+
+/* Unmap and unlink any mmapped segments that don't contain used chunks */
+static size_t release_unused_segments(mstate m) {
+ size_t released = 0;
+ msegmentptr pred = &m->seg;
+ msegmentptr sp = pred->next;
+ while (sp != 0) {
+ char* base = sp->base;
+ size_t size = sp->size;
+ msegmentptr next = sp->next;
+ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) {
+ mchunkptr p = align_as_chunk(base);
+ size_t psize = chunksize(p);
+ /* Can unmap if first chunk holds entire segment and not pinned */
+ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) {
+ tchunkptr tp = (tchunkptr)p;
+ assert(segment_holds(sp, (char*)sp));
+ if (p == m->dv) {
+ m->dv = 0;
+ m->dvsize = 0;
+ }
+ else {
+ unlink_large_chunk(m, tp);
+ }
+ if (CALL_MUNMAP(base, size) == 0) {
+ released += size;
+ m->footprint -= size;
+ /* unlink obsoleted record */
+ sp = pred;
+ sp->next = next;
+ }
+ else { /* back out if cannot unmap */
+ insert_large_chunk(m, tp, psize);
+ }
+ }
+ }
+ pred = sp;
+ sp = next;
+ }
+ return released;
+}
+
+static int sys_trim(mstate m, size_t pad) {
+ size_t released = 0;
+ if (pad < MAX_REQUEST && is_initialized(m)) {
+ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */
+
+ if (m->topsize > pad) {
+ /* Shrink top space in granularity-size units, keeping at least one */
+ size_t unit = mparams.granularity;
+ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit -
+ SIZE_T_ONE) * unit;
+ msegmentptr sp = segment_holding(m, (char*)m->top);
+
+ if (!is_extern_segment(sp)) {
+ if (is_mmapped_segment(sp)) {
+ if (HAVE_MMAP &&
+ sp->size >= extra &&
+ !has_segment_link(m, sp)) { /* can't shrink if pinned */
+ size_t newsize = sp->size - extra;
+ /* Prefer mremap, fall back to munmap */
+ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) ||
+ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) {
+ released = extra;
+ }
+ }
+ }
+ else if (HAVE_MORECORE) {
+ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */
+ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit;
+ ACQUIRE_MORECORE_LOCK();
+ {
+ /* Make sure end of memory is where we last set it. */
+ char* old_br = (char*)(CALL_MORECORE(0));
+ if (old_br == sp->base + sp->size) {
+ char* rel_br = (char*)(CALL_MORECORE(-extra));
+ char* new_br = (char*)(CALL_MORECORE(0));
+ if (rel_br != CMFAIL && new_br < old_br)
+ released = old_br - new_br;
+ }
+ }
+ RELEASE_MORECORE_LOCK();
+ }
+ }
+
+ if (released != 0) {
+ sp->size -= released;
+ m->footprint -= released;
+ init_top(m, m->top, m->topsize - released);
+ check_top_chunk(m, m->top);
+ }
+ }
+
+ /* Unmap any unused mmapped segments */
+ if (HAVE_MMAP)
+ released += release_unused_segments(m);
+
+ /* On failure, disable autotrim to avoid repeated failed future calls */
+ if (released == 0)
+ m->trim_check = MAX_SIZE_T;
+ }
+
+ return (released != 0)? 1 : 0;
+}
+
+/* ---------------------------- malloc support --------------------------- */
+
+/* allocate a large request from the best fitting chunk in a treebin */
+static void* tmalloc_large(mstate m, size_t nb) {
+ tchunkptr v = 0;
+ size_t rsize = -nb; /* Unsigned negation */
+ tchunkptr t;
+ bindex_t idx;
+ compute_tree_index(nb, idx);
+
+ if ((t = *treebin_at(m, idx)) != 0) {
+ /* Traverse tree for this bin looking for node with size == nb */
+ size_t sizebits = nb << leftshift_for_tree_index(idx);
+ tchunkptr rst = 0; /* The deepest untaken right subtree */
+ for (;;) {
+ tchunkptr rt;
+ size_t trem = chunksize(t) - nb;
+ if (trem < rsize) {
+ v = t;
+ if ((rsize = trem) == 0)
+ break;
+ }
+ rt = t->child[1];
+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
+ if (rt != 0 && rt != t)
+ rst = rt;
+ if (t == 0) {
+ t = rst; /* set t to least subtree holding sizes > nb */
+ break;
+ }
+ sizebits <<= 1;
+ }
+ }
+
+ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */
+ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap;
+ if (leftbits != 0) {
+ bindex_t i;
+ binmap_t leastbit = least_bit(leftbits);
+ compute_bit2idx(leastbit, i);
+ t = *treebin_at(m, i);
+ }
+ }
+
+ while (t != 0) { /* find smallest of tree or subtree */
+ size_t trem = chunksize(t) - nb;
+ if (trem < rsize) {
+ rsize = trem;
+ v = t;
+ }
+ t = leftmost_child(t);
+ }
+
+ /* If dv is a better fit, return 0 so malloc will use it */
+ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) {
+ if (RTCHECK(ok_address(m, v))) { /* split */
+ mchunkptr r = chunk_plus_offset(v, nb);
+ assert(chunksize(v) == rsize + nb);
+ if (RTCHECK(ok_next(v, r))) {
+ unlink_large_chunk(m, v);
+ if (rsize < MIN_CHUNK_SIZE)
+ set_inuse_and_pinuse(m, v, (rsize + nb));
+ else {
+ set_size_and_pinuse_of_inuse_chunk(m, v, nb);
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ insert_chunk(m, r, rsize);
+ }
+ return chunk2mem(v);
+ }
+ }
+ CORRUPTION_ERROR_ACTION(m);
+ }
+ return 0;
+}
+
+/* allocate a small request from the best fitting chunk in a treebin */
+static void* tmalloc_small(mstate m, size_t nb) {
+ tchunkptr t, v;
+ size_t rsize;
+ bindex_t i;
+ binmap_t leastbit = least_bit(m->treemap);
+ compute_bit2idx(leastbit, i);
+
+ v = t = *treebin_at(m, i);
+ rsize = chunksize(t) - nb;
+
+ while ((t = leftmost_child(t)) != 0) {
+ size_t trem = chunksize(t) - nb;
+ if (trem < rsize) {
+ rsize = trem;
+ v = t;
+ }
+ }
+
+ if (RTCHECK(ok_address(m, v))) {
+ mchunkptr r = chunk_plus_offset(v, nb);
+ assert(chunksize(v) == rsize + nb);
+ if (RTCHECK(ok_next(v, r))) {
+ unlink_large_chunk(m, v);
+ if (rsize < MIN_CHUNK_SIZE)
+ set_inuse_and_pinuse(m, v, (rsize + nb));
+ else {
+ set_size_and_pinuse_of_inuse_chunk(m, v, nb);
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ replace_dv(m, r, rsize);
+ }
+ return chunk2mem(v);
+ }
+ }
+
+ CORRUPTION_ERROR_ACTION(m);
+ return 0;
+}
+
+/* --------------------------- realloc support --------------------------- */
+
+static void* internal_realloc(mstate m, void* oldmem, size_t bytes) {
+ if (bytes >= MAX_REQUEST) {
+ MALLOC_FAILURE_ACTION;
+ return 0;
+ }
+ if (!PREACTION(m)) {
+ mchunkptr oldp = mem2chunk(oldmem);
+ size_t oldsize = chunksize(oldp);
+ mchunkptr next = chunk_plus_offset(oldp, oldsize);
+ mchunkptr newp = 0;
+ void* extra = 0;
+
+ /* Try to either shrink or extend into top. Else malloc-copy-free */
+
+ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) &&
+ ok_next(oldp, next) && ok_pinuse(next))) {
+ size_t nb = request2size(bytes);
+ if (is_mmapped(oldp))
+ newp = mmap_resize(m, oldp, nb);
+ else if (oldsize >= nb) { /* already big enough */
+ size_t rsize = oldsize - nb;
+ newp = oldp;
+ if (rsize >= MIN_CHUNK_SIZE) {
+ mchunkptr remainder = chunk_plus_offset(newp, nb);
+ set_inuse(m, newp, nb);
+ set_inuse(m, remainder, rsize);
+ extra = chunk2mem(remainder);
+ }
+ }
+ else if (next == m->top && oldsize + m->topsize > nb) {
+ /* Expand into top */
+ size_t newsize = oldsize + m->topsize;
+ size_t newtopsize = newsize - nb;
+ mchunkptr newtop = chunk_plus_offset(oldp, nb);
+ set_inuse(m, oldp, nb);
+ newtop->head = newtopsize |PINUSE_BIT;
+ m->top = newtop;
+ m->topsize = newtopsize;
+ newp = oldp;
+ }
+ }
+ else {
+ USAGE_ERROR_ACTION(m, oldmem);
+ POSTACTION(m);
+ return 0;
+ }
+
+ POSTACTION(m);
+
+ if (newp != 0) {
+ if (extra != 0) {
+ internal_free(m, extra);
+ }
+ check_inuse_chunk(m, newp);
+ return chunk2mem(newp);
+ }
+ else {
+ void* newmem = internal_malloc(m, bytes);
+ if (newmem != 0) {
+ size_t oc = oldsize - overhead_for(oldp);
+ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes);
+ internal_free(m, oldmem);
+ }
+ return newmem;
+ }
+ }
+ return 0;
+}
+
+/* --------------------------- memalign support -------------------------- */
+
+static void* internal_memalign(mstate m, size_t alignment, size_t bytes) {
+ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */
+ return internal_malloc(m, bytes);
+ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */
+ alignment = MIN_CHUNK_SIZE;
+ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */
+ size_t a = MALLOC_ALIGNMENT << 1;
+ while (a < alignment) a <<= 1;
+ alignment = a;
+ }
+
+ if (bytes >= MAX_REQUEST - alignment) {
+ if (m != 0) { /* Test isn't needed but avoids compiler warning */
+ MALLOC_FAILURE_ACTION;
+ }
+ }
+ else {
+ size_t nb = request2size(bytes);
+ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD;
+ char* mem = (char*)internal_malloc(m, req);
+ if (mem != 0) {
+ void* leader = 0;
+ void* trailer = 0;
+ mchunkptr p = mem2chunk(mem);
+
+ if (PREACTION(m)) return 0;
+ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */
+ /*
+ Find an aligned spot inside chunk. Since we need to give
+ back leading space in a chunk of at least MIN_CHUNK_SIZE, if
+ the first calculation places us at a spot with less than
+ MIN_CHUNK_SIZE leader, we can move to the next aligned spot.
+ We've allocated enough total room so that this is always
+ possible.
+ */
+ char* br = (char*)mem2chunk((size_t)(((size_t)(mem +
+ alignment -
+ SIZE_T_ONE)) &
+ -alignment));
+ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)?
+ br : br+alignment;
+ mchunkptr newp = (mchunkptr)pos;
+ size_t leadsize = pos - (char*)(p);
+ size_t newsize = chunksize(p) - leadsize;
+
+ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */
+ newp->prev_foot = p->prev_foot + leadsize;
+ newp->head = (newsize|CINUSE_BIT);
+ }
+ else { /* Otherwise, give back leader, use the rest */
+ set_inuse(m, newp, newsize);
+ set_inuse(m, p, leadsize);
+ leader = chunk2mem(p);
+ }
+ p = newp;
+ }
+
+ /* Give back spare room at the end */
+ if (!is_mmapped(p)) {
+ size_t size = chunksize(p);
+ if (size > nb + MIN_CHUNK_SIZE) {
+ size_t remainder_size = size - nb;
+ mchunkptr remainder = chunk_plus_offset(p, nb);
+ set_inuse(m, p, nb);
+ set_inuse(m, remainder, remainder_size);
+ trailer = chunk2mem(remainder);
+ }
+ }
+
+ assert (chunksize(p) >= nb);
+ assert((((size_t)(chunk2mem(p))) % alignment) == 0);
+ check_inuse_chunk(m, p);
+ POSTACTION(m);
+ if (leader != 0) {
+ internal_free(m, leader);
+ }
+ if (trailer != 0) {
+ internal_free(m, trailer);
+ }
+ return chunk2mem(p);
+ }
+ }
+ return 0;
+}
+
+/* ------------------------ comalloc/coalloc support --------------------- */
+
+static void** ialloc(mstate m,
+ size_t n_elements,
+ size_t* sizes,
+ int opts,
+ void* chunks[]) {
+ /*
+ This provides common support for independent_X routines, handling
+ all of the combinations that can result.
+
+ The opts arg has:
+ bit 0 set if all elements are same size (using sizes[0])
+ bit 1 set if elements should be zeroed
+ */
+
+ size_t element_size; /* chunksize of each element, if all same */
+ size_t contents_size; /* total size of elements */
+ size_t array_size; /* request size of pointer array */
+ void* mem; /* malloced aggregate space */
+ mchunkptr p; /* corresponding chunk */
+ size_t remainder_size; /* remaining bytes while splitting */
+ void** marray; /* either "chunks" or malloced ptr array */
+ mchunkptr array_chunk; /* chunk for malloced ptr array */
+ flag_t was_enabled; /* to disable mmap */
+ size_t size;
+ size_t i;
+
+ /* compute array length, if needed */
+ if (chunks != 0) {
+ if (n_elements == 0)
+ return chunks; /* nothing to do */
+ marray = chunks;
+ array_size = 0;
+ }
+ else {
+ /* if empty req, must still return chunk representing empty array */
+ if (n_elements == 0)
+ return (void**)internal_malloc(m, 0);
+ marray = 0;
+ array_size = request2size(n_elements * (sizeof(void*)));
+ }
+
+ /* compute total element size */
+ if (opts & 0x1) { /* all-same-size */
+ element_size = request2size(*sizes);
+ contents_size = n_elements * element_size;
+ }
+ else { /* add up all the sizes */
+ element_size = 0;
+ contents_size = 0;
+ for (i = 0; i != n_elements; ++i)
+ contents_size += request2size(sizes[i]);
+ }
+
+ size = contents_size + array_size;
+
+ /*
+ Allocate the aggregate chunk. First disable direct-mmapping so
+ malloc won't use it, since we would not be able to later
+ free/realloc space internal to a segregated mmap region.
+ */
+ was_enabled = use_mmap(m);
+ disable_mmap(m);
+ mem = internal_malloc(m, size - CHUNK_OVERHEAD);
+ if (was_enabled)
+ enable_mmap(m);
+ if (mem == 0)
+ return 0;
+
+ if (PREACTION(m)) return 0;
+ p = mem2chunk(mem);
+ remainder_size = chunksize(p);
+
+ assert(!is_mmapped(p));
+
+ if (opts & 0x2) { /* optionally clear the elements */
+ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size);
+ }
+
+ /* If not provided, allocate the pointer array as final part of chunk */
+ if (marray == 0) {
+ size_t array_chunk_size;
+ array_chunk = chunk_plus_offset(p, contents_size);
+ array_chunk_size = remainder_size - contents_size;
+ marray = (void**) (chunk2mem(array_chunk));
+ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size);
+ remainder_size = contents_size;
+ }
+
+ /* split out elements */
+ for (i = 0; ; ++i) {
+ marray[i] = chunk2mem(p);
+ if (i != n_elements-1) {
+ if (element_size != 0)
+ size = element_size;
+ else
+ size = request2size(sizes[i]);
+ remainder_size -= size;
+ set_size_and_pinuse_of_inuse_chunk(m, p, size);
+ p = chunk_plus_offset(p, size);
+ }
+ else { /* the final element absorbs any overallocation slop */
+ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size);
+ break;
+ }
+ }
+
+#if DEBUG
+ if (marray != chunks) {
+ /* final element must have exactly exhausted chunk */
+ if (element_size != 0) {
+ assert(remainder_size == element_size);
+ }
+ else {
+ assert(remainder_size == request2size(sizes[i]));
+ }
+ check_inuse_chunk(m, mem2chunk(marray));
+ }
+ for (i = 0; i != n_elements; ++i)
+ check_inuse_chunk(m, mem2chunk(marray[i]));
+
+#endif /* DEBUG */
+
+ POSTACTION(m);
+ return marray;
+}
+
+
+/* -------------------------- public routines ---------------------------- */
+
+#if !ONLY_MSPACES
+
+void* dlmalloc(size_t bytes) {
+ /*
+ Basic algorithm:
+ If a small request (< 256 bytes minus per-chunk overhead):
+ 1. If one exists, use a remainderless chunk in associated smallbin.
+ (Remainderless means that there are too few excess bytes to
+ represent as a chunk.)
+ 2. If it is big enough, use the dv chunk, which is normally the
+ chunk adjacent to the one used for the most recent small request.
+ 3. If one exists, split the smallest available chunk in a bin,
+ saving remainder in dv.
+ 4. If it is big enough, use the top chunk.
+ 5. If available, get memory from system and use it
+ Otherwise, for a large request:
+ 1. Find the smallest available binned chunk that fits, and use it
+ if it is better fitting than dv chunk, splitting if necessary.
+ 2. If better fitting than any binned chunk, use the dv chunk.
+ 3. If it is big enough, use the top chunk.
+ 4. If request size >= mmap threshold, try to directly mmap this chunk.
+ 5. If available, get memory from system and use it
+
+ The ugly goto's here ensure that postaction occurs along all paths.
+ */
+
+ if (!PREACTION(gm)) {
+ void* mem;
+ size_t nb;
+ if (bytes <= MAX_SMALL_REQUEST) {
+ bindex_t idx;
+ binmap_t smallbits;
+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
+ idx = small_index(nb);
+ smallbits = gm->smallmap >> idx;
+
+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
+ mchunkptr b, p;
+ idx += ~smallbits & 1; /* Uses next bin if idx empty */
+ b = smallbin_at(gm, idx);
+ p = b->fd;
+ assert(chunksize(p) == small_index2size(idx));
+ unlink_first_small_chunk(gm, b, p, idx);
+ set_inuse_and_pinuse(gm, p, small_index2size(idx));
+ mem = chunk2mem(p);
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+
+ else if (nb > gm->dvsize) {
+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
+ mchunkptr b, p, r;
+ size_t rsize;
+ bindex_t i;
+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
+ binmap_t leastbit = least_bit(leftbits);
+ compute_bit2idx(leastbit, i);
+ b = smallbin_at(gm, i);
+ p = b->fd;
+ assert(chunksize(p) == small_index2size(i));
+ unlink_first_small_chunk(gm, b, p, i);
+ rsize = small_index2size(i) - nb;
+ /* Fit here cannot be remainderless if 4byte sizes */
+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
+ set_inuse_and_pinuse(gm, p, small_index2size(i));
+ else {
+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+ r = chunk_plus_offset(p, nb);
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ replace_dv(gm, r, rsize);
+ }
+ mem = chunk2mem(p);
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+
+ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) {
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+ }
+ }
+ else if (bytes >= MAX_REQUEST)
+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
+ else {
+ nb = pad_request(bytes);
+ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) {
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+ }
+
+ if (nb <= gm->dvsize) {
+ size_t rsize = gm->dvsize - nb;
+ mchunkptr p = gm->dv;
+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
+ mchunkptr r = gm->dv = chunk_plus_offset(p, nb);
+ gm->dvsize = rsize;
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+ }
+ else { /* exhaust dv */
+ size_t dvs = gm->dvsize;
+ gm->dvsize = 0;
+ gm->dv = 0;
+ set_inuse_and_pinuse(gm, p, dvs);
+ }
+ mem = chunk2mem(p);
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+
+ else if (nb < gm->topsize) { /* Split top */
+ size_t rsize = gm->topsize -= nb;
+ mchunkptr p = gm->top;
+ mchunkptr r = gm->top = chunk_plus_offset(p, nb);
+ r->head = rsize | PINUSE_BIT;
+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+ mem = chunk2mem(p);
+ check_top_chunk(gm, gm->top);
+ check_malloced_chunk(gm, mem, nb);
+ goto postaction;
+ }
+
+ mem = sys_alloc(gm, nb);
+
+ postaction:
+ POSTACTION(gm);
+ return mem;
+ }
+
+ return 0;
+}
+
+void dlfree(void* mem) {
+ /*
+ Consolidate freed chunks with preceeding or succeeding bordering
+ free chunks, if they exist, and then place in a bin. Intermixed
+ with special cases for top, dv, mmapped chunks, and usage errors.
+ */
+
+ if (mem != 0) {
+ mchunkptr p = mem2chunk(mem);
+#if FOOTERS
+ mstate fm = get_mstate_for(p);
+ if (!ok_magic(fm)) {
+ USAGE_ERROR_ACTION(fm, p);
+ return;
+ }
+#else /* FOOTERS */
+#define fm gm
+#endif /* FOOTERS */
+ if (!PREACTION(fm)) {
+ check_inuse_chunk(fm, p);
+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
+ size_t psize = chunksize(p);
+ mchunkptr next = chunk_plus_offset(p, psize);
+ if (!pinuse(p)) {
+ size_t prevsize = p->prev_foot;
+ if ((prevsize & IS_MMAPPED_BIT) != 0) {
+ prevsize &= ~IS_MMAPPED_BIT;
+ psize += prevsize + MMAP_FOOT_PAD;
+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
+ fm->footprint -= psize;
+ goto postaction;
+ }
+ else {
+ mchunkptr prev = chunk_minus_offset(p, prevsize);
+ psize += prevsize;
+ p = prev;
+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
+ if (p != fm->dv) {
+ unlink_chunk(fm, p, prevsize);
+ }
+ else if ((next->head & INUSE_BITS) == INUSE_BITS) {
+ fm->dvsize = psize;
+ set_free_with_pinuse(p, psize, next);
+ goto postaction;
+ }
+ }
+ else
+ goto erroraction;
+ }
+ }
+
+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
+ if (!cinuse(next)) { /* consolidate forward */
+ if (next == fm->top) {
+ size_t tsize = fm->topsize += psize;
+ fm->top = p;
+ p->head = tsize | PINUSE_BIT;
+ if (p == fm->dv) {
+ fm->dv = 0;
+ fm->dvsize = 0;
+ }
+ if (should_trim(fm, tsize))
+ sys_trim(fm, 0);
+ goto postaction;
+ }
+ else if (next == fm->dv) {
+ size_t dsize = fm->dvsize += psize;
+ fm->dv = p;
+ set_size_and_pinuse_of_free_chunk(p, dsize);
+ goto postaction;
+ }
+ else {
+ size_t nsize = chunksize(next);
+ psize += nsize;
+ unlink_chunk(fm, next, nsize);
+ set_size_and_pinuse_of_free_chunk(p, psize);
+ if (p == fm->dv) {
+ fm->dvsize = psize;
+ goto postaction;
+ }
+ }
+ }
+ else
+ set_free_with_pinuse(p, psize, next);
+ insert_chunk(fm, p, psize);
+ check_free_chunk(fm, p);
+ goto postaction;
+ }
+ }
+ erroraction:
+ USAGE_ERROR_ACTION(fm, p);
+ postaction:
+ POSTACTION(fm);
+ }
+ }
+#if !FOOTERS
+#undef fm
+#endif /* FOOTERS */
+}
+
+void* dlcalloc(size_t n_elements, size_t elem_size) {
+ void* mem;
+ size_t req = 0;
+ if (n_elements != 0) {
+ req = n_elements * elem_size;
+ if (((n_elements | elem_size) & ~(size_t)0xffff) &&
+ (req / n_elements != elem_size))
+ req = MAX_SIZE_T; /* force downstream failure on overflow */
+ }
+ mem = dlmalloc(req);
+ if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
+ memset(mem, 0, req);
+ return mem;
+}
+
+void* dlrealloc(void* oldmem, size_t bytes) {
+ if (oldmem == 0)
+ return dlmalloc(bytes);
+#ifdef REALLOC_ZERO_BYTES_FREES
+ if (bytes == 0) {
+ dlfree(oldmem);
+ return 0;
+ }
+#endif /* REALLOC_ZERO_BYTES_FREES */
+ else {
+#if ! FOOTERS
+ mstate m = gm;
+#else /* FOOTERS */
+ mstate m = get_mstate_for(mem2chunk(oldmem));
+ if (!ok_magic(m)) {
+ USAGE_ERROR_ACTION(m, oldmem);
+ return 0;
+ }
+#endif /* FOOTERS */
+ return internal_realloc(m, oldmem, bytes);
+ }
+}
+
+void* dlmemalign(size_t alignment, size_t bytes) {
+ return internal_memalign(gm, alignment, bytes);
+}
+
+void** dlindependent_calloc(size_t n_elements, size_t elem_size,
+ void* chunks[]) {
+ size_t sz = elem_size; /* serves as 1-element array */
+ return ialloc(gm, n_elements, &sz, 3, chunks);
+}
+
+void** dlindependent_comalloc(size_t n_elements, size_t sizes[],
+ void* chunks[]) {
+ return ialloc(gm, n_elements, sizes, 0, chunks);
+}
+
+void* dlvalloc(size_t bytes) {
+ size_t pagesz;
+ init_mparams();
+ pagesz = mparams.page_size;
+ return dlmemalign(pagesz, bytes);
+}
+
+void* dlpvalloc(size_t bytes) {
+ size_t pagesz;
+ init_mparams();
+ pagesz = mparams.page_size;
+ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE));
+}
+
+int dlmalloc_trim(size_t pad) {
+ int result = 0;
+ if (!PREACTION(gm)) {
+ result = sys_trim(gm, pad);
+ POSTACTION(gm);
+ }
+ return result;
+}
+
+size_t dlmalloc_footprint(void) {
+ return gm->footprint;
+}
+
+size_t dlmalloc_max_footprint(void) {
+ return gm->max_footprint;
+}
+
+#if !NO_MALLINFO
+struct mallinfo dlmallinfo(void) {
+ return internal_mallinfo(gm);
+}
+#endif /* NO_MALLINFO */
+
+void dlmalloc_stats() {
+ internal_malloc_stats(gm);
+}
+
+size_t dlmalloc_usable_size(void* mem) {
+ if (mem != 0) {
+ mchunkptr p = mem2chunk(mem);
+ if (cinuse(p))
+ return chunksize(p) - overhead_for(p);
+ }
+ return 0;
+}
+
+int dlmallopt(int param_number, int value) {
+ return change_mparam(param_number, value);
+}
+
+#endif /* !ONLY_MSPACES */
+
+/* ----------------------------- user mspaces ---------------------------- */
+
+#if MSPACES
+
+static mstate init_user_mstate(char* tbase, size_t tsize) {
+ size_t msize = pad_request(sizeof(struct malloc_state));
+ mchunkptr mn;
+ mchunkptr msp = align_as_chunk(tbase);
+ mstate m = (mstate)(chunk2mem(msp));
+ memset(m, 0, msize);
+ INITIAL_LOCK(&m->mutex);
+ msp->head = (msize|PINUSE_BIT|CINUSE_BIT);
+ m->seg.base = m->least_addr = tbase;
+ m->seg.size = m->footprint = m->max_footprint = tsize;
+ m->magic = mparams.magic;
+ m->mflags = mparams.default_mflags;
+ disable_contiguous(m);
+ init_bins(m);
+ mn = next_chunk(mem2chunk(m));
+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE);
+ check_top_chunk(m, m->top);
+ return m;
+}
+
+mspace create_mspace(size_t capacity, int locked) {
+ mstate m = 0;
+ size_t msize = pad_request(sizeof(struct malloc_state));
+ init_mparams(); /* Ensure pagesize etc initialized */
+
+ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
+ size_t rs = ((capacity == 0)? mparams.granularity :
+ (capacity + TOP_FOOT_SIZE + msize));
+ size_t tsize = granularity_align(rs);
+ char* tbase = (char*)(CALL_MMAP(tsize));
+ if (tbase != CMFAIL) {
+ m = init_user_mstate(tbase, tsize);
+ set_segment_flags(&m->seg, IS_MMAPPED_BIT);
+ set_lock(m, locked);
+ }
+ }
+ return (mspace)m;
+}
+
+mspace create_mspace_with_base(void* base, size_t capacity, int locked) {
+ mstate m = 0;
+ size_t msize = pad_request(sizeof(struct malloc_state));
+ init_mparams(); /* Ensure pagesize etc initialized */
+
+ if (capacity > msize + TOP_FOOT_SIZE &&
+ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
+ m = init_user_mstate((char*)base, capacity);
+ set_segment_flags(&m->seg, EXTERN_BIT);
+ set_lock(m, locked);
+ }
+ return (mspace)m;
+}
+
+size_t destroy_mspace(mspace msp) {
+ size_t freed = 0;
+ mstate ms = (mstate)msp;
+ if (ok_magic(ms)) {
+ msegmentptr sp = &ms->seg;
+ while (sp != 0) {
+ char* base = sp->base;
+ size_t size = sp->size;
+ flag_t flag = get_segment_flags(sp);
+ sp = sp->next;
+ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) &&
+ CALL_MUNMAP(base, size) == 0)
+ freed += size;
+ }
+ }
+ else {
+ USAGE_ERROR_ACTION(ms,ms);
+ }
+ return freed;
+}
+
+/*
+ mspace versions of routines are near-clones of the global
+ versions. This is not so nice but better than the alternatives.
+*/
+
+
+void* mspace_malloc(mspace msp, size_t bytes) {
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ if (!PREACTION(ms)) {
+ void* mem;
+ size_t nb;
+ if (bytes <= MAX_SMALL_REQUEST) {
+ bindex_t idx;
+ binmap_t smallbits;
+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
+ idx = small_index(nb);
+ smallbits = ms->smallmap >> idx;
+
+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
+ mchunkptr b, p;
+ idx += ~smallbits & 1; /* Uses next bin if idx empty */
+ b = smallbin_at(ms, idx);
+ p = b->fd;
+ assert(chunksize(p) == small_index2size(idx));
+ unlink_first_small_chunk(ms, b, p, idx);
+ set_inuse_and_pinuse(ms, p, small_index2size(idx));
+ mem = chunk2mem(p);
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+
+ else if (nb > ms->dvsize) {
+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
+ mchunkptr b, p, r;
+ size_t rsize;
+ bindex_t i;
+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
+ binmap_t leastbit = least_bit(leftbits);
+ compute_bit2idx(leastbit, i);
+ b = smallbin_at(ms, i);
+ p = b->fd;
+ assert(chunksize(p) == small_index2size(i));
+ unlink_first_small_chunk(ms, b, p, i);
+ rsize = small_index2size(i) - nb;
+ /* Fit here cannot be remainderless if 4byte sizes */
+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
+ set_inuse_and_pinuse(ms, p, small_index2size(i));
+ else {
+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+ r = chunk_plus_offset(p, nb);
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ replace_dv(ms, r, rsize);
+ }
+ mem = chunk2mem(p);
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+
+ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) {
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+ }
+ }
+ else if (bytes >= MAX_REQUEST)
+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
+ else {
+ nb = pad_request(bytes);
+ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) {
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+ }
+
+ if (nb <= ms->dvsize) {
+ size_t rsize = ms->dvsize - nb;
+ mchunkptr p = ms->dv;
+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
+ mchunkptr r = ms->dv = chunk_plus_offset(p, nb);
+ ms->dvsize = rsize;
+ set_size_and_pinuse_of_free_chunk(r, rsize);
+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+ }
+ else { /* exhaust dv */
+ size_t dvs = ms->dvsize;
+ ms->dvsize = 0;
+ ms->dv = 0;
+ set_inuse_and_pinuse(ms, p, dvs);
+ }
+ mem = chunk2mem(p);
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+
+ else if (nb < ms->topsize) { /* Split top */
+ size_t rsize = ms->topsize -= nb;
+ mchunkptr p = ms->top;
+ mchunkptr r = ms->top = chunk_plus_offset(p, nb);
+ r->head = rsize | PINUSE_BIT;
+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+ mem = chunk2mem(p);
+ check_top_chunk(ms, ms->top);
+ check_malloced_chunk(ms, mem, nb);
+ goto postaction;
+ }
+
+ mem = sys_alloc(ms, nb);
+
+ postaction:
+ POSTACTION(ms);
+ return mem;
+ }
+
+ return 0;
+}
+
+void mspace_free(mspace msp, void* mem) {
+ if (mem != 0) {
+ mchunkptr p = mem2chunk(mem);
+#if FOOTERS
+ mstate fm = get_mstate_for(p);
+#else /* FOOTERS */
+ mstate fm = (mstate)msp;
+#endif /* FOOTERS */
+ if (!ok_magic(fm)) {
+ USAGE_ERROR_ACTION(fm, p);
+ return;
+ }
+ if (!PREACTION(fm)) {
+ check_inuse_chunk(fm, p);
+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
+ size_t psize = chunksize(p);
+ mchunkptr next = chunk_plus_offset(p, psize);
+ if (!pinuse(p)) {
+ size_t prevsize = p->prev_foot;
+ if ((prevsize & IS_MMAPPED_BIT) != 0) {
+ prevsize &= ~IS_MMAPPED_BIT;
+ psize += prevsize + MMAP_FOOT_PAD;
+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
+ fm->footprint -= psize;
+ goto postaction;
+ }
+ else {
+ mchunkptr prev = chunk_minus_offset(p, prevsize);
+ psize += prevsize;
+ p = prev;
+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
+ if (p != fm->dv) {
+ unlink_chunk(fm, p, prevsize);
+ }
+ else if ((next->head & INUSE_BITS) == INUSE_BITS) {
+ fm->dvsize = psize;
+ set_free_with_pinuse(p, psize, next);
+ goto postaction;
+ }
+ }
+ else
+ goto erroraction;
+ }
+ }
+
+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
+ if (!cinuse(next)) { /* consolidate forward */
+ if (next == fm->top) {
+ size_t tsize = fm->topsize += psize;
+ fm->top = p;
+ p->head = tsize | PINUSE_BIT;
+ if (p == fm->dv) {
+ fm->dv = 0;
+ fm->dvsize = 0;
+ }
+ if (should_trim(fm, tsize))
+ sys_trim(fm, 0);
+ goto postaction;
+ }
+ else if (next == fm->dv) {
+ size_t dsize = fm->dvsize += psize;
+ fm->dv = p;
+ set_size_and_pinuse_of_free_chunk(p, dsize);
+ goto postaction;
+ }
+ else {
+ size_t nsize = chunksize(next);
+ psize += nsize;
+ unlink_chunk(fm, next, nsize);
+ set_size_and_pinuse_of_free_chunk(p, psize);
+ if (p == fm->dv) {
+ fm->dvsize = psize;
+ goto postaction;
+ }
+ }
+ }
+ else
+ set_free_with_pinuse(p, psize, next);
+ insert_chunk(fm, p, psize);
+ check_free_chunk(fm, p);
+ goto postaction;
+ }
+ }
+ erroraction:
+ USAGE_ERROR_ACTION(fm, p);
+ postaction:
+ POSTACTION(fm);
+ }
+ }
+}
+
+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) {
+ void* mem;
+ size_t req = 0;
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ if (n_elements != 0) {
+ req = n_elements * elem_size;
+ if (((n_elements | elem_size) & ~(size_t)0xffff) &&
+ (req / n_elements != elem_size))
+ req = MAX_SIZE_T; /* force downstream failure on overflow */
+ }
+ mem = internal_malloc(ms, req);
+ if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
+ memset(mem, 0, req);
+ return mem;
+}
+
+void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) {
+ if (oldmem == 0)
+ return mspace_malloc(msp, bytes);
+#ifdef REALLOC_ZERO_BYTES_FREES
+ if (bytes == 0) {
+ mspace_free(msp, oldmem);
+ return 0;
+ }
+#endif /* REALLOC_ZERO_BYTES_FREES */
+ else {
+#if FOOTERS
+ mchunkptr p = mem2chunk(oldmem);
+ mstate ms = get_mstate_for(p);
+#else /* FOOTERS */
+ mstate ms = (mstate)msp;
+#endif /* FOOTERS */
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ return internal_realloc(ms, oldmem, bytes);
+ }
+}
+
+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ return internal_memalign(ms, alignment, bytes);
+}
+
+void** mspace_independent_calloc(mspace msp, size_t n_elements,
+ size_t elem_size, void* chunks[]) {
+ size_t sz = elem_size; /* serves as 1-element array */
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ return ialloc(ms, n_elements, &sz, 3, chunks);
+}
+
+void** mspace_independent_comalloc(mspace msp, size_t n_elements,
+ size_t sizes[], void* chunks[]) {
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ return 0;
+ }
+ return ialloc(ms, n_elements, sizes, 0, chunks);
+}
+
+int mspace_trim(mspace msp, size_t pad) {
+ int result = 0;
+ mstate ms = (mstate)msp;
+ if (ok_magic(ms)) {
+ if (!PREACTION(ms)) {
+ result = sys_trim(ms, pad);
+ POSTACTION(ms);
+ }
+ }
+ else {
+ USAGE_ERROR_ACTION(ms,ms);
+ }
+ return result;
+}
+
+void mspace_malloc_stats(mspace msp) {
+ mstate ms = (mstate)msp;
+ if (ok_magic(ms)) {
+ internal_malloc_stats(ms);
+ }
+ else {
+ USAGE_ERROR_ACTION(ms,ms);
+ }
+}
+
+size_t mspace_footprint(mspace msp) {
+ size_t result;
+ mstate ms = (mstate)msp;
+ if (ok_magic(ms)) {
+ result = ms->footprint;
+ }
+ USAGE_ERROR_ACTION(ms,ms);
+ return result;
+}
+
+
+size_t mspace_max_footprint(mspace msp) {
+ size_t result;
+ mstate ms = (mstate)msp;
+ if (ok_magic(ms)) {
+ result = ms->max_footprint;
+ }
+ USAGE_ERROR_ACTION(ms,ms);
+ return result;
+}
+
+
+#if !NO_MALLINFO
+struct mallinfo mspace_mallinfo(mspace msp) {
+ mstate ms = (mstate)msp;
+ if (!ok_magic(ms)) {
+ USAGE_ERROR_ACTION(ms,ms);
+ }
+ return internal_mallinfo(ms);
+}
+#endif /* NO_MALLINFO */
+
+int mspace_mallopt(int param_number, int value) {
+ return change_mparam(param_number, value);
+}
+
+#endif /* MSPACES */
+
+/* -------------------- Alternative MORECORE functions ------------------- */
+
+/*
+ Guidelines for creating a custom version of MORECORE:
+
+ * For best performance, MORECORE should allocate in multiples of pagesize.
+ * MORECORE may allocate more memory than requested. (Or even less,
+ but this will usually result in a malloc failure.)
+ * MORECORE must not allocate memory when given argument zero, but
+ instead return one past the end address of memory from previous
+ nonzero call.
+ * For best performance, consecutive calls to MORECORE with positive
+ arguments should return increasing addresses, indicating that
+ space has been contiguously extended.
+ * Even though consecutive calls to MORECORE need not return contiguous
+ addresses, it must be OK for malloc'ed chunks to span multiple
+ regions in those cases where they do happen to be contiguous.
+ * MORECORE need not handle negative arguments -- it may instead
+ just return MFAIL when given negative arguments.
+ Negative arguments are always multiples of pagesize. MORECORE
+ must not misinterpret negative args as large positive unsigned
+ args. You can suppress all such calls from even occurring by defining
+ MORECORE_CANNOT_TRIM,
+
+ As an example alternative MORECORE, here is a custom allocator
+ kindly contributed for pre-OSX macOS. It uses virtually but not
+ necessarily physically contiguous non-paged memory (locked in,
+ present and won't get swapped out). You can use it by uncommenting
+ this section, adding some #includes, and setting up the appropriate
+ defines above:
+
+ #define MORECORE osMoreCore
+
+ There is also a shutdown routine that should somehow be called for
+ cleanup upon program exit.
+
+ #define MAX_POOL_ENTRIES 100
+ #define MINIMUM_MORECORE_SIZE (64 * 1024U)
+ static int next_os_pool;
+ void *our_os_pools[MAX_POOL_ENTRIES];
+
+ void *osMoreCore(int size)
+ {
+ void *ptr = 0;
+ static void *sbrk_top = 0;
+
+ if (size > 0)
+ {
+ if (size < MINIMUM_MORECORE_SIZE)
+ size = MINIMUM_MORECORE_SIZE;
+ if (CurrentExecutionLevel() == kTaskLevel)
+ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0);
+ if (ptr == 0)
+ {
+ return (void *) MFAIL;
+ }
+ // save ptrs so they can be freed during cleanup
+ our_os_pools[next_os_pool] = ptr;
+ next_os_pool++;
+ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
+ sbrk_top = (char *) ptr + size;
+ return ptr;
+ }
+ else if (size < 0)
+ {
+ // we don't currently support shrink behavior
+ return (void *) MFAIL;
+ }
+ else
+ {
+ return sbrk_top;
+ }
+ }
+
+ // cleanup any allocated memory pools
+ // called as last thing before shutting down driver
+
+ void osCleanupMem(void)
+ {
+ void **ptr;
+
+ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++)
+ if (*ptr)
+ {
+ PoolDeallocate(*ptr);
+ *ptr = 0;
+ }
+ }
+
+*/
+
+
+/* -----------------------------------------------------------------------
+History:
+ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee)
+ * Add max_footprint functions
+ * Ensure all appropriate literals are size_t
+ * Fix conditional compilation problem for some #define settings
+ * Avoid concatenating segments with the one provided
+ in create_mspace_with_base
+ * Rename some variables to avoid compiler shadowing warnings
+ * Use explicit lock initialization.
+ * Better handling of sbrk interference.
+ * Simplify and fix segment insertion, trimming and mspace_destroy
+ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x
+ * Thanks especially to Dennis Flanagan for help on these.
+
+ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee)
+ * Fix memalign brace error.
+
+ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee)
+ * Fix improper #endif nesting in C++
+ * Add explicit casts needed for C++
+
+ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee)
+ * Use trees for large bins
+ * Support mspaces
+ * Use segments to unify sbrk-based and mmap-based system allocation,
+ removing need for emulation on most platforms without sbrk.
+ * Default safety checks
+ * Optional footer checks. Thanks to William Robertson for the idea.
+ * Internal code refactoring
+ * Incorporate suggestions and platform-specific changes.
+ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas,
+ Aaron Bachmann, Emery Berger, and others.
+ * Speed up non-fastbin processing enough to remove fastbins.
+ * Remove useless cfree() to avoid conflicts with other apps.
+ * Remove internal memcpy, memset. Compilers handle builtins better.
+ * Remove some options that no one ever used and rename others.
+
+ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee)
+ * Fix malloc_state bitmap array misdeclaration
+
+ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee)
+ * Allow tuning of FIRST_SORTED_BIN_SIZE
+ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte.
+ * Better detection and support for non-contiguousness of MORECORE.
+ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger
+ * Bypass most of malloc if no frees. Thanks To Emery Berger.
+ * Fix freeing of old top non-contiguous chunk im sysmalloc.
+ * Raised default trim and map thresholds to 256K.
+ * Fix mmap-related #defines. Thanks to Lubos Lunak.
+ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield.
+ * Branch-free bin calculation
+ * Default trim and mmap thresholds now 256K.
+
+ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee)
+ * Introduce independent_comalloc and independent_calloc.
+ Thanks to Michael Pachos for motivation and help.
+ * Make optional .h file available
+ * Allow > 2GB requests on 32bit systems.
+ * new WIN32 sbrk, mmap, munmap, lock code from <Walter@GeNeSys-e.de>.
+ Thanks also to Andreas Mueller <a.mueller at paradatec.de>,
+ and Anonymous.
+ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for
+ helping test this.)
+ * memalign: check alignment arg
+ * realloc: don't try to shift chunks backwards, since this
+ leads to more fragmentation in some programs and doesn't
+ seem to help in any others.
+ * Collect all cases in malloc requiring system memory into sysmalloc
+ * Use mmap as backup to sbrk
+ * Place all internal state in malloc_state
+ * Introduce fastbins (although similar to 2.5.1)
+ * Many minor tunings and cosmetic improvements
+ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK
+ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS
+ Thanks to Tony E. Bennett <tbennett@nvidia.com> and others.
+ * Include errno.h to support default failure action.
+
+ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee)
+ * return null for negative arguments
+ * Added Several WIN32 cleanups from Martin C. Fong <mcfong at yahoo.com>
+ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h'
+ (e.g. WIN32 platforms)
+ * Cleanup header file inclusion for WIN32 platforms
+ * Cleanup code to avoid Microsoft Visual C++ compiler complaints
+ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing
+ memory allocation routines
+ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work)
+ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to
+ usage of 'assert' in non-WIN32 code
+ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to
+ avoid infinite loop
+ * Always call 'fREe()' rather than 'free()'
+
+ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee)
+ * Fixed ordering problem with boundary-stamping
+
+ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee)
+ * Added pvalloc, as recommended by H.J. Liu
+ * Added 64bit pointer support mainly from Wolfram Gloger
+ * Added anonymously donated WIN32 sbrk emulation
+ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen
+ * malloc_extend_top: fix mask error that caused wastage after
+ foreign sbrks
+ * Add linux mremap support code from HJ Liu
+
+ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee)
+ * Integrated most documentation with the code.
+ * Add support for mmap, with help from
+ Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+ * Use last_remainder in more cases.
+ * Pack bins using idea from colin@nyx10.cs.du.edu
+ * Use ordered bins instead of best-fit threshhold
+ * Eliminate block-local decls to simplify tracing and debugging.
+ * Support another case of realloc via move into top
+ * Fix error occuring when initial sbrk_base not word-aligned.
+ * Rely on page size for units instead of SBRK_UNIT to
+ avoid surprises about sbrk alignment conventions.
+ * Add mallinfo, mallopt. Thanks to Raymond Nijssen
+ (raymond@es.ele.tue.nl) for the suggestion.
+ * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
+ * More precautions for cases where other routines call sbrk,
+ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+ * Added macros etc., allowing use in linux libc from
+ H.J. Lu (hjl@gnu.ai.mit.edu)
+ * Inverted this history list
+
+ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee)
+ * Re-tuned and fixed to behave more nicely with V2.6.0 changes.
+ * Removed all preallocation code since under current scheme
+ the work required to undo bad preallocations exceeds
+ the work saved in good cases for most test programs.
+ * No longer use return list or unconsolidated bins since
+ no scheme using them consistently outperforms those that don't
+ given above changes.
+ * Use best fit for very large chunks to prevent some worst-cases.
+ * Added some support for debugging
+
+ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee)
+ * Removed footers when chunks are in use. Thanks to
+ Paul Wilson (wilson@cs.texas.edu) for the suggestion.
+
+ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee)
+ * Added malloc_trim, with help from Wolfram Gloger
+ (wmglo@Dent.MED.Uni-Muenchen.DE).
+
+ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g)
+
+ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g)
+ * realloc: try to expand in both directions
+ * malloc: swap order of clean-bin strategy;
+ * realloc: only conditionally expand backwards
+ * Try not to scavenge used bins
+ * Use bin counts as a guide to preallocation
+ * Occasionally bin return list chunks in first scan
+ * Add a few optimizations from colin@nyx10.cs.du.edu
+
+ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g)
+ * faster bin computation & slightly different binning
+ * merged all consolidations to one part of malloc proper
+ (eliminating old malloc_find_space & malloc_clean_bin)
+ * Scan 2 returns chunks (not just 1)
+ * Propagate failure in realloc if malloc returns 0
+ * Add stuff to allow compilation on non-ANSI compilers
+ from kpv@research.att.com
+
+ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu)
+ * removed potential for odd address access in prev_chunk
+ * removed dependency on getpagesize.h
+ * misc cosmetics and a bit more internal documentation
+ * anticosmetics: mangled names in macros to evade debugger strangeness
+ * tested on sparc, hp-700, dec-mips, rs6000
+ with gcc & native cc (hp, dec only) allowing
+ Detlefs & Zorn comparison study (in SIGPLAN Notices.)
+
+ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu)
+ * Based loosely on libg++-1.2X malloc. (It retains some of the overall
+ structure of old version, but most details differ.)
+
+*/
diff --git a/libffi/src/frv/ffi.c b/libffi/src/frv/ffi.c
index 6e2ac68736f..e9dc6762561 100644
--- a/libffi/src/frv/ffi.c
+++ b/libffi/src/frv/ffi.c
@@ -1,5 +1,6 @@
/* -----------------------------------------------------------------------
ffi.c - Copyright (c) 2004 Anthony Green
+ Copyright (C) 2007 Free Software Foundation, Inc.
FR-V Foreign Function Interface
@@ -243,14 +244,15 @@ void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3,
}
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp = (unsigned int *) &closure->tramp[0];
unsigned long fn = (long) ffi_closure_eabi;
- unsigned long cls = (long) closure;
+ unsigned long cls = (long) codeloc;
#ifdef __FRV_FDPIC__
register void *got __asm__("gr15");
#endif
@@ -259,7 +261,7 @@ ffi_prep_closure (ffi_closure* closure,
fn = (unsigned long) ffi_closure_eabi;
#ifdef __FRV_FDPIC__
- tramp[0] = &tramp[2];
+ tramp[0] = &((unsigned int *)codeloc)[2];
tramp[1] = got;
tramp[2] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */
tramp[3] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */
@@ -281,7 +283,8 @@ ffi_prep_closure (ffi_closure* closure,
/* Cache flushing. */
for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++)
- __asm__ volatile ("dcf @(%0,%1)\n\tici @(%0,%1)" :: "r" (tramp), "r" (i));
+ __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i),
+ "r" (codeloc));
return FFI_OK;
}
diff --git a/libffi/src/ia64/ffi.c b/libffi/src/ia64/ffi.c
index 77dec567284..09021def3a4 100644
--- a/libffi/src/ia64/ffi.c
+++ b/libffi/src/ia64/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1998 Red Hat, Inc.
+ ffi.c - Copyright (c) 1998, 2007 Red Hat, Inc.
Copyright (c) 2000 Hewlett Packard Company
IA64 Foreign Function Interface
@@ -400,10 +400,11 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
extern void ffi_closure_unix ();
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*,void*,void**,void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data,
+ void *codeloc)
{
/* The layout of a function descriptor. A C function pointer really
points to one of these. */
@@ -430,7 +431,7 @@ ffi_prep_closure (ffi_closure* closure,
tramp->code_pointer = fd->code_pointer;
tramp->real_gp = fd->gp;
- tramp->fake_gp = (UINT64)(PTR64)closure;
+ tramp->fake_gp = (UINT64)(PTR64)codeloc;
closure->cif = cif;
closure->user_data = user_data;
closure->fun = fun;
diff --git a/libffi/src/java_raw_api.c b/libffi/src/java_raw_api.c
index 5f15a05c336..9c00d37ed05 100644
--- a/libffi/src/java_raw_api.c
+++ b/libffi/src/java_raw_api.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- java_raw_api.c - Copyright (c) 1999 Red Hat, Inc.
+ java_raw_api.c - Copyright (c) 1999, 2007 Red Hat, Inc.
Cloned from raw_api.c
@@ -307,22 +307,20 @@ ffi_java_translate_args (ffi_cif *cif, void *rvalue,
ffi_java_raw_to_rvalue (cif, rvalue);
}
-/* Again, here is the generic version of ffi_prep_raw_closure, which
- * will install an intermediate "hub" for translation of arguments from
- * the pointer-array format, to the raw format */
-
ffi_status
-ffi_prep_java_raw_closure (ffi_raw_closure* cl,
- ffi_cif *cif,
- void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
- void *user_data)
+ffi_prep_java_raw_closure_loc (ffi_raw_closure* cl,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data,
+ void *codeloc)
{
ffi_status status;
- status = ffi_prep_closure ((ffi_closure*) cl,
- cif,
- &ffi_java_translate_args,
- (void*)cl);
+ status = ffi_prep_closure_loc ((ffi_closure*) cl,
+ cif,
+ &ffi_java_translate_args,
+ codeloc,
+ codeloc);
if (status == FFI_OK)
{
cl->fun = fun;
@@ -332,6 +330,19 @@ ffi_prep_java_raw_closure (ffi_raw_closure* cl,
return status;
}
+/* Again, here is the generic version of ffi_prep_raw_closure, which
+ * will install an intermediate "hub" for translation of arguments from
+ * the pointer-array format, to the raw format */
+
+ffi_status
+ffi_prep_java_raw_closure (ffi_raw_closure* cl,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data)
+{
+ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl);
+}
+
#endif /* FFI_CLOSURES */
#endif /* !FFI_NATIVE_RAW_API */
#endif /* !FFI_NO_RAW_API */
diff --git a/libffi/src/mips/ffi.c b/libffi/src/mips/ffi.c
index 73bc952187d..e5446807c09 100644
--- a/libffi/src/mips/ffi.c
+++ b/libffi/src/mips/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1996 Red Hat, Inc.
+ ffi.c - Copyright (c) 1996, 2007 Red Hat, Inc.
MIPS Foreign Function Interface
@@ -497,14 +497,15 @@ extern void ffi_closure_O32(void);
#endif /* FFI_MIPS_O32 */
ffi_status
-ffi_prep_closure (ffi_closure *closure,
- ffi_cif *cif,
- void (*fun)(ffi_cif*,void*,void**,void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp = (unsigned int *) &closure->tramp[0];
unsigned int fn;
- unsigned int ctx = (unsigned int) closure;
+ unsigned int ctx = (unsigned int) codeloc;
#if defined(FFI_MIPS_O32)
FFI_ASSERT(cif->abi == FFI_O32 || cif->abi == FFI_O32_SOFT_FLOAT);
@@ -525,7 +526,7 @@ ffi_prep_closure (ffi_closure *closure,
closure->user_data = user_data;
/* XXX this is available on Linux, but anything else? */
- cacheflush (tramp, FFI_TRAMPOLINE_SIZE, ICACHE);
+ cacheflush (codeloc, FFI_TRAMPOLINE_SIZE, ICACHE);
return FFI_OK;
}
diff --git a/libffi/src/pa/ffi.c b/libffi/src/pa/ffi.c
index 56f85dbdbe0..8f1789bace0 100644
--- a/libffi/src/pa/ffi.c
+++ b/libffi/src/pa/ffi.c
@@ -613,10 +613,11 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
extern void ffi_closure_pa32(void);
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*,void*,void**,void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data,
+ void *codeloc)
{
UINT32 *tramp = (UINT32 *)(closure->tramp);
#ifdef PA_HPUX
diff --git a/libffi/src/powerpc/ffi.c b/libffi/src/powerpc/ffi.c
index 57504a02f93..fe5550d5889 100644
--- a/libffi/src/powerpc/ffi.c
+++ b/libffi/src/powerpc/ffi.c
@@ -1,5 +1,6 @@
/* -----------------------------------------------------------------------
ffi.c - Copyright (c) 1998 Geoffrey Keating
+ Copyright (C) 2007 Free Software Foundation, Inc
PowerPC Foreign Function Interface
@@ -834,27 +835,24 @@ ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
#define MIN_CACHE_LINE_SIZE 8
static void
-flush_icache (char *addr1, int size)
+flush_icache (char *wraddr, char *xaddr, int size)
{
int i;
- char * addr;
for (i = 0; i < size; i += MIN_CACHE_LINE_SIZE)
- {
- addr = addr1 + i;
- __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;"
- : : "r" (addr) : "memory");
- }
- addr = addr1 + size - 1;
- __asm__ volatile ("icbi 0,%0;" "dcbf 0,%0;" "sync;" "isync;"
- : : "r"(addr) : "memory");
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;"
+ : : "r" (xaddr + i), "r" (wraddr + i) : "memory");
+ __asm__ volatile ("icbi 0,%0;" "dcbf 0,%1;" "sync;" "isync;"
+ : : "r"(xaddr + size - 1), "r"(wraddr + size - 1)
+ : "memory");
}
#endif
ffi_status
-ffi_prep_closure (ffi_closure *closure,
- ffi_cif *cif,
- void (*fun) (ffi_cif *, void *, void **, void *),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun) (ffi_cif *, void *, void **, void *),
+ void *user_data,
+ void *codeloc)
{
#ifdef POWERPC64
void **tramp = (void **) &closure->tramp[0];
@@ -862,7 +860,7 @@ ffi_prep_closure (ffi_closure *closure,
FFI_ASSERT (cif->abi == FFI_LINUX64);
/* Copy function address and TOC from ffi_closure_LINUX64. */
memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
- tramp[2] = (void *) closure;
+ tramp[2] = codeloc;
#else
unsigned int *tramp;
@@ -878,10 +876,10 @@ ffi_prep_closure (ffi_closure *closure,
tramp[8] = 0x7c0903a6; /* mtctr r0 */
tramp[9] = 0x4e800420; /* bctr */
*(void **) &tramp[2] = (void *) ffi_closure_SYSV; /* function */
- *(void **) &tramp[3] = (void *) closure; /* context */
+ *(void **) &tramp[3] = codeloc; /* context */
/* Flush the icache. */
- flush_icache (&closure->tramp[0],FFI_TRAMPOLINE_SIZE);
+ flush_icache ((char *)tramp, (char *)codeloc, FFI_TRAMPOLINE_SIZE);
#endif
closure->cif = cif;
diff --git a/libffi/src/powerpc/ffi_darwin.c b/libffi/src/powerpc/ffi_darwin.c
index 6bc0474e3db..6d1b73e7f75 100644
--- a/libffi/src/powerpc/ffi_darwin.c
+++ b/libffi/src/powerpc/ffi_darwin.c
@@ -3,7 +3,7 @@
Copyright (C) 1998 Geoffrey Keating
Copyright (C) 2001 John Hornkvist
- Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc.
FFI support for Darwin and AIX.
@@ -528,10 +528,11 @@ SP current --> +---------------------------------------+ 176 <- parent frame
*/
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp;
struct ffi_aix_trampoline_struct *tramp_aix;
@@ -553,14 +554,14 @@ ffi_prep_closure (ffi_closure* closure,
tramp[8] = 0x816b0004; /* lwz r11,4(r11) static chain */
tramp[9] = 0x4e800420; /* bctr */
tramp[2] = (unsigned long) ffi_closure_ASM; /* function */
- tramp[3] = (unsigned long) closure; /* context */
+ tramp[3] = (unsigned long) codeloc; /* context */
closure->cif = cif;
closure->fun = fun;
closure->user_data = user_data;
/* Flush the icache. Only necessary on Darwin. */
- flush_range(&closure->tramp[0],FFI_TRAMPOLINE_SIZE);
+ flush_range(codeloc, FFI_TRAMPOLINE_SIZE);
break;
@@ -573,7 +574,7 @@ ffi_prep_closure (ffi_closure* closure,
tramp_aix->code_pointer = fd->code_pointer;
tramp_aix->toc = fd->toc;
- tramp_aix->static_chain = closure;
+ tramp_aix->static_chain = codeloc;
closure->cif = cif;
closure->fun = fun;
closure->user_data = user_data;
diff --git a/libffi/src/prep_cif.c b/libffi/src/prep_cif.c
index 0e202cfe1f7..b6bc52a3999 100644
--- a/libffi/src/prep_cif.c
+++ b/libffi/src/prep_cif.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- prep_cif.c - Copyright (c) 1996, 1998 Red Hat, Inc.
+ prep_cif.c - Copyright (c) 1996, 1998, 2007 Red Hat, Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -158,3 +158,16 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs,
return ffi_prep_cif_machdep(cif);
}
#endif /* not __CRIS__ */
+
+#if FFI_CLOSURES
+
+ffi_status
+ffi_prep_closure (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data)
+{
+ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure);
+}
+
+#endif
diff --git a/libffi/src/raw_api.c b/libffi/src/raw_api.c
index c54127e6498..b3ca511463e 100644
--- a/libffi/src/raw_api.c
+++ b/libffi/src/raw_api.c
@@ -209,22 +209,20 @@ ffi_translate_args (ffi_cif *cif, void *rvalue,
(*cl->fun) (cif, rvalue, raw, cl->user_data);
}
-/* Again, here is the generic version of ffi_prep_raw_closure, which
- * will install an intermediate "hub" for translation of arguments from
- * the pointer-array format, to the raw format */
-
ffi_status
-ffi_prep_raw_closure (ffi_raw_closure* cl,
- ffi_cif *cif,
- void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
- void *user_data)
+ffi_prep_raw_closure_loc (ffi_raw_closure* cl,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data,
+ void *codeloc)
{
ffi_status status;
- status = ffi_prep_closure ((ffi_closure*) cl,
- cif,
- &ffi_translate_args,
- (void*)cl);
+ status = ffi_prep_closure_loc ((ffi_closure*) cl,
+ cif,
+ &ffi_translate_args,
+ codeloc,
+ codeloc);
if (status == FFI_OK)
{
cl->fun = fun;
@@ -236,4 +234,22 @@ ffi_prep_raw_closure (ffi_raw_closure* cl,
#endif /* FFI_CLOSURES */
#endif /* !FFI_NATIVE_RAW_API */
+
+#if FFI_CLOSURES
+
+/* Again, here is the generic version of ffi_prep_raw_closure, which
+ * will install an intermediate "hub" for translation of arguments from
+ * the pointer-array format, to the raw format */
+
+ffi_status
+ffi_prep_raw_closure (ffi_raw_closure* cl,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data)
+{
+ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl);
+}
+
+#endif /* FFI_CLOSURES */
+
#endif /* !FFI_NO_RAW_API */
diff --git a/libffi/src/s390/ffi.c b/libffi/src/s390/ffi.c
index 2809aa39a33..d17f7905419 100644
--- a/libffi/src/s390/ffi.c
+++ b/libffi/src/s390/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 2000 Software AG
+ ffi.c - Copyright (c) 2000, 2007 Software AG
S390 Foreign Function Interface
@@ -736,17 +736,18 @@ ffi_closure_helper_SYSV (ffi_closure *closure,
/*====================================================================*/
/* */
-/* Name - ffi_prep_closure. */
+/* Name - ffi_prep_closure_loc. */
/* */
/* Function - Prepare a FFI closure. */
/* */
/*====================================================================*/
ffi_status
-ffi_prep_closure (ffi_closure *closure,
- ffi_cif *cif,
- void (*fun) (ffi_cif *, void *, void **, void *),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun) (ffi_cif *, void *, void **, void *),
+ void *user_data,
+ void *codeloc)
{
FFI_ASSERT (cif->abi == FFI_SYSV);
@@ -755,7 +756,7 @@ ffi_prep_closure (ffi_closure *closure,
*(short *)&closure->tramp [2] = 0x9801; /* lm %r0,%r1,6(%r1) */
*(short *)&closure->tramp [4] = 0x1006;
*(short *)&closure->tramp [6] = 0x07f1; /* br %r1 */
- *(long *)&closure->tramp [8] = (long)closure;
+ *(long *)&closure->tramp [8] = (long)codeloc;
*(long *)&closure->tramp[12] = (long)&ffi_closure_SYSV;
#else
*(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */
@@ -763,7 +764,7 @@ ffi_prep_closure (ffi_closure *closure,
*(short *)&closure->tramp [4] = 0x100e;
*(short *)&closure->tramp [6] = 0x0004;
*(short *)&closure->tramp [8] = 0x07f1; /* br %r1 */
- *(long *)&closure->tramp[16] = (long)closure;
+ *(long *)&closure->tramp[16] = (long)codeloc;
*(long *)&closure->tramp[24] = (long)&ffi_closure_SYSV;
#endif
diff --git a/libffi/src/sh/ffi.c b/libffi/src/sh/ffi.c
index f347b507f7b..0cb8c72ccf6 100644
--- a/libffi/src/sh/ffi.c
+++ b/libffi/src/sh/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006 Kaz Kojima
+ ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Kaz Kojima
SuperH Foreign Function Interface
@@ -452,10 +452,11 @@ extern void __ic_invalidate (void *line);
#endif
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp;
unsigned short insn;
@@ -475,7 +476,7 @@ ffi_prep_closure (ffi_closure* closure,
tramp[0] = 0xd102d301;
tramp[1] = 0x412b0000 | insn;
#endif
- *(void **) &tramp[2] = (void *)closure; /* ctx */
+ *(void **) &tramp[2] = (void *)codeloc; /* ctx */
*(void **) &tramp[3] = (void *)ffi_closure_SYSV; /* funaddr */
closure->cif = cif;
@@ -484,7 +485,7 @@ ffi_prep_closure (ffi_closure* closure,
#if defined(__SH4__)
/* Flush the icache. */
- __ic_invalidate(&closure->tramp[0]);
+ __ic_invalidate(codeloc);
#endif
return FFI_OK;
diff --git a/libffi/src/sh64/ffi.c b/libffi/src/sh64/ffi.c
index caca436fc2d..9886883d327 100644
--- a/libffi/src/sh64/ffi.c
+++ b/libffi/src/sh64/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 2003, 2004, 2006 Kaz Kojima
+ ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima
SuperH SHmedia Foreign Function Interface
@@ -283,10 +283,11 @@ extern void ffi_closure_SYSV (void);
extern void __ic_invalidate (void *line);
ffi_status
-ffi_prep_closure (ffi_closure *closure,
- ffi_cif *cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure *closure,
+ ffi_cif *cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp;
@@ -310,8 +311,8 @@ ffi_prep_closure (ffi_closure *closure,
tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10;
tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10;
tramp[4] = 0x6bf10600;
- tramp[5] = 0xcc000010 | (((UINT32) closure) >> 16) << 10;
- tramp[6] = 0xc8000010 | (((UINT32) closure) & 0xffff) << 10;
+ tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10;
+ tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10;
tramp[7] = 0x4401fff0;
closure->cif = cif;
@@ -319,7 +320,8 @@ ffi_prep_closure (ffi_closure *closure,
closure->user_data = user_data;
/* Flush the icache. */
- asm volatile ("ocbwb %0,0; synco; icbi %0,0; synci" : : "r" (tramp));
+ asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp),
+ "r"(codeloc));
return FFI_OK;
}
diff --git a/libffi/src/sparc/ffi.c b/libffi/src/sparc/ffi.c
index b83d63dedc7..a10fe811dad 100644
--- a/libffi/src/sparc/ffi.c
+++ b/libffi/src/sparc/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1996, 2003, 2004 Red Hat, Inc.
+ ffi.c - Copyright (c) 1996, 2003, 2004, 2007 Red Hat, Inc.
SPARC Foreign Function Interface
@@ -425,10 +425,11 @@ extern void ffi_closure_v8(void);
#endif
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
unsigned int *tramp = (unsigned int *) &closure->tramp[0];
unsigned long fn;
@@ -443,7 +444,7 @@ ffi_prep_closure (ffi_closure* closure,
tramp[3] = 0x01000000; /* nop */
*((unsigned long *) &tramp[4]) = fn;
#else
- unsigned long ctx = (unsigned long) closure;
+ unsigned long ctx = (unsigned long) codeloc;
FFI_ASSERT (cif->abi == FFI_V8);
fn = (unsigned long) ffi_closure_v8;
tramp[0] = 0x03000000 | fn >> 10; /* sethi %hi(fn), %g1 */
diff --git a/libffi/src/x86/ffi.c b/libffi/src/x86/ffi.c
index 55921b6c06d..b6d42a889d3 100644
--- a/libffi/src/x86/ffi.c
+++ b/libffi/src/x86/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc.
+ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007 Red Hat, Inc.
Copyright (c) 2002 Ranjit Mathew
Copyright (c) 2002 Bo Thorsen
Copyright (c) 2002 Roger Sayle
@@ -302,7 +302,7 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue,
({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
unsigned int __fun = (unsigned int)(FUN); \
unsigned int __ctx = (unsigned int)(CTX); \
- unsigned int __dis = __fun - ((unsigned int) __tramp + FFI_TRAMPOLINE_SIZE); \
+ unsigned int __dis = __fun - (__ctx + FFI_TRAMPOLINE_SIZE); \
*(unsigned char*) &__tramp[0] = 0xb8; \
*(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \
*(unsigned char *) &__tramp[5] = 0xe9; \
@@ -313,16 +313,17 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue,
/* the cif must already be prep'ed */
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*,void*,void**,void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*,void*,void**,void*),
+ void *user_data,
+ void *codeloc)
{
FFI_ASSERT (cif->abi == FFI_SYSV);
FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
&ffi_closure_SYSV, \
- (void*)closure);
+ codeloc);
closure->cif = cif;
closure->user_data = user_data;
@@ -336,10 +337,11 @@ ffi_prep_closure (ffi_closure* closure,
#if !FFI_NO_RAW_API
ffi_status
-ffi_prep_raw_closure (ffi_raw_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
- void *user_data)
+ffi_prep_raw_closure_loc (ffi_raw_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
+ void *user_data,
+ void *codeloc)
{
int i;
@@ -358,7 +360,7 @@ ffi_prep_raw_closure (ffi_raw_closure* closure,
FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV,
- (void*)closure);
+ codeloc);
closure->cif = cif;
closure->user_data = user_data;
diff --git a/libffi/src/x86/ffi64.c b/libffi/src/x86/ffi64.c
index c6cf330c2c3..0bb18c6ac44 100644
--- a/libffi/src/x86/ffi64.c
+++ b/libffi/src/x86/ffi64.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 2002 Bo Thorsen <bo@suse.de>
+ ffi.c - Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de>
x86-64 Foreign Function Interface
@@ -433,10 +433,11 @@ ffi_call (ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
extern void ffi_closure_unix64(void);
ffi_status
-ffi_prep_closure (ffi_closure* closure,
- ffi_cif* cif,
- void (*fun)(ffi_cif*, void*, void**, void*),
- void *user_data)
+ffi_prep_closure_loc (ffi_closure* closure,
+ ffi_cif* cif,
+ void (*fun)(ffi_cif*, void*, void**, void*),
+ void *user_data,
+ void *codeloc)
{
volatile unsigned short *tramp;
@@ -445,7 +446,7 @@ ffi_prep_closure (ffi_closure* closure,
tramp[0] = 0xbb49; /* mov <code>, %r11 */
*(void * volatile *) &tramp[1] = ffi_closure_unix64;
tramp[5] = 0xba49; /* mov <data>, %r10 */
- *(void * volatile *) &tramp[6] = closure;
+ *(void * volatile *) &tramp[6] = codeloc;
/* Set the carry bit iff the function uses any sse registers.
This is clc or stc, together with the first byte of the jmp. */
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index be77ac293fd..dab94394a62 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,16 @@
+2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in (install-info): New dummy target.
+
+2007-03-05 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config.host (bfin*-linux-uclibc*): Set extra_parts.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add install-html and install-pdf dummy
+ targets.
+
2007-02-05 Roger Sayle <roger@eyesopen.com>
Daniel Jacobowitz <dan@codesourcery.com>
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index 80ab7e90fb7..63c9512fc80 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -735,15 +735,15 @@ gcc-extra-parts:
all: $(extra-parts)
# Documentation targets (empty).
-.PHONY: info html dvi pdf
+.PHONY: info html dvi pdf install-info install-html install-pdf
info:
-
+install-info:
html:
-
+install-html:
dvi:
-
pdf:
+install-pdf:
# Install rules. These do not depend on "all", so that they can be invoked
# recursively from it.
diff --git a/libgcc/config.host b/libgcc/config.host
index 48c46e72304..ac13e35d8f6 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -248,6 +248,11 @@ bfin*-elf*)
;;
bfin*-uclinux*)
;;
+bfin*-linux-uclibc*)
+ # No need to build crtbeginT.o on uClibc systems. Should probably
+ # be moved to the OS specific section above.
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ ;;
bfin*-*)
;;
c4x-*-rtems* | tic4x-*-rtems*)
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 695cf9411e8..1b3cff570c3 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,108 @@
+2007-03-14 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/30690
+ * all.m4: Quote everything, except for m4 macros.
+ * any.m4: Likewise.
+ * count.m4: Likewise.
+ * cshift1.m4: Likewise.
+ * eoshift1.m4: Likewise.
+ * eoshift3.m4: Likewise.
+ * exponent.m4: Likewise.
+ * fraction.m4: Likewise.
+ * in_pack.m4: Likewise.
+ * in_unpack.m4: Likewise.
+ * matmul.m4: Likewise.
+ * matmull.m4: Likewise.
+ * nearest.m4: Likewise.
+ * pow.m4: Likewise.
+ * product.m4: Likewise.
+ * reshape.m4: Likewise.
+ * rrspacing.m4: Likewise.
+ * set_exponent.m4: Likewise.
+ * shape.m4: Likewise.
+ * spacing.m4: Likewise.
+ * transpose.m4: Likewise.
+
+2007-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * io/unix.c (regular_file): For ACTION_UNSPECIFIED retry with
+ O_RDONLY even if errno is EROFS.
+
+2007-03-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/31099
+ * io/open.c (new_unit): Initialize bytes_left and recl_subrecord.
+ * io/transfer.c (next_record_w): Set bytes left to record length for
+ sequential unformatted I/O.
+ (next_record_r): Ditto.
+ (read_block_direct): Fix test for exceeding bytes_left.
+
+2007-03-08 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/30947
+ * intrinsics/signal.c (alarm_sub_int): Avoid SEGFAULT with
+ integer arguments.
+
+2007-03-04 Thomas Koenig <Thomas.Koenig@online.de>
+
+ PR libfortran/30981
+ * m4/pow_m4: Use appropriate unsigned int type for u.
+ * generated/pow_c10_i16.c: Regenerated.
+ * generated/pow_c10_i4.c: Regenerated.
+ * generated/pow_c10_i8.c: Regenerated.
+ * generated/pow_c16_i16.c: Regenerated.
+ * generated/pow_c16_i4.c: Regenerated.
+ * generated/pow_c16_i8.c: Regenerated.
+ * generated/pow_c4_i16.c: Regenerated.
+ * generated/pow_c4_i4.c: Regenerated.
+ * generated/pow_c4_i8.c: Regenerated.
+ * generated/pow_c8_i16.c: Regenerated.
+ * generated/pow_c8_i4.c: Regenerated.
+ * generated/pow_c8_i8.c: Regenerated.
+ * generated/pow_i16_i16.c: Regenerated.
+ * generated/pow_i16_i4.c: Regenerated.
+ * generated/pow_i16_i8.c: Regenerated.
+ * generated/pow_i4_i16.c: Regenerated.
+ * generated/pow_i4_i4.c: Regenerated.
+ * generated/pow_i4_i8.c: Regenerated.
+ * generated/pow_i8_i16.c: Regenerated.
+ * generated/pow_i8_i4.c: Regenerated.
+ * generated/pow_i8_i8.c: Regenerated.
+ * generated/pow_r10_i16.c: Regenerated.
+ * generated/pow_r10_i4.c: Regenerated.
+ * generated/pow_r10_i8.c: Regenerated.
+ * generated/pow_r16_i16.c: Regenerated.
+ * generated/pow_r16_i4.c: Regenerated.
+ * generated/pow_r16_i8.c: Regenerated.
+ * generated/pow_r4_i16.c: Regenerated.
+ * generated/pow_r4_i4.c: Regenerated.
+ * generated/pow_r4_i8.c: Regenerated.
+ * generated/pow_r8_i16.c: Regenerated.
+ * generated/pow_r8_i4.c: Regenerated.
+ * generated/pow_r8_i8.c: Regenerated.
+
+2007-03-03 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/31001
+ * intrinsics/pack_generic.c (pack_internal): Add special checks
+ for zero-sized arrays.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
+2007-02-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/30918
+ * io/listread.c (namelist_read): Eat comment line.
+
+2007-02-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/30910
+ * io/write.c (output_float): Add condition of format F only for
+ special case rounding with zero precision.
+
2007-02-19 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/30533
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 0cc1169c181..ceb8f97ec3b 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -624,9 +624,10 @@ $(gfor_misc_specifics) \
intrinsics/dprod_r8.f90 \
intrinsics/f2c_specifics.F90
-# No install-html support yet.
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Turn on vectorization and loop unrolling for matmul.
$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize -funroll-loops
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 81d7a0f34f0..3485f37d795 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -4839,9 +4839,10 @@ uninstall-am: uninstall-info-am uninstall-myexeclibLTLIBRARIES \
uninstall-toolexeclibLTLIBRARIES
-# No install-html support yet.
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Turn on vectorization and loop unrolling for matmul.
$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize -funroll-loops
diff --git a/libgfortran/generated/pow_c10_i16.c b/libgfortran/generated/pow_c10_i16.c
index 6332013bdbc..c62d5f47c22 100644
--- a/libgfortran/generated/pow_c10_i16.c
+++ b/libgfortran/generated/pow_c10_i16.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_10
pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b)
{
GFC_COMPLEX_10 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c10_i4.c b/libgfortran/generated/pow_c10_i4.c
index ccb1a0c6a2b..aca3e7f1ad7 100644
--- a/libgfortran/generated/pow_c10_i4.c
+++ b/libgfortran/generated/pow_c10_i4.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_10
pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b)
{
GFC_COMPLEX_10 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c10_i8.c b/libgfortran/generated/pow_c10_i8.c
index 0f2b2426481..a4a94526db4 100644
--- a/libgfortran/generated/pow_c10_i8.c
+++ b/libgfortran/generated/pow_c10_i8.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_10
pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b)
{
GFC_COMPLEX_10 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c16_i16.c b/libgfortran/generated/pow_c16_i16.c
index a6d888369b2..d05580f71d6 100644
--- a/libgfortran/generated/pow_c16_i16.c
+++ b/libgfortran/generated/pow_c16_i16.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_16
pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b)
{
GFC_COMPLEX_16 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c16_i4.c b/libgfortran/generated/pow_c16_i4.c
index d3960520cf9..b0576c5ad44 100644
--- a/libgfortran/generated/pow_c16_i4.c
+++ b/libgfortran/generated/pow_c16_i4.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_16
pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b)
{
GFC_COMPLEX_16 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c16_i8.c b/libgfortran/generated/pow_c16_i8.c
index 0a0e94d0613..3d991606a40 100644
--- a/libgfortran/generated/pow_c16_i8.c
+++ b/libgfortran/generated/pow_c16_i8.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_16
pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b)
{
GFC_COMPLEX_16 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c4_i16.c b/libgfortran/generated/pow_c4_i16.c
index 1085ad21caf..84309ff63bd 100644
--- a/libgfortran/generated/pow_c4_i16.c
+++ b/libgfortran/generated/pow_c4_i16.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_4
pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b)
{
GFC_COMPLEX_4 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c4_i4.c b/libgfortran/generated/pow_c4_i4.c
index ca376710fba..35597d0df16 100644
--- a/libgfortran/generated/pow_c4_i4.c
+++ b/libgfortran/generated/pow_c4_i4.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_4
pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b)
{
GFC_COMPLEX_4 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c4_i8.c b/libgfortran/generated/pow_c4_i8.c
index f9fc849ca19..bb113df2b47 100644
--- a/libgfortran/generated/pow_c4_i8.c
+++ b/libgfortran/generated/pow_c4_i8.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_4
pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b)
{
GFC_COMPLEX_4 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c8_i16.c b/libgfortran/generated/pow_c8_i16.c
index 0fc162b5014..ee4b68e955f 100644
--- a/libgfortran/generated/pow_c8_i16.c
+++ b/libgfortran/generated/pow_c8_i16.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_8
pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b)
{
GFC_COMPLEX_8 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c8_i4.c b/libgfortran/generated/pow_c8_i4.c
index 64b4b3c5b69..30c6007879f 100644
--- a/libgfortran/generated/pow_c8_i4.c
+++ b/libgfortran/generated/pow_c8_i4.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_8
pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b)
{
GFC_COMPLEX_8 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_c8_i8.c b/libgfortran/generated/pow_c8_i8.c
index 39a5d6b71e0..d9b658b4fc4 100644
--- a/libgfortran/generated/pow_c8_i8.c
+++ b/libgfortran/generated/pow_c8_i8.c
@@ -45,7 +45,8 @@ GFC_COMPLEX_8
pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b)
{
GFC_COMPLEX_8 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i16_i16.c b/libgfortran/generated/pow_i16_i16.c
index eda2fb6dc7c..b665f5ea2b9 100644
--- a/libgfortran/generated/pow_i16_i16.c
+++ b/libgfortran/generated/pow_i16_i16.c
@@ -45,7 +45,8 @@ GFC_INTEGER_16
pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b)
{
GFC_INTEGER_16 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i16_i4.c b/libgfortran/generated/pow_i16_i4.c
index 6e4d65c35c4..45994a3598e 100644
--- a/libgfortran/generated/pow_i16_i4.c
+++ b/libgfortran/generated/pow_i16_i4.c
@@ -45,7 +45,8 @@ GFC_INTEGER_16
pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b)
{
GFC_INTEGER_16 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i16_i8.c b/libgfortran/generated/pow_i16_i8.c
index d1849511a29..80075051553 100644
--- a/libgfortran/generated/pow_i16_i8.c
+++ b/libgfortran/generated/pow_i16_i8.c
@@ -45,7 +45,8 @@ GFC_INTEGER_16
pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b)
{
GFC_INTEGER_16 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i4_i16.c b/libgfortran/generated/pow_i4_i16.c
index f515f80359e..abab476830c 100644
--- a/libgfortran/generated/pow_i4_i16.c
+++ b/libgfortran/generated/pow_i4_i16.c
@@ -45,7 +45,8 @@ GFC_INTEGER_4
pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b)
{
GFC_INTEGER_4 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i4_i4.c b/libgfortran/generated/pow_i4_i4.c
index 184fe6d986e..e28cf90b116 100644
--- a/libgfortran/generated/pow_i4_i4.c
+++ b/libgfortran/generated/pow_i4_i4.c
@@ -45,7 +45,8 @@ GFC_INTEGER_4
pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b)
{
GFC_INTEGER_4 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i4_i8.c b/libgfortran/generated/pow_i4_i8.c
index ae24ceb54c2..51d2e14a808 100644
--- a/libgfortran/generated/pow_i4_i8.c
+++ b/libgfortran/generated/pow_i4_i8.c
@@ -45,7 +45,8 @@ GFC_INTEGER_4
pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b)
{
GFC_INTEGER_4 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i8_i16.c b/libgfortran/generated/pow_i8_i16.c
index 456c28a95bd..88713da698e 100644
--- a/libgfortran/generated/pow_i8_i16.c
+++ b/libgfortran/generated/pow_i8_i16.c
@@ -45,7 +45,8 @@ GFC_INTEGER_8
pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b)
{
GFC_INTEGER_8 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i8_i4.c b/libgfortran/generated/pow_i8_i4.c
index 8f85a80c81c..6746af33d5b 100644
--- a/libgfortran/generated/pow_i8_i4.c
+++ b/libgfortran/generated/pow_i8_i4.c
@@ -45,7 +45,8 @@ GFC_INTEGER_8
pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b)
{
GFC_INTEGER_8 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_i8_i8.c b/libgfortran/generated/pow_i8_i8.c
index 8c8f52e5412..3050974036c 100644
--- a/libgfortran/generated/pow_i8_i8.c
+++ b/libgfortran/generated/pow_i8_i8.c
@@ -45,7 +45,8 @@ GFC_INTEGER_8
pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b)
{
GFC_INTEGER_8 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -60,7 +61,10 @@ pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r10_i16.c b/libgfortran/generated/pow_r10_i16.c
index ad736641adc..2377e67ca51 100644
--- a/libgfortran/generated/pow_r10_i16.c
+++ b/libgfortran/generated/pow_r10_i16.c
@@ -45,7 +45,8 @@ GFC_REAL_10
pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b)
{
GFC_REAL_10 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r10_i4.c b/libgfortran/generated/pow_r10_i4.c
index 3f2373243b4..d21869b5d2c 100644
--- a/libgfortran/generated/pow_r10_i4.c
+++ b/libgfortran/generated/pow_r10_i4.c
@@ -45,7 +45,8 @@ GFC_REAL_10
pow_r10_i4 (GFC_REAL_10 a, GFC_INTEGER_4 b)
{
GFC_REAL_10 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r10_i4 (GFC_REAL_10 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r10_i8.c b/libgfortran/generated/pow_r10_i8.c
index 2e99c600bea..5a5ecffdb44 100644
--- a/libgfortran/generated/pow_r10_i8.c
+++ b/libgfortran/generated/pow_r10_i8.c
@@ -45,7 +45,8 @@ GFC_REAL_10
pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b)
{
GFC_REAL_10 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r16_i16.c b/libgfortran/generated/pow_r16_i16.c
index 63d6fa886f2..24313c2df2a 100644
--- a/libgfortran/generated/pow_r16_i16.c
+++ b/libgfortran/generated/pow_r16_i16.c
@@ -45,7 +45,8 @@ GFC_REAL_16
pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b)
{
GFC_REAL_16 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r16_i4.c b/libgfortran/generated/pow_r16_i4.c
index 949f2371749..3901577ecc7 100644
--- a/libgfortran/generated/pow_r16_i4.c
+++ b/libgfortran/generated/pow_r16_i4.c
@@ -45,7 +45,8 @@ GFC_REAL_16
pow_r16_i4 (GFC_REAL_16 a, GFC_INTEGER_4 b)
{
GFC_REAL_16 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r16_i4 (GFC_REAL_16 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r16_i8.c b/libgfortran/generated/pow_r16_i8.c
index 37649d82cb1..e7233729b48 100644
--- a/libgfortran/generated/pow_r16_i8.c
+++ b/libgfortran/generated/pow_r16_i8.c
@@ -45,7 +45,8 @@ GFC_REAL_16
pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b)
{
GFC_REAL_16 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r4_i16.c b/libgfortran/generated/pow_r4_i16.c
index 635e627e9d6..e73794952d7 100644
--- a/libgfortran/generated/pow_r4_i16.c
+++ b/libgfortran/generated/pow_r4_i16.c
@@ -45,7 +45,8 @@ GFC_REAL_4
pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b)
{
GFC_REAL_4 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r4_i4.c b/libgfortran/generated/pow_r4_i4.c
index ff0045f913b..5baa4b17f68 100644
--- a/libgfortran/generated/pow_r4_i4.c
+++ b/libgfortran/generated/pow_r4_i4.c
@@ -45,7 +45,8 @@ GFC_REAL_4
pow_r4_i4 (GFC_REAL_4 a, GFC_INTEGER_4 b)
{
GFC_REAL_4 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r4_i4 (GFC_REAL_4 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r4_i8.c b/libgfortran/generated/pow_r4_i8.c
index 8c6b2ba285f..0aae60a7d45 100644
--- a/libgfortran/generated/pow_r4_i8.c
+++ b/libgfortran/generated/pow_r4_i8.c
@@ -45,7 +45,8 @@ GFC_REAL_4
pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b)
{
GFC_REAL_4 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r8_i16.c b/libgfortran/generated/pow_r8_i16.c
index 9fdcf7592e4..e527f3a7a1e 100644
--- a/libgfortran/generated/pow_r8_i16.c
+++ b/libgfortran/generated/pow_r8_i16.c
@@ -45,7 +45,8 @@ GFC_REAL_8
pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b)
{
GFC_REAL_8 pow, x;
- GFC_INTEGER_16 n, u;
+ GFC_INTEGER_16 n;
+ GFC_UINTEGER_16 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r8_i4.c b/libgfortran/generated/pow_r8_i4.c
index a6afcbe6eb4..8da3b81fdff 100644
--- a/libgfortran/generated/pow_r8_i4.c
+++ b/libgfortran/generated/pow_r8_i4.c
@@ -45,7 +45,8 @@ GFC_REAL_8
pow_r8_i4 (GFC_REAL_8 a, GFC_INTEGER_4 b)
{
GFC_REAL_8 pow, x;
- GFC_INTEGER_4 n, u;
+ GFC_INTEGER_4 n;
+ GFC_UINTEGER_4 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r8_i4 (GFC_REAL_8 a, GFC_INTEGER_4 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/generated/pow_r8_i8.c b/libgfortran/generated/pow_r8_i8.c
index 3b650f2f073..b858fab3a29 100644
--- a/libgfortran/generated/pow_r8_i8.c
+++ b/libgfortran/generated/pow_r8_i8.c
@@ -45,7 +45,8 @@ GFC_REAL_8
pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b)
{
GFC_REAL_8 pow, x;
- GFC_INTEGER_8 n, u;
+ GFC_INTEGER_8 n;
+ GFC_UINTEGER_8 u;
n = b;
x = a;
@@ -55,10 +56,13 @@ pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b)
if (n < 0)
{
- n = -n;
+ u = -n;
x = pow / x;
}
- u = n;
+ else
+ {
+ u = n;
+ }
for (;;)
{
if (u & 1)
diff --git a/libgfortran/intrinsics/pack_generic.c b/libgfortran/intrinsics/pack_generic.c
index 1b0d7250540..06e70844bf0 100644
--- a/libgfortran/intrinsics/pack_generic.c
+++ b/libgfortran/intrinsics/pack_generic.c
@@ -93,15 +93,19 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array,
index_type count[GFC_MAX_DIMENSIONS];
index_type extent[GFC_MAX_DIMENSIONS];
+ int zero_sized;
index_type n;
index_type dim;
index_type nelem;
dim = GFC_DESCRIPTOR_RANK (array);
+ zero_sized = 0;
for (n = 0; n < dim; n++)
{
count[n] = 0;
extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
+ if (extent[n] <= 0)
+ zero_sized = 1;
sstride[n] = array->dim[n].stride * size;
mstride[n] = mask->dim[n].stride;
}
@@ -154,6 +158,8 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array,
const GFC_LOGICAL_4 *m = mptr;
total = 0;
+ if (zero_sized)
+ m = NULL;
while (m)
{
diff --git a/libgfortran/intrinsics/signal.c b/libgfortran/intrinsics/signal.c
index e912c90780e..2c2f38d2969 100644
--- a/libgfortran/intrinsics/signal.c
+++ b/libgfortran/intrinsics/signal.c
@@ -170,14 +170,14 @@ alarm_sub_int (int *seconds, int *handler, int *status)
#if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL)
if (status != NULL)
{
- if (signal (SIGALRM, (void (*)(int)) handler) == SIG_ERR)
+ if (signal (SIGALRM, (void (*)(int)) *handler) == SIG_ERR)
*status = -1;
else
*status = alarm (*seconds);
}
else
{
- signal (SIGALRM, (void (*)(int)) handler);
+ signal (SIGALRM, (void (*)(int)) *handler);
alarm (*seconds);
}
#else
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 6379776b9bb..3203f3116f7 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -2567,6 +2567,10 @@ find_nml_name:
case '&':
break;
+ case '!':
+ eat_line (dtp);
+ goto find_nml_name;
+
case '=':
c = next_char (dtp);
if (c == '?')
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index ef1ce1e0228..783c5e84503 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -437,6 +437,8 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
{
u->flags.has_recl = 1;
u->recl = opp->recl_in;
+ u->recl_subrecord = u->recl;
+ u->bytes_left = u->recl;
}
else
{
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index a7632da55ae..42f82493942 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -434,11 +434,10 @@ read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes)
/* Check whether we exceed the total record length. */
- if (dtp->u.p.current_unit->flags.has_recl)
+ if (dtp->u.p.current_unit->flags.has_recl
+ && (*nbytes > (size_t) dtp->u.p.current_unit->bytes_left))
{
- to_read_record =
- *nbytes > (size_t) dtp->u.p.current_unit->bytes_left ?
- *nbytes : (size_t) dtp->u.p.current_unit->bytes_left;
+ to_read_record = (size_t) dtp->u.p.current_unit->bytes_left;
short_record = 1;
}
else
@@ -2152,6 +2151,7 @@ next_record_r (st_parameter_dt *dtp)
case UNFORMATTED_SEQUENTIAL:
next_record_r_unf (dtp, 1);
+ dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
break;
case FORMATTED_DIRECT:
@@ -2377,6 +2377,7 @@ next_record_w (st_parameter_dt *dtp, int done)
case UNFORMATTED_SEQUENTIAL:
next_record_w_unf (dtp, 0);
+ dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl;
break;
case FORMATTED_STREAM:
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 08f32878fcd..b58df51ae36 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -1213,7 +1213,7 @@ regular_file (st_parameter_open *opp, unit_flags *flags)
break;
case STATUS_REPLACE:
- crflag = O_CREAT | O_TRUNC;
+ crflag = O_CREAT | O_TRUNC;
break;
default:
@@ -1229,14 +1229,14 @@ regular_file (st_parameter_open *opp, unit_flags *flags)
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
fd = open (path, rwflag | crflag, mode);
if (flags->action != ACTION_UNSPECIFIED)
- return fd;
+ return fd;
if (fd >= 0)
{
flags->action = ACTION_READWRITE;
return fd;
}
- if (errno != EACCES)
+ if (errno != EACCES && errno != EROFS)
return fd;
/* retry for read-only access */
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 9ff48049dac..2a81d27b8a9 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -488,7 +488,7 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value)
value = -value;
/* Special case when format specifies no digits after the decimal point. */
- if (d == 0)
+ if (d == 0 && ft == FMT_F)
{
if (value < 0.5)
value = 0.0;
diff --git a/libgfortran/m4/all.m4 b/libgfortran/m4/all.m4
index 3af195552cb..297e5f36708 100644
--- a/libgfortran/m4/all.m4
+++ b/libgfortran/m4/all.m4
@@ -45,6 +45,6 @@ ARRAY_FUNCTION(1,
{
result = 0;
break;
- }')
+ }')`
-#endif
+#endif'
diff --git a/libgfortran/m4/any.m4 b/libgfortran/m4/any.m4
index 918c9f0eedb..70edff95440 100644
--- a/libgfortran/m4/any.m4
+++ b/libgfortran/m4/any.m4
@@ -45,6 +45,6 @@ ARRAY_FUNCTION(0,
{
result = 1;
break;
- }')
+ }')`
-#endif
+#endif'
diff --git a/libgfortran/m4/count.m4 b/libgfortran/m4/count.m4
index 983dbb71bfa..245d9726d37 100644
--- a/libgfortran/m4/count.m4
+++ b/libgfortran/m4/count.m4
@@ -41,6 +41,6 @@ include(ifunction.m4)dnl
ARRAY_FUNCTION(0,
` result = 0;',
` if (*src)
- result++;')
+ result++;')`
-#endif
+#endif'
diff --git a/libgfortran/m4/cshift1.m4 b/libgfortran/m4/cshift1.m4
index 68c2397f886..edc95cee729 100644
--- a/libgfortran/m4/cshift1.m4
+++ b/libgfortran/m4/cshift1.m4
@@ -35,13 +35,13 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'atype_name`)'
+`#if defined (HAVE_'atype_name`)
static void
cshift1 (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
- const atype_name * const restrict pwhich,
+ const 'atype` * const restrict h,
+ const 'atype_name` * const restrict pwhich,
index_type size)
{
/* r.* indicates the return array. */
@@ -59,7 +59,7 @@ cshift1 (gfc_array_char * const restrict ret,
/* h.* indicates the shift array. */
index_type hstride[GFC_MAX_DIMENSIONS];
index_type hstride0;
- const atype_name *hptr;
+ const 'atype_name` *hptr;
index_type count[GFC_MAX_DIMENSIONS];
index_type extent[GFC_MAX_DIMENSIONS];
@@ -67,7 +67,7 @@ cshift1 (gfc_array_char * const restrict ret,
index_type len;
index_type n;
int which;
- atype_name sh;
+ 'atype_name` sh;
if (pwhich)
which = *pwhich - 1;
@@ -75,7 +75,7 @@ cshift1 (gfc_array_char * const restrict ret,
which = 0;
if (which < 0 || (which + 1) > GFC_DESCRIPTOR_RANK (array))
- runtime_error ("Argument 'DIM' is out of range in call to 'CSHIFT'");
+ runtime_error ("Argument ''`DIM''` is out of range in call to ''`CSHIFT''`");
if (ret->data == NULL)
{
@@ -198,38 +198,38 @@ cshift1 (gfc_array_char * const restrict ret,
}
}
-void cshift1_`'atype_kind (gfc_array_char * const restrict,
+void cshift1_'atype_kind` (gfc_array_char * const restrict,
const gfc_array_char * const restrict,
- const atype * const restrict,
- const atype_name * const restrict);
-export_proto(cshift1_`'atype_kind);
+ const 'atype` * const restrict,
+ const 'atype_name` * const restrict);
+export_proto(cshift1_'atype_kind`);
void
-cshift1_`'atype_kind (gfc_array_char * const restrict ret,
+cshift1_'atype_kind` (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
- const atype_name * const restrict pwhich)
+ const 'atype` * const restrict h,
+ const 'atype_name` * const restrict pwhich)
{
cshift1 (ret, array, h, pwhich, GFC_DESCRIPTOR_SIZE (array));
}
-void cshift1_`'atype_kind`'_char (gfc_array_char * const restrict ret,
+void cshift1_'atype_kind`_char (gfc_array_char * const restrict ret,
GFC_INTEGER_4,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
- const atype_name * const restrict pwhich,
+ const 'atype` * const restrict h,
+ const 'atype_name` * const restrict pwhich,
GFC_INTEGER_4);
-export_proto(cshift1_`'atype_kind`'_char);
+export_proto(cshift1_'atype_kind`_char);
void
-cshift1_`'atype_kind`'_char (gfc_array_char * const restrict ret,
+cshift1_'atype_kind`_char (gfc_array_char * const restrict ret,
GFC_INTEGER_4 ret_length __attribute__((unused)),
const gfc_array_char * const restrict array,
- const atype * const restrict h,
- const atype_name * const restrict pwhich,
+ const 'atype` * const restrict h,
+ const 'atype_name` * const restrict pwhich,
GFC_INTEGER_4 array_length)
{
cshift1 (ret, array, h, pwhich, array_length);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/eoshift1.m4 b/libgfortran/m4/eoshift1.m4
index 0144fc11c68..d9be3423d3b 100644
--- a/libgfortran/m4/eoshift1.m4
+++ b/libgfortran/m4/eoshift1.m4
@@ -35,14 +35,14 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'atype_name`)'
+`#if defined (HAVE_'atype_name`)
static void
eoshift1 (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const char * const restrict pbound,
- const atype_name * const restrict pwhich,
+ const 'atype_name` * const restrict pwhich,
index_type size, char filler)
{
/* r.* indicates the return array. */
@@ -57,10 +57,10 @@ eoshift1 (gfc_array_char * const restrict ret,
index_type soffset;
const char *sptr;
const char *src;
-` /* h.* indicates the shift array. */'
+ /* h.* indicates the shift array. */
index_type hstride[GFC_MAX_DIMENSIONS];
index_type hstride0;
- const atype_name *hptr;
+ const 'atype_name` *hptr;
index_type count[GFC_MAX_DIMENSIONS];
index_type extent[GFC_MAX_DIMENSIONS];
@@ -68,8 +68,8 @@ eoshift1 (gfc_array_char * const restrict ret,
index_type len;
index_type n;
int which;
- atype_name sh;
- atype_name delta;
+ 'atype_name` sh;
+ 'atype_name` delta;
/* The compiler cannot figure out that these are set, initialize
them to avoid warnings. */
@@ -145,7 +145,7 @@ eoshift1 (gfc_array_char * const restrict ret,
while (rptr)
{
-` /* Do the shift for this dimension. */'
+ /* Do the shift for this dimension. */
sh = *hptr;
if (( sh >= 0 ? sh : -sh ) > len)
{
@@ -222,42 +222,42 @@ eoshift1 (gfc_array_char * const restrict ret,
}
}
-void eoshift1_`'atype_kind (gfc_array_char * const restrict,
+void eoshift1_'atype_kind` (gfc_array_char * const restrict,
const gfc_array_char * const restrict,
- const atype * const restrict, const char * const restrict,
- const atype_name * const restrict);
-export_proto(eoshift1_`'atype_kind);
+ const 'atype` * const restrict, const char * const restrict,
+ const 'atype_name` * const restrict);
+export_proto(eoshift1_'atype_kind`);
void
-eoshift1_`'atype_kind (gfc_array_char * const restrict ret,
+eoshift1_'atype_kind` (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const char * const restrict pbound,
- const atype_name * const restrict pwhich)
+ const 'atype_name` * const restrict pwhich)
{
eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array), 0);
}
-void eoshift1_`'atype_kind`'_char (gfc_array_char * const restrict,
+void eoshift1_'atype_kind`_char (gfc_array_char * const restrict,
GFC_INTEGER_4,
const gfc_array_char * const restrict,
- const atype * const restrict,
+ const 'atype` * const restrict,
const char * const restrict,
- const atype_name * const restrict,
+ const 'atype_name` * const restrict,
GFC_INTEGER_4, GFC_INTEGER_4);
-export_proto(eoshift1_`'atype_kind`'_char);
+export_proto(eoshift1_'atype_kind`_char);
void
-eoshift1_`'atype_kind`'_char (gfc_array_char * const restrict ret,
+eoshift1_'atype_kind`_char (gfc_array_char * const restrict ret,
GFC_INTEGER_4 ret_length __attribute__((unused)),
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const char * const restrict pbound,
- const atype_name * const restrict pwhich,
+ const 'atype_name` * const restrict pwhich,
GFC_INTEGER_4 array_length,
GFC_INTEGER_4 bound_length __attribute__((unused)))
{
- eoshift1 (ret, array, h, pbound, pwhich, array_length, ' ');
+ eoshift1 (ret, array, h, pbound, pwhich, array_length, ''` ''`);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/eoshift3.m4 b/libgfortran/m4/eoshift3.m4
index 7df08d2a785..58f12fcddd6 100644
--- a/libgfortran/m4/eoshift3.m4
+++ b/libgfortran/m4/eoshift3.m4
@@ -35,14 +35,14 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'atype_name`)'
+`#if defined (HAVE_'atype_name`)
static void
eoshift3 (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const gfc_array_char * const restrict bound,
- const atype_name * const restrict pwhich,
+ const 'atype_name` * const restrict pwhich,
index_type size, char filler)
{
/* r.* indicates the return array. */
@@ -57,10 +57,10 @@ eoshift3 (gfc_array_char * const restrict ret,
index_type soffset;
const char *sptr;
const char *src;
-` /* h.* indicates the shift array. */'
+ /* h.* indicates the shift array. */
index_type hstride[GFC_MAX_DIMENSIONS];
index_type hstride0;
- const atype_name *hptr;
+ const 'atype_name` *hptr;
/* b.* indicates the bound array. */
index_type bstride[GFC_MAX_DIMENSIONS];
index_type bstride0;
@@ -72,8 +72,8 @@ eoshift3 (gfc_array_char * const restrict ret,
index_type len;
index_type n;
int which;
- atype_name sh;
- atype_name delta;
+ 'atype_name` sh;
+ 'atype_name` delta;
/* The compiler cannot figure out that these are set, initialize
them to avoid warnings. */
@@ -160,7 +160,7 @@ eoshift3 (gfc_array_char * const restrict ret,
while (rptr)
{
-` /* Do the shift for this dimension. */'
+ /* Do the shift for this dimension. */
sh = *hptr;
if (( sh >= 0 ? sh : -sh ) > len)
{
@@ -240,43 +240,43 @@ eoshift3 (gfc_array_char * const restrict ret,
}
}
-extern void eoshift3_`'atype_kind (gfc_array_char * const restrict,
+extern void eoshift3_'atype_kind` (gfc_array_char * const restrict,
const gfc_array_char * const restrict,
- const atype * const restrict,
+ const 'atype` * const restrict,
const gfc_array_char * const restrict,
- const atype_name *);
-export_proto(eoshift3_`'atype_kind);
+ const 'atype_name` *);
+export_proto(eoshift3_'atype_kind`);
void
-eoshift3_`'atype_kind (gfc_array_char * const restrict ret,
+eoshift3_'atype_kind` (gfc_array_char * const restrict ret,
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const gfc_array_char * const restrict bound,
- const atype_name * const restrict pwhich)
+ const 'atype_name` * const restrict pwhich)
{
eoshift3 (ret, array, h, bound, pwhich, GFC_DESCRIPTOR_SIZE (array), 0);
}
-extern void eoshift3_`'atype_kind`'_char (gfc_array_char * const restrict,
+extern void eoshift3_'atype_kind`_char (gfc_array_char * const restrict,
GFC_INTEGER_4,
const gfc_array_char * const restrict,
- const atype * const restrict,
+ const 'atype` * const restrict,
const gfc_array_char * const restrict,
- const atype_name * const restrict,
+ const 'atype_name` * const restrict,
GFC_INTEGER_4, GFC_INTEGER_4);
-export_proto(eoshift3_`'atype_kind`'_char);
+export_proto(eoshift3_'atype_kind`_char);
void
-eoshift3_`'atype_kind`'_char (gfc_array_char * const restrict ret,
+eoshift3_'atype_kind`_char (gfc_array_char * const restrict ret,
GFC_INTEGER_4 ret_length __attribute__((unused)),
const gfc_array_char * const restrict array,
- const atype * const restrict h,
+ const 'atype` * const restrict h,
const gfc_array_char * const restrict bound,
- const atype_name * const restrict pwhich,
+ const 'atype_name` * const restrict pwhich,
GFC_INTEGER_4 array_length,
GFC_INTEGER_4 bound_length __attribute__((unused)))
{
- eoshift3 (ret, array, h, bound, pwhich, array_length, ' ');
+ eoshift3 (ret, array, h, bound, pwhich, array_length, ''` ''`);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/exponent.m4 b/libgfortran/m4/exponent.m4
index ca0d13081dd..46b42d0078f 100644
--- a/libgfortran/m4/exponent.m4
+++ b/libgfortran/m4/exponent.m4
@@ -34,17 +34,17 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)
-extern GFC_INTEGER_4 exponent_r`'kind (real_type s);
-export_proto(exponent_r`'kind);
+extern GFC_INTEGER_4 exponent_r'kind` ('real_type` s);
+export_proto(exponent_r'kind`);
GFC_INTEGER_4
-exponent_r`'kind (real_type s)
+exponent_r'kind` ('real_type` s)
{
int ret;
- frexp`'q (s, &ret);
+ frexp'q` (s, &ret);
return ret;
}
-#endif
+#endif'
diff --git a/libgfortran/m4/fraction.m4 b/libgfortran/m4/fraction.m4
index 07f8337c624..8179d47572d 100644
--- a/libgfortran/m4/fraction.m4
+++ b/libgfortran/m4/fraction.m4
@@ -34,16 +34,16 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)
-extern real_type fraction_r`'kind (real_type s);
-export_proto(fraction_r`'kind);
+extern 'real_type` fraction_r'kind` ('real_type` s);
+export_proto(fraction_r'kind`);
-real_type
-fraction_r`'kind (real_type s)
+'real_type`
+fraction_r'kind` ('real_type` s)
{
int dummy_exp;
- return frexp`'q (s, &dummy_exp);
+ return frexp'q` (s, &dummy_exp);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/in_pack.m4 b/libgfortran/m4/in_pack.m4
index 81205075198..ca243641329 100644
--- a/libgfortran/m4/in_pack.m4
+++ b/libgfortran/m4/in_pack.m4
@@ -34,15 +34,15 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
/* Allocates a block of memory with internal_malloc if the array needs
repacking. */
-
+'
dnl The kind (ie size) is used to name the function for logicals, integers
dnl and reals. For complex, it's c4 or c8.
-rtype_name *
-`internal_pack_'rtype_ccode (rtype * source)
+rtype_name` *
+internal_pack_'rtype_ccode` ('rtype` * source)
{
index_type count[GFC_MAX_DIMENSIONS];
index_type extent[GFC_MAX_DIMENSIONS];
@@ -50,9 +50,9 @@ rtype_name *
index_type stride0;
index_type dim;
index_type ssize;
- const rtype_name *src;
- rtype_name *dest;
- rtype_name *destptr;
+ const 'rtype_name` *src;
+ 'rtype_name` *dest;
+ 'rtype_name` *destptr;
int n;
int packed;
@@ -84,7 +84,7 @@ rtype_name *
return source->data;
/* Allocate storage for the destination. */
- destptr = (rtype_name *)internal_malloc_size (ssize * sizeof (rtype_name));
+ destptr = ('rtype_name` *)internal_malloc_size (ssize * sizeof ('rtype_name`));
dest = destptr;
src = source->data;
stride0 = stride[0];
@@ -124,3 +124,4 @@ rtype_name *
}
#endif
+' \ No newline at end of file
diff --git a/libgfortran/m4/in_unpack.m4 b/libgfortran/m4/in_unpack.m4
index d0438f71e07..319c19f9cd0 100644
--- a/libgfortran/m4/in_unpack.m4
+++ b/libgfortran/m4/in_unpack.m4
@@ -39,8 +39,8 @@ include(iparm.m4)dnl
dnl Only the kind (ie size) is used to name the function for integers,
dnl reals and logicals. For complex, it's c4 and c8.
-void
-`internal_unpack_'rtype_ccode (rtype * d, const rtype_name * src)
+`void
+internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
{
index_type count[GFC_MAX_DIMENSIONS];
index_type extent[GFC_MAX_DIMENSIONS];
@@ -48,7 +48,7 @@ void
index_type stride0;
index_type dim;
index_type dsize;
- rtype_name *dest;
+ 'rtype_name` *dest;
int n;
dest = d->data;
@@ -73,7 +73,7 @@ void
if (dsize != 0)
{
- memcpy (dest, src, dsize * sizeof (rtype_name));
+ memcpy (dest, src, dsize * sizeof ('rtype_name`));
return;
}
@@ -112,3 +112,4 @@ void
}
#endif
+' \ No newline at end of file
diff --git a/libgfortran/m4/matmul.m4 b/libgfortran/m4/matmul.m4
index ef2f0fb88dc..3156fdcac0c 100644
--- a/libgfortran/m4/matmul.m4
+++ b/libgfortran/m4/matmul.m4
@@ -35,16 +35,16 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be
- passed to us by the front-end, in which case we'll call it for large
+ passed to us by the front-end, in which case we''`ll call it for large
matrices. */
typedef void (*blas_call)(const char *, const char *, const int *, const int *,
- const int *, const rtype_name *, const rtype_name *,
- const int *, const rtype_name *, const int *,
- const rtype_name *, rtype_name *, const int *,
+ const int *, const 'rtype_name` *, const 'rtype_name` *,
+ const int *, const 'rtype_name` *, const int *,
+ const 'rtype_name` *, 'rtype_name` *, const int *,
int, int);
/* The order of loops is different in the case of plain matrix
@@ -76,19 +76,19 @@ typedef void (*blas_call)(const char *, const char *, const int *, const int *,
see if there is a way to perform the matrix multiplication by a call
to the BLAS gemm function. */
-extern void matmul_`'rtype_code (rtype * const restrict retarray,
- rtype * const restrict a, rtype * const restrict b, int try_blas,
+extern void matmul_'rtype_code` ('rtype` * const restrict retarray,
+ 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas,
int blas_limit, blas_call gemm);
-export_proto(matmul_`'rtype_code);
+export_proto(matmul_'rtype_code`);
void
-matmul_`'rtype_code (rtype * const restrict retarray,
- rtype * const restrict a, rtype * const restrict b, int try_blas,
+matmul_'rtype_code` ('rtype` * const restrict retarray,
+ 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas,
int blas_limit, blas_call gemm)
{
- const rtype_name * restrict abase;
- const rtype_name * restrict bbase;
- rtype_name * restrict dest;
+ const 'rtype_name` * restrict abase;
+ const 'rtype_name` * restrict bbase;
+ 'rtype_name` * restrict dest;
index_type rxstride, rystride, axstride, aystride, bxstride, bystride;
index_type x, y, n, count, xcount, ycount;
@@ -133,12 +133,12 @@ matmul_`'rtype_code (rtype * const restrict retarray,
}
retarray->data
- = internal_malloc_size (sizeof (rtype_name) * size0 ((array_t *) retarray));
+ = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) retarray));
retarray->offset = 0;
}
-
+'
sinclude(`matmul_asm_'rtype_code`.m4')dnl
-
+`
if (GFC_DESCRIPTOR_RANK (retarray) == 1)
{
/* One-dimensional result may be addressed in the code below
@@ -196,7 +196,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
dest = retarray->data;
- /* Now that everything is set up, we're performing the multiplication
+ /* Now that everything is set up, we''`re performing the multiplication
itself. */
#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x)))
@@ -207,7 +207,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
> POW3(blas_limit)))
{
const int m = xcount, n = ycount, k = count, ldc = rystride;
- const rtype_name one = 1, zero = 0;
+ const 'rtype_name` one = 1, zero = 0;
const int lda = (axstride == 1) ? aystride : axstride,
ldb = (bxstride == 1) ? bystride : bxstride;
@@ -222,18 +222,18 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
if (rxstride == 1 && axstride == 1 && bxstride == 1)
{
- const rtype_name * restrict bbase_y;
- rtype_name * restrict dest_y;
- const rtype_name * restrict abase_n;
- rtype_name bbase_yn;
+ const 'rtype_name` * restrict bbase_y;
+ 'rtype_name` * restrict dest_y;
+ const 'rtype_name` * restrict abase_n;
+ 'rtype_name` bbase_yn;
if (rystride == xcount)
- memset (dest, 0, (sizeof (rtype_name) * xcount * ycount));
+ memset (dest, 0, (sizeof ('rtype_name`) * xcount * ycount));
else
{
for (y = 0; y < ycount; y++)
for (x = 0; x < xcount; x++)
- dest[x + y*rystride] = (rtype_name)0;
+ dest[x + y*rystride] = ('rtype_name`)0;
}
for (y = 0; y < ycount; y++)
@@ -255,10 +255,10 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
{
if (GFC_DESCRIPTOR_RANK (a) != 1)
{
- const rtype_name *restrict abase_x;
- const rtype_name *restrict bbase_y;
- rtype_name *restrict dest_y;
- rtype_name s;
+ const 'rtype_name` *restrict abase_x;
+ const 'rtype_name` *restrict bbase_y;
+ 'rtype_name` *restrict dest_y;
+ 'rtype_name` s;
for (y = 0; y < ycount; y++)
{
@@ -267,7 +267,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
for (x = 0; x < xcount; x++)
{
abase_x = &abase[x*axstride];
- s = (rtype_name) 0;
+ s = ('rtype_name`) 0;
for (n = 0; n < count; n++)
s += abase_x[n] * bbase_y[n];
dest_y[x] = s;
@@ -276,13 +276,13 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
}
else
{
- const rtype_name *restrict bbase_y;
- rtype_name s;
+ const 'rtype_name` *restrict bbase_y;
+ 'rtype_name` s;
for (y = 0; y < ycount; y++)
{
bbase_y = &bbase[y*bystride];
- s = (rtype_name) 0;
+ s = ('rtype_name`) 0;
for (n = 0; n < count; n++)
s += abase[n*axstride] * bbase_y[n];
dest[y*rystride] = s;
@@ -293,7 +293,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
{
for (y = 0; y < ycount; y++)
for (x = 0; x < xcount; x++)
- dest[x*rxstride + y*rystride] = (rtype_name)0;
+ dest[x*rxstride + y*rystride] = ('rtype_name`)0;
for (y = 0; y < ycount; y++)
for (n = 0; n < count; n++)
@@ -303,13 +303,13 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
}
else if (GFC_DESCRIPTOR_RANK (a) == 1)
{
- const rtype_name *restrict bbase_y;
- rtype_name s;
+ const 'rtype_name` *restrict bbase_y;
+ 'rtype_name` s;
for (y = 0; y < ycount; y++)
{
bbase_y = &bbase[y*bystride];
- s = (rtype_name) 0;
+ s = ('rtype_name`) 0;
for (n = 0; n < count; n++)
s += abase[n*axstride] * bbase_y[n*bxstride];
dest[y*rxstride] = s;
@@ -317,10 +317,10 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
}
else
{
- const rtype_name *restrict abase_x;
- const rtype_name *restrict bbase_y;
- rtype_name *restrict dest_y;
- rtype_name s;
+ const 'rtype_name` *restrict abase_x;
+ const 'rtype_name` *restrict bbase_y;
+ 'rtype_name` *restrict dest_y;
+ 'rtype_name` s;
for (y = 0; y < ycount; y++)
{
@@ -329,7 +329,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
for (x = 0; x < xcount; x++)
{
abase_x = &abase[x*axstride];
- s = (rtype_name) 0;
+ s = ('rtype_name`) 0;
for (n = 0; n < count; n++)
s += abase_x[n*aystride] * bbase_y[n*bxstride];
dest_y[x*rxstride] = s;
@@ -338,4 +338,4 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
}
}
-#endif
+#endif'
diff --git a/libgfortran/m4/matmull.m4 b/libgfortran/m4/matmull.m4
index f880199eb1a..d4b0008e951 100644
--- a/libgfortran/m4/matmull.m4
+++ b/libgfortran/m4/matmull.m4
@@ -34,22 +34,22 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
/* Dimensions: retarray(x,y) a(x, count) b(count,y).
Either a or b can be rank 1. In this case x or y is 1. */
-extern void matmul_`'rtype_code (rtype * const restrict,
+extern void matmul_'rtype_code` ('rtype` * const restrict,
gfc_array_l4 * const restrict, gfc_array_l4 * const restrict);
-export_proto(matmul_`'rtype_code);
+export_proto(matmul_'rtype_code`);
void
-matmul_`'rtype_code (rtype * const restrict retarray,
+matmul_'rtype_code` ('rtype` * const restrict retarray,
gfc_array_l4 * const restrict a, gfc_array_l4 * const restrict b)
{
const GFC_INTEGER_4 * restrict abase;
const GFC_INTEGER_4 * restrict bbase;
- rtype_name * restrict dest;
+ 'rtype_name` * restrict dest;
index_type rxstride;
index_type rystride;
index_type xcount;
@@ -95,7 +95,7 @@ matmul_`'rtype_code (rtype * const restrict retarray,
}
retarray->data
- = internal_malloc_size (sizeof (rtype_name) * size0 ((array_t *) retarray));
+ = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) retarray));
retarray->offset = 0;
}
@@ -112,9 +112,9 @@ matmul_`'rtype_code (rtype * const restrict retarray,
bbase = GFOR_POINTER_L8_TO_L4 (bbase);
}
dest = retarray->data;
-
+'
sinclude(`matmul_asm_'rtype_code`.m4')dnl
-
+`
if (GFC_DESCRIPTOR_RANK (retarray) == 1)
{
rxstride = retarray->dim[0].stride;
@@ -191,3 +191,4 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
}
#endif
+' \ No newline at end of file
diff --git a/libgfortran/m4/nearest.m4 b/libgfortran/m4/nearest.m4
index 598ba4e3c94..a3c000366e7 100644
--- a/libgfortran/m4/nearest.m4
+++ b/libgfortran/m4/nearest.m4
@@ -35,23 +35,23 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_COPYSIGN'Q`) && defined (HAVE_NEXTAFTER'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_COPYSIGN'Q`) && defined (HAVE_NEXTAFTER'Q`)
-extern real_type nearest_r`'kind (real_type s, real_type dir);
-export_proto(nearest_r`'kind);
+extern 'real_type` nearest_r'kind` ('real_type` s, 'real_type` dir);
+export_proto(nearest_r'kind`);
-real_type
-nearest_r`'kind (real_type s, real_type dir)
+'real_type`
+nearest_r'kind` ('real_type` s, 'real_type` dir)
{
- dir = copysign`'q (__builtin_inf`'q (), dir);
+ dir = copysign'q` (__builtin_inf'q` (), dir);
if (FLT_EVAL_METHOD != 0)
{
/* ??? Work around glibc bug on x86. */
- volatile real_type r = nextafter`'q (s, dir);
+ volatile 'real_type` r = nextafter'q` (s, dir);
return r;
}
else
- return nextafter`'q (s, dir);
+ return nextafter'q` (s, dir);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/pow.m4 b/libgfortran/m4/pow.m4
index ae490040c65..8f1b6b21f99 100644
--- a/libgfortran/m4/pow.m4
+++ b/libgfortran/m4/pow.m4
@@ -39,14 +39,15 @@ include(iparm.m4)dnl
`#if defined (HAVE_'rtype_name`) && defined (HAVE_'atype_name`)'
-rtype_name `pow_'rtype_code`_'atype_code (rtype_name a, atype_name b);
-export_proto(pow_`'rtype_code`_'atype_code);
+rtype_name `pow_'rtype_code`_'atype_code` ('rtype_name` a, 'atype_name` b);
+export_proto(pow_'rtype_code`_'atype_code`);
-rtype_name
-`pow_'rtype_code`_'atype_code (rtype_name a, atype_name b)
+'rtype_name`
+pow_'rtype_code`_'atype_code` ('rtype_name` a, 'atype_name` b)
{
- rtype_name pow, x;
- atype_name n, u;
+ 'rtype_name` pow, x;
+ 'atype_name` n;
+ GFC_UINTEGER_'atype_kind` u;
n = b;
x = a;
@@ -55,18 +56,21 @@ rtype_name
{
if (n < 0)
{
-ifelse(rtype_letter,i,`dnl
+'ifelse(rtype_letter,i,`dnl
if (x == 1)
return 1;
if (x == -1)
return (n & 1) ? -1 : 1;
return (x == 0) ? 1 / x : 0;
',`
- n = -n;
+ u = -n;
x = pow / x;
')dnl
+` }
+ else
+ {
+ u = n;
}
- u = n;
for (;;)
{
if (u & 1)
@@ -81,4 +85,4 @@ ifelse(rtype_letter,i,`dnl
return pow;
}
-#endif
+#endif'
diff --git a/libgfortran/m4/product.m4 b/libgfortran/m4/product.m4
index 47ee25b8b80..77393022ebe 100644
--- a/libgfortran/m4/product.m4
+++ b/libgfortran/m4/product.m4
@@ -49,4 +49,4 @@ MASKED_ARRAY_FUNCTION(1,
SCALAR_ARRAY_FUNCTION(1)
-#endif
+`#endif'
diff --git a/libgfortran/m4/reshape.m4 b/libgfortran/m4/reshape.m4
index 345837a32cc..2a877a2f8ab 100644
--- a/libgfortran/m4/reshape.m4
+++ b/libgfortran/m4/reshape.m4
@@ -34,27 +34,27 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
-typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type;
+typedef GFC_ARRAY_DESCRIPTOR(1, 'index_type`) 'shape_type`;'
dnl For integer routines, only the kind (ie size) is used to name the
dnl function. The same function will be used for integer and logical
dnl arrays of the same kind.
-extern void reshape_`'rtype_ccode (rtype * const restrict,
- rtype * const restrict,
- shape_type * const restrict,
- rtype * const restrict,
- shape_type * const restrict);
-export_proto(reshape_`'rtype_ccode);
+`extern void reshape_'rtype_ccode` ('rtype` * const restrict,
+ 'rtype` * const restrict,
+ 'shape_type` * const restrict,
+ 'rtype` * const restrict,
+ 'shape_type` * const restrict);
+export_proto(reshape_'rtype_ccode`);
void
-reshape_`'rtype_ccode (rtype * const restrict ret,
- rtype * const restrict source,
- shape_type * const restrict shape,
- rtype * const restrict pad,
- shape_type * const restrict order)
+reshape_'rtype_ccode` ('rtype` * const restrict ret,
+ 'rtype` * const restrict source,
+ 'shape_type` * const restrict shape,
+ 'rtype` * const restrict pad,
+ 'shape_type` * const restrict order)
{
/* r.* indicates the return array. */
index_type rcount[GFC_MAX_DIMENSIONS];
@@ -65,7 +65,7 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
index_type rsize;
index_type rs;
index_type rex;
- rtype_name *rptr;
+ 'rtype_name` *rptr;
/* s.* indicates the source array. */
index_type scount[GFC_MAX_DIMENSIONS];
index_type sextent[GFC_MAX_DIMENSIONS];
@@ -73,16 +73,16 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
index_type sstride0;
index_type sdim;
index_type ssize;
- const rtype_name *sptr;
+ const 'rtype_name` *sptr;
/* p.* indicates the pad array. */
index_type pcount[GFC_MAX_DIMENSIONS];
index_type pextent[GFC_MAX_DIMENSIONS];
index_type pstride[GFC_MAX_DIMENSIONS];
index_type pdim;
index_type psize;
- const rtype_name *pptr;
+ const 'rtype_name` *pptr;
- const rtype_name *src;
+ const 'rtype_name` *src;
int n;
int dim;
int sempty, pempty;
@@ -100,7 +100,7 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
rs *= rex;
}
ret->offset = 0;
- ret->data = internal_malloc_size ( rs * sizeof (rtype_name));
+ ret->data = internal_malloc_size ( rs * sizeof ('rtype_name`));
ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim;
}
else
@@ -184,9 +184,9 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
if (rsize != 0 && ssize != 0 && psize != 0)
{
- rsize *= sizeof (rtype_name);
- ssize *= sizeof (rtype_name);
- psize *= sizeof (rtype_name);
+ rsize *= sizeof ('rtype_name`);
+ ssize *= sizeof ('rtype_name`);
+ psize *= sizeof ('rtype_name`);
reshape_packed ((char *)ret->data, rsize, (char *)source->data,
ssize, pad ? (char *)pad->data : NULL, psize);
return;
@@ -210,7 +210,7 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
scount[dim] = pcount[dim];
sextent[dim] = pextent[dim];
sstride[dim] = pstride[dim];
- sstride0 = sstride[0] * sizeof (rtype_name);
+ sstride0 = sstride[0] * sizeof ('rtype_name`);
}
}
@@ -286,4 +286,4 @@ reshape_`'rtype_ccode (rtype * const restrict ret,
}
}
-#endif
+#endif'
diff --git a/libgfortran/m4/rrspacing.m4 b/libgfortran/m4/rrspacing.m4
index 34ff98eb698..5e881c25293 100644
--- a/libgfortran/m4/rrspacing.m4
+++ b/libgfortran/m4/rrspacing.m4
@@ -34,26 +34,26 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_FABS'Q`) && defined (HAVE_FREXP'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_FABS'Q`) && defined (HAVE_FREXP'Q`)
-extern real_type rrspacing_r`'kind (real_type s, int p);
-export_proto(rrspacing_r`'kind);
+extern 'real_type` rrspacing_r'kind` ('real_type` s, int p);
+export_proto(rrspacing_r'kind`);
-real_type
-rrspacing_r`'kind (real_type s, int p)
+'real_type`
+rrspacing_r'kind` ('real_type` s, int p)
{
int e;
- real_type x;
- x = fabs`'q (s);
+ 'real_type` x;
+ x = fabs'q` (s);
if (x == 0.)
return 0.;
- frexp`'q (s, &e);
-`#if defined (HAVE_LDEXP'Q`)'
- return ldexp`'q (x, p - e);
+ frexp'q` (s, &e);
+#if defined (HAVE_LDEXP'Q`)
+ return ldexp'q` (x, p - e);
#else
- return scalbn`'q (x, p - e);
+ return scalbn'q` (x, p - e);
#endif
}
-#endif
+#endif'
diff --git a/libgfortran/m4/set_exponent.m4 b/libgfortran/m4/set_exponent.m4
index 91ba9523b98..417cc66b342 100644
--- a/libgfortran/m4/set_exponent.m4
+++ b/libgfortran/m4/set_exponent.m4
@@ -34,16 +34,16 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_SCALBN'Q`) && defined (HAVE_FREXP'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_SCALBN'Q`) && defined (HAVE_FREXP'Q`)
-extern real_type set_exponent_r`'kind (real_type s, GFC_INTEGER_4 i);
-export_proto(set_exponent_r`'kind);
+extern 'real_type` set_exponent_r'kind` ('real_type` s, GFC_INTEGER_4 i);
+export_proto(set_exponent_r'kind`);
-real_type
-set_exponent_r`'kind (real_type s, GFC_INTEGER_4 i)
+'real_type`
+set_exponent_r'kind` ('real_type` s, GFC_INTEGER_4 i)
{
int dummy_exp;
- return scalbn`'q (frexp`'q (s, &dummy_exp), i);
+ return scalbn'q` (frexp'q` (s, &dummy_exp), i);
}
-#endif
+#endif'
diff --git a/libgfortran/m4/shape.m4 b/libgfortran/m4/shape.m4
index a219a8bb32a..1902d7514d6 100644
--- a/libgfortran/m4/shape.m4
+++ b/libgfortran/m4/shape.m4
@@ -34,15 +34,15 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
-extern void shape_`'rtype_kind (rtype * const restrict ret,
- const rtype * const restrict array);
-export_proto(shape_`'rtype_kind);
+extern void shape_'rtype_kind` ('rtype` * const restrict ret,
+ const 'rtype` * const restrict array);
+export_proto(shape_'rtype_kind`);
void
-shape_`'rtype_kind (rtype * const restrict ret,
- const rtype * const restrict array)
+shape_'rtype_kind` ('rtype` * const restrict ret,
+ const 'rtype` * const restrict array)
{
int n;
index_type stride;
@@ -56,4 +56,4 @@ shape_`'rtype_kind (rtype * const restrict ret,
}
}
-#endif
+#endif'
diff --git a/libgfortran/m4/spacing.m4 b/libgfortran/m4/spacing.m4
index 77b7a38e550..cb46db79cd6 100644
--- a/libgfortran/m4/spacing.m4
+++ b/libgfortran/m4/spacing.m4
@@ -34,25 +34,25 @@ Boston, MA 02110-1301, USA. */
include(`mtype.m4')dnl
-`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)'
+`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`)
-extern real_type spacing_r`'kind (real_type s, int p, int emin, real_type tiny);
-export_proto(spacing_r`'kind);
+extern 'real_type` spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny);
+export_proto(spacing_r'kind`);
-real_type
-spacing_r`'kind (real_type s, int p, int emin, real_type tiny)
+'real_type`
+spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny)
{
int e;
if (s == 0.)
return tiny;
- frexp`'q (s, &e);
+ frexp'q` (s, &e);
e = e - p;
e = e > emin ? e : emin;
-`#if defined (HAVE_LDEXP'Q`)'
- return ldexp`'q (1., e);
+#if defined (HAVE_LDEXP'Q`)
+ return ldexp'q` (1., e);
#else
- return scalbn`'q (1., e);
+ return scalbn'q` (1., e);
#endif
}
-#endif
+#endif'
diff --git a/libgfortran/m4/transpose.m4 b/libgfortran/m4/transpose.m4
index 1511258a1de..bd0577f089f 100644
--- a/libgfortran/m4/transpose.m4
+++ b/libgfortran/m4/transpose.m4
@@ -33,22 +33,22 @@ Boston, MA 02110-1301, USA. */
#include "libgfortran.h"'
include(iparm.m4)dnl
-`#if defined (HAVE_'rtype_name`)'
+`#if defined (HAVE_'rtype_name`)
-extern void transpose_`'rtype_code (rtype * const restrict ret,
- rtype * const restrict source);
-export_proto(transpose_`'rtype_code);
+extern void transpose_'rtype_code` ('rtype` * const restrict ret,
+ 'rtype` * const restrict source);
+export_proto(transpose_'rtype_code`);
void
-transpose_`'rtype_code (rtype * const restrict ret,
- rtype * const restrict source)
+transpose_'rtype_code` ('rtype` * const restrict ret,
+ 'rtype` * const restrict source)
{
/* r.* indicates the return array. */
index_type rxstride, rystride;
- rtype_name *rptr;
+ 'rtype_name` *rptr;
/* s.* indicates the source array. */
index_type sxstride, systride;
- const rtype_name *sptr;
+ const 'rtype_name` *sptr;
index_type xcount, ycount;
index_type x, y;
@@ -68,7 +68,7 @@ transpose_`'rtype_code (rtype * const restrict ret,
ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound;
ret->dim[1].stride = ret->dim[0].ubound+1;
- ret->data = internal_malloc_size (sizeof (rtype_name) * size0 ((array_t *) ret));
+ ret->data = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) ret));
ret->offset = 0;
}
@@ -97,4 +97,4 @@ transpose_`'rtype_code (rtype * const restrict ret,
}
}
-#endif
+#endif'
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index a47f2caa1b3..fa0bbcd9048 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add install-pdf target as copied from
+ automake v1.10 rules.
+ * Makefile.in: Regenerate
+
2007-02-07 Jakub Jelinek <jakub@redhat.com>
PR libgomp/28486
diff --git a/libgomp/Makefile.am b/libgomp/Makefile.am
index c2bfbeaad5f..8192aec1a3c 100644
--- a/libgomp/Makefile.am
+++ b/libgomp/Makefile.am
@@ -51,10 +51,19 @@ env.lo: libgomp_f.h
env.o: libgomp_f.h
-# No install-html target
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
# Automake Documentation:
# If your package has Texinfo files in many directories, you can use the
diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in
index 7fee1ccb3cb..f11740c4820 100644
--- a/libgomp/Makefile.in
+++ b/libgomp/Makefile.in
@@ -1045,10 +1045,20 @@ fortran.o: libgomp_f.h
env.lo: libgomp_f.h
env.o: libgomp_f.h
-# No install-html target
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
all-local: $(STAMP_GENINSRC)
stamp-geninsrc: libgomp.info
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 8056887b292..6ac77d7cc17 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,22 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add install-pdf target as copied from
+ automake v1.10 rules.
+ * testsuite/Makefile.in: Add dummy install-pdf target.
+
+2007-03-01 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR other/16513
+ * Makefile.in: Install library under $(MULTIOSDIR), not $(MULTISUBDIR).
+ Install headers in multilib independent location.
+
+2007-02-26 DJ Delorie <dj@redhat.com>
+
+ * configure.ac: add djgpp-specific results, so we don't have to
+ link during a cross compilation.
+ * configure: Regenerated.
+
2007-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* hex.c: Fix typo.
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 6e02403f46f..90686f00b15 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -245,7 +245,24 @@ info: libiberty.info info-subdir
install-info: install-info-subdir
clean-info: clean-info-subdir
dvi: libiberty.dvi dvi-subdir
-pdf: libiberty.pdf pdf-subdir
+
+LIBIBERTY_PDFFILES = libiberty.pdf
+
+pdf: $(LIBIBERTY_PDFFILES) pdf-subdir
+
+.PHONY: install-pdf
+
+pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-pdf: $(LIBIBERTY_PDFFILES)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
+ @list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(pdf__strip_dir) \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
# html, install-html targets
HTMLS = libiberty.html
@@ -336,15 +353,20 @@ libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
INSTALL_DEST = @INSTALL_DEST@
install: install_to_$(INSTALL_DEST) install-subdir
+# This is tricky. Even though CC in the Makefile contains
+# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
+# default multilib, so we have to take LIBCFLAGS into account as well,
+# since it will be passed the multilib flags.
+MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n
- ( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
- mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)
+ ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
+ $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
+ ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
+ mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)
if test -n "${target_header_dir}"; then \
case "${target_header_dir}" in \
/*) thd=${target_header_dir};; \
- *) thd=${includedir}${MULTISUBDIR}/${target_header_dir};; \
+ *) thd=${includedir}/${target_header_dir};; \
esac; \
${mkinstalldirs} $(DESTDIR)$${thd}; \
for h in ${INSTALLED_HEADERS}; do \
@@ -353,11 +375,6 @@ install_to_libdir: all
fi
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-# This is tricky. Even though CC in the Makefile contains
-# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
-# default multilib, so we have to take LIBCFLAGS into account as well,
-# since it will be passed the multilib flags.
-MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory`
install_to_tooldir: all
${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
diff --git a/libiberty/configure b/libiberty/configure
index 34911021891..56d039ea0c2 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -6042,6 +6042,26 @@ _ACEOF
setobjs=yes
;;
+ *-*-msdosdjgpp)
+ for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+ getcwd getpagesize getrusage gettimeofday gettimeofday \
+ index insque memchr memcmp memcpy memmove memset psignal \
+ putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+ strchr strdup strerror strncasecmp strrchr strstr strtod \
+ strtol strtoul sysconf times tmpnam vfprintf vprintf \
+ vsprintf waitpid
+ do
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >>confdefs.h <<_ACEOF
+#define $n 1
+_ACEOF
+
+ done
+
+
+ setobjs=yes
+ ;;
+
esac
fi
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index f9713c22e26..fe4633f8697 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -545,6 +545,23 @@ if test -z "${setobjs}"; then
setobjs=yes
;;
+ *-*-msdosdjgpp)
+ for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
+ getcwd getpagesize getrusage gettimeofday gettimeofday \
+ index insque memchr memcmp memcpy memmove memset psignal \
+ putenv random rename rindex sbrk setenv stpcpy strcasecmp \
+ strchr strdup strerror strncasecmp strrchr strstr strtod \
+ strtol strtoul sysconf times tmpnam vfprintf vprintf \
+ vsprintf waitpid
+ do
+ n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ AC_DEFINE_UNQUOTED($n)
+ done
+
+
+ setobjs=yes
+ ;;
+
esac
fi
diff --git a/libiberty/testsuite/Makefile.in b/libiberty/testsuite/Makefile.in
index 6979d941aed..56800a7a7ce 100644
--- a/libiberty/testsuite/Makefile.in
+++ b/libiberty/testsuite/Makefile.in
@@ -73,7 +73,8 @@ test-expandargv: $(srcdir)/test-expandargv.c ../libiberty.a
$(srcdir)/test-expandargv.c ../libiberty.a
# Standard (either GNU or Cygnus) rules we don't use.
-html install-html info install-info clean-info dvi pdf install etags tags installcheck:
+html install-html info install-info clean-info dvi pdf install-pdf \
+install etags tags installcheck:
# The standard clean rules.
mostlyclean:
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index c3ff95a2c54..edf374ba874 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,380 @@
+2007-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * Makefile.am (AM_MAKEFLAGS): Pass through mandir.
+ * Makefile.in: Rebuilt.
+
+2007-03-13 Keith Seitz <keiths@redhat.com>
+
+ * include/java-interp.h (_Jv_InterpClass): Declare
+ friend function _Jv_GetInterpClassSourceFile.
+ * java/lang/Class.h (Class): Likewise.
+ * java/lang/natClass.cc (_Jv_GetInterpClassSourceFile):
+ New function.
+ * gnu/classpath/jdwp/natVMVirtualMachine.cc
+ (getSourceFile): Implement.
+
+2007-03-13 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * Makefile.am (AM_CXXFLAGS): Define ECJ_JAR_FILE.
+ * classpath/configure.ac: Add --with-ecj-jar configure option.
+ * classpath/gnu/classpath/Configuration.java.in (ECJ_JAR): New
+ field.
+ * classpath/INSTALL: Document --with-ecj-jar configure option and
+ ecj jar requirement for com.sun.tools.javac support.
+ * classpath/tools/Makefile.am: Build decendents of com and sun
+ directories.
+ * configure.ac: Substitute ECJ_JAR in stub Configuration.java.
+ * gnu/classpath/Configuration.java,
+ gnu/classpath/natConfiguration.cc (ecj): New method.
+ (ECJ_JAR): New field.
+ * scripts/makemake.tcl (scan_packages): Add com directory.
+ * sources.am (property_files): Add
+ classpath/resource/sun/rmi/rmic/messages.properties and
+ classpath/resource/com/sun/tools/javac/messages.properties.
+ * classpath/resource/com, classpath/resource/com/sun,
+ classpath/resource/com/sun/tools,
+ classpath/resource/com/sun/tools/javac, classpath/resource/sun,
+ classpath/resource/sun/rmi, classpath/resource/sun/rmi/rmic,
+ classpath/tools/classes/com, classpath/tools/classes/com/sun,
+ classpath/tools/classes/com/sun/javadoc,
+ classpath/tools/classes/com/sun/tools,
+ classpath/tools/classes/com/sun/tools/doclets,
+ classpath/tools/classes/sun, classpath/tools/classes/sun/rmi,
+ classpath/tools/classes/sun/rmi/rmic, classpath/tools/com,
+ classpath/tools/com/sun, classpath/tools/com/sun/javadoc,
+ classpath/tools/com/sun/tools,
+ classpath/tools/com/sun/tools/doclets,
+ classpath/tools/com/sun/tools/javac, classpath/tools/sun,
+ classpath/tools/sun/rmi, classpath/tools/sun/rmi/rmic: New
+ directories.
+ * classpath/resource/com/sun/tools/javac/messages.properties,
+ classpath/resource/sun/rmi/rmic/messages.properties,
+ classpath/tools/classes/com/sun/javadoc/ClassDoc.class,
+ classpath/tools/classes/com/sun/javadoc/ConstructorDoc.class,
+ classpath/tools/classes/com/sun/javadoc/Doc.class,
+ classpath/tools/classes/com/sun/javadoc/DocErrorReporter.class,
+ classpath/tools/classes/com/sun/javadoc/Doclet.class,
+ classpath/tools/classes/com/sun/javadoc/ExecutableMemberDoc.class,
+ classpath/tools/classes/com/sun/javadoc/FieldDoc.class,
+ classpath/tools/classes/com/sun/javadoc/MemberDoc.class,
+ classpath/tools/classes/com/sun/javadoc/MethodDoc.class,
+ classpath/tools/classes/com/sun/javadoc/PackageDoc.class,
+ classpath/tools/classes/com/sun/javadoc/ParamTag.class,
+ classpath/tools/classes/com/sun/javadoc/Parameter.class,
+ classpath/tools/classes/com/sun/javadoc/ProgramElementDoc.class,
+ classpath/tools/classes/com/sun/javadoc/RootDoc.class,
+ classpath/tools/classes/com/sun/javadoc/SeeTag.class,
+ classpath/tools/classes/com/sun/javadoc/SerialFieldTag.class,
+ classpath/tools/classes/com/sun/javadoc/SourcePosition.class,
+ classpath/tools/classes/com/sun/javadoc/Tag.class,
+ classpath/tools/classes/com/sun/javadoc/ThrowsTag.class,
+ classpath/tools/classes/com/sun/javadoc/Type.class,
+ classpath/tools/classes/com/sun/javadoc/TypeVariable.class,
+ classpath/tools/classes/com/sun/tools/doclets/Taglet.class,
+ classpath/tools/classes/sun/rmi/rmic/Main.class,
+ classpath/tools/classes/sun/rmi/rmic/Messages.class,
+ classpath/tools/com/sun/javadoc/ClassDoc.java,
+ classpath/tools/com/sun/javadoc/ConstructorDoc.java,
+ classpath/tools/com/sun/javadoc/Doc.java,
+ classpath/tools/com/sun/javadoc/DocErrorReporter.java,
+ classpath/tools/com/sun/javadoc/Doclet.java,
+ classpath/tools/com/sun/javadoc/ExecutableMemberDoc.java,
+ classpath/tools/com/sun/javadoc/FieldDoc.java,
+ classpath/tools/com/sun/javadoc/MemberDoc.java,
+ classpath/tools/com/sun/javadoc/MethodDoc.java,
+ classpath/tools/com/sun/javadoc/PackageDoc.java,
+ classpath/tools/com/sun/javadoc/ParamTag.java,
+ classpath/tools/com/sun/javadoc/Parameter.java,
+ classpath/tools/com/sun/javadoc/ProgramElementDoc.java,
+ classpath/tools/com/sun/javadoc/RootDoc.java,
+ classpath/tools/com/sun/javadoc/SeeTag.java,
+ classpath/tools/com/sun/javadoc/SerialFieldTag.java,
+ classpath/tools/com/sun/javadoc/SourcePosition.java,
+ classpath/tools/com/sun/javadoc/Tag.java,
+ classpath/tools/com/sun/javadoc/ThrowsTag.java,
+ classpath/tools/com/sun/javadoc/Type.java,
+ classpath/tools/com/sun/javadoc/TypeVariable.java,
+ classpath/tools/com/sun/tools/doclets/Taglet.java,
+ classpath/tools/com/sun/tools/javac/Main.java,
+ classpath/tools/com/sun/tools/javac/Messages.java,
+ classpath/tools/sun/rmi/rmic/Main.java,
+ classpath/tools/sun/rmi/rmic/Messages.java: New files.
+ * Makefile.in, classpath/Makefile.in, classpath/configure,
+ classpath/doc/Makefile.in, classpath/doc/api/Makefile.in,
+ classpath/examples/Makefile.in, classpath/external/Makefile.in,
+ classpath/external/jsr166/Makefile.in,
+ classpath/external/relaxngDatatype/Makefile.in,
+ classpath/external/sax/Makefile.in,
+ classpath/external/w3c_dom/Makefile.in,
+ classpath/include/Makefile.in, classpath/include/config.h.in,
+ classpath/lib/Makefile.in,
+ classpath/lib/gnu/classpath/Configuration.class,
+ classpath/native/Makefile.in, classpath/native/fdlibm/Makefile.in,
+ classpath/native/jawt/Makefile.in,
+ classpath/native/jni/Makefile.in,
+ classpath/native/jni/classpath/Makefile.in,
+ classpath/native/jni/gconf-peer/Makefile.in,
+ classpath/native/jni/gtk-peer/Makefile.in,
+ classpath/native/jni/java-io/Makefile.in,
+ classpath/native/jni/java-lang/Makefile.in,
+ classpath/native/jni/java-net/Makefile.in,
+ classpath/native/jni/java-nio/Makefile.in,
+ classpath/native/jni/java-util/Makefile.in,
+ classpath/native/jni/midi-alsa/Makefile.in,
+ classpath/native/jni/midi-dssi/Makefile.in,
+ classpath/native/jni/native-lib/Makefile.in,
+ classpath/native/jni/qt-peer/Makefile.in,
+ classpath/native/jni/xmlj/Makefile.in,
+ classpath/native/plugin/Makefile.in,
+ classpath/resource/Makefile.in, classpath/scripts/Makefile.in,
+ classpath/tools/Makefile.in, configure,
+ gnu/classpath/Configuration.h: Regenerate.
+
+2007-03-12 Kyle Galloway <kgallowa@redhat.com>
+
+ * jvmti.cc (_Jv_JVMTI_GetArgumentsSize): Make wide type arrays count
+ as a sigle slot.
+
+2007-03-12 Marco Trudel <mtrudel@gmx.ch>
+
+ * java/lang/natString.cc (getBytes (jstring enc)):
+ Fixed the loop for multiple cycles, Code cleanup
+
+2007-03-09 Tom Tromey <tromey@redhat.com>
+
+ * sources.am, Makefile.in: Rebuilt.
+ * scripts/makemake.tcl (scan_directory): Allow service files to be
+ omitted.
+ Omit all XML-related service files.
+
+2007-03-07 Tom Tromey <tromey@redhat.com>
+
+ * configure: Rebuilt.
+ * configure.ac: Clear vm-tools-packages.
+
+2007-03-07 Mohan Embar <gnustuff@thisiscool.com>
+
+ * java/lang/Win32Process.java: Added nested class EOFInputStream.
+ * java/lang/natWin32Process.cc (ChildProcessPipe): Added DUMMY
+ enum and implementation.
+ (startProcess): Use redirect flag.
+ * classpath/lib/java/lang/Win32Process.class: Regenerated.
+ * classpath/lib/java/lang/Win32Process$EOFInputStream.class: New.
+ * gcj/javaprims.h: Regenerated.
+ * java/lang/Win32Process$EOFInputStream.h: New.
+
+2007-03-07 Andrew Haley <aph@redhat.com>
+
+ * libgcj_bc.c (JvRunMainName): Declare.
+
+2007-03-07 Gary Benson <gbenson@redhat.com>
+
+ * sources.am, Makefile.in: Rebuilt.
+
+2007-03-07 Mohan Embar <gnustuff@thisiscool.com>
+
+ * gcj/javaprims.h: Regenerated.
+
+2007-03-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * include/jvm.h (_Jv_ClosureListFinalizer): New.
+ (_Jv_Linker::create_error_method): Adjust.
+ * boehm.cc (_Jv_ClosureListFinalizer): New.
+ * nogc.cc (_Jv_ClosureListFinalizer): New.
+ * java/lang/Class.h (class _Jv_ClosureList): New.
+ (class java::lang::Class): Declare it as friend.
+ * java/lang/natClass.cc (_Jv_ClosureList::releaseClosures): New.
+ (_Jv_ClosureList::registerClousure): New.
+ * include/execution.h (_Jv_ExecutionEngine): Add get_closure_list.
+ (_Jv_CompiledEngine::do_get_closure_list): New.
+ (_Jv_CompiledEngine::_Jv_CompiledEngine): Use it.
+ (_Jv_IndirectCompiledClass): Add closures.
+ (_Jv_IndirectCompiledEngine::get_aux_info): New.
+ (_Jv_IndirectCompiledEngine::do_allocate_field_initializers): Use
+ it.
+ (_Jv_IndirectCompiledEngine::do_get_closure_list): New.
+ (_Jv_IndirectCompiledEngine::_Jv_IndirectCompiledEngine): Use it.
+ (_Jv_InterpreterEngine::do_get_closure_list): Declare.
+ (_Jv_InterpreterEngine::_Jv_InterpreterEngine): Use it.
+ * interpret.cc (FFI_PREP_RAW_CLOSURE): Use _loc variants.
+ (node_closure): Add closure list.
+ (_Jv_InterpMethod::ncode): Add jclass argument. Use
+ ffi_closure_alloc and the separate code pointer. Register the
+ closure for finalization.
+ (_Jv_JNIMethod::ncode): Likewise.
+ (_Jv_InterpreterEngine::do_create_ncode): Pass klass to ncode.
+ (_Jv_InterpreterEngine::do_get_closure_list): New.
+ * include/java-interp.h (_Jv_InterpMethod::ncode): Adjust.
+ (_Jv_InterpClass): Add closures field.
+ (_Jv_JNIMethod::ncode): Adjust.
+ * defineclass.cc (_Jv_ClassReader::handleCodeAttribute): Adjust.
+ (_Jv_ClassReader::handleMethodsEnd): Likewise.
+ * link.cc (struct method_closure): Add closure list.
+ (_Jv_Linker::create_error_method): Add jclass argument. Use
+ ffi_closure_alloc and the separate code pointer. Register the
+ closure for finalization.
+ (_Jv_Linker::link_symbol_table): Remove outdated comment about
+ sharing of otable and atable. Adjust.
+ * java/lang/reflect/natVMProxy.cc (ncode_closure): Add closure
+ list.
+ (ncode): Add jclass argument. Use ffi_closure_alloc and the
+ separate code pointer. Register the closure for finalization.
+ (java::lang::reflect::VMProxy::generateProxyClass): Adjust.
+ * testsuite/libjava.jar/TestClosureGC.java: New.
+ * testsuite/libjava.jar/TestClosureGC.out: New.
+ * testsuite/libjava.jar/TestClosureGC.xfail: New.
+ * testsuite/libjava.jar/TestClosureGC.jar: New.
+
+2007-03-06 Kyle Galloway <kgallowa@redhat.com>
+
+ * classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java: New file.
+ * classpath/lib/gnu/classpath/jdwp/exception/AbsentInformationException.class: Ditto.
+ * gnu/classpath/jdwp/exception/AbsentInformationException.h: Ditto.
+ * gnu/classpath/jdwp/natVMMethod.cc: Add CHECK_INTERP_CLASS macro.
+ (VMMethod::getLineTable): Use new macro.
+ (VMMethod::getVariableTable): Implement.
+ * sources.am: Regenerated.
+ * Makefile.in: Ditto.
+
+2007-03-06 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.in: Rebuilt.
+ * Makefile.am (bin_PROGRAMS): Added gcjh.
+ (gcjh_SOURCES, gcjh_LDFLAGS, gcjh_LINK, gcjh_LDADD,
+ gcjh_DEPENDENCIES): New variables.
+
+2007-03-06 Kyle Galloway <kgallowa@redhat.com>
+
+ * jvmti.cc(_Jv_JVMTI_GetLocalVariableTable): Fix _Jv_Malloc parameters.
+ * testsuite/libjava.jvmti/interp/natgetlocalvartable.cc
+ (do_getlocalvartable_tests): Add Deallocate calls to free strings.
+
+2007-03-05 Matthias Klose <doko@debian.org>
+
+ * Makefile.am (gij_LDFLAGS): Use dbexecdir.
+ * Makefile.in: Regnerate.
+
+2007-03-05 Mark Wielaard <mark@klomp.org>
+
+ * java/lang/Character.java: Re-merged with Classpath.
+ * java/lang/natString.cc (nativeCompareTo): Renamed from
+ compareTo.
+ * java/lang/StringBuilder.java: Re-merged with Classpath.
+ * java/lang/String.java: Re-merged with Classpath.
+ (nativeCompareTo): Renamed from compareTo.
+ * java/lang/StringBuffer.java: Re-merged with Classpath.
+ * jni.cc (_Jv_JNI_GetAnyMethodID): Split calls to append.
+
+2007-03-05 Andrew Haley <aph@redhat.com>
+
+ * java/lang/reflect/natVMProxy.cc (ncode_closure.meth): Delete.
+ (generateProxyClass): Don't pass method to ncode.
+ (run_proxy): Call _Jv_GetReflectedMethod to find the proxy method.
+ * java/lang/reflect/Method.h: Rebuild.
+ * java/lang/reflect/Method.java (internalGetParameterTypes,
+ internalGetExceptionTypes): New methods.
+ * headers.txt (class java/lang/reflect/Method): Declare
+ _Jv_GetReflectedMethod. Be its friend.
+ * java/lang/natClass.cc (_Jv_GetReflectedMethod): New method.
+ * java/lang/Class.h: Declare it. Be its friend.
+
+2007-03-05 Tom Tromey <tromey@redhat.com>
+
+ * sources.am, Makefile.in: Rebuilt.
+ * scripts/makemake.tcl (emit_package_rule): Don't omit
+ VMProcess.java.
+ * Makefile.am (nat_source_files): Added natVMProcess.cc.
+ (inner_nat_headers): Added ImmediateEOFInputStream.h.
+ * gcj/javaprims.h: Regenerated.
+ * java/lang/System.java (EnvironmentMap): Now package-private.
+ (EnvironmentMap(Map)): New constructor.
+ (EnvironmentMap.put): New method.
+ * java/lang/natWin32Process.cc (startProcess): Update.
+ * java/lang/Win32Process.java (Win32Process): Added 'redirect'
+ argument.
+ (startProcess): Likewise.
+ * java/lang/EcosProcess.java (EcosProcess): Added 'redirect'
+ argument.
+ * java/lang/natPosixProcess.cc (nativeSpawn): Handle redirection.
+ * java/lang/PosixProcess.java (redirect): New field.
+ (PosixProcess): Added 'redirect' argument.
+ * java/lang/natRuntime.cc (execInternal): Added 'redirect'
+ argument to Process creation.
+ * java/lang/natVMProcess.cc: New file.
+ * java/lang/ProcessBuilder.java: Removed.
+ * java/lang/VMProcess.java: New file.
+
+2007-03-03 Andrew Haley <aph@redhat.com>
+
+ * java/lang/natClass.cc (parseAnnotationElement): Correct long
+ annotations to read JV_CONSTANT_Long, not JV_CONSTANT_Double.
+
+2007-03-02 Andrew Haley <aph@redhat.com>
+
+ * sun/reflect/annotation/AnnotationInvocationHandler.java:
+ Generify in a few places.
+ (equals): Rewrite to use invoke on local proxy.
+ (deepToString): Remove most of it.
+ (toString): Make nonstatic.
+ (arrayClone): Delete.
+ (coerce): New method.
+ (invoke): Rewrite to handle gcj's structures correctly.
+ * java/lang/natClass.cc (getDeclaredAnnotations): Fix test for
+ null loader.
+ * sources.am: Regenerate.
+ * Makefile.am: Likewise.
+
+2007-03-02 Andrew Haley <aph@redhat.com>
+
+ * sun/reflect/annotation/AnnotationInvocationHandler.java:
+ Whitespace only changes.
+
+2007-03-02 Andrew Haley <aph@redhat.com>
+
+ * sun/reflect/annotation/AnnotationInvocationHandler.java: Moved
+ from Classpath to libgcj local.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+ * include/Makefile.in: Regenerate
+ * testsuite/Makefile.in: Regenerate
+ * gcj/Makefile.in: Regenerate
+
+2007-02-23 Gary Benson <gbenson@redhat.com>
+
+ * gnu/gcj/tools/gcj_dbtool/Main.java: Updated copyright year.
+
+2007-02-23 Gary Benson <gbenson@redhat.com>
+
+ * java/lang/VMCompiler.java
+ (compileClass): Don't lose zeros from within the digest.
+
+2007-02-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgcj/17002
+ PR classpath/28550
+ * java/util/VMTimeZone.java (getDefaultTimeZoneId): To read
+ /etc/localtime, use ZoneInfo.readTZFile instead of
+ VMTimeZone.readtzFile. Get better timezone name for /etc/localtime,
+ either if it is a symlink or through /etc/sysconfig/clock.
+ (readSysconfigClockFile): New static method.
+ (readtzFile): Removed.
+ * java/lang/System.java: Add gnu.java.util.zoneinfo.dir to comments.
+ * posix.cc (_Jv_platform_initProperties): Set
+ gnu.java.util.zoneinfo.dir.
+ * sources.am (gnu_java_util_source_files): Add
+ classpath/gnu/java/util/ZoneInfo.java.
+ * Makefile.in: Regenerated.
+ * java/util/VMTimeZone.h: Regenerated.
+ * java/util/TimeZone.h: Regenerated.
+ * gnu/java/util/ZoneInfo.h: Generated.
+
+2007-02-22 Mohan Embar <gnustuff@thisiscool.com>
+
+ * include/win32-threads.h: Added #undef OUT.
+
2007-02-21 Kyle Galloway <kgallowa@redhat.com>
* jvmti.cc (_Jv_JVMTI_GetArgumentsSize): New function.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index 2532ed6d4f2..97b38ee347d 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -72,7 +72,7 @@ db_pathtail = gcj-$(gcc_version)/$(db_name)
## For now, only on native systems. FIXME.
if NATIVE
bin_PROGRAMS = jv-convert gij grmic grmiregistry gcj-dbtool \
- gappletviewer gjarsigner gkeytool gjar gjavah gnative2ascii \
+ gappletviewer gjarsigner gkeytool gjar gcjh gjavah gnative2ascii \
gorbd grmid gserialver gtnameserv gc-analyze
## It is convenient to actually build and install the default database
@@ -139,6 +139,7 @@ AM_CXXFLAGS = \
-DGCJ_ENDORSED_DIRS="\"$(jardir)/gcj-endorsed\"" \
-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ -DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
@@ -406,6 +407,7 @@ inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
java/nio/DirectByteBufferImpl$$ReadWrite.h \
java/nio/channels/Pipe$$SinkChannel.h \
java/nio/channels/Pipe$$SourceChannel.h \
+ java/lang/VMProcess$ImmediateEOFInputStream.h \
java/lang/reflect/Proxy$$ProxyData.h \
java/lang/reflect/Proxy$$ProxyType.h \
gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
@@ -665,7 +667,7 @@ gij_SOURCES =
## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'. We
## need this because we are explicitly using libtool to link using the
## `.la' file.
-gij_LDFLAGS = -rpath $(libdir)/gcj-$(gcc_version) -rpath $(toolexeclibdir) \
+gij_LDFLAGS = -rpath $(dbexecdir) -rpath $(toolexeclibdir) \
-shared-libgcc $(THREADLDFLAGS)
gij_LINK = $(GCJLINK)
## See jv_convert_LDADD.
@@ -756,6 +758,15 @@ gjavah_LDADD = -L$(here)/.libs libgcj-tools.la
gjavah_DEPENDENCIES = libgcj-tools.la
## This is a dummy definition.
+gcjh_SOURCES =
+gcjh_LDFLAGS = --main=gnu.classpath.tools.javah.GcjhMain \
+ -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+gcjh_LINK = $(GCJLINK)
+## See jv_convert_LDADD.
+gcjh_LDADD = -L$(here)/.libs libgcj-tools.la
+gcjh_DEPENDENCIES = libgcj-tools.la
+
+## This is a dummy definition.
gnative2ascii_SOURCES =
gnative2ascii_LDFLAGS = --main=gnu.classpath.tools.native2ascii.Native2ASCII \
-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
@@ -883,6 +894,7 @@ java/lang/natSystem.cc \
java/lang/natThread.cc \
java/lang/natThreadLocal.cc \
java/lang/natVMClassLoader.cc \
+java/lang/natVMProcess.cc \
java/lang/natVMThrowable.cc \
java/lang/ref/natReference.cc \
java/lang/reflect/natArray.cc \
@@ -1073,6 +1085,7 @@ AM_MAKEFLAGS = \
"exec_prefix=$(exec_prefix)" \
"infodir=$(infodir)" \
"libdir=$(libdir)" \
+ "mandir=$(mandir)" \
"prefix=$(prefix)" \
"gxx_include_dir=$(gxx_include_dir)" \
"AR=$(AR)" \
@@ -1092,9 +1105,10 @@ CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
MAKEOVERRIDES=
-# No install-html support yet.
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Multilib support variables.
MULTISRCTOP =
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index db8813ed19b..4cabd526840 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -48,7 +48,7 @@ target_triplet = @target@
@NATIVE_TRUE@ grmic$(EXEEXT) grmiregistry$(EXEEXT) \
@NATIVE_TRUE@ gcj-dbtool$(EXEEXT) gappletviewer$(EXEEXT) \
@NATIVE_TRUE@ gjarsigner$(EXEEXT) gkeytool$(EXEEXT) \
-@NATIVE_TRUE@ gjar$(EXEEXT) gjavah$(EXEEXT) \
+@NATIVE_TRUE@ gjar$(EXEEXT) gcjh$(EXEEXT) gjavah$(EXEEXT) \
@NATIVE_TRUE@ gnative2ascii$(EXEEXT) gorbd$(EXEEXT) \
@NATIVE_TRUE@ grmid$(EXEEXT) gserialver$(EXEEXT) \
@NATIVE_TRUE@ gtnameserv$(EXEEXT) gc-analyze$(EXEEXT)
@@ -331,8 +331,9 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc jvmti.cc exception.cc \
java/lang/natString.cc java/lang/natStringBuffer.cc \
java/lang/natStringBuilder.cc java/lang/natSystem.cc \
java/lang/natThread.cc java/lang/natThreadLocal.cc \
- java/lang/natVMClassLoader.cc java/lang/natVMThrowable.cc \
- java/lang/ref/natReference.cc java/lang/reflect/natArray.cc \
+ java/lang/natVMClassLoader.cc java/lang/natVMProcess.cc \
+ java/lang/natVMThrowable.cc java/lang/ref/natReference.cc \
+ java/lang/reflect/natArray.cc \
java/lang/reflect/natConstructor.cc \
java/lang/reflect/natField.cc java/lang/reflect/natMethod.cc \
java/lang/reflect/natVMProxy.cc java/net/natVMInetAddress.cc \
@@ -393,8 +394,9 @@ am__objects_2 = gnu/classpath/jdwp/natVMFrame.lo \
java/lang/natString.lo java/lang/natStringBuffer.lo \
java/lang/natStringBuilder.lo java/lang/natSystem.lo \
java/lang/natThread.lo java/lang/natThreadLocal.lo \
- java/lang/natVMClassLoader.lo java/lang/natVMThrowable.lo \
- java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
+ java/lang/natVMClassLoader.lo java/lang/natVMProcess.lo \
+ java/lang/natVMThrowable.lo java/lang/ref/natReference.lo \
+ java/lang/reflect/natArray.lo \
java/lang/reflect/natConstructor.lo \
java/lang/reflect/natField.lo java/lang/reflect/natMethod.lo \
java/lang/reflect/natVMProxy.lo java/net/natVMInetAddress.lo \
@@ -440,6 +442,8 @@ am_gc_analyze_OBJECTS =
gc_analyze_OBJECTS = $(am_gc_analyze_OBJECTS)
am_gcj_dbtool_OBJECTS = gnu/gcj/tools/gcj_dbtool/natMain.$(OBJEXT)
gcj_dbtool_OBJECTS = $(am_gcj_dbtool_OBJECTS)
+am_gcjh_OBJECTS =
+gcjh_OBJECTS = $(am_gcjh_OBJECTS)
am__gen_from_JIS_SOURCES_DIST = gnu/gcj/convert/gen-from-JIS.c \
gnu/gcj/convert/make-trie.c
@MAINTAINER_MODE_TRUE@@NATIVE_TRUE@am_gen_from_JIS_OBJECTS = gnu/gcj/convert/gen-from-JIS.$(OBJEXT) \
@@ -501,7 +505,7 @@ SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) $(libgcj_tools_la_SOURCES) \
$(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) \
$(libgcj_bc_la_SOURCES) $(libgij_la_SOURCES) \
$(libjvm_la_SOURCES) $(ecjx_SOURCES) $(gappletviewer_SOURCES) \
- $(gc_analyze_SOURCES) $(gcj_dbtool_SOURCES) \
+ $(gc_analyze_SOURCES) $(gcj_dbtool_SOURCES) $(gcjh_SOURCES) \
$(gen_from_JIS_SOURCES) $(gij_SOURCES) $(gjar_SOURCES) \
$(gjarsigner_SOURCES) $(gjavah_SOURCES) $(gkeytool_SOURCES) \
$(gnative2ascii_SOURCES) $(gorbd_SOURCES) $(grmic_SOURCES) \
@@ -512,12 +516,13 @@ DIST_SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) \
$(EXTRA_libgcj_la_SOURCES) $(libgcj_bc_la_SOURCES) \
$(libgij_la_SOURCES) $(libjvm_la_SOURCES) $(ecjx_SOURCES) \
$(gappletviewer_SOURCES) $(gc_analyze_SOURCES) \
- $(gcj_dbtool_SOURCES) $(am__gen_from_JIS_SOURCES_DIST) \
- $(gij_SOURCES) $(gjar_SOURCES) $(gjarsigner_SOURCES) \
- $(gjavah_SOURCES) $(gkeytool_SOURCES) $(gnative2ascii_SOURCES) \
- $(gorbd_SOURCES) $(grmic_SOURCES) $(grmid_SOURCES) \
- $(grmiregistry_SOURCES) $(gserialver_SOURCES) \
- $(gtnameserv_SOURCES) $(jv_convert_SOURCES)
+ $(gcj_dbtool_SOURCES) $(gcjh_SOURCES) \
+ $(am__gen_from_JIS_SOURCES_DIST) $(gij_SOURCES) \
+ $(gjar_SOURCES) $(gjarsigner_SOURCES) $(gjavah_SOURCES) \
+ $(gkeytool_SOURCES) $(gnative2ascii_SOURCES) $(gorbd_SOURCES) \
+ $(grmic_SOURCES) $(grmid_SOURCES) $(grmiregistry_SOURCES) \
+ $(gserialver_SOURCES) $(gtnameserv_SOURCES) \
+ $(jv_convert_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
@@ -598,7 +603,6 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
-GREP = @GREP@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
@@ -702,7 +706,6 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
-XMKMF = @XMKMF@
X_AWT_FALSE = @X_AWT_FALSE@
X_AWT_TRUE = @X_AWT_TRUE@
X_CFLAGS = @X_CFLAGS@
@@ -714,8 +717,14 @@ ZIP = @ZIP@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
+ac_ct_GCJ = @ac_ct_GCJ@
+ac_ct_LD = @ac_ct_LD@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -736,10 +745,7 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
-datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
-docdir = @docdir@
-dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@ $(am__append_5)
gxx_include_dir = @gxx_include_dir@
@@ -751,24 +757,20 @@ host_exeext = @host_exeext@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
-htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libstdcxx_incdir = @libstdcxx_incdir@
-localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
-psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
@@ -847,6 +849,7 @@ AM_CXXFLAGS = \
-DGCJ_ENDORSED_DIRS="\"$(jardir)/gcj-endorsed\"" \
-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
+ -DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""
@@ -1206,6 +1209,7 @@ classpath/gnu/classpath/jdwp/event/filters/ThreadOnlyFilter.java
gnu_classpath_jdwp_event_filters_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_classpath_jdwp_event_filters_source_files)))
gnu_classpath_jdwp_exception_source_files = \
+classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java \
classpath/gnu/classpath/jdwp/exception/InvalidClassException.java \
classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java \
classpath/gnu/classpath/jdwp/exception/InvalidCountException.java \
@@ -2402,7 +2406,8 @@ gnu_java_text_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gn
gnu_java_util_source_files = \
classpath/gnu/java/util/DoubleEnumeration.java \
classpath/gnu/java/util/EmptyEnumeration.java \
-classpath/gnu/java/util/WeakIdentityHashMap.java
+classpath/gnu/java/util/WeakIdentityHashMap.java \
+classpath/gnu/java/util/ZoneInfo.java
gnu_java_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_source_files)))
gnu_java_util_jar_source_files = \
@@ -4272,7 +4277,7 @@ classpath/java/lang/Override.java \
classpath/java/lang/Package.java \
java/lang/PosixProcess.java \
classpath/java/lang/Process.java \
-java/lang/ProcessBuilder.java \
+classpath/java/lang/ProcessBuilder.java \
classpath/java/lang/Readable.java \
classpath/java/lang/Runnable.java \
java/lang/Runtime.java \
@@ -4304,6 +4309,7 @@ java/lang/VMClassLoader.java \
java/lang/VMCompiler.java \
java/lang/VMDouble.java \
java/lang/VMFloat.java \
+java/lang/VMProcess.java \
java/lang/VMThrowable.java \
classpath/java/lang/VerifyError.java \
classpath/java/lang/VirtualMachineError.java \
@@ -7196,7 +7202,7 @@ sun/reflect/Reflection.java
sun_reflect_header_files = $(patsubst %.java,%.h,$(sun_reflect_source_files))
sun_reflect_annotation_source_files = \
-classpath/sun/reflect/annotation/AnnotationInvocationHandler.java \
+sun/reflect/annotation/AnnotationInvocationHandler.java \
classpath/sun/reflect/annotation/AnnotationParser.java \
classpath/sun/reflect/annotation/AnnotationType.java \
classpath/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java \
@@ -7758,16 +7764,13 @@ property_files = \
classpath/resource/java/util/iso4217.properties \
classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties \
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
+ classpath/resource/sun/rmi/rmic/messages.properties \
+ classpath/resource/com/sun/tools/javac/messages.properties \
classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory.in \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiDeviceProvider \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileReader \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileWriter \
- classpath/resource/META-INF/services/javax.sound.sampled.spi.AudioFileReader \
- classpath/resource/META-INF/services/javax.xml.parsers.DocumentBuilderFactory \
- classpath/resource/META-INF/services/javax.xml.parsers.SAXParserFactory \
- classpath/resource/META-INF/services/javax.xml.parsers.TransformerFactory \
- classpath/resource/META-INF/services/org.relaxng.datatype.DatatypeLibraryFactory \
- classpath/resource/META-INF/services/org.xml.sax.driver
+ classpath/resource/META-INF/services/javax.sound.sampled.spi.AudioFileReader
omitted_headers = java/lang/ClassLoader.h java/lang/Thread.h \
java/lang/String.h java/lang/reflect/Constructor.h \
@@ -7779,6 +7782,7 @@ inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
java/nio/DirectByteBufferImpl$$ReadWrite.h \
java/nio/channels/Pipe$$SinkChannel.h \
java/nio/channels/Pipe$$SourceChannel.h \
+ java/lang/VMProcess$ImmediateEOFInputStream.h \
java/lang/reflect/Proxy$$ProxyData.h \
java/lang/reflect/Proxy$$ProxyType.h \
gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
@@ -7828,7 +7832,7 @@ gc_analyze_LINK = $(GCJLINK)
gc_analyze_LDADD = -L$(here)/.libs libgcj-tools.la libgcj.la
gc_analyze_DEPENDENCIES = libgcj-tools.la libgcj.la libgcj.spec
gij_SOURCES =
-gij_LDFLAGS = -rpath $(libdir)/gcj-$(gcc_version) -rpath $(toolexeclibdir) \
+gij_LDFLAGS = -rpath $(dbexecdir) -rpath $(toolexeclibdir) \
-shared-libgcc $(THREADLDFLAGS)
gij_LINK = $(GCJLINK)
@@ -7883,6 +7887,13 @@ gjavah_LDFLAGS = --main=gnu.classpath.tools.javah.Main \
gjavah_LINK = $(GCJLINK)
gjavah_LDADD = -L$(here)/.libs libgcj-tools.la
gjavah_DEPENDENCIES = libgcj-tools.la
+gcjh_SOURCES =
+gcjh_LDFLAGS = --main=gnu.classpath.tools.javah.GcjhMain \
+ -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
+
+gcjh_LINK = $(GCJLINK)
+gcjh_LDADD = -L$(here)/.libs libgcj-tools.la
+gcjh_DEPENDENCIES = libgcj-tools.la
gnative2ascii_SOURCES =
gnative2ascii_LDFLAGS = --main=gnu.classpath.tools.native2ascii.Native2ASCII \
-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS)
@@ -7994,6 +8005,7 @@ java/lang/natSystem.cc \
java/lang/natThread.cc \
java/lang/natThreadLocal.cc \
java/lang/natVMClassLoader.cc \
+java/lang/natVMProcess.cc \
java/lang/natVMThrowable.cc \
java/lang/ref/natReference.cc \
java/lang/reflect/natArray.cc \
@@ -8069,6 +8081,7 @@ AM_MAKEFLAGS = \
"exec_prefix=$(exec_prefix)" \
"infodir=$(infodir)" \
"libdir=$(libdir)" \
+ "mandir=$(mandir)" \
"prefix=$(prefix)" \
"gxx_include_dir=$(gxx_include_dir)" \
"AR=$(AR)" \
@@ -8505,6 +8518,8 @@ java/lang/natThreadLocal.lo: java/lang/$(am__dirstamp) \
java/lang/$(DEPDIR)/$(am__dirstamp)
java/lang/natVMClassLoader.lo: java/lang/$(am__dirstamp) \
java/lang/$(DEPDIR)/$(am__dirstamp)
+java/lang/natVMProcess.lo: java/lang/$(am__dirstamp) \
+ java/lang/$(DEPDIR)/$(am__dirstamp)
java/lang/natVMThrowable.lo: java/lang/$(am__dirstamp) \
java/lang/$(DEPDIR)/$(am__dirstamp)
java/lang/ref/$(am__dirstamp):
@@ -8714,6 +8729,9 @@ gnu/gcj/tools/gcj_dbtool/natMain.$(OBJEXT): \
gcj-dbtool$(EXEEXT): $(gcj_dbtool_OBJECTS) $(gcj_dbtool_DEPENDENCIES)
@rm -f gcj-dbtool$(EXEEXT)
$(gcj_dbtool_LINK) $(gcj_dbtool_LDFLAGS) $(gcj_dbtool_OBJECTS) $(gcj_dbtool_LDADD) $(LIBS)
+gcjh$(EXEEXT): $(gcjh_OBJECTS) $(gcjh_DEPENDENCIES)
+ @rm -f gcjh$(EXEEXT)
+ $(gcjh_LINK) $(gcjh_LDFLAGS) $(gcjh_OBJECTS) $(gcjh_LDADD) $(LIBS)
gnu/gcj/convert/gen-from-JIS.$(OBJEXT): \
gnu/gcj/convert/$(am__dirstamp) \
gnu/gcj/convert/$(DEPDIR)/$(am__dirstamp)
@@ -8952,6 +8970,8 @@ mostlyclean-compile:
-rm -f java/lang/natVMDouble.lo
-rm -f java/lang/natVMFloat.$(OBJEXT)
-rm -f java/lang/natVMFloat.lo
+ -rm -f java/lang/natVMProcess.$(OBJEXT)
+ -rm -f java/lang/natVMProcess.lo
-rm -f java/lang/natVMThrowable.$(OBJEXT)
-rm -f java/lang/natVMThrowable.lo
-rm -f java/lang/ref/natReference.$(OBJEXT)
@@ -9104,6 +9124,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMClassLoader.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMDouble.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMFloat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMProcess.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/$(DEPDIR)/natVMThrowable.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/ref/$(DEPDIR)/natReference.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@java/lang/reflect/$(DEPDIR)/natArray.Plo@am__quote@
@@ -11059,7 +11080,7 @@ java/io.list: $(java_io_source_files)
java/lang.list: $(java_lang_source_files)
@$(mkinstalldirs) $(dir $@)
- echo $(srcdir)/classpath/lib/java/lang/*.class | tr ' ' '\n' | fgrep -v Object.class | fgrep -v Class.class | grep -v '[^/]Process' > java/lang.list
+ echo $(srcdir)/classpath/lib/java/lang/*.class | tr ' ' '\n' | fgrep -v Object.class | fgrep -v Class.class | egrep -v '(Ecos|Posix|Win32)Process' > java/lang.list
-include java/lang.deps
@@ -11827,9 +11848,10 @@ $(libgcj_la_OBJECTS) $(gcj_dbtool_OBJECTS) $(xlib_nat_files): headers.stamp
$(libgij_la_OBJECTS): headers.stamp
$(libjvm_la_OBJECTS): headers.stamp
-# No install-html support yet.
-.PHONY: install-html
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Multilib support.
.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
diff --git a/libjava/boehm.cc b/libjava/boehm.cc
index 19d7e53133e..66860dd50da 100644
--- a/libjava/boehm.cc
+++ b/libjava/boehm.cc
@@ -1,6 +1,6 @@
// boehm.cc - interface between libjava and Boehm GC.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation
This file is part of libgcj.
@@ -380,6 +380,29 @@ _Jv_AllocRawObj (jsize size)
return (void *) GC_MALLOC (size ? size : 1);
}
+typedef _Jv_ClosureList *closure_list_pointer;
+
+/* Release closures in a _Jv_ClosureList. */
+static void
+finalize_closure_list (GC_PTR obj, GC_PTR)
+{
+ _Jv_ClosureList **clpp = (_Jv_ClosureList **)obj;
+ _Jv_ClosureList::releaseClosures (clpp);
+}
+
+/* Allocate a double-indirect pointer to a _Jv_ClosureList that will
+ get garbage-collected after this double-indirect pointer becomes
+ unreachable by any other objects, including finalizable ones. */
+_Jv_ClosureList **
+_Jv_ClosureListFinalizer ()
+{
+ _Jv_ClosureList **clpp;
+ clpp = (_Jv_ClosureList **)_Jv_AllocBytes (sizeof (*clpp));
+ GC_REGISTER_FINALIZER_UNREACHABLE (clpp, finalize_closure_list,
+ NULL, NULL, NULL);
+ return clpp;
+}
+
static void
call_finalizer (GC_PTR obj, GC_PTR client_data)
{
diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog
index c95970572e6..985d95928d3 100644
--- a/libjava/classpath/ChangeLog
+++ b/libjava/classpath/ChangeLog
@@ -1,3 +1,40 @@
+2007-03-02 Mario Torre <neugens@limasoftware.net>
+
+ PR classpath/31017:
+ committed for Petteri Räty <betelgeuse@gentoo.org>
+ * configure.ac: fix broken build for gcj browser plugin
+
+2007-02-20 Jakub Jelinek <jakub@redhat.com>
+
+ * java/util/Date.java (parse): Properly parse 09:01:02 as
+ hours/minutes/seconds, not as hours/minutes/year.
+ * java/util/SimpleTimeZone.java (SimpleTimeZone): Simplify
+ {start,end}TimeMode constructor by calling shorter constructor,
+ set {start,end}TimeMode fields after it returns.
+ (setStartRule): Don't adjust startTime into WALL_TIME. Set
+ startTimeMode to WALL_TIME.
+ (endStartRule): Similarly.
+ (getOffset): Handle properly millis + dstOffset overflowing into the
+ next day. Adjust startTime resp. endTime based on startTimeMode
+ resp. endTimeMode.
+ * java/util/TimeZone.java (zoneinfo_dir, availableIDs, aliases0): New
+ static fields.
+ (timezones): Remove synchronized keyword. Set zoneinfo_dir.
+ If non-null, set up aliases0 and don't put anything into
+ timezones0.
+ (defaultZone): Call getTimeZone instead of timezones().get.
+ (getDefaultTimeZone): Fix parsing of EST5 or EST5EDT6. Use
+ getTimeZoneInternal instead of timezones().get.
+ (parseTime): Parse correctly hour:minute.
+ (getTimeZoneInternal): New private method.
+ (getTimeZone): Do the custom ID checking first, canonicalize
+ ID for custom IDs as required by documentation. Call
+ getTimeZoneInternal to handle the rest.
+ (getAvailableIDs(int)): Add locking. Handle zoneinfo_dir != null.
+ (getAvailableIDs(File,String,ArrayList)): New private method.
+ (getAvailableIDs()): Add locking. Handle zoneinfo_dir != null.
+ * gnu/java/util/ZoneInfo.java: New file.
+
2007-02-20 Matthias Klose <doko@ubuntu.com>
* doc/Makefile.am: Add rules to build and install man pages
diff --git a/libjava/classpath/ChangeLog.gcj b/libjava/classpath/ChangeLog.gcj
index b76844ae590..122f83f3988 100644
--- a/libjava/classpath/ChangeLog.gcj
+++ b/libjava/classpath/ChangeLog.gcj
@@ -1,3 +1,49 @@
+2007-03-09 Gary Benson <gbenson@redhat.com>
+ Chris Burdess <dog@gnu.org>
+
+ PR classpath/30831
+ * gnu/xml/dom/ls/SAXEventSink.java: Only set extended document
+ properties when reader is available.
+
+2007-03-08 Gary Benson <gbenson@redhat.com>
+
+ PR classpath/30983:
+ * gnu/xml/dom/ls/DomLSParser.java (getInputSource):
+ Do not use the entity resolver to resolve the top-level document.
+
+2007-03-07 Gary Benson <gbenson@redhat.com>
+
+ PR classpath/30906:
+ * resource/META-INF/services/org.w3c.dom.DOMImplementationSourceList:
+ New file.
+
+2007-03-06 Matthias Klose <doko@ubuntu.com>
+
+ * doc/Makefile.am(gkeytool.pod): Don't use sed -i.
+ * doc/Makefile.in: Regenerate.
+
+2007-03-06 Tom Tromey <tromey@redhat.com>
+
+ * tools/gnu/classpath/tools/javah/Main.java (getName): New
+ method.
+ (getParser): Now protected. Use getName. Add '-v' alias for
+ --verbose.
+ (postParse): New method.
+ (run): Now protected. Use postParse.
+ * tools/gnu/classpath/tools/javah/GcjhMain.java: New file.
+ * tools/Makefile.in: Rebuilt.
+ * tools/Makefile.am: Remove vm-tools.lst before creating it.
+
+2007-03-05 Matthias Klose <doko@ubuntu.com>
+
+ * doc/Makefile.am(man_MANS): Add $(TOOLS_MANFILES).
+ * doc/Makefile.in: Regenerate.
+
+2007-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ * java/util/TimeZone.java (getDefaultDisplayName): Don't
+ check if TimeZone is instanceof SimpleTimeZone.
+
2007-02-21 Gary Benson <gbenson@redhat.com>
* java/util/GregorianCalendar.java,
diff --git a/libjava/classpath/INSTALL b/libjava/classpath/INSTALL
index 27bb7c0d225..50a524b6236 100644
--- a/libjava/classpath/INSTALL
+++ b/libjava/classpath/INSTALL
@@ -111,6 +111,9 @@ Suggested Software
- fluidsynth: a real-time SoundFont 2 based soft-synth
http://www.fluidsynth.org/
+ For enabling the com.sun.tools.javac support in tools.zip you
+ will a need jar file containing the Eclipse Java Compiler.
+ Otherwise com.sun.tools.javac will not be included in tools.zip.
This package was designed to use the GNU standard for configuration
and makefiles. To build and install do the following:
@@ -147,6 +150,8 @@ gives a complete list.
path to the jay executable
--with-glibj-zip=ABS.PATH
use prebuilt glibj.zip class library
+ --with-ecj-jar=ABS.PATH specify jar file containing the Eclipse Java
+ Compiler
For more flags run configure --help.
diff --git a/libjava/classpath/Makefile.in b/libjava/classpath/Makefile.in
index bcc41f74a0f..cc6247f6856 100644
--- a/libjava/classpath/Makefile.in
+++ b/libjava/classpath/Makefile.in
@@ -153,6 +153,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -164,6 +165,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/configure b/libjava/classpath/configure
index 11f5706a59f..ad005c18fd3 100755
--- a/libjava/classpath/configure
+++ b/libjava/classpath/configure
@@ -312,7 +312,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE multi_basedir LIBVERSION CLASSPATH_MODULE CLASSPATH_CONVENIENCE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_COLLECTIONS_TRUE CREATE_COLLECTIONS_FALSE CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE CREATE_GCONF_PEER_LIBRARIES_TRUE CREATE_GCONF_PEER_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE CREATE_PLUGIN_TRUE CREATE_PLUGIN_FALSE toolexeclibdir nativeexeclibdir glibjdir VM_BINARY FOUND_CACAO_TRUE FOUND_CACAO_FALSE CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE CREATE_WRAPPERS_TRUE CREATE_WRAPPERS_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP PERL COLLECTIONS_PREFIX LIBMAGIC LIBICONV LTLIBICONV WARNING_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS FREETYPE2_CFLAGS FREETYPE2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS XTEST_LIBS GCONF_CFLAGS GCONF_LIBS GDK_CFLAGS GDK_LIBS QT_CFLAGS QT_LIBS MOC MOZILLA_CFLAGS MOZILLA_LIBS GLIB_CFLAGS GLIB_LIBS PLUGIN_DIR USER_JAVAH USER_SPECIFIED_JAVAH_TRUE USER_SPECIFIED_JAVAH_FALSE CLASSPATH_INCLUDES GCJ JIKES JIKESENCODING JIKESWARNINGS KJC GCJX ECJ FOUND_GCJ_TRUE FOUND_GCJ_FALSE FOUND_JIKES_TRUE FOUND_JIKES_FALSE FOUND_ECJ_TRUE FOUND_ECJ_FALSE FOUND_KJC_TRUE FOUND_KJC_FALSE FOUND_GCJX_TRUE FOUND_GCJX_FALSE USER_CLASSLIB USER_SPECIFIED_CLASSLIB_TRUE USER_SPECIFIED_CLASSLIB_FALSE vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP FASTJAR INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE USE_PREBUILT_GLIBJ_ZIP_TRUE USE_PREBUILT_GLIBJ_ZIP_FALSE PATH_TO_GLIBJ_ZIP USE_ESCHER_TRUE USE_ESCHER_FALSE PATH_TO_ESCHER ENABLE_LOCAL_SOCKETS_TRUE ENABLE_LOCAL_SOCKETS_FALSE DEFAULT_PREFS_PEER LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE multi_basedir LIBVERSION CLASSPATH_MODULE CLASSPATH_CONVENIENCE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CREATE_COLLECTIONS_TRUE CREATE_COLLECTIONS_FALSE CREATE_JNI_LIBRARIES_TRUE CREATE_JNI_LIBRARIES_FALSE CREATE_CORE_JNI_LIBRARIES_TRUE CREATE_CORE_JNI_LIBRARIES_FALSE CREATE_GCONF_PEER_LIBRARIES_TRUE CREATE_GCONF_PEER_LIBRARIES_FALSE default_toolkit CREATE_XMLJ_LIBRARY_TRUE CREATE_XMLJ_LIBRARY_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP CREATE_ALSA_LIBRARIES_TRUE CREATE_ALSA_LIBRARIES_FALSE CREATE_DSSI_LIBRARIES_TRUE CREATE_DSSI_LIBRARIES_FALSE CREATE_GTK_PEER_LIBRARIES_TRUE CREATE_GTK_PEER_LIBRARIES_FALSE CREATE_QT_PEER_LIBRARIES_TRUE CREATE_QT_PEER_LIBRARIES_FALSE CREATE_PLUGIN_TRUE CREATE_PLUGIN_FALSE toolexeclibdir nativeexeclibdir glibjdir VM_BINARY FOUND_CACAO_TRUE FOUND_CACAO_FALSE CREATE_JNI_HEADERS_TRUE CREATE_JNI_HEADERS_FALSE CREATE_WRAPPERS_TRUE CREATE_WRAPPERS_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP PERL COLLECTIONS_PREFIX LIBMAGIC LIBICONV LTLIBICONV WARNING_CFLAGS STRICT_WARNING_CFLAGS ERROR_CFLAGS PKG_CONFIG XML_CFLAGS XML_LIBS XSLT_CFLAGS XSLT_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS GTK_CFLAGS GTK_LIBS FREETYPE2_CFLAGS FREETYPE2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS XTEST_LIBS GCONF_CFLAGS GCONF_LIBS GDK_CFLAGS GDK_LIBS QT_CFLAGS QT_LIBS MOC MOZILLA_CFLAGS MOZILLA_LIBS GLIB_CFLAGS GLIB_LIBS PLUGIN_DIR USER_JAVAH USER_SPECIFIED_JAVAH_TRUE USER_SPECIFIED_JAVAH_FALSE CLASSPATH_INCLUDES GCJ JIKES JIKESENCODING JIKESWARNINGS KJC GCJX ECJ FOUND_GCJ_TRUE FOUND_GCJ_FALSE FOUND_JIKES_TRUE FOUND_JIKES_FALSE FOUND_ECJ_TRUE FOUND_ECJ_FALSE FOUND_KJC_TRUE FOUND_KJC_FALSE FOUND_GCJX_TRUE FOUND_GCJX_FALSE USER_CLASSLIB USER_SPECIFIED_CLASSLIB_TRUE USER_SPECIFIED_CLASSLIB_FALSE vm_classes MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBDEBUG INIT_LOAD_LIBRARY ECJ_JAR FOUND_ECJ_JAR_TRUE FOUND_ECJ_JAR_FALSE JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION REMOVE MKDIR CP DATE FIND ZIP FASTJAR INSTALL_GLIBJ_ZIP_TRUE INSTALL_GLIBJ_ZIP_FALSE INSTALL_CLASS_FILES_TRUE INSTALL_CLASS_FILES_FALSE BUILD_CLASS_FILES_TRUE BUILD_CLASS_FILES_FALSE EXAMPLESDIR GJDOC CREATE_API_DOCS_TRUE CREATE_API_DOCS_FALSE JAY JAY_SKELETON REGEN_PARSERS_TRUE REGEN_PARSERS_FALSE USE_PREBUILT_GLIBJ_ZIP_TRUE USE_PREBUILT_GLIBJ_ZIP_FALSE PATH_TO_GLIBJ_ZIP USE_ESCHER_TRUE USE_ESCHER_FALSE PATH_TO_ESCHER ENABLE_LOCAL_SOCKETS_TRUE ENABLE_LOCAL_SOCKETS_FALSE DEFAULT_PREFS_PEER LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -946,6 +946,8 @@ Optional Packages:
--with-ecj bytecode compilation with ecj
--with-classpath specify path to a classes.zip like file
--with-vm-classes specify path to VM override source files
+ --with-ecj-jar=ABS.PATH specify jar file containing the Eclipse Java
+ Compiler
--with-fastjar=PATH define to use a fastjar style tool
--with-glibj define what to install (zip|flat|both|none|build)
[default=zip]
@@ -5755,7 +5757,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
case $host in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5758 "configure"' > conftest.$ac_ext
+ echo '#line 5760 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -13521,23 +13523,23 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for firefox-plugin" >&5
-echo $ECHO_N "checking for firefox-plugin... $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for firefox-plugin firefox-xpcom" >&5
+echo $ECHO_N "checking for firefox-plugin firefox-xpcom... $ECHO_C" >&6
- if $PKG_CONFIG --exists "firefox-plugin" ; then
+ if $PKG_CONFIG --exists "firefox-plugin firefox-xpcom" ; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
succeeded=yes
echo "$as_me:$LINENO: checking MOZILLA_CFLAGS" >&5
echo $ECHO_N "checking MOZILLA_CFLAGS... $ECHO_C" >&6
- MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "firefox-plugin"`
+ MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "firefox-plugin firefox-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_CFLAGS" >&5
echo "${ECHO_T}$MOZILLA_CFLAGS" >&6
echo "$as_me:$LINENO: checking MOZILLA_LIBS" >&5
echo $ECHO_N "checking MOZILLA_LIBS... $ECHO_C" >&6
- MOZILLA_LIBS=`$PKG_CONFIG --libs "firefox-plugin"`
+ MOZILLA_LIBS=`$PKG_CONFIG --libs "firefox-plugin firefox-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_LIBS" >&5
echo "${ECHO_T}$MOZILLA_LIBS" >&6
else
@@ -13545,7 +13547,7 @@ echo "${ECHO_T}$MOZILLA_LIBS" >&6
MOZILLA_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
- MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "firefox-plugin"`
+ MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "firefox-plugin firefox-xpcom"`
fi
@@ -13619,23 +13621,23 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for xulrunner-plugin" >&5
-echo $ECHO_N "checking for xulrunner-plugin... $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for xulrunner-plugin xulrunner-xpcom" >&5
+echo $ECHO_N "checking for xulrunner-plugin xulrunner-xpcom... $ECHO_C" >&6
- if $PKG_CONFIG --exists "xulrunner-plugin" ; then
+ if $PKG_CONFIG --exists "xulrunner-plugin xulrunner-xpcom" ; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
succeeded=yes
echo "$as_me:$LINENO: checking MOZILLA_CFLAGS" >&5
echo $ECHO_N "checking MOZILLA_CFLAGS... $ECHO_C" >&6
- MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "xulrunner-plugin"`
+ MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "xulrunner-plugin xulrunner-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_CFLAGS" >&5
echo "${ECHO_T}$MOZILLA_CFLAGS" >&6
echo "$as_me:$LINENO: checking MOZILLA_LIBS" >&5
echo $ECHO_N "checking MOZILLA_LIBS... $ECHO_C" >&6
- MOZILLA_LIBS=`$PKG_CONFIG --libs "xulrunner-plugin"`
+ MOZILLA_LIBS=`$PKG_CONFIG --libs "xulrunner-plugin xulrunner-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_LIBS" >&5
echo "${ECHO_T}$MOZILLA_LIBS" >&6
else
@@ -13643,7 +13645,7 @@ echo "${ECHO_T}$MOZILLA_LIBS" >&6
MOZILLA_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
- MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xulrunner-plugin"`
+ MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xulrunner-plugin xulrunner-xpcom"`
fi
@@ -13717,23 +13719,23 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for mozilla-firefox-plugin" >&5
-echo $ECHO_N "checking for mozilla-firefox-plugin... $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for mozilla-firefox-plugin mozilla-firefox-xpcom" >&5
+echo $ECHO_N "checking for mozilla-firefox-plugin mozilla-firefox-xpcom... $ECHO_C" >&6
- if $PKG_CONFIG --exists "mozilla-firefox-plugin" ; then
+ if $PKG_CONFIG --exists "mozilla-firefox-plugin mozilla-firefox-xpcom" ; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
succeeded=yes
echo "$as_me:$LINENO: checking MOZILLA_CFLAGS" >&5
echo $ECHO_N "checking MOZILLA_CFLAGS... $ECHO_C" >&6
- MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "mozilla-firefox-plugin"`
+ MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "mozilla-firefox-plugin mozilla-firefox-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_CFLAGS" >&5
echo "${ECHO_T}$MOZILLA_CFLAGS" >&6
echo "$as_me:$LINENO: checking MOZILLA_LIBS" >&5
echo $ECHO_N "checking MOZILLA_LIBS... $ECHO_C" >&6
- MOZILLA_LIBS=`$PKG_CONFIG --libs "mozilla-firefox-plugin"`
+ MOZILLA_LIBS=`$PKG_CONFIG --libs "mozilla-firefox-plugin mozilla-firefox-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_LIBS" >&5
echo "${ECHO_T}$MOZILLA_LIBS" >&6
else
@@ -13741,7 +13743,7 @@ echo "${ECHO_T}$MOZILLA_LIBS" >&6
MOZILLA_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
- MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "mozilla-firefox-plugin"`
+ MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "mozilla-firefox-plugin mozilla-firefox-xpcom"`
fi
@@ -13815,23 +13817,23 @@ fi
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- echo "$as_me:$LINENO: checking for seamonkey-plugin" >&5
-echo $ECHO_N "checking for seamonkey-plugin... $ECHO_C" >&6
+ echo "$as_me:$LINENO: checking for seamonkey-plugin seamonkey-xpcom" >&5
+echo $ECHO_N "checking for seamonkey-plugin seamonkey-xpcom... $ECHO_C" >&6
- if $PKG_CONFIG --exists "seamonkey-plugin" ; then
+ if $PKG_CONFIG --exists "seamonkey-plugin seamonkey-xpcom" ; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
succeeded=yes
echo "$as_me:$LINENO: checking MOZILLA_CFLAGS" >&5
echo $ECHO_N "checking MOZILLA_CFLAGS... $ECHO_C" >&6
- MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "seamonkey-plugin"`
+ MOZILLA_CFLAGS=`$PKG_CONFIG --cflags "seamonkey-plugin seamonkey-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_CFLAGS" >&5
echo "${ECHO_T}$MOZILLA_CFLAGS" >&6
echo "$as_me:$LINENO: checking MOZILLA_LIBS" >&5
echo $ECHO_N "checking MOZILLA_LIBS... $ECHO_C" >&6
- MOZILLA_LIBS=`$PKG_CONFIG --libs "seamonkey-plugin"`
+ MOZILLA_LIBS=`$PKG_CONFIG --libs "seamonkey-plugin seamonkey-xpcom"`
echo "$as_me:$LINENO: result: $MOZILLA_LIBS" >&5
echo "${ECHO_T}$MOZILLA_LIBS" >&6
else
@@ -13839,7 +13841,7 @@ echo "${ECHO_T}$MOZILLA_LIBS" >&6
MOZILLA_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
- MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "seamonkey-plugin"`
+ MOZILLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "seamonkey-plugin seamonkey-xpcom"`
fi
@@ -16115,6 +16117,28 @@ fi;
+
+# Check whether --with-ecj-jar or --without-ecj-jar was given.
+if test "${with_ecj_jar+set}" = set; then
+ withval="$with_ecj_jar"
+ ECJ_JAR=$withval
+else
+ if test -f $multi_basedir/ecj.jar; then
+ ECJ_JAR='$(jardir)/ecj.jar'
+ fi
+fi;
+
+
+
+if test "$ECJ_JAR" != ""; then
+ FOUND_ECJ_JAR_TRUE=
+ FOUND_ECJ_JAR_FALSE='#'
+else
+ FOUND_ECJ_JAR_TRUE='#'
+ FOUND_ECJ_JAR_FALSE=
+fi
+
+
# Check whether --enable-java-lang-system-explicit-initialization or --disable-java-lang-system-explicit-initialization was given.
if test "${enable_java_lang_system_explicit_initialization+set}" = set; then
enableval="$enable_java_lang_system_explicit_initialization"
@@ -20252,6 +20276,13 @@ echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${FOUND_ECJ_JAR_TRUE}" && test -z "${FOUND_ECJ_JAR_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"FOUND_ECJ_JAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"FOUND_ECJ_JAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${INSTALL_GLIBJ_ZIP_TRUE}" && test -z "${INSTALL_GLIBJ_ZIP_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"INSTALL_GLIBJ_ZIP\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -21109,6 +21140,9 @@ s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
s,@MAINT@,$MAINT,;t t
s,@LIBDEBUG@,$LIBDEBUG,;t t
s,@INIT_LOAD_LIBRARY@,$INIT_LOAD_LIBRARY,;t t
+s,@ECJ_JAR@,$ECJ_JAR,;t t
+s,@FOUND_ECJ_JAR_TRUE@,$FOUND_ECJ_JAR_TRUE,;t t
+s,@FOUND_ECJ_JAR_FALSE@,$FOUND_ECJ_JAR_FALSE,;t t
s,@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@,$JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION,;t t
s,@REMOVE@,$REMOVE,;t t
s,@MKDIR@,$MKDIR,;t t
diff --git a/libjava/classpath/configure.ac b/libjava/classpath/configure.ac
index 5464a24e417..c9e03abafb9 100644
--- a/libjava/classpath/configure.ac
+++ b/libjava/classpath/configure.ac
@@ -613,16 +613,16 @@ if test "x${COMPILE_JNI}" = xyes; then
if test "x${COMPILE_PLUGIN}" = xyes; then
PKG_CHECK_MODULES(MOZILLA, mozilla-plugin, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
if test "x${MOZILLA_FOUND}" = xno; then
- PKG_CHECK_MODULES(MOZILLA, firefox-plugin, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
+ PKG_CHECK_MODULES(MOZILLA, firefox-plugin firefox-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
fi
if test "x${MOZILLA_FOUND}" = xno; then
- PKG_CHECK_MODULES(MOZILLA, xulrunner-plugin, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
+ PKG_CHECK_MODULES(MOZILLA, xulrunner-plugin xulrunner-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
fi
if test "x${MOZILLA_FOUND}" = xno; then
- PKG_CHECK_MODULES(MOZILLA, mozilla-firefox-plugin, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
+ PKG_CHECK_MODULES(MOZILLA, mozilla-firefox-plugin mozilla-firefox-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
fi
if test "x${MOZILLA_FOUND}" = xno; then
- PKG_CHECK_MODULES(MOZILLA, seamonkey-plugin, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
+ PKG_CHECK_MODULES(MOZILLA, seamonkey-plugin seamonkey-xpcom, [MOZILLA_FOUND=yes], [MOZILLA_FOUND=no])
fi
PKG_CHECK_MODULES(GLIB, glib-2.0)
@@ -710,6 +710,28 @@ AC_SUBST(INIT_LOAD_LIBRARY)
dnl -----------------------------------------------------------
+dnl Specify the jar file containing the Eclipse Java Compiler. If
+dnl this option is not specified then the com.sun.tools.javac
+dnl implementation will not be included in tools.zip.
+dnl -----------------------------------------------------------
+dnl GCJ LOCAL: default to $multi_basedir/ecj.jar
+dnl In the default case where $multi_basedir/ecj.jar is found
+dnl $(jardir)/ecj.jar will not expand properly in GNU Classpath's
+dnl gnu/classpath/Configuration.java. That is OK though since libjava's
+dnl gnu/classpath/Configuration.java overrides GNU Classpath's and
+dnl ECJ_JAR_FILE will be properly expanded in libjava's
+dnl gnu/classpath/natConfiguration.cc.
+AC_ARG_WITH([ecj-jar],
+ [AS_HELP_STRING([--with-ecj-jar=ABS.PATH],
+ [specify jar file containing the Eclipse Java Compiler])],
+ [ECJ_JAR=$withval],
+ [if test -f $multi_basedir/ecj.jar; then
+ ECJ_JAR='$(jardir)/ecj.jar'
+ fi])
+AC_SUBST(ECJ_JAR)
+AM_CONDITIONAL(FOUND_ECJ_JAR, test "$ECJ_JAR" != "")
+
+dnl -----------------------------------------------------------
dnl Should the VM explicitly run class initialization subfunctions for
dnl java.lang.System? (default is false -- the subfunctions will be run
dnl automatically by the class initializer)
diff --git a/libjava/classpath/doc/Makefile.am b/libjava/classpath/doc/Makefile.am
index b5d057ad912..7f8d4b089a6 100644
--- a/libjava/classpath/doc/Makefile.am
+++ b/libjava/classpath/doc/Makefile.am
@@ -13,7 +13,7 @@ EXTRA_DIST = README.jaxp $(man_MANS)
docs: cp-hacking.ps cp-vmintegration.ps cp-tools.ps
-#man_MANS = $(TOOLS_MANFILES)
+man_MANS = $(TOOLS_MANFILES)
TOOLS_MANFILES = \
gappletviewer.1 \
gjar.1 \
@@ -67,10 +67,10 @@ gjavah.pod: $(srcdir)/cp-tools.texinfo
# hack around the cross references and the enumeration
gkeytool.pod: $(srcdir)/cp-tools.texinfo
- -$(TEXI2POD) -D gkeytool < $< > $@
- sed -i -e 's/^For more details.*/See I<Common Options> for more details./' \
+ -$(TEXI2POD) -D gkeytool < $< \
+ | sed -e 's/^For more details.*/See I<Common Options> for more details./' \
-e 's/1\.<\([^>]*\)>/- \1/' \
- $@
+ > $@
gnative2ascii.pod: $(srcdir)/cp-tools.texinfo
-$(TEXI2POD) -D gnative2ascii < $< > $@
diff --git a/libjava/classpath/doc/Makefile.in b/libjava/classpath/doc/Makefile.in
index 2d52813866f..7ff3f75b6ea 100644
--- a/libjava/classpath/doc/Makefile.in
+++ b/libjava/classpath/doc/Makefile.in
@@ -63,6 +63,10 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
@@ -126,6 +130,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -137,6 +142,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
@@ -297,8 +304,7 @@ toolexeclibdir = @toolexeclibdir@
vm_classes = @vm_classes@
SUBDIRS = api
EXTRA_DIST = README.jaxp $(man_MANS)
-
-#man_MANS = $(TOOLS_MANFILES)
+man_MANS = $(TOOLS_MANFILES)
TOOLS_MANFILES = \
gappletviewer.1 \
gjar.1 \
@@ -359,6 +365,51 @@ clean-libtool:
distclean-libtool:
-rm -f libtool
uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@@ -536,9 +587,12 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile
+all-am: Makefile $(MANS)
installdirs: installdirs-recursive
installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
@@ -582,13 +636,13 @@ info: info-recursive
info-am:
-install-data-am:
+install-data-am: install-man
install-exec-am:
install-info: install-info-recursive
-install-man:
+install-man: install-man1
installcheck-am:
@@ -608,22 +662,25 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-info-am
+uninstall-am: uninstall-info-am uninstall-man
uninstall-info: uninstall-info-recursive
+uninstall-man: uninstall-man1
+
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
clean clean-generic clean-libtool clean-recursive ctags \
ctags-recursive distclean distclean-generic distclean-libtool \
distclean-recursive distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am install-info \
- install-info-am install-man install-strip installcheck \
- installcheck-am installdirs installdirs-am maintainer-clean \
- maintainer-clean-generic maintainer-clean-recursive \
- mostlyclean mostlyclean-generic mostlyclean-libtool \
- mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
- uninstall uninstall-am uninstall-info-am
+ install-info-am install-man install-man1 install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
+ uninstall-man uninstall-man1
%.dvi : %.texinfo
@@ -667,10 +724,10 @@ gjavah.pod: $(srcdir)/cp-tools.texinfo
# hack around the cross references and the enumeration
gkeytool.pod: $(srcdir)/cp-tools.texinfo
- -$(TEXI2POD) -D gkeytool < $< > $@
- sed -i -e 's/^For more details.*/See I<Common Options> for more details./' \
+ -$(TEXI2POD) -D gkeytool < $< \
+ | sed -e 's/^For more details.*/See I<Common Options> for more details./' \
-e 's/1\.<\([^>]*\)>/- \1/' \
- $@
+ > $@
gnative2ascii.pod: $(srcdir)/cp-tools.texinfo
-$(TEXI2POD) -D gnative2ascii < $< > $@
diff --git a/libjava/classpath/doc/api/Makefile.in b/libjava/classpath/doc/api/Makefile.in
index d2fef966589..36f02618536 100644
--- a/libjava/classpath/doc/api/Makefile.in
+++ b/libjava/classpath/doc/api/Makefile.in
@@ -119,6 +119,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -130,6 +131,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/examples/Makefile.in b/libjava/classpath/examples/Makefile.in
index 95cfeb3b0bc..8bc5a159fc2 100644
--- a/libjava/classpath/examples/Makefile.in
+++ b/libjava/classpath/examples/Makefile.in
@@ -128,6 +128,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -139,6 +140,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/external/Makefile.in b/libjava/classpath/external/Makefile.in
index 48d9c4c1f21..aabc4508d17 100644
--- a/libjava/classpath/external/Makefile.in
+++ b/libjava/classpath/external/Makefile.in
@@ -126,6 +126,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -137,6 +138,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/external/jsr166/Makefile.in b/libjava/classpath/external/jsr166/Makefile.in
index 4fca2bc0fb2..68b8933953d 100644
--- a/libjava/classpath/external/jsr166/Makefile.in
+++ b/libjava/classpath/external/jsr166/Makefile.in
@@ -117,6 +117,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -128,6 +129,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/external/relaxngDatatype/Makefile.in b/libjava/classpath/external/relaxngDatatype/Makefile.in
index 84f43046b21..f94e51a4ff2 100644
--- a/libjava/classpath/external/relaxngDatatype/Makefile.in
+++ b/libjava/classpath/external/relaxngDatatype/Makefile.in
@@ -117,6 +117,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -128,6 +129,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/external/sax/Makefile.in b/libjava/classpath/external/sax/Makefile.in
index 0985375e00c..8e3b10f3184 100644
--- a/libjava/classpath/external/sax/Makefile.in
+++ b/libjava/classpath/external/sax/Makefile.in
@@ -117,6 +117,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -128,6 +129,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/external/w3c_dom/Makefile.in b/libjava/classpath/external/w3c_dom/Makefile.in
index 5a3dabf00f7..4c22e471bc0 100644
--- a/libjava/classpath/external/w3c_dom/Makefile.in
+++ b/libjava/classpath/external/w3c_dom/Makefile.in
@@ -117,6 +117,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -128,6 +129,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/gnu/classpath/Configuration.java.in b/libjava/classpath/gnu/classpath/Configuration.java.in
index 7f490d52951..7fb86409330 100644
--- a/libjava/classpath/gnu/classpath/Configuration.java.in
+++ b/libjava/classpath/gnu/classpath/Configuration.java.in
@@ -95,4 +95,10 @@ public interface Configuration
*/
boolean JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION =
@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@;
+
+ /**
+ * The Eclipse Java Compiler jar file for use by the
+ * com.sun.tools.javac implementation in tools.zip.
+ */
+ String ECJ_JAR = "@ECJ_JAR@";
}
diff --git a/libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java b/libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java
new file mode 100644
index 00000000000..5bf383f5841
--- /dev/null
+++ b/libjava/classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java
@@ -0,0 +1,56 @@
+/* AbsentInformationException.java -- information not present exception
+ Copyright (C) 2007 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath.jdwp.exception;
+
+import gnu.classpath.jdwp.JdwpConstants;
+
+/**
+ * An exception thrown when the requested information is not available.
+ *
+ * @author Kyle Galloway (kgallowa@redhat.com)
+ */
+public class AbsentInformationException
+ extends JdwpException
+{
+ public AbsentInformationException(String str)
+ {
+ super(JdwpConstants.Error.ABSENT_INFORMATION, str);
+ }
+}
diff --git a/libjava/classpath/gnu/java/util/ZoneInfo.java b/libjava/classpath/gnu/java/util/ZoneInfo.java
new file mode 100644
index 00000000000..2146a321f40
--- /dev/null
+++ b/libjava/classpath/gnu/java/util/ZoneInfo.java
@@ -0,0 +1,1160 @@
+/* gnu.java.util.ZoneInfo
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.util;
+
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
+
+/**
+ * This class represents more advanced variant of java.util.SimpleTimeZone.
+ * It can handle zic(8) compiled transition dates plus uses a SimpleTimeZone
+ * for years beyond last precomputed transition. Before first precomputed
+ * transition it assumes no daylight saving was in effect.
+ * Timezones that never used daylight saving time should use just
+ * SimpleTimeZone instead of this class.
+ *
+ * This object is tightly bound to the Gregorian calendar. It assumes
+ * a regular seven days week, and the month lengths are that of the
+ * Gregorian Calendar.
+ *
+ * @see Calendar
+ * @see GregorianCalendar
+ * @see SimpleTimeZone
+ * @author Jakub Jelinek
+ */
+public class ZoneInfo extends TimeZone
+{
+ private static final int SECS_SHIFT = 22;
+ private static final long OFFSET_MASK = (1 << 21) - 1;
+ private static final int OFFSET_SHIFT = 64 - 21;
+ private static final long IS_DST = 1 << 21;
+
+ /**
+ * The raw time zone offset in milliseconds to GMT, ignoring
+ * daylight savings.
+ * @serial
+ */
+ private int rawOffset;
+
+ /**
+ * Cached DST savings for the last transition rule.
+ */
+ private int dstSavings;
+
+ /**
+ * Cached flag whether last transition rule uses DST saving.
+ */
+ private boolean useDaylight;
+
+ /**
+ * Array of encoded transitions.
+ * Transition time in UTC seconds since epoch is in the most
+ * significant 64 - SECS_SHIFT bits, then one bit flag
+ * whether DST is active and the least significant bits
+ * containing offset relative to rawOffset. Both the DST
+ * flag and relative offset apply to time before the transition
+ * and after or equal to previous transition if any.
+ * The array must be sorted.
+ */
+ private long[] transitions;
+
+ /**
+ * SimpleTimeZone rule which applies on or after the latest
+ * transition. If the DST changes are not expresible as a
+ * SimpleTimeZone rule, then the rule should just contain
+ * the standard time and no DST time.
+ */
+ private SimpleTimeZone lastRule;
+
+ /**
+ * Cached GMT SimpleTimeZone object for internal use in
+ * getOffset method.
+ */
+ private static SimpleTimeZone gmtZone = null;
+
+ static final long serialVersionUID = -3740626706860383657L;
+
+ /**
+ * Create a <code>ZoneInfo</code> with the given time offset
+ * from GMT and with daylight savings.
+ *
+ * @param rawOffset The time offset from GMT in milliseconds.
+ * @param id The identifier of this time zone.
+ * @param transitions Array of transition times in UTC seconds since
+ * Epoch in topmost 42 bits, below that 1 boolean bit whether the time
+ * before that transition used daylight saving and in bottommost 21
+ * bits relative daylight saving offset against rawOffset in seconds
+ * that applies before this transition.
+ * @param endRule SimpleTimeZone class describing the daylight saving
+ * rules after the last transition.
+ */
+ public ZoneInfo(int rawOffset, String id, long[] transitions,
+ SimpleTimeZone lastRule)
+ {
+ if (transitions == null || transitions.length < 1)
+ throw new IllegalArgumentException("transitions must not be null");
+ if (lastRule == null)
+ throw new IllegalArgumentException("lastRule must not be null");
+ this.rawOffset = rawOffset;
+ this.transitions = transitions;
+ this.lastRule = lastRule;
+ setID(id);
+ computeDSTSavings();
+ }
+
+ /**
+ * Gets the time zone offset, for current date, modified in case of
+ * daylight savings. This is the offset to add to UTC to get the local
+ * time.
+ *
+ * The day must be a positive number and dayOfWeek must be a positive value
+ * from Calendar. dayOfWeek is redundant, but must match the other values
+ * or an inaccurate result may be returned.
+ *
+ * @param era the era of the given date
+ * @param year the year of the given date
+ * @param month the month of the given date, 0 for January.
+ * @param day the day of month
+ * @param dayOfWeek the day of week; this must match the other fields.
+ * @param millis the millis in the day (in local standard time)
+ * @return the time zone offset in milliseconds.
+ * @throws IllegalArgumentException if arguments are incorrect.
+ */
+ public int getOffset(int era, int year, int month, int day, int dayOfWeek,
+ int millis)
+ {
+ if (gmtZone == null)
+ gmtZone = new SimpleTimeZone(0, "GMT");
+
+ if (dayOfWeek < Calendar.SUNDAY || dayOfWeek > Calendar.SATURDAY)
+ throw new IllegalArgumentException("dayOfWeek out of range");
+ if (month < Calendar.JANUARY || month > Calendar.DECEMBER)
+ throw new IllegalArgumentException("month out of range:" + month);
+
+ if (era != GregorianCalendar.AD)
+ return (int) (((transitions[0] << OFFSET_SHIFT) >> OFFSET_SHIFT) * 1000);
+
+ GregorianCalendar cal = new GregorianCalendar((TimeZone) gmtZone);
+ cal.set(year, month, day, 0, 0, 0);
+ if (cal.get(Calendar.DAY_OF_MONTH) != day)
+ throw new IllegalArgumentException("day out of range");
+
+ return getOffset(cal.getTimeInMillis() - rawOffset + millis);
+ }
+
+ private long findTransition(long secs)
+ {
+ if (secs < (transitions[0] >> SECS_SHIFT))
+ return transitions[0];
+
+ if (secs >= (transitions[transitions.length-1] >> SECS_SHIFT))
+ return Long.MAX_VALUE;
+
+ long val = (secs + 1) << SECS_SHIFT;
+ int lo = 1;
+ int hi = transitions.length;
+ int mid = 1;
+ while (lo < hi)
+ {
+ mid = (lo + hi) / 2;
+ // secs < (transitions[mid-1] >> SECS_SHIFT)
+ if (val <= transitions[mid-1])
+ hi = mid;
+ // secs >= (transitions[mid] >> SECS_SHIFT)
+ else if (val > transitions[mid])
+ lo = mid + 1;
+ else
+ break;
+ }
+ return transitions[mid];
+ }
+
+ /**
+ * Get the time zone offset for the specified date, modified in case of
+ * daylight savings. This is the offset to add to UTC to get the local
+ * time.
+ * @param date the date represented in millisecends
+ * since January 1, 1970 00:00:00 GMT.
+ */
+ public int getOffset(long date)
+ {
+ long d = (date >= 0 ? date / 1000 : (date + 1) / 1000 - 1);
+ long transition = findTransition(d);
+
+ // For times on or after last transition use lastRule.
+ if (transition == Long.MAX_VALUE)
+ return lastRule.getOffset(date);
+
+ return (int) (((transition << OFFSET_SHIFT) >> OFFSET_SHIFT) * 1000);
+ }
+
+ /**
+ * Returns the time zone offset to GMT in milliseconds, ignoring
+ * day light savings.
+ * @return the time zone offset.
+ */
+ public int getRawOffset()
+ {
+ return rawOffset;
+ }
+
+ /**
+ * Sets the standard time zone offset to GMT.
+ * @param rawOffset The time offset from GMT in milliseconds.
+ */
+ public void setRawOffset(int rawOffset)
+ {
+ this.rawOffset = rawOffset;
+ lastRule.setRawOffset(rawOffset);
+ }
+
+ private void computeDSTSavings()
+ {
+ if (lastRule.useDaylightTime())
+ {
+ dstSavings = lastRule.getDSTSavings();
+ useDaylight = true;
+ }
+ else
+ {
+ dstSavings = 0;
+ useDaylight = false;
+ // lastRule might say no DST is in effect simply because
+ // the DST rules are too complex for SimpleTimeZone, say
+ // for Asia/Jerusalem.
+ // Look at the last DST offset if it is newer than current time.
+ long currentSecs = System.currentTimeMillis() / 1000;
+ int i;
+ for (i = transitions.length - 1;
+ i >= 0 && currentSecs < (transitions[i] >> SECS_SHIFT);
+ i--)
+ if ((transitions[i] & IS_DST) != 0)
+ {
+ dstSavings = (int) (((transitions[i] << OFFSET_SHIFT)
+ >> OFFSET_SHIFT) * 1000)
+ - rawOffset;
+ useDaylight = true;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Gets the daylight savings offset. This is a positive offset in
+ * milliseconds with respect to standard time. Typically this
+ * is one hour, but for some time zones this may be half an our.
+ * @return the daylight savings offset in milliseconds.
+ */
+ public int getDSTSavings()
+ {
+ return dstSavings;
+ }
+
+ /**
+ * Returns if this time zone uses daylight savings time.
+ * @return true, if we use daylight savings time, false otherwise.
+ */
+ public boolean useDaylightTime()
+ {
+ return useDaylight;
+ }
+
+ /**
+ * Determines if the given date is in daylight savings time.
+ * @return true, if it is in daylight savings time, false otherwise.
+ */
+ public boolean inDaylightTime(Date date)
+ {
+ long d = date.getTime();
+ d = (d >= 0 ? d / 1000 : (d + 1) / 1000 - 1);
+ long transition = findTransition(d);
+
+ // For times on or after last transition use lastRule.
+ if (transition == Long.MAX_VALUE)
+ return lastRule.inDaylightTime(date);
+
+ return (transition & IS_DST) != 0;
+ }
+
+ /**
+ * Generates the hashCode for the SimpleDateFormat object. It is
+ * the rawOffset, possibly, if useDaylightSavings is true, xored
+ * with startYear, startMonth, startDayOfWeekInMonth, ..., endTime.
+ */
+ public synchronized int hashCode()
+ {
+ int hash = lastRule.hashCode();
+ // FIXME - hash transitions?
+ return hash;
+ }
+
+ public synchronized boolean equals(Object o)
+ {
+ if (! hasSameRules((TimeZone) o))
+ return false;
+
+ ZoneInfo zone = (ZoneInfo) o;
+ return getID().equals(zone.getID());
+ }
+
+ /**
+ * Test if the other time zone uses the same rule and only
+ * possibly differs in ID. This implementation for this particular
+ * class will return true if the other object is a ZoneInfo,
+ * the raw offsets and useDaylight are identical and if useDaylight
+ * is true, also the start and end datas are identical.
+ * @return true if this zone uses the same rule.
+ */
+ public boolean hasSameRules(TimeZone o)
+ {
+ if (this == o)
+ return true;
+ if (! (o instanceof ZoneInfo))
+ return false;
+ ZoneInfo zone = (ZoneInfo) o;
+ if (zone.hashCode() != hashCode() || rawOffset != zone.rawOffset)
+ return false;
+ if (! lastRule.equals(zone.lastRule))
+ return false;
+ // FIXME - compare transitions?
+ return true;
+ }
+
+ /**
+ * Returns a string representation of this ZoneInfo object.
+ * @return a string representation of this ZoneInfo object.
+ */
+ public String toString()
+ {
+ return getClass().getName() + "[" + "id=" + getID() + ",offset="
+ + rawOffset + ",transitions=" + transitions.length
+ + ",useDaylight=" + useDaylight
+ + (useDaylight ? (",dstSavings=" + dstSavings) : "")
+ + ",lastRule=" + lastRule.toString() + "]";
+ }
+
+ /**
+ * Reads zic(8) compiled timezone data file from file
+ * and returns a TimeZone class describing it, either
+ * SimpleTimeZone or ZoneInfo depending on whether
+ * it can be described by SimpleTimeZone rule or not.
+ */
+ public static TimeZone readTZFile(String id, String file)
+ {
+ DataInputStream dis = null;
+ try
+ {
+ FileInputStream fis = new FileInputStream(file);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ dis = new DataInputStream(bis);
+
+ // Make sure we are reading a tzfile.
+ byte[] tzif = new byte[5];
+ dis.readFully(tzif);
+ int tzif2 = 4;
+ if (tzif[0] == 'T' && tzif[1] == 'Z'
+ && tzif[2] == 'i' && tzif[3] == 'f')
+ {
+ if (tzif[4] >= '2')
+ tzif2 = 8;
+ // Reserved bytes
+ skipFully(dis, 16 - 1);
+ }
+ else
+ // Darwin has tzdata files that don't start with the TZif marker
+ skipFully(dis, 16 - 5);
+
+ int ttisgmtcnt = dis.readInt();
+ int ttisstdcnt = dis.readInt();
+ int leapcnt = dis.readInt();
+ int timecnt = dis.readInt();
+ int typecnt = dis.readInt();
+ int charcnt = dis.readInt();
+ if (tzif2 == 8)
+ {
+ skipFully(dis, timecnt * (4 + 1) + typecnt * (4 + 1 + 1) + charcnt
+ + leapcnt * (4 + 4) + ttisgmtcnt + ttisstdcnt);
+
+ dis.readFully(tzif);
+ if (tzif[0] != 'T' || tzif[1] != 'Z' || tzif[2] != 'i'
+ || tzif[3] != 'f' || tzif[4] < '2')
+ return null;
+
+ // Reserved bytes
+ skipFully(dis, 16 - 1);
+ ttisgmtcnt = dis.readInt();
+ ttisstdcnt = dis.readInt();
+ leapcnt = dis.readInt();
+ timecnt = dis.readInt();
+ typecnt = dis.readInt();
+ charcnt = dis.readInt();
+ }
+
+ // Sanity checks
+ if (typecnt <= 0 || timecnt < 0 || charcnt < 0
+ || leapcnt < 0 || ttisgmtcnt < 0 || ttisstdcnt < 0
+ || ttisgmtcnt > typecnt || ttisstdcnt > typecnt)
+ return null;
+
+ // Transition times
+ long[] times = new long[timecnt];
+ for (int i = 0; i < timecnt; i++)
+ if (tzif2 == 8)
+ times[i] = dis.readLong();
+ else
+ times[i] = (long) dis.readInt();
+
+ // Transition types
+ int[] types = new int[timecnt];
+ for (int i = 0; i < timecnt; i++)
+ {
+ types[i] = dis.readByte();
+ if (types[i] < 0)
+ types[i] += 256;
+ if (types[i] >= typecnt)
+ return null;
+ }
+
+ // Types
+ int[] offsets = new int[typecnt];
+ int[] typeflags = new int[typecnt];
+ for (int i = 0; i < typecnt; i++)
+ {
+ offsets[i] = dis.readInt();
+ if (offsets[i] >= IS_DST / 2 || offsets[i] <= -IS_DST / 2)
+ return null;
+ int dst = dis.readByte();
+ int abbrind = dis.readByte();
+ if (abbrind < 0)
+ abbrind += 256;
+ if (abbrind >= charcnt)
+ return null;
+ typeflags[i] = (dst != 0 ? (1 << 8) : 0) + abbrind;
+ }
+
+ // Abbrev names
+ byte[] names = new byte[charcnt];
+ dis.readFully(names);
+
+ // Leap transitions, for now ignore
+ skipFully(dis, leapcnt * (tzif2 + 4) + ttisstdcnt + ttisgmtcnt);
+
+ // tzIf2 format has optional POSIX TZ env string
+ String tzstr = null;
+ if (tzif2 == 8 && dis.readByte() == '\n')
+ {
+ tzstr = dis.readLine();
+ if (tzstr.length() <= 0)
+ tzstr = null;
+ }
+
+ // Get std/dst_offset and dst/non-dst time zone names.
+ int std_ind = -1;
+ int dst_ind = -1;
+ if (timecnt == 0)
+ std_ind = 0;
+ else
+ for (int i = timecnt - 1; i >= 0; i--)
+ {
+ if (std_ind == -1 && (typeflags[types[i]] & (1 << 8)) == 0)
+ std_ind = types[i];
+ else if (dst_ind == -1 && (typeflags[types[i]] & (1 << 8)) != 0)
+ dst_ind = types[i];
+ if (dst_ind != -1 && std_ind != -1)
+ break;
+ }
+
+ if (std_ind == -1)
+ return null;
+
+ int j = typeflags[std_ind] & 255;
+ while (j < charcnt && names[j] != 0)
+ j++;
+ String std_zonename = new String(names, typeflags[std_ind] & 255,
+ j - (typeflags[std_ind] & 255),
+ "ASCII");
+
+ String dst_zonename = "";
+ if (dst_ind != -1)
+ {
+ j = typeflags[dst_ind] & 255;
+ while (j < charcnt && names[j] != 0)
+ j++;
+ dst_zonename = new String(names, typeflags[dst_ind] & 255,
+ j - (typeflags[dst_ind] & 255), "ASCII");
+ }
+
+ // Only use gmt offset when necessary.
+ // Also special case GMT+/- timezones.
+ String std_offset_string = "";
+ String dst_offset_string = "";
+ if (tzstr == null
+ && (dst_ind != -1
+ || (offsets[std_ind] != 0
+ && !std_zonename.startsWith("GMT+")
+ && !std_zonename.startsWith("GMT-"))))
+ {
+ std_offset_string = Integer.toString(-offsets[std_ind] / 3600);
+ int seconds = -offsets[std_ind] % 3600;
+ if (seconds != 0)
+ {
+ if (seconds < 0)
+ seconds *= -1;
+ if (seconds < 600)
+ std_offset_string += ":0" + Integer.toString(seconds / 60);
+ else
+ std_offset_string += ":" + Integer.toString(seconds / 60);
+ seconds = seconds % 60;
+ if (seconds >= 10)
+ std_offset_string += ":" + Integer.toString(seconds);
+ else if (seconds > 0)
+ std_offset_string += ":0" + Integer.toString(seconds);
+ }
+
+ if (dst_ind != -1 && offsets[dst_ind] != offsets[std_ind] + 3600)
+ {
+ dst_offset_string = Integer.toString(-offsets[dst_ind] / 3600);
+ seconds = -offsets[dst_ind] % 3600;
+ if (seconds != 0)
+ {
+ if (seconds < 0)
+ seconds *= -1;
+ if (seconds < 600)
+ dst_offset_string
+ += ":0" + Integer.toString(seconds / 60);
+ else
+ dst_offset_string
+ += ":" + Integer.toString(seconds / 60);
+ seconds = seconds % 60;
+ if (seconds >= 10)
+ dst_offset_string += ":" + Integer.toString(seconds);
+ else if (seconds > 0)
+ dst_offset_string += ":0" + Integer.toString(seconds);
+ }
+ }
+ }
+
+ /*
+ * If no tzIf2 POSIX TZ string is available and the timezone
+ * uses DST, try to guess the last rule by trying to make
+ * sense from transitions at 5 years in the future and onwards.
+ * tzdata actually uses only 3 forms of rules:
+ * fixed date within a month, e.g. change on April, 5th
+ * 1st weekday on or after Nth: change on Sun>=15 in April
+ * last weekday in a month: change on lastSun in April
+ */
+ String[] change_spec = { null, null };
+ if (tzstr == null && dst_ind != -1 && timecnt > 10)
+ {
+ long nowPlus5y = System.currentTimeMillis() / 1000
+ + 5 * 365 * 86400;
+ int first;
+
+ for (first = timecnt - 1; first >= 0; first--)
+ if (times[first] < nowPlus5y
+ || (types[first] != std_ind && types[first] != dst_ind)
+ || types[first] != types[timecnt - 2 + ((first ^ timecnt) & 1)])
+ break;
+ first++;
+
+ if (timecnt - first >= 10 && types[timecnt - 1] != types[timecnt - 2])
+ {
+ GregorianCalendar cal
+ = new GregorianCalendar(new SimpleTimeZone(0, "GMT"));
+
+ int[] values = new int[2 * 11];
+ int i;
+ for (i = timecnt - 1; i >= first; i--)
+ {
+ int base = (i % 2) * 11;
+ int offset = offsets[types[i > first ? i - 1 : i + 1]];
+ cal.setTimeInMillis((times[i] + offset) * 1000);
+ if (i >= timecnt - 2)
+ {
+ values[base + 0] = cal.get(Calendar.YEAR);
+ values[base + 1] = cal.get(Calendar.MONTH);
+ values[base + 2] = cal.get(Calendar.DAY_OF_MONTH);
+ values[base + 3]
+ = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
+ values[base + 4] = cal.get(Calendar.DAY_OF_WEEK);
+ values[base + 5] = cal.get(Calendar.HOUR_OF_DAY);
+ values[base + 6] = cal.get(Calendar.MINUTE);
+ values[base + 7] = cal.get(Calendar.SECOND);
+ values[base + 8] = values[base + 2]; // Range start
+ values[base + 9] = values[base + 2]; // Range end
+ values[base + 10] = 0; // Determined type
+ }
+ else
+ {
+ int year = cal.get(Calendar.YEAR);
+ int month = cal.get(Calendar.MONTH);
+ int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
+ int month_days
+ = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
+ int day_of_week = cal.get(Calendar.DAY_OF_WEEK);
+ int hour = cal.get(Calendar.HOUR_OF_DAY);
+ int minute = cal.get(Calendar.MINUTE);
+ int second = cal.get(Calendar.SECOND);
+ if (year != values[base + 0] - 1
+ || month != values[base + 1]
+ || hour != values[base + 5]
+ || minute != values[base + 6]
+ || second != values[base + 7])
+ break;
+ if (day_of_week == values[base + 4])
+ {
+ // Either a Sun>=8 or lastSun rule.
+ if (day_of_month < values[base + 8])
+ values[base + 8] = day_of_month;
+ if (day_of_month > values[base + 9])
+ values[base + 9] = day_of_month;
+ if (values[base + 10] < 0)
+ break;
+ if (values[base + 10] == 0)
+ {
+ values[base + 10] = 1;
+ // If day of month > 28, this is
+ // certainly lastSun rule.
+ if (values[base + 2] > 28)
+ values[base + 2] = 3;
+ // If day of month isn't in the last
+ // week, it can't be lastSun rule.
+ else if (values[base + 2]
+ <= values[base + 3] - 7)
+ values[base + 3] = 2;
+ }
+ if (values[base + 10] == 1)
+ {
+ // If day of month is > 28, this is
+ // certainly lastSun rule.
+ if (day_of_month > 28)
+ values[base + 10] = 3;
+ // If day of month isn't in the last
+ // week, it can't be lastSun rule.
+ else if (day_of_month <= month_days - 7)
+ values[base + 10] = 2;
+ }
+ else if ((values[base + 10] == 2
+ && day_of_month > 28)
+ || (values[base + 10] == 3
+ && day_of_month <= month_days - 7))
+ break;
+ }
+ else
+ {
+ // Must be fixed day in month rule.
+ if (day_of_month != values[base + 2]
+ || values[base + 10] > 0)
+ break;
+ values[base + 4] = day_of_week;
+ values[base + 10] = -1;
+ }
+ values[base + 0] -= 1;
+ }
+ }
+
+ if (i < first)
+ {
+ for (i = 0; i < 2; i++)
+ {
+ int base = 11 * i;
+ if (values[base + 10] == 0)
+ continue;
+ if (values[base + 10] == -1)
+ {
+ int[] dayCount
+ = { 0, 31, 59, 90, 120, 151,
+ 181, 212, 243, 273, 304, 334 };
+ int d = dayCount[values[base + 1]
+ - Calendar.JANUARY];
+ d += values[base + 2];
+ change_spec[i] = ",J" + Integer.toString(d);
+ }
+ else if (values[base + 10] == 2)
+ {
+ // If we haven't seen all days of the week,
+ // we can't be sure what the rule really is.
+ if (values[base + 8] + 6 != values[base + 9])
+ continue;
+
+ int d;
+ d = values[base + 1] - Calendar.JANUARY + 1;
+ // E.g. Sun >= 5 is not representable in POSIX
+ // TZ env string, use ",Am.n.d" extension
+ // where m is month 1 .. 12, n is the date on
+ // or after which it happens and d is day
+ // of the week, 0 .. 6. So Sun >= 5 in April
+ // is ",A4.5.0".
+ if ((values[base + 8] % 7) == 1)
+ {
+ change_spec[i] = ",M" + Integer.toString(d);
+ d = (values[base + 8] + 6) / 7;
+ }
+ else
+ {
+ change_spec[i] = ",A" + Integer.toString(d);
+ d = values[base + 8];
+ }
+ change_spec[i] += "." + Integer.toString(d);
+ d = values[base + 4] - Calendar.SUNDAY;
+ change_spec[i] += "." + Integer.toString(d);
+ }
+ else
+ {
+ // If we don't know whether this is lastSun or
+ // Sun >= 22 rule. That can be either because
+ // there was insufficient number of
+ // transitions, or February, where it is quite
+ // probable we haven't seen any 29th dates.
+ // For February, assume lastSun rule, otherwise
+ // punt.
+ if (values[base + 10] == 1
+ && values[base + 1] != Calendar.FEBRUARY)
+ continue;
+
+ int d;
+ d = values[base + 1] - Calendar.JANUARY + 1;
+ change_spec[i] = ",M" + Integer.toString(d);
+ d = values[base + 4] - Calendar.SUNDAY;
+ change_spec[i] += ".5." + Integer.toString(d);
+ }
+
+ // Don't add time specification if time is
+ // 02:00:00.
+ if (values[base + 5] != 2
+ || values[base + 6] != 0
+ || values[base + 7] != 0)
+ {
+ int d = values[base + 5];
+ change_spec[i] += "/" + Integer.toString(d);
+ if (values[base + 6] != 0 || values[base + 7] != 0)
+ {
+ d = values[base + 6];
+ if (d < 10)
+ change_spec[i]
+ += ":0" + Integer.toString(d);
+ else
+ change_spec[i] += ":" + Integer.toString(d);
+ d = values[base + 7];
+ if (d >= 10)
+ change_spec[i]
+ += ":" + Integer.toString(d);
+ else if (d > 0)
+ change_spec[i]
+ += ":0" + Integer.toString(d);
+ }
+ }
+ }
+ if (types[(timecnt - 1) & -2] == std_ind)
+ {
+ String tmp = change_spec[0];
+ change_spec[0] = change_spec[1];
+ change_spec[1] = tmp;
+ }
+ }
+ }
+ }
+
+ if (tzstr == null)
+ {
+ tzstr = std_zonename + std_offset_string;
+ if (change_spec[0] != null && change_spec[1] != null)
+ tzstr += dst_zonename + dst_offset_string
+ + change_spec[0] + change_spec[1];
+ }
+
+ if (timecnt == 0)
+ return new SimpleTimeZone(offsets[std_ind] * 1000,
+ id != null ? id : tzstr);
+
+ SimpleTimeZone endRule = createLastRule(tzstr);
+ if (endRule == null)
+ return null;
+
+ /* Finally adjust the times array into the form the constructor
+ * expects. times[0] is special, the offset and DST flag there
+ * are for all times before that transition. Use the first non-DST
+ * type. For all other transitions, the data file has the type
+ * (<offset, isdst, zonename>) for the time interval starting
+ */
+ for (int i = 0; i < typecnt; i++)
+ if ((typeflags[i] & (1 << 8)) == 0)
+ {
+ times[0] = (times[0] << SECS_SHIFT) | (offsets[i] & OFFSET_MASK);
+ break;
+ }
+
+ for (int i = 1; i < timecnt; i++)
+ times[i] = (times[i] << SECS_SHIFT)
+ | (offsets[types[i - 1]] & OFFSET_MASK)
+ | ((typeflags[types[i - 1]] & (1 << 8)) != 0 ? IS_DST : 0);
+
+ return new ZoneInfo(offsets[std_ind] * 1000, id != null ? id : tzstr,
+ times, endRule);
+ }
+ catch (IOException ioe)
+ {
+ // Parse error, not a proper tzfile.
+ return null;
+ }
+ finally
+ {
+ try
+ {
+ if (dis != null)
+ dis.close();
+ }
+ catch(IOException ioe)
+ {
+ // Error while close, nothing we can do.
+ }
+ }
+ }
+
+ /**
+ * Skips the requested number of bytes in the given InputStream.
+ * Throws EOFException if not enough bytes could be skipped.
+ * Negative numbers of bytes to skip are ignored.
+ */
+ private static void skipFully(InputStream is, long l) throws IOException
+ {
+ while (l > 0)
+ {
+ long k = is.skip(l);
+ if (k <= 0)
+ throw new EOFException();
+ l -= k;
+ }
+ }
+
+ /**
+ * Create a SimpleTimeZone from a POSIX TZ environment string,
+ * see http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html
+ * for details.
+ * It supports also an extension, where Am.n.d rule (m 1 .. 12, n 1 .. 25, d
+ * 0 .. 6) describes day of week d on or after nth day of month m.
+ * Say A4.5.0 is Sun>=5 in April.
+ */
+ private static SimpleTimeZone createLastRule(String tzstr)
+ {
+ String stdName = null;
+ int stdOffs;
+ int dstOffs;
+ try
+ {
+ int idLength = tzstr.length();
+
+ int index = 0;
+ int prevIndex;
+ char c;
+
+ // get std
+ do
+ c = tzstr.charAt(index);
+ while (c != '+' && c != '-' && c != ',' && c != ':'
+ && ! Character.isDigit(c) && c != '\0' && ++index < idLength);
+
+ if (index >= idLength)
+ return new SimpleTimeZone(0, tzstr);
+
+ stdName = tzstr.substring(0, index);
+ prevIndex = index;
+
+ // get the std offset
+ do
+ c = tzstr.charAt(index++);
+ while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
+ && index < idLength);
+ if (index < idLength)
+ index--;
+
+ { // convert the dst string to a millis number
+ String offset = tzstr.substring(prevIndex, index);
+ prevIndex = index;
+
+ if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
+ stdOffs = parseTime(offset.substring(1));
+ else
+ stdOffs = parseTime(offset);
+
+ if (offset.charAt(0) == '-')
+ stdOffs = -stdOffs;
+
+ // TZ timezone offsets are positive when WEST of the meridian.
+ stdOffs = -stdOffs;
+ }
+
+ // Done yet? (Format: std offset)
+ if (index >= idLength)
+ return new SimpleTimeZone(stdOffs, stdName);
+
+ // get dst
+ do
+ c = tzstr.charAt(index);
+ while (c != '+' && c != '-' && c != ',' && c != ':'
+ && ! Character.isDigit(c) && c != '\0' && ++index < idLength);
+
+ // Done yet? (Format: std offset dst)
+ if (index >= idLength)
+ return new SimpleTimeZone(stdOffs, stdName);
+
+ // get the dst offset
+ prevIndex = index;
+ do
+ c = tzstr.charAt(index++);
+ while ((c == '-' || c == '+' || c == ':' || Character.isDigit(c))
+ && index < idLength);
+ if (index < idLength)
+ index--;
+
+ if (index == prevIndex && (c == ',' || c == ';'))
+ {
+ // Missing dst offset defaults to one hour ahead of standard
+ // time.
+ dstOffs = stdOffs + 60 * 60 * 1000;
+ }
+ else
+ { // convert the dst string to a millis number
+ String offset = tzstr.substring(prevIndex, index);
+ prevIndex = index;
+
+ if (offset.charAt(0) == '+' || offset.charAt(0) == '-')
+ dstOffs = parseTime(offset.substring(1));
+ else
+ dstOffs = parseTime(offset);
+
+ if (offset.charAt(0) == '-')
+ dstOffs = -dstOffs;
+
+ // TZ timezone offsets are positive when WEST of the meridian.
+ dstOffs = -dstOffs;
+ }
+
+ // Done yet? (Format: std offset dst offset)
+ if (index >= idLength)
+ return new SimpleTimeZone(stdOffs, stdName);
+
+ // get the DST rule
+ if (tzstr.charAt(index) == ','
+ || tzstr.charAt(index) == ';')
+ {
+ index++;
+ int offs = index;
+ while (tzstr.charAt(index) != ','
+ && tzstr.charAt(index) != ';')
+ index++;
+ String startTime = tzstr.substring(offs, index);
+ index++;
+ String endTime = tzstr.substring(index);
+
+ index = startTime.indexOf('/');
+ int startMillis;
+ int endMillis;
+ String startDate;
+ String endDate;
+ if (index != -1)
+ {
+ startDate = startTime.substring(0, index);
+ startMillis = parseTime(startTime.substring(index + 1));
+ }
+ else
+ {
+ startDate = startTime;
+ // if time isn't given, default to 2:00:00 AM.
+ startMillis = 2 * 60 * 60 * 1000;
+ }
+ index = endTime.indexOf('/');
+ if (index != -1)
+ {
+ endDate = endTime.substring(0, index);
+ endMillis = parseTime(endTime.substring(index + 1));
+ }
+ else
+ {
+ endDate = endTime;
+ // if time isn't given, default to 2:00:00 AM.
+ endMillis = 2 * 60 * 60 * 1000;
+ }
+
+ int[] start = getDateParams(startDate);
+ int[] end = getDateParams(endDate);
+ return new SimpleTimeZone(stdOffs, tzstr, start[0], start[1],
+ start[2], startMillis, end[0], end[1],
+ end[2], endMillis, (dstOffs - stdOffs));
+ }
+ }
+
+ catch (IndexOutOfBoundsException _)
+ {
+ }
+ catch (NumberFormatException _)
+ {
+ }
+
+ return null;
+ }
+
+ /**
+ * Parses and returns the params for a POSIX TZ date field,
+ * in the format int[]{ month, day, dayOfWeek }, following the
+ * SimpleTimeZone constructor rules.
+ */
+ private static int[] getDateParams(String date)
+ {
+ int[] dayCount = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+ int month;
+ int type = 0;
+
+ if (date.charAt(0) == 'M' || date.charAt(0) == 'm')
+ type = 1;
+ else if (date.charAt(0) == 'A' || date.charAt(0) == 'a')
+ type = 2;
+
+ if (type > 0)
+ {
+ int day;
+
+ // Month, week of month, day of week
+ // "Mm.w.d". d is between 0 (Sunday) and 6. Week w is
+ // between 1 and 5; Week 1 is the first week in which day d
+ // occurs and Week 5 specifies the last d day in the month.
+ // Month m is between 1 and 12.
+
+ // Month, day of month, day of week
+ // ZoneInfo extension, not in POSIX
+ // "Am.n.d". d is between 0 (Sunday) and 6. Day of month n is
+ // between 1 and 25. Month m is between 1 and 12.
+
+ month = Integer.parseInt(date.substring(1, date.indexOf('.')));
+ int week = Integer.parseInt(date.substring(date.indexOf('.') + 1,
+ date.lastIndexOf('.')));
+ int dayOfWeek = Integer.parseInt(date.substring(date.lastIndexOf('.')
+ + 1));
+ dayOfWeek++; // Java day of week is one-based, Sunday is first day.
+
+ if (type == 2)
+ {
+ day = week;
+ dayOfWeek = -dayOfWeek;
+ }
+ else if (week == 5)
+ day = -1; // last day of month is -1 in java, 5 in TZ
+ else
+ {
+ // First day of week starting on or after. For example,
+ // to specify the second Sunday of April, set month to
+ // APRIL, day-of-month to 8, and day-of-week to -SUNDAY.
+ day = (week - 1) * 7 + 1;
+ dayOfWeek = -dayOfWeek;
+ }
+
+ month--; // Java month is zero-based.
+ return new int[] { month, day, dayOfWeek };
+ }
+
+ // julian day, either zero-based 0<=n<=365 (incl feb 29)
+ // or one-based 1<=n<=365 (no feb 29)
+ int julianDay; // Julian day
+
+ if (date.charAt(0) != 'J' || date.charAt(0) != 'j')
+ {
+ julianDay = Integer.parseInt(date.substring(1));
+ julianDay++; // make 1-based
+ // Adjust day count to include feb 29.
+ dayCount = new int[]
+ {
+ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335
+ };
+ }
+ else
+ // 1-based julian day
+ julianDay = Integer.parseInt(date);
+
+ int i = 11;
+ while (i > 0)
+ if (dayCount[i] < julianDay)
+ break;
+ else
+ i--;
+ julianDay -= dayCount[i];
+ month = i;
+ return new int[] { month, julianDay, 0 };
+ }
+
+ /**
+ * Parses a time field hh[:mm[:ss]], returning the result
+ * in milliseconds. No leading sign.
+ */
+ private static int parseTime(String time)
+ {
+ int millis = 0;
+ int i = 0;
+
+ while (i < time.length())
+ if (time.charAt(i) == ':')
+ break;
+ else
+ i++;
+ millis = 60 * 60 * 1000 * Integer.parseInt(time.substring(0, i));
+ if (i >= time.length())
+ return millis;
+
+ int iprev = ++i;
+ while (i < time.length())
+ if (time.charAt(i) == ':')
+ break;
+ else
+ i++;
+ millis += 60 * 1000 * Integer.parseInt(time.substring(iprev, i));
+ if (i >= time.length())
+ return millis;
+
+ millis += 1000 * Integer.parseInt(time.substring(++i));
+ return millis;
+ }
+}
diff --git a/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java b/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java
index 7ac4cc749fc..6bc069d3201 100644
--- a/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java
+++ b/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java
@@ -363,22 +363,6 @@ public class DomLSParser
source = new InputSource(in);
source.setSystemId(systemId);
}
- if (source == null && entityResolver != null)
- {
- String publicId = input.getPublicId();
- try
- {
- source = entityResolver.resolveEntity(publicId, systemId);
- }
- catch (SAXException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- catch (IOException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- }
if (source == null)
{
URL url = null;
diff --git a/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java b/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java
index 285540060d9..364c576d196 100644
--- a/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java
+++ b/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java
@@ -144,37 +144,40 @@ public class SAXEventSink
final String PROPERTIES = "http://xml.org/sax/properties/";
final String GNU_PROPERTIES = "http://gnu.org/sax/properties/";
- boolean standalone = reader.getFeature(FEATURES + "is-standalone");
- doc.setXmlStandalone(standalone);
- try
- {
- String version = (String) reader.getProperty(PROPERTIES +
- "document-xml-version");
- doc.setXmlVersion(version);
- }
- catch (SAXNotRecognizedException e)
- {
- }
- catch (SAXNotSupportedException e)
+ if (reader != null)
{
+ boolean standalone = reader.getFeature(FEATURES + "is-standalone");
+ doc.setXmlStandalone(standalone);
+ try
+ {
+ String version = (String) reader.getProperty(PROPERTIES +
+ "document-xml-version");
+ doc.setXmlVersion(version);
+ }
+ catch (SAXNotRecognizedException e)
+ {
+ }
+ catch (SAXNotSupportedException e)
+ {
+ }
+ try
+ {
+ String encoding = (String) reader.getProperty(GNU_PROPERTIES +
+ "document-xml-encoding");
+ doc.setXmlEncoding(encoding);
+ }
+ catch (SAXNotRecognizedException e)
+ {
+ }
+ catch (SAXNotSupportedException e)
+ {
+ }
}
if (locator != null && locator instanceof Locator2)
{
String encoding = ((Locator2) locator).getEncoding();
doc.setInputEncoding(encoding);
}
- try
- {
- String encoding = (String) reader.getProperty(GNU_PROPERTIES +
- "document-xml-encoding");
- doc.setXmlEncoding(encoding);
- }
- catch (SAXNotRecognizedException e)
- {
- }
- catch (SAXNotSupportedException e)
- {
- }
}
public void endDocument()
diff --git a/libjava/classpath/include/Makefile.in b/libjava/classpath/include/Makefile.in
index c9bdd0b3d01..c18e5a2f513 100644
--- a/libjava/classpath/include/Makefile.in
+++ b/libjava/classpath/include/Makefile.in
@@ -118,6 +118,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -129,6 +130,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/include/config.h.in b/libjava/classpath/include/config.h.in
index 0b2a58e86df..6abf7972dfe 100644
--- a/libjava/classpath/include/config.h.in
+++ b/libjava/classpath/include/config.h.in
@@ -117,6 +117,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the <jack/jack.h> header file. */
+#undef HAVE_JACK_JACK_H
+
/* Define to 1 if you have the `kevent' function. */
#undef HAVE_KEVENT
diff --git a/libjava/classpath/java/util/Date.java b/libjava/classpath/java/util/Date.java
index 5c43bf3c154..f481753db8d 100644
--- a/libjava/classpath/java/util/Date.java
+++ b/libjava/classpath/java/util/Date.java
@@ -754,6 +754,7 @@ public class Date
}
else if (firstch >= '0' && firstch <= '9')
{
+ int lastPunct = -1;
while (tok != null && tok.length() > 0)
{
int punctOffset = tok.length();
@@ -791,6 +792,13 @@ public class Date
else
minute = num;
}
+ else if (lastPunct == ':' && hour >= 0 && (minute < 0 || second < 0))
+ {
+ if (minute < 0)
+ minute = num;
+ else
+ second = num;
+ }
else if ((num >= 70
&& (punct == ' ' || punct == ','
|| punct == '/' || punct < 0))
@@ -828,6 +836,7 @@ public class Date
tok = null;
else
tok = tok.substring(punctOffset + 1);
+ lastPunct = punct;
}
}
else if (firstch >= 'A' && firstch <= 'Z')
diff --git a/libjava/classpath/java/util/SimpleTimeZone.java b/libjava/classpath/java/util/SimpleTimeZone.java
index d94f89ad3f9..14821ba0274 100644
--- a/libjava/classpath/java/util/SimpleTimeZone.java
+++ b/libjava/classpath/java/util/SimpleTimeZone.java
@@ -1,5 +1,6 @@
/* java.util.SimpleTimeZone
- Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2003, 2004, 2005, 2007
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -141,8 +142,8 @@ public class SimpleTimeZone extends TimeZone
/**
* This variable specifies the time of change to daylight savings.
- * This time is given in milliseconds after midnight local
- * standard time.
+ * This time is given in milliseconds after midnight in startTimeMode
+ * chosen time mode.
* @serial
*/
private int startTime;
@@ -187,8 +188,8 @@ public class SimpleTimeZone extends TimeZone
/**
* This variable specifies the time of change back to standard time.
- * This time is given in milliseconds after midnight local
- * standard time.
+ * This time is given in milliseconds after midnight in endTimeMode
+ * chosen time mode.
* @serial
*/
private int endTime;
@@ -380,24 +381,17 @@ public class SimpleTimeZone extends TimeZone
int endDayOfWeekInMonth, int endDayOfWeek,
int endTime, int endTimeMode, int dstSavings)
{
- this.rawOffset = rawOffset;
- setID(id);
- useDaylight = true;
+ this(rawOffset, id, startMonth, startDayOfWeekInMonth, startDayOfWeek,
+ startTime, endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
if (startTimeMode < WALL_TIME || startTimeMode > UTC_TIME)
throw new IllegalArgumentException("startTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
if (endTimeMode < WALL_TIME || endTimeMode > UTC_TIME)
throw new IllegalArgumentException("endTimeMode must be one of WALL_TIME, STANDARD_TIME, or UTC_TIME");
- this.startTimeMode = startTimeMode;
- this.endTimeMode = endTimeMode;
-
- setStartRule(startMonth, startDayOfWeekInMonth, startDayOfWeek, startTime);
- setEndRule(endMonth, endDayOfWeekInMonth, endDayOfWeek, endTime);
- if (startMonth == endMonth)
- throw new IllegalArgumentException("startMonth and endMonth must be different");
- this.startYear = 0;
this.dstSavings = dstSavings;
+ this.startTimeMode = startTimeMode;
+ this.endTimeMode = endTimeMode;
}
/**
@@ -477,12 +471,8 @@ public class SimpleTimeZone extends TimeZone
this.startMonth = month;
this.startDay = day;
this.startDayOfWeek = Math.abs(dayOfWeek);
- if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
- this.startTime = time;
- else
- // Convert from UTC to STANDARD
- this.startTime = time + this.rawOffset;
- useDaylight = true;
+ this.startTime = time;
+ this.startTimeMode = WALL_TIME;
}
/**
@@ -513,24 +503,10 @@ public class SimpleTimeZone extends TimeZone
public void setStartRule(int month, int day, int dayOfWeek, int time,
boolean after)
{
- // FIXME: XXX: Validate that checkRule and offset processing work with on
- // or before mode.
- this.startDay = after ? Math.abs(day) : -Math.abs(day);
- this.startDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
- this.startMode = (dayOfWeek != 0)
- ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
- : checkRule(month, day, dayOfWeek);
- this.startDay = Math.abs(this.startDay);
- this.startDayOfWeek = Math.abs(this.startDayOfWeek);
-
- this.startMonth = month;
-
- if (this.startTimeMode == WALL_TIME || this.startTimeMode == STANDARD_TIME)
- this.startTime = time;
+ if (after)
+ setStartRule(month, day, -dayOfWeek, time);
else
- // Convert from UTC to STANDARD
- this.startTime = time + this.rawOffset;
- useDaylight = true;
+ setStartRule(month, -day, -dayOfWeek, time);
}
/**
@@ -570,14 +546,8 @@ public class SimpleTimeZone extends TimeZone
this.endMonth = month;
this.endDay = day;
this.endDayOfWeek = Math.abs(dayOfWeek);
- if (this.endTimeMode == WALL_TIME)
- this.endTime = time;
- else if (this.endTimeMode == STANDARD_TIME)
- // Convert from STANDARD to DST
- this.endTime = time + this.dstSavings;
- else
- // Convert from UTC to DST
- this.endTime = time + this.rawOffset + this.dstSavings;
+ this.endTime = time;
+ this.endTimeMode = WALL_TIME;
useDaylight = true;
}
@@ -607,27 +577,10 @@ public class SimpleTimeZone extends TimeZone
public void setEndRule(int month, int day, int dayOfWeek, int time,
boolean after)
{
- // FIXME: XXX: Validate that checkRule and offset processing work with on
- // or before mode.
- this.endDay = after ? Math.abs(day) : -Math.abs(day);
- this.endDayOfWeek = after ? Math.abs(dayOfWeek) : -Math.abs(dayOfWeek);
- this.endMode = (dayOfWeek != 0)
- ? (after ? DOW_GE_DOM_MODE : DOW_LE_DOM_MODE)
- : checkRule(month, day, dayOfWeek);
- this.endDay = Math.abs(this.endDay);
- this.endDayOfWeek = Math.abs(endDayOfWeek);
-
- this.endMonth = month;
-
- if (this.endTimeMode == WALL_TIME)
- this.endTime = time;
- else if (this.endTimeMode == STANDARD_TIME)
- // Convert from STANDARD to DST
- this.endTime = time + this.dstSavings;
+ if (after)
+ setEndRule(month, day, -dayOfWeek, time);
else
- // Convert from UTC to DST
- this.endTime = time + this.rawOffset + this.dstSavings;
- useDaylight = true;
+ setEndRule(month, -day, -dayOfWeek, time);
}
/**
@@ -688,16 +641,37 @@ public class SimpleTimeZone extends TimeZone
int daylightSavings = 0;
if (useDaylight && era == GregorianCalendar.AD && year >= startYear)
{
+ int orig_year = year;
+ int time = startTime + (startTimeMode == UTC_TIME ? rawOffset : 0);
// This does only work for Gregorian calendars :-(
// This is mainly because setStartYear doesn't take an era.
boolean afterStart = ! isBefore(year, month, day, dayOfWeek, millis,
startMode, startMonth, startDay,
- startDayOfWeek, startTime);
- boolean beforeEnd = isBefore(year, month, day, dayOfWeek,
- millis + dstSavings,
- endMode, endMonth, endDay, endDayOfWeek,
- endTime);
-
+ startDayOfWeek, time);
+ millis += dstSavings;
+ if (millis >= 24 * 60 * 60 * 1000)
+ {
+ millis -= 24 * 60 * 60 * 1000;
+ dayOfWeek = (dayOfWeek % 7) + 1;
+ if (++day > daysInMonth)
+ {
+ day = 1;
+ if (month++ == Calendar.DECEMBER)
+ {
+ month = Calendar.JANUARY;
+ year++;
+ }
+ }
+ }
+ time = endTime + (endTimeMode == UTC_TIME ? rawOffset : 0);
+ if (endTimeMode != WALL_TIME)
+ time += dstSavings;
+ boolean beforeEnd = isBefore(year, month, day, dayOfWeek, millis,
+ endMode, endMonth, endDay, endDayOfWeek,
+ time);
+
+ if (year != orig_year)
+ afterStart = false;
if (startMonth < endMonth)
// use daylight savings, if the date is after the start of
// savings, and before the end of savings.
diff --git a/libjava/classpath/java/util/TimeZone.java b/libjava/classpath/java/util/TimeZone.java
index a253561b046..5329e06c11f 100644
--- a/libjava/classpath/java/util/TimeZone.java
+++ b/libjava/classpath/java/util/TimeZone.java
@@ -39,6 +39,9 @@ exception statement from your version. */
package java.util;
+import gnu.classpath.SystemProperties;
+import gnu.java.util.ZoneInfo;
+import java.io.File;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.DateFormatSymbols;
@@ -115,7 +118,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
// Fall back on GMT.
if (zone == null)
- zone = (TimeZone) timezones().get("GMT");
+ zone = getTimeZone ("GMT");
return zone;
}
@@ -128,6 +131,22 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
private static final long serialVersionUID = 3581463369166924961L;
/**
+ * Flag whether zoneinfo data should be used,
+ * otherwise builtin timezone data will be provided.
+ */
+ private static String zoneinfo_dir;
+
+ /**
+ * Cached copy of getAvailableIDs().
+ */
+ private static String[] availableIDs = null;
+
+ /**
+ * JDK 1.1.x compatibility aliases.
+ */
+ private static HashMap aliases0;
+
+ /**
* HashMap for timezones by ID.
*/
private static HashMap timezones0;
@@ -135,13 +154,55 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
* it is not needed:
*/
// Package-private to avoid a trampoline.
- static synchronized HashMap timezones()
+ static HashMap timezones()
{
if (timezones0 == null)
{
HashMap timezones = new HashMap();
timezones0 = timezones;
+ zoneinfo_dir = SystemProperties.getProperty("gnu.java.util.zoneinfo.dir");
+ if (zoneinfo_dir != null && !new File(zoneinfo_dir).isDirectory())
+ zoneinfo_dir = null;
+
+ if (zoneinfo_dir != null)
+ {
+ aliases0 = new HashMap();
+
+ // These deprecated aliases for JDK 1.1.x compatibility
+ // should take precedence over data files read from
+ // /usr/share/zoneinfo.
+ aliases0.put("ACT", "Australia/Darwin");
+ aliases0.put("AET", "Australia/Sydney");
+ aliases0.put("AGT", "America/Argentina/Buenos_Aires");
+ aliases0.put("ART", "Africa/Cairo");
+ aliases0.put("AST", "America/Juneau");
+ aliases0.put("BST", "Asia/Colombo");
+ aliases0.put("CAT", "Africa/Gaborone");
+ aliases0.put("CNT", "America/St_Johns");
+ aliases0.put("CST", "CST6CDT");
+ aliases0.put("CTT", "Asia/Brunei");
+ aliases0.put("EAT", "Indian/Comoro");
+ aliases0.put("ECT", "CET");
+ aliases0.put("EST", "EST5EDT");
+ aliases0.put("EST5", "EST5EDT");
+ aliases0.put("IET", "EST5EDT");
+ aliases0.put("IST", "Asia/Calcutta");
+ aliases0.put("JST", "Asia/Seoul");
+ aliases0.put("MIT", "Pacific/Niue");
+ aliases0.put("MST", "MST7MDT");
+ aliases0.put("MST7", "MST7MDT");
+ aliases0.put("NET", "Indian/Mauritius");
+ aliases0.put("NST", "Pacific/Auckland");
+ aliases0.put("PLT", "Indian/Kerguelen");
+ aliases0.put("PNT", "MST7MDT");
+ aliases0.put("PRT", "America/Anguilla");
+ aliases0.put("PST", "PST8PDT");
+ aliases0.put("SST", "Pacific/Ponape");
+ aliases0.put("VST", "Asia/Bangkok");
+ return timezones;
+ }
+
TimeZone tz;
// Automatically generated by scripts/timezones.pl
// XXX - Should we read this data from a file?
@@ -887,7 +948,6 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
static TimeZone getDefaultTimeZone(String sysTimeZoneId)
{
String stdName = null;
- String dstName;
int stdOffs;
int dstOffs;
try
@@ -900,14 +960,14 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
// get std
do
- c = sysTimeZoneId.charAt(index++);
+ c = sysTimeZoneId.charAt(index);
while (c != '+' && c != '-' && c != ',' && c != ':'
- && ! Character.isDigit(c) && c != '\0' && index < idLength);
+ && ! Character.isDigit(c) && c != '\0' && ++index < idLength);
if (index >= idLength)
- return (TimeZone)timezones().get(sysTimeZoneId);
+ return getTimeZoneInternal(sysTimeZoneId);
- stdName = sysTimeZoneId.substring(0, --index);
+ stdName = sysTimeZoneId.substring(0, index);
prevIndex = index;
// get the std offset
@@ -938,7 +998,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
if (index >= idLength)
{
// Do we have an existing timezone with that name and offset?
- TimeZone tz = (TimeZone) timezones().get(stdName);
+ TimeZone tz = getTimeZoneInternal(stdName);
if (tz != null)
if (tz.getRawOffset() == stdOffs)
return tz;
@@ -949,16 +1009,16 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
// get dst
do
- c = sysTimeZoneId.charAt(index++);
+ c = sysTimeZoneId.charAt(index);
while (c != '+' && c != '-' && c != ',' && c != ':'
- && ! Character.isDigit(c) && c != '\0' && index < idLength);
+ && ! Character.isDigit(c) && c != '\0' && ++index < idLength);
// Done yet? (Format: std offset dst)
if (index >= idLength)
{
// Do we have an existing timezone with that name and offset
// which has DST?
- TimeZone tz = (TimeZone) timezones().get(stdName);
+ TimeZone tz = getTimeZoneInternal(stdName);
if (tz != null)
if (tz.getRawOffset() == stdOffs && tz.useDaylightTime())
return tz;
@@ -968,7 +1028,6 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
}
// get the dst offset
- dstName = sysTimeZoneId.substring(prevIndex, --index);
prevIndex = index;
do
c = sysTimeZoneId.charAt(index++);
@@ -1005,7 +1064,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
if (index >= idLength)
{
// Time Zone existing with same name, dst and offsets?
- TimeZone tz = (TimeZone) timezones().get(stdName);
+ TimeZone tz = getTimeZoneInternal(stdName);
if (tz != null)
if (tz.getRawOffset() == stdOffs && tz.useDaylightTime()
&& tz.getDSTSavings() == (dstOffs - stdOffs))
@@ -1171,10 +1230,10 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
break;
else
i++;
+ millis += 60 * 1000 * Integer.parseInt(time.substring(iprev, i));
if (i >= time.length())
return millis;
- millis += 60 * 1000 * Integer.parseInt(time.substring(iprev, i));
millis += 1000 * Integer.parseInt(time.substring(++i));
return millis;
}
@@ -1343,14 +1402,7 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
private String getDefaultDisplayName(boolean dst)
{
- int offset = getRawOffset();
- if (dst && this instanceof SimpleTimeZone)
- {
- // ugly, but this is a design failure of the API:
- // getDisplayName takes a dst parameter even though
- // TimeZone knows nothing about daylight saving offsets.
- offset += ((SimpleTimeZone) this).getDSTSavings();
- }
+ int offset = getRawOffset() + (dst ? getDSTSavings() : 0);
StringBuffer sb = new StringBuffer(9);
sb.append("GMT");
@@ -1406,30 +1458,67 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
* @return The time zone for the identifier or GMT, if no such time
* zone exists.
*/
- // FIXME: XXX: JCL indicates this and other methods are synchronized.
- public static TimeZone getTimeZone(String ID)
+ private static TimeZone getTimeZoneInternal(String ID)
{
// First check timezones hash
- TimeZone tz = (TimeZone) timezones().get(ID);
- if (tz != null)
+ TimeZone tz = null;
+ TimeZone tznew = null;
+ for (int pass = 0; pass < 2; pass++)
{
- if (tz.getID().equals(ID))
- return tz;
-
- // We always return a timezone with the requested ID.
- // This is the same behaviour as with JDK1.2.
- tz = (TimeZone) tz.clone();
- tz.setID(ID);
- // We also save the alias, so that we return the same
- // object again if getTimeZone is called with the same
- // alias.
- timezones().put(ID, tz);
- return tz;
+ synchronized (TimeZone.class)
+ {
+ tz = (TimeZone) timezones().get(ID);
+ if (tz != null)
+ {
+ if (!tz.getID().equals(ID))
+ {
+ // We always return a timezone with the requested ID.
+ // This is the same behaviour as with JDK1.2.
+ tz = (TimeZone) tz.clone();
+ tz.setID(ID);
+ // We also save the alias, so that we return the same
+ // object again if getTimeZone is called with the same
+ // alias.
+ timezones().put(ID, tz);
+ }
+ return tz;
+ }
+ else if (tznew != null)
+ {
+ timezones().put(ID, tznew);
+ return tznew;
+ }
+ }
+
+ if (pass == 1 || zoneinfo_dir == null)
+ return null;
+
+ // aliases0 is never changing after first timezones(), so should
+ // be safe without synchronization.
+ String zonename = (String) aliases0.get(ID);
+ if (zonename == null)
+ zonename = ID;
+
+ // Read the file outside of the critical section, it is expensive.
+ tznew = ZoneInfo.readTZFile (ID, zoneinfo_dir
+ + File.separatorChar + zonename);
+ if (tznew == null)
+ return null;
}
- // See if the ID is really a GMT offset form.
- // Note that GMT is in the table so we know it is different.
- if (ID.startsWith("GMT"))
+ return null;
+ }
+
+ /**
+ * Gets the TimeZone for the given ID.
+ * @param ID the time zone identifier.
+ * @return The time zone for the identifier or GMT, if no such time
+ * zone exists.
+ */
+ public static TimeZone getTimeZone(String ID)
+ {
+ // Check for custom IDs first
+ if (ID.startsWith("GMT") && ID.length() > 3)
{
int pos = 3;
int offset_direction = 1;
@@ -1474,8 +1563,20 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
}
}
- return new SimpleTimeZone((hour * (60 * 60 * 1000) +
- minute * (60 * 1000))
+ // Custom IDs have to be normalized
+ StringBuffer sb = new StringBuffer(9);
+ sb.append("GMT");
+
+ sb.append(offset_direction >= 0 ? '+' : '-');
+ sb.append((char) ('0' + hour / 10));
+ sb.append((char) ('0' + hour % 10));
+ sb.append(':');
+ sb.append((char) ('0' + minute / 10));
+ sb.append((char) ('0' + minute % 10));
+ ID = sb.toString();
+
+ return new SimpleTimeZone((hour * (60 * 60 * 1000)
+ + minute * (60 * 1000))
* offset_direction, ID);
}
catch (NumberFormatException e)
@@ -1483,8 +1584,11 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
}
}
- // Finally, return GMT per spec
- return getTimeZone("GMT");
+ TimeZone tz = getTimeZoneInternal(ID);
+ if (tz != null)
+ return tz;
+
+ return new SimpleTimeZone(0, "GMT");
}
/**
@@ -1497,37 +1601,134 @@ public abstract class TimeZone implements java.io.Serializable, Cloneable
*/
public static String[] getAvailableIDs(int rawOffset)
{
+ synchronized (TimeZone.class)
+ {
+ HashMap h = timezones();
+ int count = 0;
+ if (zoneinfo_dir == null)
+ {
+ Iterator iter = h.entrySet().iterator();
+ while (iter.hasNext())
+ {
+ // Don't iterate the values, since we want to count
+ // doubled values (aliases)
+ Map.Entry entry = (Map.Entry) iter.next();
+ if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
+ count++;
+ }
+
+ String[] ids = new String[count];
+ count = 0;
+ iter = h.entrySet().iterator();
+ while (iter.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
+ ids[count++] = (String) entry.getKey();
+ }
+ return ids;
+ }
+ }
+
+ String[] s = getAvailableIDs();
int count = 0;
- Iterator iter = timezones().entrySet().iterator();
- while (iter.hasNext())
+ for (int i = 0; i < s.length; i++)
{
- // Don't iterate the values, since we want to count
- // doubled values (aliases)
- Map.Entry entry = (Map.Entry) iter.next();
- if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
+ TimeZone t = getTimeZoneInternal(s[i]);
+ if (t == null || t.getRawOffset() != rawOffset)
+ s[i] = null;
+ else
count++;
}
-
String[] ids = new String[count];
count = 0;
- iter = timezones().entrySet().iterator();
- while (iter.hasNext())
- {
- Map.Entry entry = (Map.Entry) iter.next();
- if (((TimeZone) entry.getValue()).getRawOffset() == rawOffset)
- ids[count++] = (String) entry.getKey();
- }
+ for (int i = 0; i < s.length; i++)
+ if (s[i] != null)
+ ids[count++] = s[i];
+
return ids;
}
+ private static int getAvailableIDs(File d, String prefix, ArrayList list)
+ {
+ String[] files = d.list();
+ int count = files.length;
+ boolean top = prefix.length() == 0;
+ list.add (files);
+ for (int i = 0; i < files.length; i++)
+ {
+ if (top
+ && (files[i].equals("posix")
+ || files[i].equals("right")
+ || files[i].endsWith(".tab")
+ || aliases0.get(files[i]) != null))
+ {
+ files[i] = null;
+ count--;
+ continue;
+ }
+
+ File f = new File(d, files[i]);
+ if (f.isDirectory())
+ {
+ count += getAvailableIDs(f, prefix + files[i]
+ + File.separatorChar, list) - 1;
+ files[i] = null;
+ }
+ else
+ files[i] = prefix + files[i];
+ }
+ return count;
+ }
+
/**
* Gets all available IDs.
* @return An array of all supported IDs.
*/
public static String[] getAvailableIDs()
{
- return (String[])
- timezones().keySet().toArray(new String[timezones().size()]);
+ synchronized (TimeZone.class)
+ {
+ HashMap h = timezones();
+ if (zoneinfo_dir == null)
+ return (String[]) h.keySet().toArray(new String[h.size()]);
+
+ if (availableIDs != null)
+ {
+ String[] ids = new String[availableIDs.length];
+ for (int i = 0; i < availableIDs.length; i++)
+ ids[i] = availableIDs[i];
+ return ids;
+ }
+
+ File d = new File(zoneinfo_dir);
+ ArrayList list = new ArrayList(30);
+ int count = getAvailableIDs(d, "", list) + aliases0.size();
+ availableIDs = new String[count];
+ String[] ids = new String[count];
+
+ count = 0;
+ for (int i = 0; i < list.size(); i++)
+ {
+ String[] s = (String[]) list.get(i);
+ for (int j = 0; j < s.length; j++)
+ if (s[j] != null)
+ {
+ availableIDs[count] = s[j];
+ ids[count++] = s[j];
+ }
+ }
+
+ Iterator iter = aliases0.entrySet().iterator();
+ while (iter.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ availableIDs[count] = (String) entry.getKey();
+ ids[count++] = (String) entry.getKey();
+ }
+
+ return ids;
+ }
}
/**
diff --git a/libjava/classpath/lib/Makefile.in b/libjava/classpath/lib/Makefile.in
index ec0783197af..d31e636db1a 100644
--- a/libjava/classpath/lib/Makefile.in
+++ b/libjava/classpath/lib/Makefile.in
@@ -122,6 +122,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -133,6 +134,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/lib/gnu/classpath/jdwp/exception/AbsentInformationException.class b/libjava/classpath/lib/gnu/classpath/jdwp/exception/AbsentInformationException.class
new file mode 100644
index 00000000000..19de3378fef
--- /dev/null
+++ b/libjava/classpath/lib/gnu/classpath/jdwp/exception/AbsentInformationException.class
Binary files differ
diff --git a/libjava/classpath/lib/gnu/java/util/ZoneInfo.class b/libjava/classpath/lib/gnu/java/util/ZoneInfo.class
new file mode 100644
index 00000000000..9265e25c2e3
--- /dev/null
+++ b/libjava/classpath/lib/gnu/java/util/ZoneInfo.class
Binary files differ
diff --git a/libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class b/libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class
new file mode 100644
index 00000000000..3f341aaa550
--- /dev/null
+++ b/libjava/classpath/lib/java/lang/Character$UnicodeBlock$NameType.class
Binary files differ
diff --git a/libjava/classpath/lib/java/lang/VMProcess.class b/libjava/classpath/lib/java/lang/VMProcess.class
new file mode 100644
index 00000000000..5a13c775378
--- /dev/null
+++ b/libjava/classpath/lib/java/lang/VMProcess.class
Binary files differ
diff --git a/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class b/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class
new file mode 100644
index 00000000000..a43b1f155bd
--- /dev/null
+++ b/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class
Binary files differ
diff --git a/libjava/classpath/lib/sun/reflect/annotation/AnnotationInvocationHandler.class b/libjava/classpath/lib/sun/reflect/annotation/AnnotationInvocationHandler.class
index e70c2bbcd7b..2e3036326cd 100644
--- a/libjava/classpath/lib/sun/reflect/annotation/AnnotationInvocationHandler.class
+++ b/libjava/classpath/lib/sun/reflect/annotation/AnnotationInvocationHandler.class
Binary files differ
diff --git a/libjava/classpath/native/Makefile.in b/libjava/classpath/native/Makefile.in
index e2587419ca0..43f4b738e4f 100644
--- a/libjava/classpath/native/Makefile.in
+++ b/libjava/classpath/native/Makefile.in
@@ -125,6 +125,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -136,6 +137,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/fdlibm/Makefile.in b/libjava/classpath/native/fdlibm/Makefile.in
index bad69b95c95..c7e71d98bad 100644
--- a/libjava/classpath/native/fdlibm/Makefile.in
+++ b/libjava/classpath/native/fdlibm/Makefile.in
@@ -144,6 +144,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -155,6 +156,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jawt/Makefile.in b/libjava/classpath/native/jawt/Makefile.in
index c0787b79de9..71eac7405b2 100644
--- a/libjava/classpath/native/jawt/Makefile.in
+++ b/libjava/classpath/native/jawt/Makefile.in
@@ -144,6 +144,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -155,6 +156,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/Makefile.in b/libjava/classpath/native/jni/Makefile.in
index 333ab785311..1890b42283d 100644
--- a/libjava/classpath/native/jni/Makefile.in
+++ b/libjava/classpath/native/jni/Makefile.in
@@ -125,6 +125,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -136,6 +137,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/classpath/Makefile.in b/libjava/classpath/native/jni/classpath/Makefile.in
index b9f19f5a200..50e71776183 100644
--- a/libjava/classpath/native/jni/classpath/Makefile.in
+++ b/libjava/classpath/native/jni/classpath/Makefile.in
@@ -135,6 +135,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -146,6 +147,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/gconf-peer/Makefile.in b/libjava/classpath/native/jni/gconf-peer/Makefile.in
index 1a13a583f1e..3642c1d501f 100644
--- a/libjava/classpath/native/jni/gconf-peer/Makefile.in
+++ b/libjava/classpath/native/jni/gconf-peer/Makefile.in
@@ -145,6 +145,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -156,6 +157,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/gtk-peer/Makefile.in b/libjava/classpath/native/jni/gtk-peer/Makefile.in
index 5f10c0f146f..ea5d7cf4f31 100644
--- a/libjava/classpath/native/jni/gtk-peer/Makefile.in
+++ b/libjava/classpath/native/jni/gtk-peer/Makefile.in
@@ -184,6 +184,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -195,6 +196,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/java-io/Makefile.in b/libjava/classpath/native/jni/java-io/Makefile.in
index ed9a2e6412a..2e741a9104e 100644
--- a/libjava/classpath/native/jni/java-io/Makefile.in
+++ b/libjava/classpath/native/jni/java-io/Makefile.in
@@ -146,6 +146,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -157,6 +158,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/java-lang/Makefile.in b/libjava/classpath/native/jni/java-lang/Makefile.in
index 0109ee535bc..2bb1abdb201 100644
--- a/libjava/classpath/native/jni/java-lang/Makefile.in
+++ b/libjava/classpath/native/jni/java-lang/Makefile.in
@@ -152,6 +152,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -163,6 +164,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/java-net/Makefile.in b/libjava/classpath/native/jni/java-net/Makefile.in
index ad47131edd1..f66f6c78ddf 100644
--- a/libjava/classpath/native/jni/java-net/Makefile.in
+++ b/libjava/classpath/native/jni/java-net/Makefile.in
@@ -156,6 +156,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -167,6 +168,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/java-nio/Makefile.in b/libjava/classpath/native/jni/java-nio/Makefile.in
index 3109baa00d6..5e0fecf9e19 100644
--- a/libjava/classpath/native/jni/java-nio/Makefile.in
+++ b/libjava/classpath/native/jni/java-nio/Makefile.in
@@ -154,6 +154,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -165,6 +166,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/java-util/Makefile.in b/libjava/classpath/native/jni/java-util/Makefile.in
index a66bacde497..dc5987deafd 100644
--- a/libjava/classpath/native/jni/java-util/Makefile.in
+++ b/libjava/classpath/native/jni/java-util/Makefile.in
@@ -143,6 +143,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -154,6 +155,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/midi-alsa/Makefile.in b/libjava/classpath/native/jni/midi-alsa/Makefile.in
index 843000dc26f..c8374b1428e 100644
--- a/libjava/classpath/native/jni/midi-alsa/Makefile.in
+++ b/libjava/classpath/native/jni/midi-alsa/Makefile.in
@@ -146,6 +146,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -157,6 +158,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/midi-dssi/Makefile.in b/libjava/classpath/native/jni/midi-dssi/Makefile.in
index 177e9c34d50..a282ca2f680 100644
--- a/libjava/classpath/native/jni/midi-dssi/Makefile.in
+++ b/libjava/classpath/native/jni/midi-dssi/Makefile.in
@@ -146,6 +146,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -157,6 +158,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/native-lib/Makefile.in b/libjava/classpath/native/jni/native-lib/Makefile.in
index e3991a7b7e6..40a9c66ac2c 100644
--- a/libjava/classpath/native/jni/native-lib/Makefile.in
+++ b/libjava/classpath/native/jni/native-lib/Makefile.in
@@ -135,6 +135,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -146,6 +147,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/qt-peer/Makefile.in b/libjava/classpath/native/jni/qt-peer/Makefile.in
index 671e3929e2e..86673c3a6f8 100644
--- a/libjava/classpath/native/jni/qt-peer/Makefile.in
+++ b/libjava/classpath/native/jni/qt-peer/Makefile.in
@@ -161,6 +161,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -172,6 +173,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/jni/xmlj/Makefile.in b/libjava/classpath/native/jni/xmlj/Makefile.in
index 693319a85db..883968bebc8 100644
--- a/libjava/classpath/native/jni/xmlj/Makefile.in
+++ b/libjava/classpath/native/jni/xmlj/Makefile.in
@@ -145,6 +145,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -156,6 +157,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/native/plugin/Makefile.in b/libjava/classpath/native/plugin/Makefile.in
index 11d74d4e8b0..41729c879e7 100644
--- a/libjava/classpath/native/plugin/Makefile.in
+++ b/libjava/classpath/native/plugin/Makefile.in
@@ -143,6 +143,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -154,6 +155,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/resource/META-INF/services/org.w3c.dom.DOMImplementationSourceList b/libjava/classpath/resource/META-INF/services/org.w3c.dom.DOMImplementationSourceList
new file mode 100644
index 00000000000..bb17a17be08
--- /dev/null
+++ b/libjava/classpath/resource/META-INF/services/org.w3c.dom.DOMImplementationSourceList
@@ -0,0 +1 @@
+gnu.xml.dom.ImplementationSource
diff --git a/libjava/classpath/resource/Makefile.in b/libjava/classpath/resource/Makefile.in
index 561fcd56b27..897955656ea 100644
--- a/libjava/classpath/resource/Makefile.in
+++ b/libjava/classpath/resource/Makefile.in
@@ -128,6 +128,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -139,6 +140,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/resource/com/sun/tools/javac/messages.properties b/libjava/classpath/resource/com/sun/tools/javac/messages.properties
new file mode 100644
index 00000000000..58ba926f089
--- /dev/null
+++ b/libjava/classpath/resource/com/sun/tools/javac/messages.properties
@@ -0,0 +1,42 @@
+# messages.properties -- English language messages
+# Copyright (C) 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Classpath.
+#
+# GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA.
+#
+# Linking this library statically or dynamically with other modules is
+# making a combined work based on this library. Thus, the terms and
+# conditions of the GNU General Public License cover the whole
+# combination.
+#
+# As a special exception, the copyright holders of this library give you
+# permission to link this library with independent modules to produce an
+# executable, regardless of the license terms of these independent
+# modules, and to copy and distribute the resulting executable under
+# terms of your choice, provided that you also meet, for each linked
+# independent module, the terms and conditions of the license of that
+# module. An independent module is a module which is not derived from
+# or based on this library. If you modify this library, you may extend
+# this exception to your version of the library, but you are not
+# obligated to do so. If you do not wish to do so, delete this
+# exception statement from your version.
+
+Main.FailedToRead:failed to read {0}
+Main.MalformedURL:malformed URL for {0}
+Main.FailedToLoad:failed to load {0} from {1}
+Main.FailedConstructor:failed to find ecj constructor
+Main.FailedCompile:failed to find ecj compile method
diff --git a/libjava/classpath/resource/sun/rmi/rmic/messages.properties b/libjava/classpath/resource/sun/rmi/rmic/messages.properties
new file mode 100644
index 00000000000..4c897fd5e67
--- /dev/null
+++ b/libjava/classpath/resource/sun/rmi/rmic/messages.properties
@@ -0,0 +1,38 @@
+# messages.properties -- English language messages
+# Copyright (C) 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Classpath.
+#
+# GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA.
+#
+# Linking this library statically or dynamically with other modules is
+# making a combined work based on this library. Thus, the terms and
+# conditions of the GNU General Public License cover the whole
+# combination.
+#
+# As a special exception, the copyright holders of this library give you
+# permission to link this library with independent modules to produce an
+# executable, regardless of the license terms of these independent
+# modules, and to copy and distribute the resulting executable under
+# terms of your choice, provided that you also meet, for each linked
+# independent module, the terms and conditions of the license of that
+# module. An independent module is a module which is not derived from
+# or based on this library. If you modify this library, you may extend
+# this exception to your version of the library, but you are not
+# obligated to do so. If you do not wish to do so, delete this
+# exception statement from your version.
+
+Main.InternalError:sun.rmi.rmic: failed to run rmic main method
diff --git a/libjava/classpath/scripts/Makefile.in b/libjava/classpath/scripts/Makefile.in
index 9811bfff71e..dbeda952f4f 100644
--- a/libjava/classpath/scripts/Makefile.in
+++ b/libjava/classpath/scripts/Makefile.in
@@ -118,6 +118,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -129,6 +130,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
diff --git a/libjava/classpath/tools/Makefile.am b/libjava/classpath/tools/Makefile.am
index 8ba984bb314..22f0d026d7b 100755
--- a/libjava/classpath/tools/Makefile.am
+++ b/libjava/classpath/tools/Makefile.am
@@ -16,6 +16,16 @@ error dunno how to setup the JCOMPILER and compile
endif
endif
+if FOUND_ECJ_JAR
+COM_SUN_TOOLS_JAVAC = com/sun/tools/javac
+ABS_COM_SUN_TOOLS_JAVAC = $(srcdir)/$(COM_SUN_TOOLS_JAVAC)
+ABS_COM_SUN_TOOLS_JAVAC_SRCS = $(ABS_COM_SUN_TOOLS_JAVAC)/*.java
+else
+COM_SUN_TOOLS_JAVAC =
+ABS_COM_SUN_TOOLS_JAVAC =
+ABS_COM_SUN_TOOLS_JAVAC_SRCS =
+endif
+
if CREATE_WRAPPERS
bin_SCRIPTS =
bin_PROGRAMS = gappletviewer gjarsigner gkeytool \
@@ -101,6 +111,10 @@ EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in \
# All our example java source files
TOOLS_JAVA_FILES = $(srcdir)/gnu/classpath/tools/*/*.java \
+ $(srcdir)/com/sun/javadoc/*.java \
+ $(srcdir)/com/sun/tools/doclets/*.java \
+ $(ABS_COM_SUN_TOOLS_JAVAC_SRCS) \
+ $(srcdir)/sun/rmi/rmic/*.java \
$(srcdir)/external/asm/org/objectweb/asm/*.java \
$(srcdir)/external/asm/org/objectweb/asm/attrs/*.java \
$(srcdir)/external/asm/org/objectweb/asm/commons/*.java \
@@ -154,8 +168,14 @@ $(TOOLS_ZIP): $(TOOLS_JAVA_FILES)
## @rm -rf classes asm
## mkdir classes asm
find $(srcdir)/external/asm -name '*.java' -print > asm.lst
- find $(srcdir)/gnu/classpath/tools -name '*.java' -print > classes.lst
+ find $(srcdir)/gnu/classpath/tools \
+ $(srcdir)/com/sun/javadoc \
+ $(srcdir)/com/sun/tools/doclets \
+ $(ABS_COM_SUN_TOOLS_JAVAC) \
+ $(srcdir)/sun/rmi/rmic \
+ -name '*.java' -print > classes.lst
if [ -f $(top_builddir)/../vm-tools-packages ]; then \
+ : > vm-tools.lst; \
for pkg in `cat $(top_builddir)/../vm-tools-packages`; do \
$(FIND) $(top_srcdir)/../$$pkg -follow -name '*.java' -print >> vm-tools.lst; \
done \
@@ -169,7 +189,9 @@ if JAVA_MAINTAINER_MODE
$$AC -g -w -d $(srcdir)/asm @asm.lst
$(JCOMPILER) -g -w -d $(srcdir)/classes @classes.lst @vm-tools.lst
## Copy over tools resource files.
- @list=`cd $(top_srcdir)/resource && find gnu/classpath/tools -name \*.properties -print`; \
+ @list=`cd $(top_srcdir)/resource && find gnu/classpath/tools \
+ com/sun/javadoc com/sun/tools/doclets $(COM_SUN_TOOLS_JAVAC) \
+ sun/rmi/rmic -name \*.properties -print`; \
for p in $$list; do \
dirname=classes/`dirname $$p`; \
if ! test -d "$$dirname"; then mkdir -p "$$dirname"; fi; \
diff --git a/libjava/classpath/tools/Makefile.in b/libjava/classpath/tools/Makefile.in
index 960dc6e0035..884658378af 100644
--- a/libjava/classpath/tools/Makefile.in
+++ b/libjava/classpath/tools/Makefile.in
@@ -220,6 +220,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
ECJ = @ECJ@
+ECJ_JAR = @ECJ_JAR@
EGREP = @EGREP@
ENABLE_LOCAL_SOCKETS_FALSE = @ENABLE_LOCAL_SOCKETS_FALSE@
ENABLE_LOCAL_SOCKETS_TRUE = @ENABLE_LOCAL_SOCKETS_TRUE@
@@ -231,6 +232,8 @@ FIND = @FIND@
FOUND_CACAO_FALSE = @FOUND_CACAO_FALSE@
FOUND_CACAO_TRUE = @FOUND_CACAO_TRUE@
FOUND_ECJ_FALSE = @FOUND_ECJ_FALSE@
+FOUND_ECJ_JAR_FALSE = @FOUND_ECJ_JAR_FALSE@
+FOUND_ECJ_JAR_TRUE = @FOUND_ECJ_JAR_TRUE@
FOUND_ECJ_TRUE = @FOUND_ECJ_TRUE@
FOUND_GCJX_FALSE = @FOUND_GCJX_FALSE@
FOUND_GCJX_TRUE = @FOUND_GCJX_TRUE@
@@ -395,6 +398,12 @@ GLIBJ_CLASSPATH = $(srcdir)/asm
# Setup the compiler to use the GNU Classpath library we just build
@FOUND_GCJ_TRUE@JCOMPILER = $(GCJ) -C -encoding UTF-8 -bootclasspath $(GLIBJ_BOOTCLASSPATH) -classpath $(GLIBJ_CLASSPATH):.
+@FOUND_ECJ_JAR_FALSE@COM_SUN_TOOLS_JAVAC =
+@FOUND_ECJ_JAR_TRUE@COM_SUN_TOOLS_JAVAC = com/sun/tools/javac
+@FOUND_ECJ_JAR_FALSE@ABS_COM_SUN_TOOLS_JAVAC =
+@FOUND_ECJ_JAR_TRUE@ABS_COM_SUN_TOOLS_JAVAC = $(srcdir)/$(COM_SUN_TOOLS_JAVAC)
+@FOUND_ECJ_JAR_FALSE@ABS_COM_SUN_TOOLS_JAVAC_SRCS =
+@FOUND_ECJ_JAR_TRUE@ABS_COM_SUN_TOOLS_JAVAC_SRCS = $(ABS_COM_SUN_TOOLS_JAVAC)/*.java
@CREATE_WRAPPERS_TRUE@bin_SCRIPTS =
@CREATE_WRAPPERS_TRUE@AM_CPPFLAGS = -Wall \
@CREATE_WRAPPERS_TRUE@ -I$(top_srcdir)/include \
@@ -472,6 +481,10 @@ EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in \
# All our example java source files
TOOLS_JAVA_FILES = $(srcdir)/gnu/classpath/tools/*/*.java \
+ $(srcdir)/com/sun/javadoc/*.java \
+ $(srcdir)/com/sun/tools/doclets/*.java \
+ $(ABS_COM_SUN_TOOLS_JAVAC_SRCS) \
+ $(srcdir)/sun/rmi/rmic/*.java \
$(srcdir)/external/asm/org/objectweb/asm/*.java \
$(srcdir)/external/asm/org/objectweb/asm/attrs/*.java \
$(srcdir)/external/asm/org/objectweb/asm/commons/*.java \
@@ -1078,8 +1091,14 @@ dist-hook:
# so they get also included.
$(TOOLS_ZIP): $(TOOLS_JAVA_FILES)
find $(srcdir)/external/asm -name '*.java' -print > asm.lst
- find $(srcdir)/gnu/classpath/tools -name '*.java' -print > classes.lst
+ find $(srcdir)/gnu/classpath/tools \
+ $(srcdir)/com/sun/javadoc \
+ $(srcdir)/com/sun/tools/doclets \
+ $(ABS_COM_SUN_TOOLS_JAVAC) \
+ $(srcdir)/sun/rmi/rmic \
+ -name '*.java' -print > classes.lst
if [ -f $(top_builddir)/../vm-tools-packages ]; then \
+ : > vm-tools.lst; \
for pkg in `cat $(top_builddir)/../vm-tools-packages`; do \
$(FIND) $(top_srcdir)/../$$pkg -follow -name '*.java' -print >> vm-tools.lst; \
done \
@@ -1090,7 +1109,9 @@ $(TOOLS_ZIP): $(TOOLS_JAVA_FILES)
@JAVA_MAINTAINER_MODE_TRUE@ AC=`echo $(JCOMPILER) | sed -e 's/UTF-8/ISO-8859-1/g'`; \
@JAVA_MAINTAINER_MODE_TRUE@ $$AC -g -w -d $(srcdir)/asm @asm.lst
@JAVA_MAINTAINER_MODE_TRUE@ $(JCOMPILER) -g -w -d $(srcdir)/classes @classes.lst @vm-tools.lst
-@JAVA_MAINTAINER_MODE_TRUE@ @list=`cd $(top_srcdir)/resource && find gnu/classpath/tools -name \*.properties -print`; \
+@JAVA_MAINTAINER_MODE_TRUE@ @list=`cd $(top_srcdir)/resource && find gnu/classpath/tools \
+@JAVA_MAINTAINER_MODE_TRUE@ com/sun/javadoc com/sun/tools/doclets $(COM_SUN_TOOLS_JAVAC) \
+@JAVA_MAINTAINER_MODE_TRUE@ sun/rmi/rmic -name \*.properties -print`; \
@JAVA_MAINTAINER_MODE_TRUE@ for p in $$list; do \
@JAVA_MAINTAINER_MODE_TRUE@ dirname=classes/`dirname $$p`; \
@JAVA_MAINTAINER_MODE_TRUE@ if ! test -d "$$dirname"; then mkdir -p "$$dirname"; fi; \
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ClassDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/ClassDoc.class
new file mode 100644
index 00000000000..8f362399f69
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ClassDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ConstructorDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/ConstructorDoc.class
new file mode 100644
index 00000000000..e9c221679e1
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ConstructorDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/Doc.class b/libjava/classpath/tools/classes/com/sun/javadoc/Doc.class
new file mode 100644
index 00000000000..8b98e630029
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/Doc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/DocErrorReporter.class b/libjava/classpath/tools/classes/com/sun/javadoc/DocErrorReporter.class
new file mode 100644
index 00000000000..2dec2356741
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/DocErrorReporter.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/Doclet.class b/libjava/classpath/tools/classes/com/sun/javadoc/Doclet.class
new file mode 100644
index 00000000000..2def74479bf
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/Doclet.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ExecutableMemberDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/ExecutableMemberDoc.class
new file mode 100644
index 00000000000..84c69f1faf0
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ExecutableMemberDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/FieldDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/FieldDoc.class
new file mode 100644
index 00000000000..da5da74ceb2
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/FieldDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/MemberDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/MemberDoc.class
new file mode 100644
index 00000000000..50b630addeb
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/MemberDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/MethodDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/MethodDoc.class
new file mode 100644
index 00000000000..7789f8b556b
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/MethodDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/PackageDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/PackageDoc.class
new file mode 100644
index 00000000000..ba51efc3400
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/PackageDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ParamTag.class b/libjava/classpath/tools/classes/com/sun/javadoc/ParamTag.class
new file mode 100644
index 00000000000..c8da5294dd4
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ParamTag.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/Parameter.class b/libjava/classpath/tools/classes/com/sun/javadoc/Parameter.class
new file mode 100644
index 00000000000..beff569c90e
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/Parameter.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ProgramElementDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/ProgramElementDoc.class
new file mode 100644
index 00000000000..1ec3cbb2588
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ProgramElementDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/RootDoc.class b/libjava/classpath/tools/classes/com/sun/javadoc/RootDoc.class
new file mode 100644
index 00000000000..32409f6e91d
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/RootDoc.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/SeeTag.class b/libjava/classpath/tools/classes/com/sun/javadoc/SeeTag.class
new file mode 100644
index 00000000000..f55cfde339c
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/SeeTag.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/SerialFieldTag.class b/libjava/classpath/tools/classes/com/sun/javadoc/SerialFieldTag.class
new file mode 100644
index 00000000000..f57ecac0137
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/SerialFieldTag.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/SourcePosition.class b/libjava/classpath/tools/classes/com/sun/javadoc/SourcePosition.class
new file mode 100644
index 00000000000..a2825817f83
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/SourcePosition.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/Tag.class b/libjava/classpath/tools/classes/com/sun/javadoc/Tag.class
new file mode 100644
index 00000000000..efeeab1a3d5
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/Tag.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/ThrowsTag.class b/libjava/classpath/tools/classes/com/sun/javadoc/ThrowsTag.class
new file mode 100644
index 00000000000..7d69e5693a3
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/ThrowsTag.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/Type.class b/libjava/classpath/tools/classes/com/sun/javadoc/Type.class
new file mode 100644
index 00000000000..e264003997c
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/Type.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/javadoc/TypeVariable.class b/libjava/classpath/tools/classes/com/sun/javadoc/TypeVariable.class
new file mode 100644
index 00000000000..c9fc10f04c4
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/javadoc/TypeVariable.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/com/sun/tools/doclets/Taglet.class b/libjava/classpath/tools/classes/com/sun/tools/doclets/Taglet.class
new file mode 100644
index 00000000000..929a3d40802
--- /dev/null
+++ b/libjava/classpath/tools/classes/com/sun/tools/doclets/Taglet.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$1.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$1.class
new file mode 100644
index 00000000000..12eb3151340
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$1.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$2.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$2.class
new file mode 100644
index 00000000000..3163e841f12
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$2.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$3.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$3.class
new file mode 100644
index 00000000000..0dbe2c8765b
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$3.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$4.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$4.class
new file mode 100644
index 00000000000..56d4887a78c
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$4.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$5.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$5.class
new file mode 100644
index 00000000000..362d0e0e3c6
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$5.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$6.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$6.class
new file mode 100644
index 00000000000..95442022683
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$6.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$7.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$7.class
new file mode 100644
index 00000000000..7617743d3cd
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$7.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$8.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$8.class
new file mode 100644
index 00000000000..5412b9d6d59
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$8.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$9.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$9.class
new file mode 100644
index 00000000000..0a7b34f0ee9
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain$9.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain.class
new file mode 100644
index 00000000000..961fa5cd7a5
--- /dev/null
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/GcjhMain.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class
index 6ec567c1487..8c33dd3413a 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class
index a4a19b45b9d..7bebfc82846 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class
index 68e8f836405..b59e0172203 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class
index ef7248bf94b..db5582d6723 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class
index 0bcc04437b1..ef703810380 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class
index 9b90b1e6838..e2e627dd34c 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class
index 8d0e8b0bf47..249ec5ceb10 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class
index ba3351cf081..001bfa06185 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class
index 4f71d9ef104..aee9be7d924 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class
index c20b0af67c8..27c3b7e6fa3 100644
--- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class
+++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/sun/rmi/rmic/Main.class b/libjava/classpath/tools/classes/sun/rmi/rmic/Main.class
new file mode 100644
index 00000000000..42ce06a00cd
--- /dev/null
+++ b/libjava/classpath/tools/classes/sun/rmi/rmic/Main.class
Binary files differ
diff --git a/libjava/classpath/tools/classes/sun/rmi/rmic/Messages.class b/libjava/classpath/tools/classes/sun/rmi/rmic/Messages.class
new file mode 100644
index 00000000000..87b8b987c83
--- /dev/null
+++ b/libjava/classpath/tools/classes/sun/rmi/rmic/Messages.class
Binary files differ
diff --git a/libjava/classpath/tools/com/sun/javadoc/ClassDoc.java b/libjava/classpath/tools/com/sun/javadoc/ClassDoc.java
new file mode 100644
index 00000000000..a4fa40a7cf7
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ClassDoc.java
@@ -0,0 +1,322 @@
+/* ClassDoc.java -- Document a Java class or interface
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+public interface ClassDoc extends ProgramElementDoc, Type
+{
+
+/**
+ * This method tests whether or not the class represented by this object
+ * is abstract.
+ *
+ * @return <code>true</code> if the class is abstract, <code>false</code>,
+ * otherwise.
+ */
+public abstract boolean
+isAbstract();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the class represented by this object
+ * is serializable. That is, whether or not the class implements the
+ * <code>java.io.Serializable</code> interface. This includes classes
+ * which are externalizable.
+ *
+ * @return <code>true</code> if the class is serializable,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isSerializable();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the class represented by this object
+ * is externalizable. That is, whether or not the class implements the
+ * <code>java.io.Externalizable</code> interface.
+ *
+ * @return <code>true</code> if the class is externalizable,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isExternalizable();
+
+/*************************************************************************/
+
+/**
+ * This method returns the serialization methods for the class
+ * represented by this object. Is the custom readObject/writeObject
+ * methods?
+ *
+ * @return The serialization methods for this class.
+ */
+public abstract MethodDoc[]
+serializationMethods();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of fields that are serialized in this
+ * class. This will return either the list of fields with an
+ * "@serial" declaration, or, if it exists, the
+ * <code>serialPersistentField</code> field.
+ *
+ * @return The list of serializable fields.
+ */
+public abstract FieldDoc[]
+serializableFields();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the class represented by this object
+ * specifically defines its serializable fields in a
+ * <code>serialPersistentFields</code> field.
+ *
+ * @return <code>true</code> if this class explicitly defines its
+ * serializable fields, <code>false</code> otherwise.
+ */
+public abstract boolean
+definesSerializableFields();
+
+/*************************************************************************/
+
+/**
+ * This method returns the superclass of the class represented by this
+ * object.
+ *
+ * @return The superclass of this class.
+ */
+public abstract ClassDoc
+superclass();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the class represented by this object is
+ * a subclass of the specified class.
+ *
+ * @param cls The <code>ClassDoc</code> object of the class to test against.
+ *
+ * @return <code>true</code> if this class is a subclass of the specified
+ * class, <code>false</code> otherwise.
+ */
+public abstract boolean
+subclassOf(ClassDoc cls);
+
+/*************************************************************************/
+
+/**
+ * This method returns this list of interfaces implemented (or in the case
+ * of interfaces, extended) by this class. This list will only include
+ * interfaces directly implemented by this class, not those inherited by
+ * interfaced implemented in this class.
+ *
+ * @return The list of interfaces this class implements.
+ */
+public abstract ClassDoc[]
+interfaces();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of fields that are visible to the user in
+ * this class, or the list of all fields in this class.
+ *
+ * @param filtered if true, only return visible (included) fields;
+ * otherwise, return all fields.
+ *
+ * @return The list of visible fields in this class, or the list of
+ * all fields in this class.
+ */
+public abstract FieldDoc[]
+fields(boolean filtered);
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of fields that are visible to the user in
+ * this class. Does this depend on the -private -protected, etc flags
+ * passed to javadoc?
+ *
+ * @return The list of visible fields in this class.
+ */
+public abstract FieldDoc[]
+fields();
+
+/*************************************************************************/
+
+/**
+ * This method returns either the list of methods that are visible to
+ * the user in the class represented by this object, or a list of all
+ * methods, excluding constructor methods.
+ *
+ * @param filtered if true, only return visible (included) methods;
+ * otherwise, return all methods.
+ *
+ * @return The list of all methods in this class, or the list of
+ * visible methods in this class.
+ */
+public abstract MethodDoc[]
+methods(boolean filtered);
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of methods that are visible to the user in
+ * the class represented by this object, excluding constructor methods.
+ *
+ * @return The list of visible methods in this class.
+ */
+public abstract MethodDoc[]
+methods();
+
+/*************************************************************************/
+
+/**
+ * This method returns either the list of constructors that are
+ * visible to the user in the class represented by this object, or
+ * the list of all constructors.
+ *
+ * @param filtered if true, only return visible (included)
+ * constructors; otherwise, return all constructors.
+ *
+ * @return The list of all constructors in this class, or the list
+ * of visible constructors in this class.
+ */
+public abstract ConstructorDoc[]
+constructors(boolean filtered);
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of constructors that are visible to the user
+ * in the class represented by this object.
+ *
+ * @return The list visible constructors in this class.
+ */
+public abstract ConstructorDoc[]
+constructors();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of inner classes that are visible to
+ * the user within the class represented by this object.
+ *
+ * @return The list of visible inner classes for this object.
+ */
+public abstract ClassDoc[]
+innerClasses();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of all inner classes within the class
+ * represented by this object, or the list of visible inner classes
+ * in this class.
+ *
+ * @param filtered if true, only return visible (included) inner
+ * classes; otherwise, return all inner classes.
+ *
+ * @return The list of all inner classes for this object, or the list
+ * of visible inner classes.
+ */
+public abstract ClassDoc[]
+innerClasses(boolean filtered);
+
+/*************************************************************************/
+
+/**
+ * This method returns a <code>ClassDoc</code> for the named class. The
+ * following search order is used:
+ * <p>
+ * <ol>
+ * <li>Fully qualified class name.
+ * <li>Inner classes within this class.
+ * <li>In the current package.
+ * <li>In the imports for this class.
+ * </ol>
+ *
+ * @param name The name of the class to find.
+ *
+ * @return The requested class, or <code>null</code> if the requested
+ * class cannot be found.
+ */
+public abstract ClassDoc
+findClass(String name);
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of classes that are imported. This
+ * excludes any imports of complete packages.
+ *
+ * @return The list of imported classes.
+ */
+public abstract ClassDoc[]
+importedClasses();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of packages that are imported. This
+ * excludes any individual class imports.
+ *
+ * @return The list of imported packages.
+ */
+public abstract PackageDoc[]
+importedPackages();
+
+/*************************************************************************/
+
+/**
+ * This method returns the formal type parameters of this class.
+ * The returned array is empty if the class does not represent a
+ * parameterized type.
+ *
+ * @return The list of type parameters.
+ * @since 1.5
+ */
+TypeVariable[]
+typeParameters();
+
+} // interface ClassDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/ConstructorDoc.java b/libjava/classpath/tools/com/sun/javadoc/ConstructorDoc.java
new file mode 100644
index 00000000000..e9db4591c79
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ConstructorDoc.java
@@ -0,0 +1,57 @@
+/* ConstructorDoc.java -- Document a Java class constructor
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface is used for documenting constructors.
+ */
+public interface ConstructorDoc extends ExecutableMemberDoc
+{
+
+/**
+ * This method returns the qualified name of the constructor. What is this
+ * really?
+ *
+ * @return The qualified name of the constructor.
+ */
+public abstract String
+qualifiedName();
+
+} // interface ConstructorDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/Doc.java b/libjava/classpath/tools/com/sun/javadoc/Doc.java
new file mode 100644
index 00000000000..425c85718f2
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/Doc.java
@@ -0,0 +1,265 @@
+/* Doc.java -- Model of an item to document.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface is the super-interface of all items that can have
+ * Javadoc comments associated with them.
+ */
+public interface Doc extends java.io.Serializable, Comparable
+{
+
+/**
+ * This method returns the text of the comment for this item, with all
+ * tags stripped.
+ *
+ * @return The comment text for this item.
+ */
+public abstract String
+commentText();
+
+/*************************************************************************/
+
+/**
+ * This method returns an array of all the tags in this item.
+ *
+ * @return An array of tags for this item.
+ */
+public abstract Tag[]
+tags();
+
+/*************************************************************************/
+
+/**
+ * This method returns an array of all the tags of the specified type
+ * in this item.
+ *
+ * @param tagtype The name of the tag type to return.
+ *
+ * @return A list of all tags of the specified type.
+ */
+public abstract Tag[]
+tags(String tagtype);
+
+/*************************************************************************/
+
+/**
+ * This method returns an array of all tags of the "@see" type.
+ *
+ * @return An array of tags of the "@see" type
+ */
+public abstract SeeTag[]
+seeTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the comment text as an array of tags. This will
+ * include any inline tags, but no regular tags. Regular text is returned
+ * as a type of <code>Text</code>. Inline "@see" tags are returned as
+ * type <code>SeeTag</code>.
+ *
+ * @return The comment text as tags.
+ */
+public abstract Tag[]
+inlineTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the first sentence of the comment text as an array
+ * of tags. This will include any inline tags, but no regular tags.
+ * Regular text is returned as a type of <code>Text</code>. Inline "@see"
+ * tags are returned as type <code>SeeTag</code>.
+ *
+ * @return An array of tags representing the first sentence of the comment
+ * text.
+ */
+public abstract Tag[]
+firstSentenceTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the text of the comment in an unprocessed format.
+ * Any Javadoc tags will remain as written in the text.
+ *
+ * @return The unprocessed comment text.
+ */
+public abstract String
+getRawCommentText();
+
+/*************************************************************************/
+
+/**
+ * This method sets the unprocessed comment text for this item.
+ *
+ * @param rawtext The unprocessed comment text for this itme.
+ */
+public abstract void
+setRawCommentText(String rawtext);
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of this item.
+ *
+ * @return The name of this item.
+ */
+public abstract String
+name();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is a field.
+ *
+ * @return <code>true</code> if this item is a field, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isField();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is a method.
+ *
+ * @return <code>true</code> if this item is a method, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isMethod();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is a constructor.
+ *
+ * @return <code>true</code> if this item is a constructor,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isConstructor();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is an interface.
+ *
+ * @return <code>true</code> if this item is an interface,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isInterface();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is an exception.
+ *
+ * @return <code>true</code> if this item is an exception,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isException();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is an error.
+ *
+ * @return <code>true</code> if this item is an error,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isError();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is a class. Interfaces
+ * do not count as classes.
+ *
+ * @return <code>true</code> if this item is a class,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isClass();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is an ordinary class. An
+ * ordinary class is a class that is not an exception or an error.
+ * Interfaces also do not count because they are not considered classes at
+ * all.
+ *
+ * @return <code>true</code> if this item is an ordinary class,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isOrdinaryClass();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this item is part of the active set,
+ * whatever that is.
+ *
+ * @return <code>true</code> if this item is part of the active set,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isIncluded();
+
+/*************************************************************************/
+
+/**
+ * This method returns the location of the item within the Java
+ * source code.
+ *
+ * @return an object describing the file, line and column where this
+ * item is defined.
+ */
+public abstract SourcePosition
+position();
+
+} // interface Doc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/DocErrorReporter.java b/libjava/classpath/tools/com/sun/javadoc/DocErrorReporter.java
new file mode 100644
index 00000000000..c4d05e7006d
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/DocErrorReporter.java
@@ -0,0 +1,77 @@
+/* DocErrorReporter.java -- Log errors/warnings during doc generation.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface provides a mechanism for a doclet to log messages
+ * during its run.
+ */
+public interface DocErrorReporter
+{
+
+/**
+ * This method prints the specified error message.
+ *
+ * @param err The error message to print.
+ */
+public abstract void
+printError(String err);
+
+/*************************************************************************/
+
+/**
+ * This method prints the specified warning message.
+ *
+ * @param warn The warning message to print.
+ */
+public abstract void
+printWarning(String warn);
+
+/*************************************************************************/
+
+/**
+ * This method prints the specifed message.
+ *
+ * @param msg The message to print.
+ */
+public abstract void
+printNotice(String notice);
+
+} // interface DocErrorReporter
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/Doclet.java b/libjava/classpath/tools/com/sun/javadoc/Doclet.java
new file mode 100644
index 00000000000..7ce4b29ef96
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/Doclet.java
@@ -0,0 +1,99 @@
+/* Doclet.java -- Doclet API
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This class documents the method that must be implemented by a doclet.
+ * It may be used as the superclass of a doclet, but this is not required.
+ * As long as the doclet implements the <code>start</code> method, all is ok.
+ */
+public abstract class Doclet
+{
+
+/**
+ * This is the entry point to a doclet. All doclets must implement this
+ * method.
+ *
+ * @param rd The <code>RootDoc</code> instance for this javadoc run.
+ *
+ * @return <code>true</code> on success, <code>false</code> on failure.
+ */
+public static boolean
+start(RootDoc root)
+{
+ return(false);
+}
+
+/*************************************************************************/
+
+/**
+ * This method returns the number of arguments to the option, including
+ * the option itself. This is not required of doclets.
+ *
+ * @param opt The option to check.
+ *
+ * @return The number of arguments to the option, or zero if the option is
+ * unknown, or a negative number if an error occurred.
+ */
+public static int
+optionLength(String opt)
+{
+ return(0);
+}
+
+/*************************************************************************/
+
+/**
+ * This method is called to verify that the options supplied by the caller
+ * are valid. This is not required of doclets.
+ *
+ * @param opts The list of options supplied by the user.
+ * @param logger A mechanism for this method to report errors to the user.
+ *
+ * @return <code>true</code> if the options are valid, <code>false</code>
+ * otherwise.
+ */
+public static boolean
+validOptions(String[][] opts, DocErrorReporter logger)
+{
+ return(true);
+}
+
+} // class Doclet
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/ExecutableMemberDoc.java b/libjava/classpath/tools/com/sun/javadoc/ExecutableMemberDoc.java
new file mode 100644
index 00000000000..8d4ddab6694
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ExecutableMemberDoc.java
@@ -0,0 +1,138 @@
+/* ExecutableMemberDoc.java -- Document methods and constructors
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This is the super-interface for interfaces describing constructors and
+ * methods.
+ */
+public interface ExecutableMemberDoc extends MemberDoc
+{
+
+/**
+ * This method returns a list of all the execeptions that are declared
+ * to be thrown in this method or constructor.
+ *
+ * @return The list of exceptions for this method.
+ */
+public abstract ClassDoc[]
+thrownExceptions();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this method/constructor is native.
+ *
+ * @return <code>true</code> if the method is native, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isNative();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this method/constructor is
+ * synchronized.
+ *
+ * @return <code>true</code> if the method is synchronized,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isSynchronized();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of parameters for this method/constructor.
+ *
+ * @return The list of parameters for this method.
+ */
+public abstract Parameter[]
+parameters();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of "@throws" and "@exception" tags in this
+ * method/constructor.
+ *
+ * @return The list of exception doc tags.
+ */
+public abstract ThrowsTag[]
+throwsTags();
+
+/*************************************************************************/
+
+/**
+ * This method return the list of "@param" tags in this method/constructor.
+ *
+ * @return The list of parameter doc tags for this method.
+ */
+public abstract ParamTag[]
+paramTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the signature of this method in pseudo-code format,
+ * with fully qualified class references. For example, the method
+ * <code>read(String str, boolean bool)</code> would have the signature
+ * <code>(java.lang.String, boolean)</code> returned by this method.
+ *
+ * @return The signature for this method.
+ */
+public abstract String
+signature();
+
+/*************************************************************************/
+
+/**
+ * This method returns the signature of this method in pseudo-code format,
+ * with uqualified class references. For example, the method
+ * <code>read(String str, boolean bool)</code> would have the signature
+ * <code>(String, boolean)</code> returned by this method.
+ *
+ * @return The signature for this method.
+ */
+public abstract String
+flatSignature();
+
+} // interface ExecutableMemberDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/FieldDoc.java b/libjava/classpath/tools/com/sun/javadoc/FieldDoc.java
new file mode 100644
index 00000000000..a5e48c4c147
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/FieldDoc.java
@@ -0,0 +1,113 @@
+/* FieldDoc.java -- Document a field
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This package is used for documenting fields.
+ */
+public interface FieldDoc extends MemberDoc
+{
+
+/**
+ * This method returns the type of this field.
+ *
+ * @return The type of this field.
+ */
+public abstract Type
+type();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the field is transient.
+ *
+ * @return <code>true</code> if the field is transient, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isTransient();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not the field is volatile.
+ *
+ * @return <code>true</code> if the field is volatile, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isVolatile();
+
+/*************************************************************************/
+
+/**
+ * This method returns a list of all "@serialField" tags defined in this
+ * field.
+ *
+ * @return The list of "@serialField" tags for this field.
+ */
+public abstract SerialFieldTag[]
+serialFieldTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the value of this static field.
+ *
+ * @return The value of this static field.
+ */
+public abstract Object
+constantValue();
+
+
+/*************************************************************************/
+
+/**
+ * This method returns the value of this static field converted to a
+ * human-readable string.
+ *
+ * @return The value of this static field as a human-readable string.
+ */
+public abstract String
+constantValueExpression();
+
+
+
+} // interface FieldDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/MemberDoc.java b/libjava/classpath/tools/com/sun/javadoc/MemberDoc.java
new file mode 100644
index 00000000000..8448f12c594
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/MemberDoc.java
@@ -0,0 +1,60 @@
+/* MemberDoc.java -- Common ops for documenting fields, methods,
+ and constructors
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This is the common super-interface for documentation about fields,
+ * methods, and constructors.
+ */
+public interface MemberDoc extends ProgramElementDoc
+{
+
+/**
+ * This method tests whether the member in question was created implicitly
+ * by the compiler.
+ *
+ * @return <code>true</code> if this member was synthesized by the compiler,
+ * </code>false</code> otherwise.
+ */
+public abstract boolean
+isSynthetic();
+
+} // interface MemberDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/MethodDoc.java b/libjava/classpath/tools/com/sun/javadoc/MethodDoc.java
new file mode 100644
index 00000000000..a24b8ec09eb
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/MethodDoc.java
@@ -0,0 +1,80 @@
+/* MethodDoc.java -- Document a method
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface is used for documenting ordinary (ie, non-constructor)
+ * methods.
+ */
+public interface MethodDoc extends ExecutableMemberDoc
+{
+
+/**
+ * This method tests whether or not the method to be documented is abstract.
+ *
+ * @return <code>true</code> if the method is abstract, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isAbstract();
+
+/*************************************************************************/
+
+/**
+ * This method returns the return type of the method to be documented.
+ *
+ * @return The return type of the method to be documented.
+ */
+public abstract Type
+returnType();
+
+/*************************************************************************/
+
+/**
+ * This method returns the class containing the method that this method is
+ * overriding.
+ *
+ * @return The class containing the method that this method is overriding,
+ * or <code>null</code> if this class is not overriding a method.
+ */
+public abstract ClassDoc
+overriddenClass();
+
+} // interface MethodDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/PackageDoc.java b/libjava/classpath/tools/com/sun/javadoc/PackageDoc.java
new file mode 100644
index 00000000000..d544acf5bb9
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/PackageDoc.java
@@ -0,0 +1,109 @@
+/* PackageDoc.java -- Document a package
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+public interface PackageDoc extends Doc
+{
+
+/**
+ * This method returns a list of all the classes and interfaces in
+ * this package. This list will included exceptions and errors.
+ *
+ * @return The list of classes and interfaces for this package.
+ */
+public abstract ClassDoc[]
+allClasses();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of ordinary classes in this package. This
+ * list will not include any interface, exceptions or errors.
+ *
+ * @return The list of ordinary classes in this package.
+ */
+public abstract ClassDoc[]
+ordinaryClasses();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of exceptions in this package.
+ *
+ * @return The list of exceptions in this package.
+ */
+public abstract ClassDoc[]
+exceptions();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of errors in this package.
+ *
+ * @return The list of errors in this package.
+ */
+public abstract ClassDoc[]
+errors();
+
+/*************************************************************************/
+
+/**
+ * This method returns the list of interfaces in this package.
+ *
+ * @return The list of interfaces in this package.
+ */
+public abstract ClassDoc[]
+interfaces();
+
+/*************************************************************************/
+
+/**
+ * This method returns a <code>ClassDoc</code> instance for the specified
+ * class.
+ *
+ * @param name The name of the class to return.
+ *
+ * @return The requested <code>ClassDoc</code> or <code>null</code> if
+ * this class not part of this javadoc run.
+ */
+public abstract ClassDoc
+findClass(String cls);
+
+} // interface PackageDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/ParamTag.java b/libjava/classpath/tools/com/sun/javadoc/ParamTag.java
new file mode 100644
index 00000000000..94358637e66
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ParamTag.java
@@ -0,0 +1,66 @@
+/* ParamTag.java -- Documentation tag for method parameters
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface represents an "@param" tag.
+ */
+public interface ParamTag extends Tag
+{
+
+/**
+ * This method returns the comment text for the parameter.
+ *
+ * @return The comment text for the parameter.
+ */
+public abstract String
+parameterComment();
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of the parameter.
+ *
+ * @return The name of the parameter.
+ */
+public abstract String
+parameterName();
+
+} // interface ParamTag
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/Parameter.java b/libjava/classpath/tools/com/sun/javadoc/Parameter.java
new file mode 100644
index 00000000000..a359a5d9e36
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/Parameter.java
@@ -0,0 +1,88 @@
+/* Parameter.java -- Information about parameters to methods.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface models a parameter to a method.
+ */
+public interface Parameter extends java.io.Serializable
+{
+
+/**
+ * This method returns the type of the parameter.
+ *
+ * @return The parameter type.
+ */
+public abstract Type
+type();
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of the parameter.
+ *
+ * @return The parameter name.
+ */
+public abstract String
+name();
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of the type of the parameter as a
+ * <code>String</code>.
+ *
+ * @return The name of the type of this parameter.
+ */
+public abstract String
+typeName();
+
+/*************************************************************************/
+
+/**
+ * This method returns this parameter as a <code>String</code> that
+ * contains both the type name and parameter name.
+ *
+ * @return This parameter as a <code>String</code>.
+ */
+public abstract String
+toString();
+
+} // interaface Parameter
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/ProgramElementDoc.java b/libjava/classpath/tools/com/sun/javadoc/ProgramElementDoc.java
new file mode 100644
index 00000000000..0d6dd464018
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ProgramElementDoc.java
@@ -0,0 +1,170 @@
+/* ProgramElementDoc.java -- Common ops for all program elements.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This is the comment super-interface of all items that are "program
+ * elements". This includes classes, interfaces, fields, constructors,
+ * and methods.
+ */
+public interface ProgramElementDoc extends Doc
+{
+
+/**
+ * This method returns the class which contains this element. If this
+ * is a class that is not an inner class, <code>null</code> will be
+ * returned.
+ *
+ * @returned The class element that contains this item, or <code>null</code>
+ * if this item is a class that is not an inner class.
+ */
+public abstract ClassDoc
+containingClass();
+
+/*************************************************************************/
+
+/**
+ * This method returns the package which contains this element. If this
+ * element is in the default generic package, then the name of the
+ * package element returned will be "".
+ *
+ * @return The package element that contains this item.
+ */
+public abstract PackageDoc
+containingPackage();
+
+/*************************************************************************/
+
+/**
+ * This method returns the fully qualified name of this element.
+ *
+ * @return The fully qualified name of this element.
+ */
+public abstract String
+qualifiedName();
+
+/*************************************************************************/
+
+/**
+ * This method returns the modifier specificier number, which is what?
+ *
+ * @return The modifier for this element.
+ */
+public abstract int
+modifierSpecifier();
+
+/*************************************************************************/
+
+/**
+ * This method returns a string with the element modifiers. For example,
+ * the modifiers of a method declaration might be "protected abstract".
+ *
+ * @return The modifier string.
+ */
+public abstract String
+modifiers();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is public.
+ *
+ * @return <code>true</code> if this element is public, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isPublic();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is protected.
+ *
+ * @return <code>true</code> if this element is protected, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isProtected();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is private.
+ *
+ * @return <code>true</code> if this element is private, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isPrivate();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is package private.
+ *
+ * @return <code>true</code> if this element is package private,
+ * <code>false</code> otherwise.
+ */
+public abstract boolean
+isPackagePrivate();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is static.
+ *
+ * @return <code>true</code> if this element is static, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isStatic();
+
+/*************************************************************************/
+
+/**
+ * This method tests whether or not this element is final.
+ *
+ * @return <code>true</code> if this element is final, <code>false</code>
+ * otherwise.
+ */
+public abstract boolean
+isFinal();
+
+} // interface ProgramElementDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/RootDoc.java b/libjava/classpath/tools/com/sun/javadoc/RootDoc.java
new file mode 100644
index 00000000000..0642154087d
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/RootDoc.java
@@ -0,0 +1,112 @@
+/* RootDoc.java -- Information about a javadoc run.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package com.sun.javadoc;
+
+/**
+ * This interface is the root of the javadoc application. All the properties and
+ * arguments are attached to the class that will implements this interface. You
+ * can retrieve all the options of the tool with this interface.
+ */
+public interface RootDoc extends Doc, DocErrorReporter
+{
+
+ /**
+ * This method returns the command line element used to invoke this instance
+ * of javadoc.
+ *
+ * @return The command line arguments for this run.
+ */
+ public abstract String[][] options();
+
+ /** ********************************************************************** */
+
+ /**
+ * This method returns the list of packages that were specified on the command
+ * line.
+ *
+ * @return The packages specified on the command line.
+ */
+ public abstract PackageDoc[] specifiedPackages();
+
+ /** ********************************************************************** */
+
+ /**
+ * This method returns the list of classes that were specified on the command
+ * line.
+ *
+ * @return The classes specified on the command line.
+ */
+ public abstract ClassDoc[] specifiedClasses();
+
+ /** ********************************************************************** */
+
+ /**
+ * This method returns the list of classes and interfaces to be documented.
+ *
+ * @return The list of classes and interfaces to be documented.
+ */
+ public abstract ClassDoc[] classes();
+
+ /** ********************************************************************** */
+
+ /**
+ * This method returns a <code>ClassDoc</code> instance for the name class
+ * or interface.
+ *
+ * @param name
+ * The class or interface to look up.
+ * @return The requested <code>ClassDoc</code>, or null if the specified
+ * class is not part of this javadoc run.
+ */
+ public abstract ClassDoc classNamed(String name);
+
+ /** ********************************************************************** */
+
+ /**
+ * This method returns a <code>PackageDoc</code> instance for the named
+ * package.
+ *
+ * @param name
+ * The package to look up.
+ * @return The requested <code>PackageDoc</code>, or null if the specified
+ * package is not part of this javadoc run.
+ */
+ public abstract PackageDoc packageNamed(String name);
+
+} // interface RootDoc
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/SeeTag.java b/libjava/classpath/tools/com/sun/javadoc/SeeTag.java
new file mode 100644
index 00000000000..12a2e934b28
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/SeeTag.java
@@ -0,0 +1,109 @@
+/* SeeTag.java -- Information about "@see" tags.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface models an "@see" tag.
+ */
+public interface SeeTag extends Tag
+{
+
+/**
+ * This method returns the label for this tag. What is this????
+ *
+ * @return The label for this tag.
+ */
+public abstract String
+label();
+
+/*************************************************************************/
+
+/**
+ * This method returns the package of the referenced item.
+ *
+ * @return The package of the referenced item, or <code>null</code> if no
+ * package is found.
+ */
+public abstract PackageDoc
+referencedPackage();
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of the class referenced in the tag.
+ *
+ * @return The name of the class referenced in the tag.
+ */
+public abstract String
+referencedClassName();
+
+/*************************************************************************/
+
+/**
+ * This method returns a <code>ClassDoc</code> instance for the class
+ * referenced in the tag.
+ *
+ * @return A <code>ClassDoc</code> for the class referenced in the tag.
+ */
+public abstract ClassDoc
+referencedClass();
+
+/*************************************************************************/
+
+/**
+ * This method returns the name of the member referenced in the tag.
+ *
+ * @return The name of the member referenced in the tag.
+ */
+public abstract String
+referencedMemberName();
+
+/*************************************************************************/
+
+/**
+ * This method returns a <code>MemberDoc</code> instance for the member
+ * referenced in the tag.
+ *
+ * @return A <code>MemberDoc</code> for the member referenced in the tag.
+ */
+public abstract MemberDoc
+referencedMember();
+
+} // interface SeeTag
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/SerialFieldTag.java b/libjava/classpath/tools/com/sun/javadoc/SerialFieldTag.java
new file mode 100644
index 00000000000..9f5fa9accc9
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/SerialFieldTag.java
@@ -0,0 +1,102 @@
+/* SerialFieldTag.java -- Information about the "@serialField" tag.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface models the "@serialField" tag.
+ */
+public interface SerialFieldTag extends Tag, Comparable
+{
+
+/**
+ * This method returns the name of the field.
+ *
+ * @return The name of the field.
+ */
+public abstract String
+fieldName();
+
+/*************************************************************************/
+
+/**
+ * This method returns the type name of the field.
+ *
+ * @return The type name of the field.
+ */
+public abstract String
+fieldType();
+
+/*************************************************************************/
+
+/**
+ * This method returns a <code>ClassDoc</code> instance for the type of
+ * the field. What about primitive types???
+ *
+ * @return A <code>ClassDoc</code> for the field type.
+ */
+public abstract ClassDoc
+fieldTypeDoc();
+
+/*************************************************************************/
+
+/**
+ * This method returns the description of the field.
+ *
+ * @return The description of the field.
+ */
+public abstract String
+description();
+
+/*************************************************************************/
+
+/**
+ * This method compares this object with the specified object in order to
+ * determine proper ordering.
+ *
+ * @param obj The object to compare against.
+ *
+ * @return A negative number if this object is less than the specified
+ * object, zero if the objects are equal, or a positive number if this object
+ * is greater than the specified object.
+ */
+public abstract int
+compareTo(Object obj);
+
+} // interface SerialFieldTag
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/SourcePosition.java b/libjava/classpath/tools/com/sun/javadoc/SourcePosition.java
new file mode 100644
index 00000000000..fff25595f7b
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/SourcePosition.java
@@ -0,0 +1,68 @@
+/* SourcePosition.java -- Model of a location in a source file.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+import java.io.File;
+
+/**
+ * Represents a location in a source file. This is used by {@link
+ * Doc} to specify at which location an item is defined.
+ */
+public interface SourcePosition
+{
+ /**
+ * Return a File object pointing to the source file.
+ */
+ public File file();
+
+ /**
+ * Return the 1-based line number within the source file.
+ */
+ public int line();
+
+ /**
+ * Return the 1-based column number within the source file.
+ */
+ public int column();
+
+ /**
+ * Return a string in the format "file.toString():line"
+ */
+ public String toString();
+}
diff --git a/libjava/classpath/tools/com/sun/javadoc/Tag.java b/libjava/classpath/tools/com/sun/javadoc/Tag.java
new file mode 100644
index 00000000000..f0322127325
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/Tag.java
@@ -0,0 +1,107 @@
+/* Tag.java -- Common operations on Javadoc tags.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This is the super-interface for all Javadoc tags.
+ */
+public interface Tag extends java.io.Serializable
+{
+/**
+ * This method returns the name of the tag.
+ *
+ * @return The name of the tag.
+ */
+public abstract String
+name();
+
+/*************************************************************************/
+
+/**
+ * This method returns the kind of tag. ????
+ *
+ * @return The kind of the tag.
+ */
+public abstract String
+kind();
+
+/*************************************************************************/
+
+/**
+ * This method returns the text for this tag.
+ *
+ * @return The text for this tag.
+ */
+public abstract String
+text();
+
+/*************************************************************************/
+
+/**
+ * This method returns the tag as a <code>String</code>. What kind of
+ * string?
+ *
+ * @return This tag as a <code>String</code>.
+ */
+public abstract String
+toString();
+
+/*************************************************************************/
+
+/**
+ * This method returns the inline tags for this comment.
+ *
+ * @return The inline tags for this comment.
+ */
+public abstract Tag[]
+inlineTags();
+
+/*************************************************************************/
+
+/**
+ * This method returns the first sentence of the doc comment as an array
+ * of <code>Tag</code>'s.
+ *
+ * @return The first sentence of the comment as tags.
+ */
+public abstract Tag[]
+firstSentenceTags();
+
+} // interface Tag
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/ThrowsTag.java b/libjava/classpath/tools/com/sun/javadoc/ThrowsTag.java
new file mode 100644
index 00000000000..72a43949e42
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/ThrowsTag.java
@@ -0,0 +1,76 @@
+/* ThrowsTag.java -- Information about "@throws" and "@exception" tags.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This interface models an "@exception" or "@throws" tag.
+ */
+public interface ThrowsTag extends Tag
+{
+
+/**
+ * This method returns the name of the exception.
+ *
+ * @return The name of the exception.
+ */
+public abstract String
+exceptionName();
+
+/*************************************************************************/
+
+/**
+ * This method returns the comment text of the exception.
+ *
+ * @return The comment text of the exception.
+ */
+public abstract String
+exceptionComment();
+
+/*************************************************************************/
+
+/**
+ * This method returns the exception class as a <code>ClassDoc</code>.
+ *
+ * @return The exception class as a <code>ClassDoc</code>.
+ */
+public abstract ClassDoc
+exception();
+
+} // interface ThrowsTag
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/Type.java b/libjava/classpath/tools/com/sun/javadoc/Type.java
new file mode 100644
index 00000000000..8d0bd145c94
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/Type.java
@@ -0,0 +1,120 @@
+/* Type.java -- Documentation information about Java types.
+ Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This class is used for holding information about Java types needed for
+ * documentation.
+ */
+public interface Type extends java.io.Serializable
+{
+
+/**
+ * This method returns the unqualified name of the type, excluding any array
+ * dimension information or brackets.
+ *
+ * @return The unqualified type name, sans array information or brackets.
+ */
+public abstract String
+typeName();
+
+/*************************************************************************/
+
+/**
+ * This method returns the fully qualified name of the type, excluding any
+ * array dimension information or brackets.
+ *
+ * @return The fully qualified type name, sans array information or brackets.
+ */
+public abstract String
+qualifiedTypeName();
+
+/*************************************************************************/
+
+/**
+ * This method returns the array dimensions as brackets.
+ *
+ * @param The array dimensions.
+ */
+public abstract String
+dimension();
+
+/*************************************************************************/
+
+/**
+ * This method returns the unqualfied name of the type, and includes array
+ * dimension information.
+ *
+ * @return The unqualified name of the type, including array dimension info.
+ */
+public abstract String
+toString();
+
+/*************************************************************************/
+
+/**
+ * This method returns this type as a <code>ClassDoc</object>. This is not
+ * a valid operation for primitive types.
+ *
+ * @return A <code>ClassDoc</code> for this type, or <code>null</code> if
+ * this is a primitive type.
+ */
+public abstract ClassDoc
+asClassDoc();
+
+/**
+ * This method returns whether this type represents one of the
+ * built-in Java primitive types.
+ */
+public abstract boolean
+isPrimitive();
+
+/**
+ * Returns this type as a <code>TypeVariable</code>, if it is an
+ * instance of the <code>TypeVariable</code> class. Otherwise,
+ * it returns null.
+ *
+ * @return this cast to a <code>TypeVariable</code> instance, or null
+ * if this is not a type variable.
+ */
+TypeVariable
+asTypeVariable();
+
+} // interface Type
+
diff --git a/libjava/classpath/tools/com/sun/javadoc/TypeVariable.java b/libjava/classpath/tools/com/sun/javadoc/TypeVariable.java
new file mode 100644
index 00000000000..4f847d26bc7
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/javadoc/TypeVariable.java
@@ -0,0 +1,73 @@
+/* TypeVariable.java -- Document a Java type variable.
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.javadoc;
+
+/**
+ * This class represents a type variable, which is used to parameterize
+ * the types used in a method or class. For example,
+ * <code>List&lt;E&gt;</code> has the type variable, <code>E</code>. Type
+ * variables may have explicit bounds, such as <code>&lt;T extends
+ * Book&gt;</code>, which specifies that the type is a sub-class of
+ * <code>Book</code>.
+ *
+ * @since 1.5
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ */
+public interface TypeVariable
+ extends Type
+{
+
+ /**
+ * Returns the bounds of this type variable. These are the types
+ * represented in the <code>extends</code> clause.
+ *
+ * @return an array of types which specify the bounds of this variable.
+ * The array is empty if there are no explicit bounds.
+ */
+ Type[] bounds();
+
+ /**
+ * Returns the class, interface, method or constructor in which this
+ * type variable was declared.
+ *
+ * @return the owning program element for this type variable.
+ */
+ ProgramElementDoc owner();
+
+}
diff --git a/libjava/classpath/tools/com/sun/tools/doclets/Taglet.java b/libjava/classpath/tools/com/sun/tools/doclets/Taglet.java
new file mode 100644
index 00000000000..f4f348d67a8
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/tools/doclets/Taglet.java
@@ -0,0 +1,63 @@
+/* com.sun.tools.doclets.Taglet
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package com.sun.tools.doclets;
+
+import com.sun.javadoc.Tag;
+
+public interface Taglet {
+
+ public String getName();
+
+ public boolean inConstructor();
+
+ public boolean inField();
+
+ public boolean inMethod();
+
+ public boolean inOverview();
+
+ public boolean inPackage();
+
+ public boolean inType();
+
+ public boolean isInlineTag();
+
+ public String toString(Tag tag);
+
+ public String toString(Tag[] tagArray);
+}
diff --git a/libjava/classpath/tools/com/sun/tools/javac/Main.java b/libjava/classpath/tools/com/sun/tools/javac/Main.java
new file mode 100644
index 00000000000..f67a2d7286f
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/tools/javac/Main.java
@@ -0,0 +1,155 @@
+/* Main.java -- implement com.sun.tools.javac.Main
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.tools.javac;
+
+import gnu.classpath.Configuration;
+import java.io.File;
+import java.io.PrintWriter;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.text.MessageFormat;
+
+public class Main
+{
+ static Constructor ecjConstructor = null;
+ static Method ecjMethod = null;
+
+ static
+ {
+ String classname = "org.eclipse.jdt.internal.compiler.batch.Main";
+ Class klass = null;
+ try
+ {
+ klass = Class.forName(classname);
+ }
+ catch (ClassNotFoundException e)
+ {
+ File jar = new File(Configuration.ECJ_JAR);
+ if (!jar.exists() || !jar.canRead())
+ {
+ String message
+ = MessageFormat.format(Messages.getString("Main.FailedToRead"),
+ new Object[] { Configuration.ECJ_JAR });
+ System.err.println(message);
+ }
+
+ ClassLoader loader = null;
+ try
+ {
+ loader = new URLClassLoader(new URL[] {jar.toURL()});
+ }
+ catch (MalformedURLException f)
+ {
+ String message
+ = MessageFormat.format(Messages.getString("Main.MalformedURL"),
+ new Object[] { Configuration.ECJ_JAR });
+ System.err.println(message);
+ f.printStackTrace();
+ }
+
+ try
+ {
+ klass = loader.loadClass(classname);
+ }
+ catch (ClassNotFoundException g)
+ {
+ String message
+ = MessageFormat.format(Messages.getString("Main.FailedToLoad"),
+ new Object[] { classname,
+ Configuration.ECJ_JAR });
+ System.err.println(message);
+ g.printStackTrace();
+ }
+ }
+
+ try
+ {
+ ecjConstructor = klass.getConstructor(new Class[] {
+ PrintWriter.class,
+ PrintWriter.class,
+ Boolean.TYPE});
+ }
+ catch (NoSuchMethodException h)
+ {
+ System.err.println(Messages.getString("Main.FailedConstructor"));
+ h.printStackTrace();
+ }
+
+ try
+ {
+ ecjMethod = klass.getMethod("compile", new Class[] {String[].class});
+ }
+ catch (NoSuchMethodException i)
+ {
+ System.err.println(Messages.getString("Main.FailedCompile"));
+ i.printStackTrace();
+ }
+ }
+
+ public static int compile(String[] args, PrintWriter p) throws Exception
+ {
+ /*
+ * This code depends on the patch in Comment #10 in this bug
+ * report:
+ *
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=88364
+ */
+ Object ecjInstance = ecjConstructor.newInstance(new Object[]
+ {
+ p,
+ new PrintWriter(System.err),
+ Boolean.FALSE
+ });
+ return ((Boolean) ecjMethod.invoke(ecjInstance, new Object[]
+ { args })).booleanValue() ? 0 : -1;
+ }
+
+ public static int compile(String[] args) throws Exception
+ {
+ return compile(args, new PrintWriter(System.out));
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ Runtime.getRuntime().exit(Main.compile(args));
+ }
+}
diff --git a/libjava/classpath/tools/com/sun/tools/javac/Messages.java b/libjava/classpath/tools/com/sun/tools/javac/Messages.java
new file mode 100644
index 00000000000..17f22ac4422
--- /dev/null
+++ b/libjava/classpath/tools/com/sun/tools/javac/Messages.java
@@ -0,0 +1,67 @@
+/* Messages.java -- localization support for com.sun.tools.javac
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package com.sun.tools.javac;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages
+{
+ private static final String BUNDLE_NAME
+ = "com.sun.tools.javac.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE
+ = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/GcjhMain.java b/libjava/classpath/tools/gnu/classpath/tools/javah/GcjhMain.java
new file mode 100644
index 00000000000..7faed1691d2
--- /dev/null
+++ b/libjava/classpath/tools/gnu/classpath/tools/javah/GcjhMain.java
@@ -0,0 +1,152 @@
+/* GcjhMain.java - gcjh main program
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.classpath.tools.javah;
+
+import gnu.classpath.tools.getopt.Option;
+import gnu.classpath.tools.getopt.OptionException;
+import gnu.classpath.tools.getopt.OptionGroup;
+import gnu.classpath.tools.getopt.Parser;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class GcjhMain extends Main
+{
+ ArrayList commands = new ArrayList();
+
+ public GcjhMain()
+ {
+ cni = true;
+ }
+
+ protected String getName()
+ {
+ return "gcjh";
+ }
+
+ protected Parser getParser()
+ {
+ Parser result = super.getParser();
+
+ result.setHeader("usage: gcjh [OPTION]... CLASS...");
+
+ OptionGroup text = new OptionGroup("CNI text options");
+ text.add(new Option("add", "Insert TEXT into class body", "TEXT")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ commands.add(new Text(Text.ADD, arg));
+ }
+ });
+ text.add(new Option("append", "Append TEXT after class declaration",
+ "TEXT")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ commands.add(new Text(Text.APPEND, arg));
+ }
+ });
+ text.add(new Option("friend", "Insert TEXT as a 'friend' declaration",
+ "TEXT")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ commands.add(new Text(Text.FRIEND, arg));
+ }
+ });
+ text.add(new Option("prepend", "Insert TEXT before start of class", "TEXT")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ commands.add(new Text(Text.PREPEND, arg));
+ }
+ });
+ result.add(text);
+
+ OptionGroup compat = new OptionGroup("Compatibility options (unused)");
+ // gcjh itself had compatibility options -old and -trace. I
+ // didn't add them here since they should really be unused by now.
+ compat.add(new Option("td", "Unused compatibility option", "DIRECTORY")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ }
+ });
+ // I don't believe anyone ever used these options.
+ compat.add(new Option("M", "Unused compatibility option")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ }
+ });
+ compat.add(new Option("MM", "Unused compatibility option")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ }
+ });
+ compat.add(new Option("MD", "Unused compatibility option")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ }
+ });
+ compat.add(new Option("MMD", "Unused compatibility option")
+ {
+ public void parsed(String arg) throws OptionException
+ {
+ }
+ });
+
+ result.add(compat);
+
+ return result;
+ }
+
+ protected void postParse(String[] names)
+ {
+ for (int i = 0; i < names.length; ++i)
+ textMap.put(names[i].replace('.', '/'), commands);
+ }
+
+ public static void main(String[] args) throws IOException
+ {
+ new GcjhMain().run(args);
+ }
+}
diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java b/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java
index 2cddbaae750..729af476ad8 100644
--- a/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java
+++ b/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java
@@ -1,5 +1,5 @@
/* Main.java - javah main program
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -179,9 +179,14 @@ public class Main
results.addAll(Arrays.asList(files));
}
- private Parser getParser()
+ protected String getName()
{
- ClasspathToolParser result = new ClasspathToolParser("javah", true);
+ return "javah";
+ }
+
+ protected Parser getParser()
+ {
+ ClasspathToolParser result = new ClasspathToolParser(getName(), true);
result.setHeader("usage: javah [OPTIONS] CLASS...");
result.add(classpath);
result.add(new Option('d', "Set output directory", "DIR")
@@ -249,7 +254,7 @@ public class Main
cni = true;
}
});
- result.add(new Option("verbose", "Set verbose mode")
+ result.add(new Option('v', "verbose", "Set verbose mode")
{
public void parsed(String arg0) throws OptionException
{
@@ -317,10 +322,16 @@ public class Main
}
}
- private void run(String[] args) throws IOException
+ protected void postParse(String[] names)
+ {
+ // Nothing here.
+ }
+
+ protected void run(String[] args) throws IOException
{
Parser p = getParser();
String[] classNames = p.parse(args);
+ postParse(classNames);
loader = classpath.getLoader();
boolean isDirectory = outFileName == null;
diff --git a/libjava/classpath/tools/sun/rmi/rmic/Main.java b/libjava/classpath/tools/sun/rmi/rmic/Main.java
new file mode 100644
index 00000000000..7acc65696ac
--- /dev/null
+++ b/libjava/classpath/tools/sun/rmi/rmic/Main.java
@@ -0,0 +1,60 @@
+/* Main.java -- implement sun.rmi.rmic.Main
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package sun.rmi.rmic;
+
+import java.io.OutputStream;
+
+public class Main
+{
+ // Ant calls this. What to do with stream and string?
+ public Main(OutputStream stream, String string) {}
+
+ public boolean compile(String[] args)
+ {
+ try
+ {
+ gnu.classpath.tools.rmic.Main.main(args);
+ }
+ catch (Exception e)
+ {
+ System.err.println(Messages.getString("Main.InternalError"));
+ e.printStackTrace();
+ }
+ return true;
+ }
+}
diff --git a/libjava/classpath/tools/sun/rmi/rmic/Messages.java b/libjava/classpath/tools/sun/rmi/rmic/Messages.java
new file mode 100644
index 00000000000..80f5513a8f5
--- /dev/null
+++ b/libjava/classpath/tools/sun/rmi/rmic/Messages.java
@@ -0,0 +1,67 @@
+/* Messages.java -- localization support for sun.rmi.rmic
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package sun.rmi.rmic;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages
+{
+ private static final String BUNDLE_NAME
+ = "sun.rmi.rmic.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE
+ = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private Messages()
+ {
+ }
+
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException e)
+ {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/libjava/configure b/libjava/configure
index 04449d535e1..8a81965a5ec 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -5088,6 +5088,7 @@ if test "$use_x_awt" != yes; then
fi
# Tools that need to be compiled against classpath's tools classes
+: > vm-tools-packages
for package in gnu/gcj/tools/gc_analyze ; do
echo $package >> standard.omit
echo $package >> vm-tools-packages
@@ -6030,7 +6031,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
case $host in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 6033 "configure"' > conftest.$ac_ext
+ echo '#line 6034 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -7072,7 +7073,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then
:
else
cat > conftest.$ac_ext << EOF
-#line 7075 "configure"
+#line 7076 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -14448,6 +14449,7 @@ if test ! -f gnu/classpath/Configuration.java; then
-e "s,@default_toolkit@,$TOOLKIT," \
-e "s,@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@,false," \
-e "s,@GTK_CAIRO_ENABLED@,false," \
+ -e "s,@ECJ_JAR@,," \
< $srcdir/classpath/gnu/classpath/Configuration.java.in \
> gnu/classpath/Configuration.java
# We do not want to redirect the output of the grep below to /dev/null,
diff --git a/libjava/configure.ac b/libjava/configure.ac
index a8e536f15d3..d21654ae00b 100644
--- a/libjava/configure.ac
+++ b/libjava/configure.ac
@@ -296,6 +296,7 @@ if test "$use_x_awt" != yes; then
fi
# Tools that need to be compiled against classpath's tools classes
+: > vm-tools-packages
for package in gnu/gcj/tools/gc_analyze ; do
echo $package >> standard.omit
echo $package >> vm-tools-packages
@@ -1284,6 +1285,7 @@ if test ! -f gnu/classpath/Configuration.java; then
-e "s,@default_toolkit@,$TOOLKIT," \
-e "s,@JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@,false," \
-e "s,@GTK_CAIRO_ENABLED@,false," \
+ -e "s,@ECJ_JAR@,," \
< $srcdir/classpath/gnu/classpath/Configuration.java.in \
> gnu/classpath/Configuration.java
# We do not want to redirect the output of the grep below to /dev/null,
diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc
index c66fff84b7f..0f0da77d6eb 100644
--- a/libjava/defineclass.cc
+++ b/libjava/defineclass.cc
@@ -1,6 +1,7 @@
// defineclass.cc - defining a class from .class format.
-/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation
This file is part of libgcj.
@@ -1695,7 +1696,7 @@ void _Jv_ClassReader::handleCodeAttribute
// call a static method of an interpreted class from precompiled
// code without first resolving the class (that will happen
// during class initialization instead).
- method->self->ncode = method->ncode ();
+ method->self->ncode = method->ncode (def);
}
}
@@ -1740,7 +1741,7 @@ void _Jv_ClassReader::handleMethodsEnd ()
// interpreted class from precompiled code without
// first resolving the class (that will happen
// during class initialization instead).
- method->ncode = m->ncode ();
+ method->ncode = m->ncode (def);
}
}
}
diff --git a/libjava/gcj/Makefile.in b/libjava/gcj/Makefile.in
index f950be75208..b02348844cd 100644
--- a/libjava/gcj/Makefile.in
+++ b/libjava/gcj/Makefile.in
@@ -135,7 +135,6 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
-GREP = @GREP@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
@@ -239,7 +238,6 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
-XMKMF = @XMKMF@
X_AWT_FALSE = @X_AWT_FALSE@
X_AWT_TRUE = @X_AWT_TRUE@
X_CFLAGS = @X_CFLAGS@
@@ -251,8 +249,14 @@ ZIP = @ZIP@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
+ac_ct_GCJ = @ac_ct_GCJ@
+ac_ct_LD = @ac_ct_LD@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -273,10 +277,7 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
-datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
-docdir = @docdir@
-dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -288,24 +289,20 @@ host_exeext = @host_exeext@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
-htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libstdcxx_incdir = @libstdcxx_incdir@
-localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
-psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index 1e4e9488b59..e4c29fe6138 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -1,7 +1,7 @@
// javaprims.h - Main external header file for libgcj. -*- c++ -*-
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation
This file is part of libgcj.
@@ -153,6 +153,7 @@ extern "Java"
class Character;
class Character$Subset;
class Character$UnicodeBlock;
+ class Character$UnicodeBlock$NameType;
class Class;
class ClassCastException;
class ClassCircularityError;
@@ -248,11 +249,13 @@ extern "Java"
class VMCompiler;
class VMDouble;
class VMFloat;
+ class VMProcess;
class VMThrowable;
class VerifyError;
class VirtualMachineError;
class Void;
class Win32Process;
+ class Win32Process$EOFInputStream;
namespace annotation
{
class Annotation;
diff --git a/libjava/gnu/awt/xlib/XEventLoop.h b/libjava/gnu/awt/xlib/XEventLoop.h
index 0827f8aaa9a..8061e9a9441 100644
--- a/libjava/gnu/awt/xlib/XEventLoop.h
+++ b/libjava/gnu/awt/xlib/XEventLoop.h
@@ -67,7 +67,7 @@ private:
::java::lang::Thread * eventLoopThread;
public: // actually package-private
::gnu::awt::LightweightRedirector * lightweightRedirector;
- volatile jboolean idle;
+ jboolean volatile idle;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/gnu/classpath/Configuration.h b/libjava/gnu/classpath/Configuration.h
index e53026bb453..34cd719eea0 100644
--- a/libjava/gnu/classpath/Configuration.h
+++ b/libjava/gnu/classpath/Configuration.h
@@ -25,6 +25,7 @@ class gnu::classpath::Configuration : public ::java::lang::Object
static ::java::lang::String * classpath_home();
static jboolean debug();
static ::java::lang::String * toolkit();
+ static ::java::lang::String * ecj();
public:
static ::java::lang::String * CLASSPATH_HOME;
static ::java::lang::String * CLASSPATH_VERSION;
@@ -32,6 +33,7 @@ public:
static const jboolean INIT_LOAD_LIBRARY = 0;
static ::java::lang::String * default_awt_peer_toolkit;
static const jboolean JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = 0;
+ static ::java::lang::String * ECJ_JAR;
static ::java::lang::Class class$;
};
diff --git a/libjava/gnu/classpath/Configuration.java b/libjava/gnu/classpath/Configuration.java
index 7c829539f17..6899b77c44e 100644
--- a/libjava/gnu/classpath/Configuration.java
+++ b/libjava/gnu/classpath/Configuration.java
@@ -50,6 +50,7 @@ public final class Configuration
private static native String classpath_home();
private static native boolean debug();
private static native String toolkit();
+ private static native String ecj();
/**
* The value of CLASSPATH_HOME is the location that the classpath
@@ -102,4 +103,10 @@ public final class Configuration
*
*/
public static final boolean JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = false;
+
+ /**
+ * The Eclipse Java Compiler jar file for use by the
+ * com.sun.tools.javac implementation in tools.zip.
+ */
+ public static final String ECJ_JAR = ecj();
}
diff --git a/libjava/gnu/classpath/jdwp/exception/AbsentInformationException.h b/libjava/gnu/classpath/jdwp/exception/AbsentInformationException.h
new file mode 100644
index 00000000000..bb4c699553d
--- /dev/null
+++ b/libjava/gnu/classpath/jdwp/exception/AbsentInformationException.h
@@ -0,0 +1,35 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __gnu_classpath_jdwp_exception_AbsentInformationException__
+#define __gnu_classpath_jdwp_exception_AbsentInformationException__
+
+#pragma interface
+
+#include <gnu/classpath/jdwp/exception/JdwpException.h>
+extern "Java"
+{
+ namespace gnu
+ {
+ namespace classpath
+ {
+ namespace jdwp
+ {
+ namespace exception
+ {
+ class AbsentInformationException;
+ }
+ }
+ }
+ }
+}
+
+class gnu::classpath::jdwp::exception::AbsentInformationException : public ::gnu::classpath::jdwp::exception::JdwpException
+{
+
+public:
+ AbsentInformationException(::java::lang::String *);
+ static ::java::lang::Class class$;
+};
+
+#endif // __gnu_classpath_jdwp_exception_AbsentInformationException__
diff --git a/libjava/gnu/classpath/jdwp/natVMMethod.cc b/libjava/gnu/classpath/jdwp/natVMMethod.cc
index 07d5622c704..76fd0a64168 100644
--- a/libjava/gnu/classpath/jdwp/natVMMethod.cc
+++ b/libjava/gnu/classpath/jdwp/natVMMethod.cc
@@ -15,10 +15,25 @@ details. */
#include "jvmti-int.h"
#include <gnu/classpath/jdwp/VMMethod.h>
+#include <gnu/classpath/jdwp/exception/AbsentInformationException.h>
+#include <gnu/classpath/jdwp/exception/InvalidMethodException.h>
#include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
#include <gnu/classpath/jdwp/util/LineTable.h>
#include <gnu/classpath/jdwp/util/VariableTable.h>
+using namespace java::lang;
+
+#define CHECK_INTERP_CLASS() \
+do \
+ { \
+ if (!_Jv_IsInterpretedClass (getDeclaringClass ())) \
+ { \
+ ::java::lang::String *msg = JvNewStringLatin1 ("native class"); \
+ throw new exception::JdwpInternalErrorException (msg); \
+ } \
+ } \
+while (0)
+
jstring
gnu::classpath::jdwp::VMMethod::getName ()
{
@@ -56,12 +71,7 @@ gnu::classpath::jdwp::VMMethod::getModifiers ()
gnu::classpath::jdwp::util::LineTable *
gnu::classpath::jdwp::VMMethod::getLineTable ()
{
- if (!_Jv_IsInterpretedClass (getDeclaringClass ()))
- {
- // this should not happen
- ::java::lang::String *msg = JvNewStringLatin1 ("native class");
- throw new exception::JdwpInternalErrorException (msg);
- }
+ CHECK_INTERP_CLASS ();
jmethodID desired_method = reinterpret_cast<jmethodID> (_methodId);
@@ -97,5 +107,78 @@ gnu::classpath::jdwp::VMMethod::getLineTable ()
gnu::classpath::jdwp::util::VariableTable*
gnu::classpath::jdwp::VMMethod::getVariableTable ()
{
- return NULL;
+ using namespace gnu::classpath::jdwp::util;
+
+ jvmtiEnv *env = _Jv_GetJDWP_JVMTIEnv ();
+
+ CHECK_INTERP_CLASS ();
+
+ jmethodID meth = reinterpret_cast<jmethodID> (_methodId);
+ jvmtiLocalVariableEntry *var_table;
+ jint num_slots, args_len;
+
+ jvmtiError jerr = env->GetLocalVariableTable (meth, &num_slots, &var_table);
+
+ if (jerr != JVMTI_ERROR_NONE)
+ goto error;
+
+ jerr = env->GetArgumentsSize (meth, &args_len);
+
+ if (jerr != JVMTI_ERROR_NONE)
+ {
+ error:
+ using namespace gnu::classpath::jdwp::exception;
+ char *error;
+ env->GetErrorName (jerr, &error);
+ String *msg = JvNewStringUTF (error);
+ env->Deallocate (reinterpret_cast<unsigned char *> (error));
+
+ if (jerr == JVMTI_ERROR_NATIVE_METHOD)
+ throw new AbsentInformationException (msg);
+ else if (jerr == JVMTI_ERROR_INVALID_METHODID)
+ throw new InvalidMethodException (_methodId);
+ else
+ throw new JdwpInternalErrorException (msg);
+ }
+
+ jlongArray start_pcs = JvNewLongArray (num_slots);
+ jlong *start_pcs_ptr = elements (start_pcs);
+ jintArray lengths = JvNewIntArray (num_slots);
+ jint *lengths_ptr = elements (lengths);
+ jintArray slots = JvNewIntArray (num_slots);
+ jint *slots_ptr = elements (slots);
+ JArray<String *> *names = reinterpret_cast<JArray<String *> *>
+ (JvNewObjectArray (num_slots,
+ &String::class$, NULL));
+ jstring *names_ptr = elements (names);
+ JArray<String *> *signatures = reinterpret_cast<JArray<String *> *>
+ (JvNewObjectArray (num_slots,
+ &String::class$, NULL));
+ jstring *signatures_ptr = elements (signatures);
+
+ // Get the information out of the JVMTI strucutre and Deallocate the strings.
+ for (int i = 0; i < num_slots; i++)
+ {
+ start_pcs_ptr[i] = var_table[i].start_location;
+ lengths_ptr[i] = var_table[i].length;
+ slots_ptr[i] = var_table[i].slot;
+ names_ptr[i] = JvNewStringUTF (var_table[i].name);
+ env->Deallocate (reinterpret_cast<unsigned char *>
+ (var_table[i].name));
+ signatures_ptr[i] = JvNewStringUTF (var_table[i].signature);
+ env->Deallocate (reinterpret_cast<unsigned char *>
+ (var_table[i].signature));
+ env->Deallocate (reinterpret_cast<unsigned char *>
+ (var_table[i].generic_signature));
+ }
+
+ // Now Deallocate the table since it's strings have already been freed.
+ env->Deallocate (reinterpret_cast<unsigned char *> (var_table));
+
+ // Create the new JDWP VariableTable to return with the now filled arrays.
+ VariableTable* jdwp_vtable = new VariableTable (args_len, num_slots,
+ start_pcs, names, signatures,
+ lengths, slots);
+
+ return jdwp_vtable;
}
diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
index 3ea5f9a76d6..2229a451771 100644
--- a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
+++ b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
@@ -644,9 +644,9 @@ executeMethod (MAYBE_UNUSED jobject obj, MAYBE_UNUSED Thread *thread,
jstring
gnu::classpath::jdwp::VMVirtualMachine::
-getSourceFile (MAYBE_UNUSED jclass clazz)
+getSourceFile (jclass clazz)
{
- return NULL;
+ return _Jv_GetInterpClassSourceFile (clazz);
}
// A simple caching function used while single-stepping
diff --git a/libjava/gnu/classpath/natConfiguration.cc b/libjava/gnu/classpath/natConfiguration.cc
index 7e1593cd6e5..06f119c2b97 100644
--- a/libjava/gnu/classpath/natConfiguration.cc
+++ b/libjava/gnu/classpath/natConfiguration.cc
@@ -37,3 +37,9 @@ gnu::classpath::Configuration::toolkit()
{
return JvNewStringLatin1(AWT_TOOLKIT);
}
+
+jstring
+gnu::classpath::Configuration::ecj()
+{
+ return JvNewStringLatin1(ECJ_JAR_FILE);
+}
diff --git a/libjava/gnu/gcj/tools/gcj_dbtool/Main.java b/libjava/gnu/gcj/tools/gcj_dbtool/Main.java
index b6ba9753000..6ad5fd1b786 100644
--- a/libjava/gnu/gcj/tools/gcj_dbtool/Main.java
+++ b/libjava/gnu/gcj/tools/gcj_dbtool/Main.java
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of libgcj.
diff --git a/libjava/gnu/java/awt/peer/gtk/GThreadMutex.h b/libjava/gnu/java/awt/peer/gtk/GThreadMutex.h
index 9380a5dda27..c788e827531 100644
--- a/libjava/gnu/java/awt/peer/gtk/GThreadMutex.h
+++ b/libjava/gnu/java/awt/peer/gtk/GThreadMutex.h
@@ -32,7 +32,7 @@ class gnu::java::awt::peer::gtk::GThreadMutex : public ::java::lang::Object
public: // actually package-private
GThreadMutex();
- volatile jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) potentialLockers;
+ jint volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) potentialLockers;
::java::lang::Object * lockForPotentialLockers;
public:
static ::java::lang::Class class$;
diff --git a/libjava/gnu/java/rmi/server/ConnectionRunnerPool$ConnectionRunner.h b/libjava/gnu/java/rmi/server/ConnectionRunnerPool$ConnectionRunner.h
index 9b98afc9e13..664fc4e121c 100644
--- a/libjava/gnu/java/rmi/server/ConnectionRunnerPool$ConnectionRunner.h
+++ b/libjava/gnu/java/rmi/server/ConnectionRunnerPool$ConnectionRunner.h
@@ -36,7 +36,7 @@ public: // actually package-private
virtual void exit();
private:
::gnu::java::rmi::server::UnicastConnection * __attribute__((aligned(__alignof__( ::java::lang::Thread)))) conn;
- volatile jboolean exiting;
+ jboolean volatile exiting;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/gnu/java/rmi/server/UnicastConnectionManager.h b/libjava/gnu/java/rmi/server/UnicastConnectionManager.h
index dd6b828317d..26c19ccc2ba 100644
--- a/libjava/gnu/java/rmi/server/UnicastConnectionManager.h
+++ b/libjava/gnu/java/rmi/server/UnicastConnectionManager.h
@@ -70,7 +70,7 @@ public: // actually package-private
static ::java::util::Hashtable * clients;
::java::util::ArrayList * __attribute__((aligned(__alignof__( ::java::lang::Object)))) connections;
private:
- volatile ::java::lang::Thread * serverThread;
+ ::java::lang::Thread * volatile serverThread;
::java::net::ServerSocket * ssock;
public: // actually package-private
::java::lang::String * serverName;
diff --git a/libjava/gnu/java/util/ZoneInfo.h b/libjava/gnu/java/util/ZoneInfo.h
new file mode 100644
index 00000000000..83a0bf896a3
--- /dev/null
+++ b/libjava/gnu/java/util/ZoneInfo.h
@@ -0,0 +1,70 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __gnu_java_util_ZoneInfo__
+#define __gnu_java_util_ZoneInfo__
+
+#pragma interface
+
+#include <java/util/TimeZone.h>
+#include <gcj/array.h>
+
+extern "Java"
+{
+ namespace gnu
+ {
+ namespace java
+ {
+ namespace util
+ {
+ class ZoneInfo;
+ }
+ }
+ }
+}
+
+class gnu::java::util::ZoneInfo : public ::java::util::TimeZone
+{
+
+public:
+ ZoneInfo(jint, ::java::lang::String *, JArray< jlong > *, ::java::util::SimpleTimeZone *);
+ virtual jint getOffset(jint, jint, jint, jint, jint, jint);
+private:
+ jlong findTransition(jlong);
+public:
+ virtual jint getOffset(jlong);
+ virtual jint getRawOffset();
+ virtual void setRawOffset(jint);
+private:
+ void computeDSTSavings();
+public:
+ virtual jint getDSTSavings();
+ virtual jboolean useDaylightTime();
+ virtual jboolean inDaylightTime(::java::util::Date *);
+ virtual jint hashCode();
+ virtual jboolean equals(::java::lang::Object *);
+ virtual jboolean hasSameRules(::java::util::TimeZone *);
+ virtual ::java::lang::String * toString();
+ static ::java::util::TimeZone * readTZFile(::java::lang::String *, ::java::lang::String *);
+private:
+ static void skipFully(::java::io::InputStream *, jlong);
+ static ::java::util::SimpleTimeZone * createLastRule(::java::lang::String *);
+ static JArray< jint > * getDateParams(::java::lang::String *);
+ static jint parseTime(::java::lang::String *);
+ static const jint SECS_SHIFT = 22;
+ static const jlong OFFSET_MASK = 2097151LL;
+ static const jint OFFSET_SHIFT = 43;
+ static const jlong IS_DST = 2097152LL;
+ jint __attribute__((aligned(__alignof__( ::java::util::TimeZone)))) rawOffset;
+ jint dstSavings;
+ jboolean useDaylight;
+ JArray< jlong > * transitions;
+ ::java::util::SimpleTimeZone * lastRule;
+ static ::java::util::SimpleTimeZone * gmtZone;
+public: // actually package-private
+ static const jlong serialVersionUID = -3740626706860383657LL;
+public:
+ static ::java::lang::Class class$;
+};
+
+#endif // __gnu_java_util_ZoneInfo__
diff --git a/libjava/headers.txt b/libjava/headers.txt
index afc64189ab2..c7a4caa3bf4 100644
--- a/libjava/headers.txt
+++ b/libjava/headers.txt
@@ -56,10 +56,12 @@ friend class java::lang::Class;
class java/lang/reflect/Method
prepend jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
prepend jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
+prepend ::java::lang::reflect::Method *_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
friend jmethodID (::_Jv_FromReflectedMethod) (java::lang::reflect::Method *);
friend jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
friend class java::lang::Class;
friend class java::io::ObjectInputStream;
+friend java::lang::reflect::Method* ::_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
class gnu/gcj/runtime/ExtensionClassLoader
friend class ::java::lang::ClassLoader;
diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in
index 95c9ae4c03e..95a9449a5ed 100644
--- a/libjava/include/Makefile.in
+++ b/libjava/include/Makefile.in
@@ -134,7 +134,6 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
-GREP = @GREP@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
@@ -238,7 +237,6 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
-XMKMF = @XMKMF@
X_AWT_FALSE = @X_AWT_FALSE@
X_AWT_TRUE = @X_AWT_TRUE@
X_CFLAGS = @X_CFLAGS@
@@ -250,8 +248,14 @@ ZIP = @ZIP@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
+ac_ct_GCJ = @ac_ct_GCJ@
+ac_ct_LD = @ac_ct_LD@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -272,10 +276,7 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
-datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
-docdir = @docdir@
-dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -287,24 +288,20 @@ host_exeext = @host_exeext@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
-htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libstdcxx_incdir = @libstdcxx_incdir@
-localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
-psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
diff --git a/libjava/include/execution.h b/libjava/include/execution.h
index 279e9c1b872..eac6133c5b7 100644
--- a/libjava/include/execution.h
+++ b/libjava/include/execution.h
@@ -1,6 +1,6 @@
// execution.h - Execution engines. -*- c++ -*-
-/* Copyright (C) 2004, 2006 Free Software Foundation
+/* Copyright (C) 2004, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -29,6 +29,7 @@ struct _Jv_ExecutionEngine
_Jv_ResolvedMethod *(*resolve_method) (_Jv_Method *, jclass,
jboolean);
void (*post_miranda_hook) (jclass);
+ _Jv_ClosureList **(*get_closure_list) (jclass);
};
// This handles gcj-compiled code except that compiled with
@@ -77,6 +78,11 @@ struct _Jv_CompiledEngine : public _Jv_ExecutionEngine
// Not needed.
}
+ static _Jv_ClosureList **do_get_closure_list (jclass)
+ {
+ return NULL;
+ }
+
_Jv_CompiledEngine ()
{
unregister = do_unregister;
@@ -87,6 +93,7 @@ struct _Jv_CompiledEngine : public _Jv_ExecutionEngine
create_ncode = do_create_ncode;
resolve_method = do_resolve_method;
post_miranda_hook = do_post_miranda_hook;
+ get_closure_list = do_get_closure_list;
}
// These operators make it so we don't have to link in libstdc++.
@@ -105,6 +112,7 @@ class _Jv_IndirectCompiledClass
{
public:
void **field_initializers;
+ _Jv_ClosureList **closures;
};
// This handles gcj-compiled code compiled with -findirect-classes.
@@ -114,14 +122,32 @@ struct _Jv_IndirectCompiledEngine : public _Jv_CompiledEngine
{
allocate_static_fields = do_allocate_static_fields;
allocate_field_initializers = do_allocate_field_initializers;
+ get_closure_list = do_get_closure_list;
}
+ static _Jv_IndirectCompiledClass *get_aux_info (jclass klass)
+ {
+ _Jv_IndirectCompiledClass *aux =
+ (_Jv_IndirectCompiledClass*)klass->aux_info;
+ if (!aux)
+ {
+ aux = (_Jv_IndirectCompiledClass*)
+ _Jv_AllocRawObj (sizeof (_Jv_IndirectCompiledClass));
+ klass->aux_info = aux;
+ }
+
+ return aux;
+ }
+
static void do_allocate_field_initializers (jclass klass)
{
- _Jv_IndirectCompiledClass *aux
- = (_Jv_IndirectCompiledClass*)
- _Jv_AllocRawObj (sizeof (_Jv_IndirectCompiledClass));
- klass->aux_info = aux;
+ _Jv_IndirectCompiledClass *aux = get_aux_info (klass);
+ if (!aux)
+ {
+ aux = (_Jv_IndirectCompiledClass*)
+ _Jv_AllocRawObj (sizeof (_Jv_IndirectCompiledClass));
+ klass->aux_info = aux;
+ }
aux->field_initializers = (void **)_Jv_Malloc (klass->field_count
* sizeof (void*));
@@ -172,6 +198,16 @@ struct _Jv_IndirectCompiledEngine : public _Jv_CompiledEngine
}
_Jv_Free (aux->field_initializers);
}
+
+ static _Jv_ClosureList **do_get_closure_list (jclass klass)
+ {
+ _Jv_IndirectCompiledClass *aux = get_aux_info (klass);
+
+ if (!aux->closures)
+ aux->closures = _Jv_ClosureListFinalizer ();
+
+ return aux->closures;
+ }
};
@@ -203,6 +239,8 @@ class _Jv_InterpreterEngine : public _Jv_ExecutionEngine
static void do_post_miranda_hook (jclass);
+ static _Jv_ClosureList **do_get_closure_list (jclass klass);
+
_Jv_InterpreterEngine ()
{
unregister = do_unregister;
@@ -213,6 +251,7 @@ class _Jv_InterpreterEngine : public _Jv_ExecutionEngine
create_ncode = do_create_ncode;
resolve_method = do_resolve_method;
post_miranda_hook = do_post_miranda_hook;
+ get_closure_list = do_get_closure_list;
}
// These operators make it so we don't have to link in libstdc++.
diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h
index e23baab9bb2..ee45faa18d8 100644
--- a/libjava/include/java-interp.h
+++ b/libjava/include/java-interp.h
@@ -202,7 +202,7 @@ class _Jv_InterpMethod : public _Jv_MethodBase
}
// return the method's invocation pointer (a stub).
- void *ncode ();
+ void *ncode (jclass);
void compile (const void * const *);
static void run_normal (ffi_cif*, void*, ffi_raw*, void*);
@@ -293,6 +293,7 @@ class _Jv_InterpClass
_Jv_MethodBase **interpreted_methods;
_Jv_ushort *field_initializers;
jstring source_file_name;
+ _Jv_ClosureList **closures;
friend class _Jv_ClassReader;
friend class _Jv_InterpMethod;
@@ -305,6 +306,7 @@ class _Jv_InterpClass
#endif
friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass);
+ friend jstring _Jv_GetInterpClassSourceFile (jclass);
};
extern inline _Jv_MethodBase **
@@ -341,7 +343,7 @@ class _Jv_JNIMethod : public _Jv_MethodBase
// This function is used when making a JNI call from the interpreter.
static void call (ffi_cif *, void *, ffi_raw *, void *);
- void *ncode ();
+ void *ncode (jclass);
friend class _Jv_ClassReader;
friend class _Jv_InterpreterEngine;
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h
index 9a99a954b28..02974e8c7ea 100644
--- a/libjava/include/jvm.h
+++ b/libjava/include/jvm.h
@@ -288,7 +288,7 @@ private:
_Jv_Utf8Const *method_signature,
jclass *found_class,
bool check_perms = true);
- static void *create_error_method(_Jv_Utf8Const *);
+ static void *create_error_method(_Jv_Utf8Const *, jclass);
/* The least significant bit of the signature pointer in a symbol
table is set to 1 by the compiler if the reference is "special",
@@ -341,6 +341,10 @@ void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__));
/* Allocate space for a new non-Java object, which does not have the usual
Java object header but may contain pointers to other GC'ed objects. */
void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__));
+/* Allocate a double-indirect pointer to a _Jv_ClosureList such that
+ the _Jv_ClosureList gets automatically finalized when it is no
+ longer reachable, not even by other finalizable objects. */
+_Jv_ClosureList **_Jv_ClosureListFinalizer (void) __attribute__((__malloc__));
/* Explicitly throw an out-of-memory exception. */
void _Jv_ThrowNoMemory() __attribute__((__noreturn__));
/* Allocate an object with a single pointer. The first word is reserved
diff --git a/libjava/include/win32-threads.h b/libjava/include/win32-threads.h
index 442149c3cd8..b8f70f5cba9 100644
--- a/libjava/include/win32-threads.h
+++ b/libjava/include/win32-threads.h
@@ -227,5 +227,6 @@ private:
#undef STRICT
#undef VOID
#undef TEXT
+#undef OUT
#endif /* __JV_WIN32_THREADS__ */
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index 79276258c3d..ac23b060240 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -1255,10 +1255,10 @@ _Jv_init_cif (_Jv_Utf8Const* signature,
}
#if FFI_NATIVE_RAW_API
-# define FFI_PREP_RAW_CLOSURE ffi_prep_raw_closure
+# define FFI_PREP_RAW_CLOSURE ffi_prep_raw_closure_loc
# define FFI_RAW_SIZE ffi_raw_size
#else
-# define FFI_PREP_RAW_CLOSURE ffi_prep_java_raw_closure
+# define FFI_PREP_RAW_CLOSURE ffi_prep_java_raw_closure_loc
# define FFI_RAW_SIZE ffi_java_raw_size
#endif
@@ -1269,6 +1269,7 @@ _Jv_init_cif (_Jv_Utf8Const* signature,
typedef struct {
ffi_raw_closure closure;
+ _Jv_ClosureList list;
ffi_cif cif;
ffi_type *arg_types[0];
} ncode_closure;
@@ -1276,7 +1277,7 @@ typedef struct {
typedef void (*ffi_closure_fun) (ffi_cif*,void*,ffi_raw*,void*);
void *
-_Jv_InterpMethod::ncode ()
+_Jv_InterpMethod::ncode (jclass klass)
{
using namespace java::lang::reflect;
@@ -1286,9 +1287,12 @@ _Jv_InterpMethod::ncode ()
jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
int arg_count = _Jv_count_arguments (self->signature, staticp);
+ void *code;
ncode_closure *closure =
- (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
- + arg_count * sizeof (ffi_type*));
+ (ncode_closure*)ffi_closure_alloc (sizeof (ncode_closure)
+ + arg_count * sizeof (ffi_type*),
+ &code);
+ closure->list.registerClosure (klass, closure);
_Jv_init_cif (self->signature,
arg_count,
@@ -1341,9 +1345,11 @@ _Jv_InterpMethod::ncode ()
FFI_PREP_RAW_CLOSURE (&closure->closure,
&closure->cif,
fun,
- (void*)this);
+ (void*)this,
+ code);
+
+ self->ncode = code;
- self->ncode = (void*)closure;
return self->ncode;
}
@@ -1540,7 +1546,7 @@ _Jv_InterpMethod::set_insn (jlong index, pc_t insn)
}
void *
-_Jv_JNIMethod::ncode ()
+_Jv_JNIMethod::ncode (jclass klass)
{
using namespace java::lang::reflect;
@@ -1550,9 +1556,12 @@ _Jv_JNIMethod::ncode ()
jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
int arg_count = _Jv_count_arguments (self->signature, staticp);
+ void *code;
ncode_closure *closure =
- (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
- + arg_count * sizeof (ffi_type*));
+ (ncode_closure*)ffi_closure_alloc (sizeof (ncode_closure)
+ + arg_count * sizeof (ffi_type*),
+ &code);
+ closure->list.registerClosure (klass, closure);
ffi_type *rtype;
_Jv_init_cif (self->signature,
@@ -1594,9 +1603,10 @@ _Jv_JNIMethod::ncode ()
FFI_PREP_RAW_CLOSURE (&closure->closure,
&closure->cif,
fun,
- (void*) this);
+ (void*) this,
+ code);
- self->ncode = (void *) closure;
+ self->ncode = code;
return self->ncode;
}
@@ -1657,16 +1667,27 @@ _Jv_InterpreterEngine::do_create_ncode (jclass klass)
// cases. Well, we can't, because we don't allocate these
// objects using `new', and thus they don't get a vtable.
_Jv_JNIMethod *jnim = reinterpret_cast<_Jv_JNIMethod *> (imeth);
- klass->methods[i].ncode = jnim->ncode ();
+ klass->methods[i].ncode = jnim->ncode (klass);
}
else if (imeth != 0) // it could be abstract
{
_Jv_InterpMethod *im = reinterpret_cast<_Jv_InterpMethod *> (imeth);
- klass->methods[i].ncode = im->ncode ();
+ klass->methods[i].ncode = im->ncode (klass);
}
}
}
+_Jv_ClosureList **
+_Jv_InterpreterEngine::do_get_closure_list (jclass klass)
+{
+ _Jv_InterpClass *iclass = (_Jv_InterpClass *) klass->aux_info;
+
+ if (!iclass->closures)
+ iclass->closures = _Jv_ClosureListFinalizer ();
+
+ return iclass->closures;
+}
+
void
_Jv_InterpreterEngine::do_allocate_static_fields (jclass klass,
int pointer_size,
diff --git a/libjava/java/lang/Character$UnicodeBlock$NameType.h b/libjava/java/lang/Character$UnicodeBlock$NameType.h
new file mode 100644
index 00000000000..2b83115b064
--- /dev/null
+++ b/libjava/java/lang/Character$UnicodeBlock$NameType.h
@@ -0,0 +1,29 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __java_lang_Character$UnicodeBlock$NameType__
+#define __java_lang_Character$UnicodeBlock$NameType__
+
+#pragma interface
+
+#include <java/lang/Enum.h>
+#include <gcj/array.h>
+
+
+class java::lang::Character$UnicodeBlock$NameType : public ::java::lang::Enum
+{
+
+ Character$UnicodeBlock$NameType(::java::lang::String *, jint);
+public:
+ static JArray< ::java::lang::Character$UnicodeBlock$NameType * > * values();
+ static ::java::lang::Character$UnicodeBlock$NameType * valueOf(::java::lang::String *);
+ static ::java::lang::Character$UnicodeBlock$NameType * CANONICAL;
+ static ::java::lang::Character$UnicodeBlock$NameType * NO_SPACES;
+ static ::java::lang::Character$UnicodeBlock$NameType * CONSTANT;
+private:
+ static JArray< ::java::lang::Character$UnicodeBlock$NameType * > * ENUM$VALUES;
+public:
+ static ::java::lang::Class class$;
+};
+
+#endif // __java_lang_Character$UnicodeBlock$NameType__
diff --git a/libjava/java/lang/Character$UnicodeBlock.h b/libjava/java/lang/Character$UnicodeBlock.h
index 43fa6b447e3..b32f2121e61 100644
--- a/libjava/java/lang/Character$UnicodeBlock.h
+++ b/libjava/java/lang/Character$UnicodeBlock.h
@@ -18,13 +18,12 @@ public:
static ::java::lang::Character$UnicodeBlock * of(jchar);
static ::java::lang::Character$UnicodeBlock * of(jint);
static ::java::lang::Character$UnicodeBlock * forName(::java::lang::String *);
+public: // actually package-private
+ static JArray< jint > * $SWITCH_TABLE$java$lang$Character$UnicodeBlock$NameType();
private:
jint __attribute__((aligned(__alignof__( ::java::lang::Character$Subset)))) start;
jint end;
::java::lang::String * canonicalName;
- static const jint CANONICAL_NAME = 0;
- static const jint NO_SPACES_NAME = 1;
- static const jint CONSTANT_NAME = 2;
public:
static ::java::lang::Character$UnicodeBlock * BASIC_LATIN;
static ::java::lang::Character$UnicodeBlock * LATIN_1_SUPPLEMENT;
@@ -154,6 +153,7 @@ public:
static ::java::lang::Character$UnicodeBlock * SURROGATES_AREA;
private:
static JArray< ::java::lang::Character$UnicodeBlock * > * sets;
+ static JArray< jint > * $SWITCH_TABLE$java$lang$Character$UnicodeBlock$NameType__;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/lang/Character.h b/libjava/java/lang/Character.h
index ed913ab7c7e..7c3a4b9ae3f 100644
--- a/libjava/java/lang/Character.h
+++ b/libjava/java/lang/Character.h
@@ -34,6 +34,10 @@ public:
static jboolean isDefined(jint);
static jboolean isLetter(jchar);
static jboolean isLetter(jint);
+ static jint offsetByCodePoints(::java::lang::CharSequence *, jint, jint);
+ static jint offsetByCodePoints(JArray< jchar > *, jint, jint, jint, jint);
+ static jint codePointCount(::java::lang::CharSequence *, jint, jint);
+ static jint codePointCount(JArray< jchar > *, jint, jint);
static jboolean isLetterOrDigit(jchar);
static jboolean isLetterOrDigit(jint);
static jboolean isJavaLetter(jchar);
@@ -72,8 +76,7 @@ public:
static jbyte getDirectionality(jint);
static jboolean isMirrored(jchar);
static jboolean isMirrored(jint);
- jint compareTo(::java::lang::Character *);
- jint compareTo(::java::lang::Object *);
+ jint target$compareTo(::java::lang::Character *);
static ::java::lang::Character * valueOf(jchar);
static jchar reverseBytes(jchar);
static JArray< jchar > * toChars(jint);
@@ -91,6 +94,7 @@ public:
static jint codePointBefore(JArray< jchar > *, jint);
static jint codePointBefore(JArray< jchar > *, jint, jint);
static jint codePointBefore(::java::lang::CharSequence *, jint);
+ jint compareTo(::java::lang::Object *);
private:
jchar __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
static const jlong serialVersionUID = 3786198910865385080LL;
@@ -99,6 +103,15 @@ public:
static const jint MAX_RADIX = 36;
static const jchar MIN_VALUE = 0;
static const jchar MAX_VALUE = 65535;
+ static const jint MIN_CODE_POINT = 0;
+ static const jint MAX_CODE_POINT = 1114111;
+ static const jchar MIN_HIGH_SURROGATE = 55296;
+ static const jchar MAX_HIGH_SURROGATE = 56319;
+ static const jchar MIN_LOW_SURROGATE = 56320;
+ static const jchar MAX_LOW_SURROGATE = 57343;
+ static const jchar MIN_SURROGATE = 55296;
+ static const jchar MAX_SURROGATE = 57343;
+ static const jint MIN_SUPPLEMENTARY_CODE_POINT = 65536;
static ::java::lang::Class * TYPE;
static const jint SIZE = 16;
private:
@@ -160,15 +173,6 @@ private:
static const jint NO_BREAK_MASK = 32;
static const jint MIRROR_MASK = 64;
public:
- static const jint MIN_SUPPLEMENTARY_CODE_POINT = 65536;
- static const jint MIN_CODE_POINT = 0;
- static const jint MAX_CODE_POINT = 1114111;
- static const jchar MIN_HIGH_SURROGATE = 55296;
- static const jchar MAX_HIGH_SURROGATE = 56319;
- static const jchar MIN_LOW_SURROGATE = 56320;
- static const jchar MAX_LOW_SURROGATE = 57343;
- static const jchar MIN_SURROGATE = 55296;
- static const jchar MAX_SURROGATE = 57343;
static ::java::lang::Class class$;
};
diff --git a/libjava/java/lang/Character.java b/libjava/java/lang/Character.java
index ec6d2a4af14..0cc9d3c57bd 100644
--- a/libjava/java/lang/Character.java
+++ b/libjava/java/lang/Character.java
@@ -1,5 +1,6 @@
/* java.lang.Character -- Wrapper class for char, and Unicode subsets
- Copyright (C) 1998, 1999, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2002, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,7 +55,7 @@ import java.util.Locale;
/**
* Wrapper class for the primitive char data type. In addition, this class
* allows one to retrieve property information and perform transformations
- * on the 57,707 defined characters in the Unicode Standard, Version 3.0.0.
+ * on the defined characters in the Unicode Standard, Version 4.0.0.
* java.lang.Character is designed to be very dynamic, and as such, it
* retrieves information on the Unicode character set from a separate
* database, gnu.java.lang.CharData, which can be easily upgraded.
@@ -62,7 +63,7 @@ import java.util.Locale;
* <p>For predicates, boundaries are used to describe
* the set of characters for which the method will return true.
* This syntax uses fairly normal regular expression notation.
- * See 5.13 of the Unicode Standard, Version 3.0, for the
+ * See 5.13 of the Unicode Standard, Version 4.0, for the
* boundary specification.
*
* <p>See <a href="http://www.unicode.org">http://www.unicode.org</a>
@@ -72,10 +73,11 @@ import java.util.Locale;
* @author Paul N. Fisher
* @author Jochen Hoenicke
* @author Eric Blake (ebb9@email.byu.edu)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @since 1.0
- * @status updated to 1.4
+ * @status partly updated to 1.5; some things still missing
*/
-public final class Character implements Serializable, Comparable
+public final class Character implements Serializable, Comparable<Character>
{
/**
* A subset of Unicode blocks.
@@ -160,10 +162,8 @@ public final class Character implements Serializable, Comparable
/** The canonical name of the block according to the Unicode standard. */
private final String canonicalName;
- /** Constants for the <code>forName()</code> method */
- private static final int CANONICAL_NAME = 0;
- private static final int NO_SPACES_NAME = 1;
- private static final int CONSTANT_NAME = 2;
+ /** Enumeration for the <code>forName()</code> method */
+ private enum NameType { CANONICAL, NO_SPACES, CONSTANT; };
/**
* Constructor for strictly defined blocks.
@@ -173,7 +173,7 @@ public final class Character implements Serializable, Comparable
* @param name the block name
*/
private UnicodeBlock(int start, int end, String name,
- String canonicalName)
+ String canonicalName)
{
super(name);
this.start = start;
@@ -207,8 +207,8 @@ public final class Character implements Serializable, Comparable
public static UnicodeBlock of(int codePoint)
{
if (codePoint > MAX_CODE_POINT)
- throw new IllegalArgumentException("The supplied integer value is " +
- "too large to be a codepoint.");
+ throw new IllegalArgumentException("The supplied integer value is " +
+ "too large to be a codepoint.");
// Simple binary search for the correct block.
int low = 0;
int hi = sets.length - 1;
@@ -262,59 +262,51 @@ public final class Character implements Serializable, Comparable
*/
public static final UnicodeBlock forName(String blockName)
{
- int type;
+ NameType type;
if (blockName.indexOf(' ') != -1)
- type = CANONICAL_NAME;
+ type = NameType.CANONICAL;
else if (blockName.indexOf('_') != -1)
- type = CONSTANT_NAME;
+ type = NameType.CONSTANT;
else
- type = NO_SPACES_NAME;
+ type = NameType.NO_SPACES;
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
/* Special case for deprecated blocks not in sets */
switch (type)
{
- case CANONICAL_NAME:
+ case CANONICAL:
if (usCollator.compare(blockName, "Surrogates Area") == 0)
return SURROGATES_AREA;
break;
- case NO_SPACES_NAME:
+ case NO_SPACES:
if (usCollator.compare(blockName, "SurrogatesArea") == 0)
return SURROGATES_AREA;
break;
- case CONSTANT_NAME:
+ case CONSTANT:
if (usCollator.compare(blockName, "SURROGATES_AREA") == 0)
return SURROGATES_AREA;
break;
}
/* Other cases */
- int setLength = sets.length;
switch (type)
{
- case CANONICAL_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- if (usCollator.compare(blockName, block.canonicalName) == 0)
- return block;
- }
+ case CANONICAL:
+ for (UnicodeBlock block : sets)
+ if (usCollator.compare(blockName, block.canonicalName) == 0)
+ return block;
break;
- case NO_SPACES_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- String nsName = block.canonicalName.replaceAll(" ","");
- if (usCollator.compare(blockName, nsName) == 0)
- return block;
- }
- break;
- case CONSTANT_NAME:
- for (int i = 0; i < setLength; i++)
- {
- UnicodeBlock block = sets[i];
- if (usCollator.compare(blockName, block.toString()) == 0)
- return block;
- }
+ case NO_SPACES:
+ for (UnicodeBlock block : sets)
+ {
+ String nsName = block.canonicalName.replaceAll(" ","");
+ if (usCollator.compare(blockName, nsName) == 0)
+ return block;
+ }
+ break;
+ case CONSTANT:
+ for (UnicodeBlock block : sets)
+ if (usCollator.compare(blockName, block.toString()) == 0)
+ return block;
break;
}
throw new IllegalArgumentException("No Unicode block found for " +
@@ -1517,10 +1509,11 @@ public final class Character implements Serializable, Comparable
* this. These are also returned from calls to <code>of(int)</code>
* and <code>of(char)</code>.
*/
+ @Deprecated
public static final UnicodeBlock SURROGATES_AREA
= new UnicodeBlock(0xD800, 0xDFFF,
"SURROGATES_AREA",
- "Surrogates Area");
+ "Surrogates Area");
/**
* The defined subsets.
@@ -1699,11 +1692,78 @@ public final class Character implements Serializable, Comparable
public static final char MAX_VALUE = '\uFFFF';
/**
+ * The minimum Unicode 4.0 code point. This value is <code>0</code>.
+ * @since 1.5
+ */
+ public static final int MIN_CODE_POINT = 0;
+
+ /**
+ * The maximum Unicode 4.0 code point, which is greater than the range
+ * of the char data type.
+ * This value is <code>0x10FFFF</code>.
+ * @since 1.5
+ */
+ public static final int MAX_CODE_POINT = 0x10FFFF;
+
+ /**
+ * The minimum Unicode high surrogate code unit, or
+ * <emph>leading-surrogate</emph>, in the UTF-16 character encoding.
+ * This value is <code>'\uD800'</code>.
+ * @since 1.5
+ */
+ public static final char MIN_HIGH_SURROGATE = '\uD800';
+
+ /**
+ * The maximum Unicode high surrogate code unit, or
+ * <emph>leading-surrogate</emph>, in the UTF-16 character encoding.
+ * This value is <code>'\uDBFF'</code>.
+ * @since 1.5
+ */
+ public static final char MAX_HIGH_SURROGATE = '\uDBFF';
+
+ /**
+ * The minimum Unicode low surrogate code unit, or
+ * <emph>trailing-surrogate</emph>, in the UTF-16 character encoding.
+ * This value is <code>'\uDC00'</code>.
+ * @since 1.5
+ */
+ public static final char MIN_LOW_SURROGATE = '\uDC00';
+
+ /**
+ * The maximum Unicode low surrogate code unit, or
+ * <emph>trailing-surrogate</emph>, in the UTF-16 character encoding.
+ * This value is <code>'\uDFFF'</code>.
+ * @since 1.5
+ */
+ public static final char MAX_LOW_SURROGATE = '\uDFFF';
+
+ /**
+ * The minimum Unicode surrogate code unit in the UTF-16 character encoding.
+ * This value is <code>'\uD800'</code>.
+ * @since 1.5
+ */
+ public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
+
+ /**
+ * The maximum Unicode surrogate code unit in the UTF-16 character encoding.
+ * This value is <code>'\uDFFF'</code>.
+ * @since 1.5
+ */
+ public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
+
+ /**
+ * The lowest possible supplementary Unicode code point (the first code
+ * point outside the basic multilingual plane (BMP)).
+ * This value is <code>0x10000</code>.
+ */
+ public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000;
+
+ /**
* Class object representing the primitive char data type.
*
* @since 1.1
*/
- public static final Class TYPE = VMClassLoader.getPrimitiveClass('C');
+ public static final Class<Character> TYPE = (Class<Character>) VMClassLoader.getPrimitiveClass('C');
/**
* The number of bits needed to represent a <code>char</code>.
@@ -2089,71 +2149,6 @@ public final class Character implements Serializable, Comparable
private static final int MIRROR_MASK = 0x40;
/**
- * Min value for supplementary code point.
- *
- * @since 1.5
- */
- public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000;
-
- /**
- * Min value for code point.
- *
- * @since 1.5
- */
- public static final int MIN_CODE_POINT = 0;
-
-
- /**
- * Max value for code point.
- *
- * @since 1.5
- */
- public static final int MAX_CODE_POINT = 0x010ffff;
-
-
- /**
- * Minimum high surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MIN_HIGH_SURROGATE = '\ud800';
-
- /**
- * Maximum high surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MAX_HIGH_SURROGATE = '\udbff';
-
- /**
- * Minimum low surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MIN_LOW_SURROGATE = '\udc00';
-
- /**
- * Maximum low surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MAX_LOW_SURROGATE = '\udfff';
-
- /**
- * Minimum surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MIN_SURROGATE = MIN_HIGH_SURROGATE;
-
- /**
- * Maximum low surrogate code in UTF-16 encoding.
- *
- * @since 1.5
- */
- public static final char MAX_SURROGATE = MAX_LOW_SURROGATE;
-
- /**
* Grabs an attribute offset from the Unicode attribute database. The lower
* 5 bits are the character type, the next 2 bits are flags, and the top
* 9 bits are the offset into the attribute tables. Note that the top 9
@@ -2504,6 +2499,209 @@ public final class Character implements Serializable, Comparable
| (1 << MODIFIER_LETTER)
| (1 << OTHER_LETTER))) != 0;
}
+
+ /**
+ * Returns the index into the given CharSequence that is offset
+ * <code>codePointOffset</code> code points from <code>index</code>.
+ * @param seq the CharSequence
+ * @param index the start position in the CharSequence
+ * @param codePointOffset the number of code points offset from the start
+ * position
+ * @return the index into the CharSequence that is codePointOffset code
+ * points offset from index
+ *
+ * @throws NullPointerException if seq is null
+ * @throws IndexOutOfBoundsException if index is negative or greater than the
+ * length of the sequence.
+ * @throws IndexOutOfBoundsException if codePointOffset is positive and the
+ * subsequence from index to the end of seq has fewer than codePointOffset
+ * code points
+ * @throws IndexOutOfBoundsException if codePointOffset is negative and the
+ * subsequence from the start of seq to index has fewer than
+ * (-codePointOffset) code points
+ * @since 1.5
+ */
+ public static int offsetByCodePoints(CharSequence seq,
+ int index,
+ int codePointOffset)
+ {
+ int len = seq.length();
+ if (index < 0 || index > len)
+ throw new IndexOutOfBoundsException();
+
+ int numToGo = codePointOffset;
+ int offset = index;
+ int adjust = 1;
+ if (numToGo >= 0)
+ {
+ for (; numToGo > 0; offset++)
+ {
+ numToGo--;
+ if (Character.isHighSurrogate(seq.charAt(offset))
+ && (offset + 1) < len
+ && Character.isLowSurrogate(seq.charAt(offset + 1)))
+ offset++;
+ }
+ return offset;
+ }
+ else
+ {
+ numToGo *= -1;
+ for (; numToGo > 0;)
+ {
+ numToGo--;
+ offset--;
+ if (Character.isLowSurrogate(seq.charAt(offset))
+ && (offset - 1) >= 0
+ && Character.isHighSurrogate(seq.charAt(offset - 1)))
+ offset--;
+ }
+ return offset;
+ }
+ }
+
+ /**
+ * Returns the index into the given char subarray that is offset
+ * <code>codePointOffset</code> code points from <code>index</code>.
+ * @param a the char array
+ * @param start the start index of the subarray
+ * @param count the length of the subarray
+ * @param index the index to be offset
+ * @param codePointOffset the number of code points offset from <code>index
+ * </code>
+ * @return the index into the char array
+ *
+ * @throws NullPointerException if a is null
+ * @throws IndexOutOfBoundsException if start or count is negative or if
+ * start + count is greater than the length of the array
+ * @throws IndexOutOfBoundsException if index is less than start or larger
+ * than start + count
+ * @throws IndexOutOfBoundsException if codePointOffset is positive and the
+ * subarray from index to start + count - 1 has fewer than codePointOffset
+ * code points.
+ * @throws IndexOutOfBoundsException if codePointOffset is negative and the
+ * subarray from start to index - 1 has fewer than (-codePointOffset) code
+ * points
+ * @since 1.5
+
+ */
+ public static int offsetByCodePoints(char[] a,
+ int start,
+ int count,
+ int index,
+ int codePointOffset)
+ {
+ int len = a.length;
+ int end = start + count;
+ if (start < 0 || count < 0 || end > len || index < start || index > end)
+ throw new IndexOutOfBoundsException();
+
+ int numToGo = codePointOffset;
+ int offset = index;
+ int adjust = 1;
+ if (numToGo >= 0)
+ {
+ for (; numToGo > 0; offset++)
+ {
+ numToGo--;
+ if (Character.isHighSurrogate(a[offset])
+ && (offset + 1) < len
+ && Character.isLowSurrogate(a[offset + 1]))
+ offset++;
+ }
+ return offset;
+ }
+ else
+ {
+ numToGo *= -1;
+ for (; numToGo > 0;)
+ {
+ numToGo--;
+ offset--;
+ if (Character.isLowSurrogate(a[offset])
+ && (offset - 1) >= 0
+ && Character.isHighSurrogate(a[offset - 1]))
+ offset--;
+ if (offset < start)
+ throw new IndexOutOfBoundsException();
+ }
+ return offset;
+ }
+
+ }
+
+ /**
+ * Returns the number of Unicode code points in the specified range of the
+ * given CharSequence. The first char in the range is at position
+ * beginIndex and the last one is at position endIndex - 1. Paired
+ * surrogates (supplementary characters are represented by a pair of chars -
+ * one from the high surrogates and one from the low surrogates)
+ * count as just one code point.
+ * @param seq the CharSequence to inspect
+ * @param beginIndex the beginning of the range
+ * @param endIndex the end of the range
+ * @return the number of Unicode code points in the given range of the
+ * sequence
+ * @throws NullPointerException if seq is null
+ * @throws IndexOutOfBoundsException if beginIndex is negative, endIndex is
+ * larger than the length of seq, or if beginIndex is greater than endIndex.
+ * @since 1.5
+ */
+ public static int codePointCount(CharSequence seq, int beginIndex,
+ int endIndex)
+ {
+ int len = seq.length();
+ if (beginIndex < 0 || endIndex > len || beginIndex > endIndex)
+ throw new IndexOutOfBoundsException();
+
+ int count = 0;
+ for (int i = beginIndex; i < endIndex; i++)
+ {
+ count++;
+ // If there is a pairing, count it only once.
+ if (isHighSurrogate(seq.charAt(i)) && (i + 1) < endIndex
+ && isLowSurrogate(seq.charAt(i + 1)))
+ i ++;
+ }
+ return count;
+ }
+
+ /**
+ * Returns the number of Unicode code points in the specified range of the
+ * given char array. The first char in the range is at position
+ * offset and the length of the range is count. Paired surrogates
+ * (supplementary characters are represented by a pair of chars -
+ * one from the high surrogates and one from the low surrogates)
+ * count as just one code point.
+ * @param a the char array to inspect
+ * @param offset the beginning of the range
+ * @param count the length of the range
+ * @return the number of Unicode code points in the given range of the
+ * array
+ * @throws NullPointerException if a is null
+ * @throws IndexOutOfBoundsException if offset or count is negative or if
+ * offset + countendIndex is larger than the length of a.
+ * @since 1.5
+ */
+ public static int codePointCount(char[] a, int offset,
+ int count)
+ {
+ int len = a.length;
+ int end = offset + count;
+ if (offset < 0 || count < 0 || end > len)
+ throw new IndexOutOfBoundsException();
+
+ int counter = 0;
+ for (int i = offset; i < end; i++)
+ {
+ counter++;
+ // If there is a pairing, count it only once.
+ if (isHighSurrogate(a[i]) && (i + 1) < end
+ && isLowSurrogate(a[i + 1]))
+ i ++;
+ }
+ return counter;
+ }
/**
* Determines if a character is a Unicode letter or a Unicode digit. This
@@ -3497,30 +3695,13 @@ public final class Character implements Serializable, Comparable
}
/**
- * Compares an object to this Character. Assuming the object is a
- * Character object, this method performs the same comparison as
- * compareTo(Character).
- *
- * @param o object to compare
- * @return the comparison value
- * @throws ClassCastException if o is not a Character object
- * @throws NullPointerException if o is null
- * @see #compareTo(Character)
- * @since 1.2
- */
- public int compareTo(Object o)
- {
- return compareTo((Character) o);
- }
-
- /**
* Returns an <code>Character</code> object wrapping the value.
* In contrast to the <code>Character</code> constructor, this method
* will cache some values. It is used by boxing conversion.
*
* @param val the value to wrap
* @return the <code>Character</code>
- *
+ *
* @since 1.5
*/
public static Character valueOf(char val)
@@ -3529,9 +3710,9 @@ public final class Character implements Serializable, Comparable
return new Character(val);
synchronized (charCache)
{
- if (charCache[val - MIN_VALUE] == null)
- charCache[val - MIN_VALUE] = new Character(val);
- return charCache[val - MIN_VALUE];
+ if (charCache[val - MIN_VALUE] == null)
+ charCache[val - MIN_VALUE] = new Character(val);
+ return charCache[val - MIN_VALUE];
}
}
@@ -3559,6 +3740,9 @@ public final class Character implements Serializable, Comparable
*/
public static char[] toChars(int codePoint)
{
+ if (!isValidCodePoint(codePoint))
+ throw new IllegalArgumentException("Illegal Unicode code point : "
+ + codePoint);
char[] result = new char[charCount(codePoint)];
int ignore = toChars(codePoint, result, 0);
return result;
@@ -3776,7 +3960,7 @@ public final class Character implements Serializable, Comparable
*/
public static int codePointAt(char[] chars, int index, int limit)
{
- if (index < 0 || index >= limit || limit < 0 || limit >= chars.length)
+ if (index < 0 || index >= limit || limit < 0 || limit > chars.length)
throw new IndexOutOfBoundsException();
char high = chars[index];
if (! isHighSurrogate(high) || ++index >= limit)
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index 77e60aa5ccc..af0219892f1 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -105,6 +105,15 @@ class _Jv_InterpClass;
class _Jv_InterpMethod;
#endif
+class _Jv_ClosureList
+{
+ _Jv_ClosureList *next;
+ void *ptr;
+public:
+ void registerClosure (jclass klass, void *ptr);
+ static void releaseClosures (_Jv_ClosureList **closures);
+};
+
struct _Jv_Constants
{
jint size;
@@ -225,6 +234,9 @@ jboolean _Jv_InterfaceAssignableFrom (jclass, jclass);
_Jv_Method* _Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *,
_Jv_Utf8Const*, jclass * = NULL);
+java::lang::reflect::Method *_Jv_GetReflectedMethod (jclass klass,
+ _Jv_Utf8Const *name,
+ _Jv_Utf8Const *signature);
jfieldID JvGetFirstInstanceField (jclass);
jint JvNumInstanceFields (jclass);
jfieldID JvGetFirstStaticField (jclass);
@@ -255,6 +267,7 @@ _Jv_Utf8Const *_Jv_GetClassNameUtf8 (jclass);
// Finds a desired interpreter method in the given class or NULL if not found
class _Jv_MethodBase;
_Jv_MethodBase *_Jv_FindInterpreterMethod (jclass, jmethodID);
+jstring _Jv_GetInterpClassSourceFile (jclass);
#endif
jbyte _Jv_GetClassState (jclass);
@@ -529,6 +542,9 @@ private:
friend _Jv_Method* ::_Jv_LookupDeclaredMethod (jclass, _Jv_Utf8Const *,
_Jv_Utf8Const*, jclass *);
+ friend java::lang::reflect::Method* ::_Jv_GetReflectedMethod (jclass klass,
+ _Jv_Utf8Const *name,
+ _Jv_Utf8Const *signature);
friend jfieldID (::JvGetFirstInstanceField) (jclass);
friend jint (::JvNumInstanceFields) (jclass);
friend jfieldID (::JvGetFirstStaticField) (jclass);
@@ -553,6 +569,7 @@ private:
#ifdef INTERPRETER
friend _Jv_MethodBase *(::_Jv_FindInterpreterMethod) (jclass klass,
jmethodID desired_method);
+ friend jstring ::_Jv_GetInterpClassSourceFile (jclass);
#endif
friend jbyte (::_Jv_GetClassState) (jclass klass);
@@ -626,6 +643,7 @@ private:
friend class ::_Jv_CompiledEngine;
friend class ::_Jv_IndirectCompiledEngine;
friend class ::_Jv_InterpreterEngine;
+ friend class ::_Jv_ClosureList;
friend void ::_Jv_sharedlib_register_hook (jclass klass);
diff --git a/libjava/java/lang/EcosProcess.h b/libjava/java/lang/EcosProcess.h
index 30fd067e034..a0173c30a1a 100644
--- a/libjava/java/lang/EcosProcess.h
+++ b/libjava/java/lang/EcosProcess.h
@@ -20,7 +20,7 @@ public:
::java::io::InputStream * getInputStream();
::java::io::OutputStream * getOutputStream();
jint waitFor();
- EcosProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *);
+ EcosProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
static ::java::lang::Class class$;
};
diff --git a/libjava/java/lang/EcosProcess.java b/libjava/java/lang/EcosProcess.java
index 30c8253e67d..79c2f12a55a 100644
--- a/libjava/java/lang/EcosProcess.java
+++ b/libjava/java/lang/EcosProcess.java
@@ -1,6 +1,6 @@
// EcosProcess.java - Subclass of Process for eCos systems.
-/* Copyright (C) 1998, 1999, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -51,9 +51,8 @@ final class EcosProcess extends Process
return 0;
}
- public EcosProcess (String[] progarray,
- String[] envp,
- File dir)
+ public EcosProcess (String[] progarray, String[] envp, File dir,
+ boolean redirect)
throws IOException
{
throw new IOException ("eCos processes unimplemented");
diff --git a/libjava/java/lang/PosixProcess.h b/libjava/java/lang/PosixProcess.h
index 62539ceb2ac..a43fa0739d5 100644
--- a/libjava/java/lang/PosixProcess.h
+++ b/libjava/java/lang/PosixProcess.h
@@ -31,7 +31,7 @@ public: // actually package-private
private:
void nativeSpawn();
public: // actually package-private
- PosixProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *);
+ PosixProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
static jlong access$0(::java::lang::PosixProcess *);
static ::java::lang::Object * access$1();
static void access$2(::java::lang::PosixProcess$ProcessManager *);
@@ -39,6 +39,7 @@ private:
JArray< ::java::lang::String * > * __attribute__((aligned(__alignof__( ::java::lang::Process)))) progarray;
JArray< ::java::lang::String * > * envp;
::java::io::File * dir;
+ jboolean redirect;
::java::lang::Throwable * exception;
jlong pid;
public: // actually package-private
diff --git a/libjava/java/lang/PosixProcess.java b/libjava/java/lang/PosixProcess.java
index 517e6f33f92..6b1496426dd 100644
--- a/libjava/java/lang/PosixProcess.java
+++ b/libjava/java/lang/PosixProcess.java
@@ -1,5 +1,5 @@
// PosixProcess.java - Subclass of Process for POSIX systems.
-/* Copyright (C) 1998, 1999, 2004, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2004, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -354,8 +354,8 @@ final class PosixProcess extends Process
*/
private native void nativeSpawn();
- PosixProcess(String[] progarray, String[] envp, File dir)
- throws IOException
+ PosixProcess(String[] progarray, String[] envp, File dir, boolean redirect)
+ throws IOException
{
// Check to ensure there is something to run, and avoid
// dereferencing null pointers in native code.
@@ -365,6 +365,7 @@ final class PosixProcess extends Process
this.progarray = progarray;
this.envp = envp;
this.dir = dir;
+ this.redirect = redirect;
// Start a ProcessManager if there is not one already running.
synchronized (queueLock)
@@ -419,6 +420,7 @@ final class PosixProcess extends Process
private String[] progarray;
private String[] envp;
private File dir;
+ private boolean redirect;
/** Set by the ProcessManager on problems starting. */
private Throwable exception;
diff --git a/libjava/java/lang/SecurityManager.h b/libjava/java/lang/SecurityManager.h
index 28ef484c3ce..8abaa6a7e08 100644
--- a/libjava/java/lang/SecurityManager.h
+++ b/libjava/java/lang/SecurityManager.h
@@ -74,7 +74,7 @@ public:
virtual ::java::lang::ThreadGroup * getThreadGroup();
public: // actually package-private
virtual void checkPackageList(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
- static volatile ::java::lang::SecurityManager * current;
+ static ::java::lang::SecurityManager * volatile current;
public: // actually protected
jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) inCheck;
public:
diff --git a/libjava/java/lang/String$CaseInsensitiveComparator.h b/libjava/java/lang/String$CaseInsensitiveComparator.h
index 11c0ea557b7..b0c3d620973 100644
--- a/libjava/java/lang/String$CaseInsensitiveComparator.h
+++ b/libjava/java/lang/String$CaseInsensitiveComparator.h
@@ -14,6 +14,7 @@ class java::lang::String$CaseInsensitiveComparator : public ::java::lang::Object
public: // actually package-private
String$CaseInsensitiveComparator();
public:
+ jint target$compare(::java::lang::String *, ::java::lang::String *);
jint compare(::java::lang::Object *, ::java::lang::Object *);
private:
static const jlong serialVersionUID = 8575799808933029326LL;
diff --git a/libjava/java/lang/String.h b/libjava/java/lang/String.h
index 44be2741c30..eea80fb9e16 100644
--- a/libjava/java/lang/String.h
+++ b/libjava/java/lang/String.h
@@ -62,8 +62,10 @@ public:
jboolean contentEquals(::java::lang::StringBuffer *);
jboolean contentEquals(::java::lang::CharSequence *);
jboolean equalsIgnoreCase(::java::lang::String *);
- jint compareTo(::java::lang::String *);
- jint compareTo(::java::lang::Object *);
+ jint target$compareTo(::java::lang::String *);
+private:
+ jint nativeCompareTo(::java::lang::String *);
+public:
jint compareToIgnoreCase(::java::lang::String *);
jboolean regionMatches(jint, ::java::lang::String *, jint, jint);
jboolean regionMatches(jboolean, jint, ::java::lang::String *, jint, jint);
@@ -107,15 +109,22 @@ public:
static ::java::lang::String * valueOf(jlong);
static ::java::lang::String * valueOf(jfloat);
static ::java::lang::String * valueOf(jdouble);
+ static ::java::lang::String * format(::java::util::Locale *, ::java::lang::String *, JArray< ::java::lang::Object * > *);
+ static ::java::lang::String * format(::java::lang::String *, JArray< ::java::lang::Object * > *);
::java::lang::String * intern();
jint codePointCount(jint, jint);
jboolean contains(::java::lang::CharSequence *);
::java::lang::String * replace(::java::lang::CharSequence *, ::java::lang::CharSequence *);
+ jint offsetByCodePoints(jint, jint);
+ jboolean isEmpty();
private:
void init(JArray< jchar > *, jint, jint, jboolean);
void init(JArray< jbyte > *, jint, jint, jint);
void init(JArray< jbyte > *, jint, jint, ::java::lang::String *);
void init(::gnu::gcj::runtime::StringBuffer *);
+public:
+ jint compareTo(::java::lang::Object *);
+private:
static const jlong serialVersionUID = -6849794470754667710LL;
::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) data;
jint boffset;
diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java
index bd75797a2b1..d5bb4150211 100644
--- a/libjava/java/lang/String.java
+++ b/libjava/java/lang/String.java
@@ -1,5 +1,5 @@
/* String.java -- immutable character sequences; the object of string literals
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,9 +41,11 @@ package java.lang;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
-import java.lang.Comparable;
import java.util.Comparator;
+import java.text.Collator;
+import java.util.Formatter;
import java.util.Locale;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -70,10 +72,13 @@ import java.util.regex.PatternSyntaxException;
* @author Paul N. Fisher
* @author Eric Blake (ebb9@email.byu.edu)
* @author Per Bothner (bothner@cygnus.com)
+ * @author Tom Tromey (tromey@redhat.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @since 1.0
* @status updated to 1.4
*/
-public final class String implements Serializable, Comparable, CharSequence
+public final class String
+ implements Serializable, Comparable<String>, CharSequence
{
// WARNING: String is a CORE class in the bootstrap cycle. See the comments
// in vm/reference/java/lang/Runtime for implications of this fact.
@@ -113,12 +118,12 @@ public final class String implements Serializable, Comparable, CharSequence
private int cachedHashCode;
/**
- * An implementation for {@link CASE_INSENSITIVE_ORDER}.
+ * An implementation for {@link #CASE_INSENSITIVE_ORDER}.
* This must be {@link Serializable}. The class name is dictated by
* compatibility with Sun's JDK.
*/
private static final class CaseInsensitiveComparator
- implements Comparator, Serializable
+ implements Comparator<String>, Serializable
{
/**
* Compatible with JDK 1.2.
@@ -142,9 +147,9 @@ public final class String implements Serializable, Comparable, CharSequence
* @throws ClassCastException if either argument is not a String
* @see #compareToIgnoreCase(String)
*/
- public int compare(Object o1, Object o2)
+ public int compare(String o1, String o2)
{
- return ((String) o1).compareToIgnoreCase((String) o2);
+ return o1.compareToIgnoreCase(o2);
}
} // class CaseInsensitiveComparator
@@ -156,7 +161,7 @@ public final class String implements Serializable, Comparable, CharSequence
* @see Collator#compare(String, String)
* @since 1.2
*/
- public static final Comparator CASE_INSENSITIVE_ORDER
+ public static final Comparator<String> CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator();
/**
@@ -207,6 +212,7 @@ public final class String implements Serializable, Comparable, CharSequence
* @param count the number of characters from data to copy
* @throws NullPointerException if data is null
* @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+ * || offset + count &lt; 0 (overflow)
* || offset + count &gt; data.length)
* (while unspecified, this is a StringIndexOutOfBoundsException)
*/
@@ -230,6 +236,7 @@ public final class String implements Serializable, Comparable, CharSequence
* @param count the number of characters from ascii to copy
* @throws NullPointerException if ascii is null
* @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+ * || offset + count &lt; 0 (overflow)
* || offset + count &gt; ascii.length)
* (while unspecified, this is a StringIndexOutOfBoundsException)
* @see #String(byte[])
@@ -281,7 +288,7 @@ public final class String implements Serializable, Comparable, CharSequence
*
* @param data byte array to copy
* @param offset the offset to start at
- * @param count the number of characters in the array to use
+ * @param count the number of bytes in the array to use
* @param encoding the name of the encoding to use
* @throws NullPointerException if data or encoding is null
* @throws IndexOutOfBoundsException if offset or count is incorrect
@@ -330,7 +337,7 @@ public final class String implements Serializable, Comparable, CharSequence
*
* @param data byte array to copy
* @param offset the offset to start at
- * @param count the number of characters in the array to use
+ * @param count the number of bytes in the array to use
* @throws NullPointerException if data is null
* @throws IndexOutOfBoundsException if offset or count is incorrect
* @throws Error if the decoding fails
@@ -644,23 +651,17 @@ public final class String implements Serializable, Comparable, CharSequence
* @return the comparison
* @throws NullPointerException if anotherString is null
*/
- public native int compareTo(String anotherString);
+ public int compareTo(String anotherString)
+ {
+ return nativeCompareTo(anotherString);
+ }
/**
- * Behaves like <code>compareTo(java.lang.String)</code> unless the Object
- * is not a <code>String</code>. Then it throws a
- * <code>ClassCastException</code>.
- *
- * @param o the object to compare against
- * @return the comparison
- * @throws NullPointerException if o is null
- * @throws ClassCastException if o is not a <code>String</code>
- * @since 1.2
+ * The native implementation of compareTo(). Must be named different
+ * since cni doesn't understand the bridge method generated from
+ * the compareTo() method because of the Comparable<String> interface.
*/
- public int compareTo(Object o)
- {
- return compareTo((String) o);
- }
+ private native int nativeCompareTo(String anotherString);
/**
* Compares this String and another String (case insensitive). This
@@ -710,7 +711,7 @@ public final class String implements Serializable, Comparable, CharSequence
* @param ignoreCase true if case should be ignored in comparision
* @param toffset index to start comparison at for this String
* @param other String to compare region to this String
- * @param oofset index to start comparison at for other
+ * @param ooffset index to start comparison at for other
* @param len number of characters to compare
* @return true if regions match, false otherwise
* @throws NullPointerException if other is null
@@ -1124,7 +1125,7 @@ public final class String implements Serializable, Comparable, CharSequence
* Trims all characters less than or equal to <code>'\u0020'</code>
* (<code>' '</code>) from the beginning and end of this String. This
* includes many, but not all, ASCII control characters, and all
- * {@link Character#whitespace(char)}.
+ * {@link Character#isWhitespace(char)}.
*
* @return new trimmed String, or this if nothing trimmed
*/
@@ -1204,6 +1205,7 @@ public final class String implements Serializable, Comparable, CharSequence
* @return String containing the chars from data[offset..offset+count]
* @throws NullPointerException if data is null
* @throws IndexOutOfBoundsException if (offset &lt; 0 || count &lt; 0
+ * || offset + count &lt; 0 (overflow)
* || offset + count &gt; data.length)
* (while unspecified, this is a StringIndexOutOfBoundsException)
* @see #String(char[], int, int)
@@ -1294,12 +1296,27 @@ public final class String implements Serializable, Comparable, CharSequence
return Double.toString(d);
}
+
+ /** @since 1.5 */
+ public static String format(Locale locale, String format, Object... args)
+ {
+ Formatter f = new Formatter(locale);
+ return f.format(format, args).toString();
+ }
+
+ /** @since 1.5 */
+ public static String format(String format, Object... args)
+ {
+ return format(Locale.getDefault(), format, args);
+ }
+
/**
- * Fetches this String from the intern hashtable. If two Strings are
- * considered equal, by the equals() method, then intern() will return the
- * same String instance. ie. if (s1.equals(s2)) then
- * (s1.intern() == s2.intern()). All string literals and string-valued
- * constant expressions are already interned.
+ * Fetches this String from the intern hashtable.
+ * If two Strings are considered equal, by the equals() method,
+ * then intern() will return the same String instance. ie.
+ * if (s1.equals(s2)) then (s1.intern() == s2.intern()).
+ * All string literals and string-valued constant expressions
+ * are already interned.
*
* @return the interned String
*/
@@ -1345,20 +1362,20 @@ public final class String implements Serializable, Comparable, CharSequence
}
return count;
}
-
+
/**
* Returns true iff this String contains the sequence of Characters
* described in s.
* @param s the CharSequence
* @return true iff this String contains s
- *
+ *
* @since 1.5
*/
public boolean contains (CharSequence s)
{
return this.indexOf(s.toString()) != -1;
}
-
+
/**
* Returns a string that is this string with all instances of the sequence
* represented by <code>target</code> replaced by the sequence in
@@ -1386,7 +1403,42 @@ public final class String implements Serializable, Comparable, CharSequence
}
return result.toString();
}
+
+ /**
+ * Return the index into this String that is offset from the given index by
+ * <code>codePointOffset</code> code points.
+ * @param index the index at which to start
+ * @param codePointOffset the number of code points to offset
+ * @return the index into this String that is <code>codePointOffset</code>
+ * code points offset from <code>index</code>.
+ *
+ * @throws IndexOutOfBoundsException if index is negative or larger than the
+ * length of this string.
+ * @throws IndexOutOfBoundsException if codePointOffset is positive and the
+ * substring starting with index has fewer than codePointOffset code points.
+ * @throws IndexOutOfBoundsException if codePointOffset is negative and the
+ * substring ending with index has fewer than (-codePointOffset) code points.
+ * @since 1.5
+ */
+ public int offsetByCodePoints(int index, int codePointOffset)
+ {
+ if (index < 0 || index > count)
+ throw new IndexOutOfBoundsException();
+
+ return Character.offsetByCodePoints(this, index, codePointOffset);
+ }
+ /**
+ * Returns true if, and only if, {@link #length()}
+ * is <code>0</code>.
+ *
+ * @return true if the length of the string is zero.
+ * @since 1.6
+ */
+ public boolean isEmpty()
+ {
+ return count == 0;
+ }
private native void init(char[] chars, int offset, int count,
boolean dont_copy);
diff --git a/libjava/java/lang/StringBuffer.h b/libjava/java/lang/StringBuffer.h
index 93951f471f6..07400f78060 100644
--- a/libjava/java/lang/StringBuffer.h
+++ b/libjava/java/lang/StringBuffer.h
@@ -30,13 +30,13 @@ public:
::java::lang::StringBuffer * append(::java::lang::Object *);
::java::lang::StringBuffer * append(::java::lang::String *);
::java::lang::StringBuffer * append(::java::lang::StringBuffer *);
- ::java::lang::StringBuffer * append(::java::lang::CharSequence *);
- ::java::lang::StringBuffer * append(::java::lang::CharSequence *, jint, jint);
::java::lang::StringBuffer * append(JArray< jchar > *);
::java::lang::StringBuffer * append(JArray< jchar > *, jint, jint);
- ::java::lang::StringBuffer * append(jboolean);
- ::java::lang::StringBuffer * append(jchar);
::java::lang::StringBuffer * appendCodePoint(jint);
+ ::java::lang::StringBuffer * append(jboolean);
+ ::java::lang::StringBuffer * target$append(jchar);
+ ::java::lang::StringBuffer * target$append(::java::lang::CharSequence *);
+ ::java::lang::StringBuffer * target$append(::java::lang::CharSequence *, jint, jint);
::java::lang::StringBuffer * append(jint);
::java::lang::StringBuffer * append(jlong);
::java::lang::StringBuffer * append(jfloat);
@@ -71,6 +71,11 @@ public:
private:
void ensureCapacity_unsynchronized(jint);
jboolean regionMatches(jint, ::java::lang::String *);
+public:
+ ::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint);
+ ::java::lang::Appendable * append(::java::lang::CharSequence *);
+ ::java::lang::Appendable * append(jchar);
+private:
static const jlong serialVersionUID = 3388685877147921107LL;
public: // actually package-private
jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) count;
diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java
index c3f112967c4..57fd2ca8e81 100644
--- a/libjava/java/lang/StringBuffer.java
+++ b/libjava/java/lang/StringBuffer.java
@@ -1,5 +1,5 @@
/* StringBuffer.java -- Growable strings
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -72,8 +72,12 @@ import java.io.Serializable;
* @since 1.0
* @status updated to 1.4
*/
-public final class StringBuffer implements Serializable, CharSequence
+public final class StringBuffer
+ implements Serializable, CharSequence, Appendable
{
+ // Implementation note: if you change this class, you usually will
+ // want to change StringBuilder as well.
+
/**
* Compatible with JDK 1.0+.
*/
@@ -152,17 +156,16 @@ public final class StringBuffer implements Serializable, CharSequence
* specified <code>CharSequence</code>. Initial capacity will be the
* size of the CharSequence plus 16.
*
- * @param sequence the <code>String</code> to convert
+ * @param seq the <code>String</code> to convert
* @throws NullPointerException if str is null
- *
* @since 1.5
*/
- public StringBuffer(CharSequence sequence)
+ public StringBuffer(CharSequence seq)
{
- count = Math.max(0, sequence.length());
+ count = Math.max(0, seq.length());
value = new char[count + DEFAULT_CAPACITY];
for (int i = 0; i < count; ++i)
- value[i] = sequence.charAt(i);
+ value[i] = seq.charAt(i);
}
/**
@@ -391,46 +394,6 @@ public final class StringBuffer implements Serializable, CharSequence
}
/**
- * Append the <code>CharSequence</code> value of the argument to this
- * <code>StringBuffer</code>.
- *
- * @param sequence the <code>CharSequence</code> to append
- * @return this <code>StringBuffer</code>
- * @see #append(Object)
- * @since 1.5
- */
- public synchronized StringBuffer append(CharSequence sequence)
- {
- if (sequence == null)
- sequence = "null";
- return append(sequence, 0, sequence.length());
- }
-
- /**
- * Append the specified subsequence of the <code>CharSequence</code>
- * argument to this <code>StringBuffer</code>.
- *
- * @param sequence the <code>CharSequence</code> to append
- * @param start the starting index
- * @param end one past the ending index
- * @return this <code>StringBuffer</code>
- * @see #append(Object)
- * @since 1.5
- */
- public synchronized StringBuffer append(CharSequence sequence,
- int start, int end)
- {
- if (sequence == null)
- sequence = "null";
- if (start < 0 || end < 0 || start > end || end > sequence.length())
- throw new IndexOutOfBoundsException();
- ensureCapacity_unsynchronized(this.count + end - start);
- for (int i = start; i < end; ++i)
- value[count++] = sequence.charAt(i);
- return this;
- }
-
- /**
* Append the <code>char</code> array to this <code>StringBuffer</code>.
* This is similar (but more efficient) than
* <code>append(new String(data))</code>, except in the case of null.
@@ -470,6 +433,25 @@ public final class StringBuffer implements Serializable, CharSequence
}
/**
+ * Append the code point to this <code>StringBuffer</code>.
+ * This is like #append(char), but will append two characters
+ * if a supplementary code point is given.
+ *
+ * @param code the code point to append
+ * @return this <code>StringBuffer</code>
+ * @see Character#toChars(int, char[], int)
+ * @since 1.5
+ */
+ public synchronized StringBuffer appendCodePoint(int code)
+ {
+ int len = Character.charCount(code);
+ ensureCapacity_unsynchronized(count + len);
+ Character.toChars(code, value, count);
+ count += len;
+ return this;
+ }
+
+ /**
* Append the <code>String</code> value of the argument to this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
@@ -497,21 +479,41 @@ public final class StringBuffer implements Serializable, CharSequence
}
/**
- * Append the code point to this <code>StringBuffer</code>.
- * This is like #append(char), but will append two characters
- * if a supplementary code point is given.
+ * Append the <code>CharSequence</code> value of the argument to this
+ * <code>StringBuffer</code>.
*
- * @param code the code point to append
+ * @param seq the <code>CharSequence</code> to append
* @return this <code>StringBuffer</code>
- * @see Character#toChars(int, char[], int)
+ * @see #append(Object)
* @since 1.5
*/
- public synchronized StringBuffer appendCodePoint(int code)
+ public synchronized StringBuffer append(CharSequence seq)
{
- int len = Character.charCount(code);
- ensureCapacity_unsynchronized(count + len);
- Character.toChars(code, value, count);
- count += len;
+ if (seq == null)
+ seq = "null";
+ return append(seq, 0, seq.length());
+ }
+
+ /**
+ * Append the specified subsequence of the <code>CharSequence</code>
+ * argument to this <code>StringBuffer</code>.
+ *
+ * @param seq the <code>CharSequence</code> to append
+ * @param start the starting index
+ * @param end one past the ending index
+ * @return this <code>StringBuffer</code>
+ * @see #append(Object)
+ * @since 1.5
+ */
+ public synchronized StringBuffer append(CharSequence seq, int start, int end)
+ {
+ if (seq == null)
+ seq = "null";
+ if (start < 0 || end < 0 || start > end || end > seq.length())
+ throw new IndexOutOfBoundsException();
+ ensureCapacity_unsynchronized(this.count + end - start);
+ for (int i = start; i < end; ++i)
+ value[count++] = seq.charAt(i);
return this;
}
diff --git a/libjava/java/lang/StringBuilder.h b/libjava/java/lang/StringBuilder.h
index d4912bf0cb4..d34cd86c0a6 100644
--- a/libjava/java/lang/StringBuilder.h
+++ b/libjava/java/lang/StringBuilder.h
@@ -66,6 +66,10 @@ public:
private:
jboolean regionMatches(jint, ::java::lang::String *);
public:
+ jint codePointAt(jint);
+ jint codePointBefore(jint);
+ jint codePointCount(jint, jint);
+ void trimToSize();
::java::lang::Appendable * append(::java::lang::CharSequence *, jint, jint);
::java::lang::Appendable * append(::java::lang::CharSequence *);
::java::lang::Appendable * append(jchar);
diff --git a/libjava/java/lang/StringBuilder.java b/libjava/java/lang/StringBuilder.java
index 5f33b2ed53a..55a49e6e15d 100644
--- a/libjava/java/lang/StringBuilder.java
+++ b/libjava/java/lang/StringBuilder.java
@@ -1,5 +1,5 @@
/* StringBuilder.java -- Unsynchronized growable strings
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -998,4 +998,65 @@ public final class StringBuilder
*/
// GCJ LOCAL: Native to access String internals properly.
private native boolean regionMatches(int toffset, String other);
+
+ /**
+ * Get the code point at the specified index. This is like #charAt(int),
+ * but if the character is the start of a surrogate pair, and the
+ * following character completes the pair, then the corresponding
+ * supplementary code point is returned.
+ * @param index the index of the codepoint to get, starting at 0
+ * @return the codepoint at the specified index
+ * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+ * @since 1.5
+ */
+ public int codePointAt(int index)
+ {
+ return Character.codePointAt(value, index, count);
+ }
+
+ /**
+ * Get the code point before the specified index. This is like
+ * #codePointAt(int), but checks the characters at <code>index-1</code> and
+ * <code>index-2</code> to see if they form a supplementary code point.
+ * @param index the index just past the codepoint to get, starting at 0
+ * @return the codepoint at the specified index
+ * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+ * @since 1.5
+ */
+ public int codePointBefore(int index)
+ {
+ // Character.codePointBefore() doesn't perform this check. We
+ // could use the CharSequence overload, but this is just as easy.
+ if (index >= count)
+ throw new IndexOutOfBoundsException();
+ return Character.codePointBefore(value, index, 1);
+ }
+
+ /**
+ * Returns the number of Unicode code points in the specified sub sequence.
+ * Surrogate pairs count as one code point.
+ * @param beginIndex the start of the subarray
+ * @param endIndex the index after the last char in the subarray
+ * @return the number of code points
+ * @throws IndexOutOfBoundsException if beginIndex is less than zero or
+ * greater than endIndex or if endIndex is greater than the length of this
+ * StringBuilder
+ */
+ public int codePointCount(int beginIndex,int endIndex)
+ {
+ if (beginIndex < 0 || beginIndex > endIndex || endIndex > count)
+ throw new IndexOutOfBoundsException("invalid indices: " + beginIndex
+ + ", " + endIndex);
+ return Character.codePointCount(value, beginIndex, endIndex - beginIndex);
+ }
+
+ public void trimToSize()
+ {
+ if (count < value.length)
+ {
+ char[] newValue = new char[count];
+ System.arraycopy(value, 0, newValue, 0, count);
+ value = newValue;
+ }
+ }
}
diff --git a/libjava/java/lang/System$EnvironmentMap.h b/libjava/java/lang/System$EnvironmentMap.h
index ee4582b43fb..1220f57e28f 100644
--- a/libjava/java/lang/System$EnvironmentMap.h
+++ b/libjava/java/lang/System$EnvironmentMap.h
@@ -13,16 +13,19 @@ class java::lang::System$EnvironmentMap : public ::java::util::HashMap
public: // actually package-private
System$EnvironmentMap();
+ System$EnvironmentMap(::java::util::Map *);
public:
virtual jboolean containsKey(::java::lang::Object *);
virtual jboolean containsValue(::java::lang::Object *);
virtual ::java::util::Set * entrySet();
virtual ::java::lang::String * target$get(::java::lang::Object *);
virtual ::java::util::Set * keySet();
+ virtual ::java::lang::String * target$put(::java::lang::String *, ::java::lang::String *);
virtual ::java::lang::String * target$remove(::java::lang::Object *);
virtual ::java::util::Collection * values();
virtual ::java::lang::Object * get(::java::lang::Object *);
virtual ::java::lang::Object * remove(::java::lang::Object *);
+ virtual ::java::lang::Object * put(::java::lang::Object *, ::java::lang::Object *);
private:
::java::util::Set * __attribute__((aligned(__alignof__( ::java::util::HashMap)))) entries;
::java::util::Set * keys;
diff --git a/libjava/java/lang/System.java b/libjava/java/lang/System.java
index 587e637e974..b516a513e75 100644
--- a/libjava/java/lang/System.java
+++ b/libjava/java/lang/System.java
@@ -1,5 +1,5 @@
/* System.java -- useful methods to interface with the system
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -318,6 +318,7 @@ public final class System
* <dt>gnu.java.io.encoding_scheme_alias.latin?</dt> <dd>8859_?</dd>
* <dt>gnu.java.io.encoding_scheme_alias.UTF-8</dt> <dd>UTF8</dd>
* <dt>gnu.java.io.encoding_scheme_alias.utf-8</dt> <dd>UTF8</dd>
+ * <dt>gnu.java.util.zoneinfo.dir</dt> <dd>Root of zoneinfo tree</dd>
* </dl>
*
* @return the system properties, will never be null
@@ -827,7 +828,7 @@ public final class System
*
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
*/
- private static class EnvironmentMap
+ static class EnvironmentMap
extends HashMap<String,String>
{
@@ -853,7 +854,20 @@ public final class System
{
super();
}
-
+
+ /**
+ * Constructs a new <code>EnvironmentMap</code> containing
+ * the contents of the specified map.
+ *
+ * @param m the map to be added to this.
+ * @throws NullPointerException if a key or value is null.
+ * @throws ClassCastException if a key or value is not a String.
+ */
+ EnvironmentMap(Map<String,String> m)
+ {
+ super(m);
+ }
+
/**
* Blocks queries containing a null key or one which is not
* of type <code>String</code>. All other queries
@@ -938,7 +952,32 @@ public final class System
keys = new EnvironmentSet(super.keySet());
return keys;
}
-
+
+ /**
+ * Associates the given key to the given value. If the
+ * map already contains the key, its value is replaced.
+ * The map does not accept null keys or values, or keys
+ * and values not of type {@link String}.
+ *
+ * @param key the key to map.
+ * @param value the value to be mapped.
+ * @return the previous value of the key, or null if there was no mapping
+ * @throws NullPointerException if a key or value is null.
+ * @throws ClassCastException if a key or value is not a String.
+ */
+ public String put(String key, String value)
+ {
+ if (key == null)
+ throw new NullPointerException("A new key is null.");
+ if (value == null)
+ throw new NullPointerException("A new value is null.");
+ if (!(key instanceof String))
+ throw new ClassCastException("A new key is not a String.");
+ if (!(value instanceof String))
+ throw new ClassCastException("A new value is not a String.");
+ return super.put(key, value);
+ }
+
/**
* Removes a key-value pair from the map. The queried key may not
* be null or of a type other than a <code>String</code>.
diff --git a/libjava/java/lang/Thread.h b/libjava/java/lang/Thread.h
index e9cf9216100..b9116b1aad2 100644
--- a/libjava/java/lang/Thread.h
+++ b/libjava/java/lang/Thread.h
@@ -147,7 +147,7 @@ public: // actually package-private
::java::lang::Object * accessControlState;
::gnu::gcj::RawData * interp_frame;
::gnu::gcj::RawData * frame;
- volatile jint state;
+ jint volatile state;
::gnu::gcj::RawDataManaged * data;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/lang/VMCompiler.java b/libjava/java/lang/VMCompiler.java
index 0e4701c8409..1f600f12e90 100644
--- a/libjava/java/lang/VMCompiler.java
+++ b/libjava/java/lang/VMCompiler.java
@@ -1,5 +1,5 @@
/* VMClassLoader.java -- Reference implementation of compiler interface
- Copyright (C) 2004, 2005, 2006 Free Software Foundation
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of GNU Classpath.
@@ -248,7 +248,12 @@ final class VMCompiler
hexBytes.append(File.separatorChar);
int digestLength = digest.length;
for (int i = 0; i < digestLength; ++i)
- hexBytes.append(Integer.toHexString(digest[i] & 0xff));
+ {
+ int v = digest[i] & 0xff;
+ if (v < 16)
+ hexBytes.append('0');
+ hexBytes.append(Integer.toHexString(v));
+ }
// FIXME: use System.mapLibraryName?
// I'm thinking we should use that, plus a class specified
diff --git a/libjava/java/lang/VMProcess.h b/libjava/java/lang/VMProcess.h
new file mode 100644
index 00000000000..c0912e5c21e
--- /dev/null
+++ b/libjava/java/lang/VMProcess.h
@@ -0,0 +1,24 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __java_lang_VMProcess__
+#define __java_lang_VMProcess__
+
+#pragma interface
+
+#include <java/lang/Object.h>
+#include <gcj/array.h>
+
+
+class java::lang::VMProcess : public ::java::lang::Object
+{
+
+public: // actually package-private
+ VMProcess();
+ static ::java::lang::Process * nativeExec(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
+ static ::java::lang::Process * exec(::java::util::List *, ::java::util::Map *, ::java::io::File *, jboolean);
+public:
+ static ::java::lang::Class class$;
+};
+
+#endif // __java_lang_VMProcess__
diff --git a/libjava/java/lang/ProcessBuilder.java b/libjava/java/lang/VMProcess.java
index 440e5e0b48d..c0c7bebc10c 100644
--- a/libjava/java/lang/ProcessBuilder.java
+++ b/libjava/java/lang/VMProcess.java
@@ -1,5 +1,5 @@
-/* ProcessBuilder.java - Represent spawned system process
- Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* java.lang.VMProcess -- VM implementation of java.lang.ProcessBuilder
+ Copyright (C) 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,84 +35,34 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
-
package java.lang;
import java.io.File;
import java.io.IOException;
-import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
-public final class ProcessBuilder
+final class VMProcess
{
- private File directory = new File(System.getProperty("user.dir"));
- private List<String> command;
- // FIXME: make a copy.
- private Map<String, String> environment = System.getenv();
- private boolean redirect = false;
-
- public ProcessBuilder(List<String> command)
- {
- this.command = command;
- }
-
- public ProcessBuilder(String... command)
- {
- this.command = Arrays.asList(command);
- }
-
- public List<String> command()
- {
- return command;
- }
-
- public ProcessBuilder command(List<String> command)
- {
- this.command = command;
- return this;
- }
-
- public ProcessBuilder command(String... command)
- {
- this.command = Arrays.asList(command);
- return this;
- }
-
- public File directory()
- {
- return directory;
- }
-
- public ProcessBuilder directory(File directory)
- {
- this.directory = directory;
- return this;
- }
-
- public Map<String, String> environment()
- {
- return environment;
- }
-
- public boolean redirectErrorStream()
- {
- return redirect;
- }
-
- public ProcessBuilder redirectErrorStream(boolean redirect)
- {
- this.redirect = redirect;
- return this;
- }
+ static native Process nativeExec(String[] cmd, String[] env,
+ File dir, boolean redirect)
+ throws IOException;
- public Process start() throws IOException
+ static Process exec(List<String> cmd, Map<String, String> env,
+ File dir, boolean redirect) throws IOException
{
- SecurityManager sm = SecurityManager.current; // Be thread-safe!
- if (sm != null)
- sm.checkExec(command.get(0));
- // return VMProcess.exec(command, environment, directory, redirect);
- // FIXME
- return null;
+ String[] acmd = (String[]) cmd.toArray(new String[cmd.size()]);
+ String[] aenv = new String[env.size()];
+
+ int i = 0;
+ Iterator iter = env.entrySet().iterator();
+ while (iter.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ aenv[i++] = entry.getKey() + "=" + entry.getValue();
+ }
+
+ return nativeExec(acmd, aenv, dir, redirect);
}
}
diff --git a/libjava/java/lang/Win32Process$EOFInputStream.h b/libjava/java/lang/Win32Process$EOFInputStream.h
new file mode 100644
index 00000000000..b0224f332f7
--- /dev/null
+++ b/libjava/java/lang/Win32Process$EOFInputStream.h
@@ -0,0 +1,23 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __java_lang_Win32Process$EOFInputStream__
+#define __java_lang_Win32Process$EOFInputStream__
+
+#pragma interface
+
+#include <java/io/InputStream.h>
+
+class java::lang::Win32Process$EOFInputStream : public ::java::io::InputStream
+{
+
+ Win32Process$EOFInputStream();
+public:
+ virtual jint read();
+public: // actually package-private
+ static ::java::lang::Win32Process$EOFInputStream * instance;
+public:
+ static ::java::lang::Class class$;
+};
+
+#endif // __java_lang_Win32Process$EOFInputStream__
diff --git a/libjava/java/lang/Win32Process.h b/libjava/java/lang/Win32Process.h
index 0b49c6e9c33..5e22934a990 100644
--- a/libjava/java/lang/Win32Process.h
+++ b/libjava/java/lang/Win32Process.h
@@ -20,10 +20,10 @@ public:
::java::io::InputStream * getInputStream();
::java::io::OutputStream * getOutputStream();
jint waitFor();
- Win32Process(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *);
+ Win32Process(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
private:
jboolean hasExited();
- void startProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *);
+ void startProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
void cleanup();
::java::io::OutputStream * __attribute__((aligned(__alignof__( ::java::lang::Process)))) outputStream;
::java::io::InputStream * inputStream;
diff --git a/libjava/java/lang/Win32Process.java b/libjava/java/lang/Win32Process.java
index 7d9e40fce4a..f22b548820f 100644
--- a/libjava/java/lang/Win32Process.java
+++ b/libjava/java/lang/Win32Process.java
@@ -1,6 +1,6 @@
// Win32Process.java - Subclass of Process for Win32 systems.
-/* Copyright (C) 2002, 2003, 2006 Free Software Foundation
+/* Copyright (C) 2002, 2003, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -51,9 +51,8 @@ final class Win32Process extends Process
public native int waitFor () throws InterruptedException;
- public Win32Process (String[] progarray,
- String[] envp,
- File dir)
+ public Win32Process (String[] progarray, String[] envp, File dir,
+ boolean redirect)
throws IOException
{
for (int i = 0; i < progarray.length; i++)
@@ -64,7 +63,7 @@ final class Win32Process extends Process
progarray[i] = "\"" + s + "\"";
}
- startProcess (progarray, envp, dir);
+ startProcess (progarray, envp, dir, redirect);
}
// The standard streams (stdin, stdout and stderr, respectively)
@@ -81,8 +80,18 @@ final class Win32Process extends Process
private native boolean hasExited ();
private native void startProcess (String[] progarray,
- String[] envp,
- File dir)
+ String[] envp,
+ File dir,
+ boolean redirect)
throws IOException;
private native void cleanup ();
+
+ private static class EOFInputStream extends InputStream
+ {
+ static EOFInputStream instance = new EOFInputStream();
+ public int read()
+ {
+ return -1;
+ }
+ }
}
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 8af533b7769..a6b353f2a95 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -670,6 +670,28 @@ java::lang::Class::finalize (void)
engine->unregister(this);
}
+void
+_Jv_ClosureList::releaseClosures (_Jv_ClosureList **closures)
+{
+ if (!closures)
+ return;
+
+ while (_Jv_ClosureList *current = *closures)
+ {
+ *closures = current->next;
+ ffi_closure_free (current->ptr);
+ }
+}
+
+void
+_Jv_ClosureList::registerClosure (jclass klass, void *ptr)
+{
+ _Jv_ClosureList **closures = klass->engine->get_closure_list (klass);
+ this->ptr = ptr;
+ this->next = *closures;
+ *closures = this;
+}
+
// This implements the initialization process for a class. From Spec
// section 12.4.2.
void
@@ -1150,7 +1172,7 @@ parseAnnotationElement(jclass klass, _Jv_Constants *pool,
case 'J':
{
int cindex = read_u2 (bytes, last);
- check_constant (pool, cindex, JV_CONSTANT_Double);
+ check_constant (pool, cindex, JV_CONSTANT_Long);
_Jv_word2 word;
memcpy (&word, &pool->data[cindex], 2 * sizeof (_Jv_word));
result = Long::valueOf (word.l);
@@ -1331,9 +1353,8 @@ java::lang::Class::getDeclaredAnnotations(jint /* jv_attr_type */ member_type,
if (bytes == NULL)
return 0;
- ClassLoader *trueLoader = loader;
- if (trueLoader == NULL)
- trueLoader = (ClassLoader *)VMClassLoader::bootLoader;
+ if (loader == NULL)
+ loader = (ClassLoader *)VMClassLoader::bootLoader;
result = (loader->getDeclaredAnnotations
(this, member_type, member_index, kind_req));
@@ -1631,6 +1652,26 @@ _Jv_LookupDeclaredMethod (jclass klass, _Jv_Utf8Const *name,
return NULL;
}
+java::lang::reflect::Method *
+_Jv_GetReflectedMethod (jclass klass, _Jv_Utf8Const *name,
+ _Jv_Utf8Const *signature)
+{
+ for (; klass; klass = klass->getSuperclass())
+ {
+ _Jv_Method *meth = _Jv_GetMethodLocal (klass, name, signature);
+ if (meth)
+ {
+ using namespace java::lang::reflect;
+ Method *rmethod = new Method ();
+ rmethod->offset = (char*) meth - (char*) klass->methods;
+ rmethod->declaringClass = klass;
+ return rmethod;
+ }
+ }
+
+ return NULL;
+}
+
#ifdef HAVE_TLS
// NOTE: MCACHE_SIZE should be a power of 2 minus one.
@@ -2023,3 +2064,15 @@ _Jv_GetClassState (jclass klass)
return klass->state;
}
+jstring
+_Jv_GetInterpClassSourceFile (jclass klass)
+{
+ if (_Jv_IsInterpretedClass (klass))
+ {
+ _Jv_InterpClass *iclass =
+ reinterpret_cast<_Jv_InterpClass *> (klass->aux_info);
+ return iclass->source_file_name;
+ }
+
+ return NULL;
+}
diff --git a/libjava/java/lang/natPosixProcess.cc b/libjava/java/lang/natPosixProcess.cc
index 498647036c5..149b5d8ba34 100644
--- a/libjava/java/lang/natPosixProcess.cc
+++ b/libjava/java/lang/natPosixProcess.cc
@@ -1,6 +1,6 @@
// natPosixProcess.cc - Native side of POSIX process code.
-/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -41,6 +41,7 @@ details. */
#include <java/io/FileOutputStream.h>
#include <java/io/IOException.h>
#include <java/lang/OutOfMemoryError.h>
+#include <java/lang/PosixProcess$EOFInputStream.h>
using gnu::java::nio::channels::FileChannelImpl;
@@ -231,7 +232,7 @@ java::lang::PosixProcess::nativeSpawn ()
try
{
// Transform arrays to native form.
- args = (char **) _Jv_Malloc ((progarray->length + 1) * sizeof (char *));
+ args = (char **) _Jv_Malloc ((progarray->length + 1) * sizeof (char *));
// Initialize so we can gracefully recover.
jstring *elts = elements (progarray);
@@ -262,23 +263,30 @@ java::lang::PosixProcess::nativeSpawn ()
path = new_string (dir->getPath ());
// Create pipes for I/O. MSGP is for communicating exec()
- // status.
- if (pipe (inp) || pipe (outp) || pipe (errp) || pipe (msgp)
+ // status. If redirecting stderr to stdout, we don't need to
+ // create the ERRP pipe.
+ if (pipe (inp) || pipe (outp) || pipe (msgp)
|| fcntl (msgp[1], F_SETFD, FD_CLOEXEC))
- throw new IOException (JvNewStringUTF (strerror (errno)));
+ throw new IOException (JvNewStringUTF (strerror (errno)));
+ if (! redirect && pipe (errp))
+ throw new IOException (JvNewStringUTF (strerror (errno)));
// We create the streams before forking. Otherwise if we had an
// error while creating the streams we would have run the child
// with no way to communicate with it.
- errorStream =
- new FileInputStream (new
- FileChannelImpl (errp[0], FileChannelImpl::READ));
- inputStream =
- new FileInputStream (new
- FileChannelImpl (inp[0], FileChannelImpl::READ));
- outputStream =
- new FileOutputStream (new FileChannelImpl (outp[1],
- FileChannelImpl::WRITE));
+ if (redirect)
+ errorStream = PosixProcess$EOFInputStream::instance;
+ else
+ errorStream =
+ new FileInputStream (new
+ FileChannelImpl (errp[0],
+ FileChannelImpl::READ));
+ inputStream =
+ new FileInputStream (new
+ FileChannelImpl (inp[0], FileChannelImpl::READ));
+ outputStream =
+ new FileOutputStream (new FileChannelImpl (outp[1],
+ FileChannelImpl::WRITE));
// We don't use vfork() because that would cause the local
// environment to be set by the child.
@@ -319,14 +327,17 @@ java::lang::PosixProcess::nativeSpawn ()
// We ignore errors from dup2 because they should never occur.
dup2 (outp[0], 0);
dup2 (inp[1], 1);
- dup2 (errp[1], 2);
+ dup2 (redirect ? inp[1] : errp[1], 2);
// Use close and not myclose -- we're in the child, and we
// aren't worried about the possible race condition.
close (inp[0]);
close (inp[1]);
- close (errp[0]);
- close (errp[1]);
+ if (! redirect)
+ {
+ close (errp[0]);
+ close (errp[1]);
+ }
close (outp[0]);
close (outp[1]);
close (msgp[0]);
@@ -362,7 +373,8 @@ java::lang::PosixProcess::nativeSpawn ()
myclose (outp[0]);
myclose (inp[1]);
- myclose (errp[1]);
+ if (! redirect)
+ myclose (errp[1]);
myclose (msgp[1]);
char c;
@@ -406,7 +418,7 @@ java::lang::PosixProcess::nativeSpawn ()
{
if (errorStream != NULL)
errorStream->close ();
- else
+ else if (! redirect)
myclose (errp[0]);
}
catch (java::lang::Throwable *ignore)
@@ -417,10 +429,11 @@ java::lang::PosixProcess::nativeSpawn ()
// the use of myclose.
myclose (outp[0]);
myclose (inp[1]);
- myclose (errp[1]);
+ if (! redirect)
+ myclose (errp[1]);
myclose (msgp[1]);
- exception = thrown;
+ exception = thrown;
}
myclose (msgp[0]);
@@ -430,6 +443,7 @@ java::lang::PosixProcess::nativeSpawn ()
{
fcntl (outp[1], F_SETFD, FD_CLOEXEC);
fcntl (inp[0], F_SETFD, FD_CLOEXEC);
- fcntl (errp[0], F_SETFD, FD_CLOEXEC);
+ if (! redirect)
+ fcntl (errp[0], F_SETFD, FD_CLOEXEC);
}
}
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc
index 64c8fbb3f90..02842b1dfda 100644
--- a/libjava/java/lang/natRuntime.cc
+++ b/libjava/java/lang/natRuntime.cc
@@ -1,6 +1,6 @@
// natRuntime.cc - Implementation of native side of Runtime class.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -297,7 +297,7 @@ java::lang::Runtime::execInternal (jstringArray cmd,
jstringArray env,
java::io::File *dir)
{
- return new _Jv_platform_process (cmd, env, dir);
+ return new _Jv_platform_process (cmd, env, dir, false);
}
jint
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc
index 1a49bf79809..39590a3e4e0 100644
--- a/libjava/java/lang/natString.cc
+++ b/libjava/java/lang/natString.cc
@@ -1,6 +1,6 @@
// natString.cc - Implementation of java.lang.String native methods.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -615,11 +615,9 @@ java::lang::String::getBytes (jstring enc)
while (todo > 0 || converter->havePendingBytes())
{
converter->setOutput(buffer, bufpos);
- // We only really need to do a single write.
- converter->setFinished();
int converted = converter->write(this, offset, todo, NULL);
bufpos = converter->count;
- if (converted == 0 && bufpos == converter->count)
+ if (converted == 0)
{
buflen *= 2;
jbyteArray newbuffer = JvNewByteArray(buflen);
@@ -627,10 +625,15 @@ java::lang::String::getBytes (jstring enc)
buffer = newbuffer;
}
else
- bufpos = converter->count;
-
- offset += converted;
- todo -= converted;
+ {
+ offset += converted;
+ todo -= converted;
+ }
+ }
+ if (length() > 0)
+ {
+ converter->setFinished();
+ converter->write(this, 0, 0, NULL);
}
converter->done ();
if (bufpos == buflen)
@@ -707,7 +710,7 @@ java::lang::String::regionMatches (jint toffset,
}
jint
-java::lang::String::compareTo (jstring anotherString)
+java::lang::String::nativeCompareTo (jstring anotherString)
{
jchar *tptr = JvGetStringChars (this);
jchar *optr = JvGetStringChars (anotherString);
diff --git a/libjava/java/lang/natVMProcess.cc b/libjava/java/lang/natVMProcess.cc
new file mode 100644
index 00000000000..0a14465c4bb
--- /dev/null
+++ b/libjava/java/lang/natVMProcess.cc
@@ -0,0 +1,34 @@
+// natVMProcess.cc - native code for ProcessBuilder
+
+/* Copyright (C) 2007 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+#include <config.h>
+
+#include <gcj/cni.h>
+#include <jvm.h>
+
+#include <platform.h>
+
+#include <java/lang/VMProcess.h>
+#include <java/lang/Process.h>
+#include <java/io/File.h>
+
+// It is convenient and safe to simply include all of these.
+#include <java/lang/Win32Process.h>
+#include <java/lang/EcosProcess.h>
+#include <java/lang/PosixProcess.h>
+
+::java::lang::Process *
+java::lang::VMProcess::nativeExec (jstringArray cmd,
+ jstringArray env,
+ ::java::io::File *dir,
+ jboolean redirect)
+{
+ return new _Jv_platform_process (cmd, env, dir, redirect);
+}
diff --git a/libjava/java/lang/natWin32Process.cc b/libjava/java/lang/natWin32Process.cc
index d07f501366b..0e7f60d6cad 100644
--- a/libjava/java/lang/natWin32Process.cc
+++ b/libjava/java/lang/natWin32Process.cc
@@ -1,6 +1,6 @@
// natWin32Process.cc - Native side of Win32 process code.
-/* Copyright (C) 2003, 2006 Free Software Foundation
+/* Copyright (C) 2003, 2006, 2007 Free Software Foundation
This file is part of libgcj.
@@ -25,6 +25,7 @@ details. */
#include <java/io/FileOutputStream.h>
#include <java/io/IOException.h>
#include <java/lang/OutOfMemoryError.h>
+#include <java/lang/Win32Process$EOFInputStream.h>
#include <gnu/java/nio/channels/FileChannelImpl.h>
using gnu::java::nio::channels::FileChannelImpl;
@@ -146,7 +147,7 @@ class ChildProcessPipe
public:
// Indicates from the child process' point of view
// whether the pipe is for reading or writing.
- enum EType {INPUT, OUTPUT};
+ enum EType {INPUT, OUTPUT, DUMMY};
ChildProcessPipe(EType eType);
~ChildProcessPipe();
@@ -163,8 +164,11 @@ private:
};
ChildProcessPipe::ChildProcessPipe(EType eType):
- m_eType(eType)
+ m_eType(eType), m_hRead(0), m_hWrite(0)
{
+ if (eType == DUMMY)
+ return;
+
SECURITY_ATTRIBUTES sAttrs;
// Explicitly allow the handles to the pipes to be inherited.
@@ -195,7 +199,8 @@ ChildProcessPipe::~ChildProcessPipe()
// Close the parent end of the pipe. This
// destructor is called after the child process
// has been spawned.
- CloseHandle(getChildHandle());
+ if (m_eType != DUMMY)
+ CloseHandle(getChildHandle());
}
HANDLE ChildProcessPipe::getParentHandle()
@@ -210,8 +215,9 @@ HANDLE ChildProcessPipe::getChildHandle()
void
java::lang::Win32Process::startProcess (jstringArray progarray,
- jstringArray envp,
- java::io::File *dir)
+ jstringArray envp,
+ java::io::File *dir,
+ jboolean redirect)
{
using namespace java::io;
@@ -283,7 +289,8 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
// on each of standard streams.
ChildProcessPipe aChildStdIn(ChildProcessPipe::INPUT);
ChildProcessPipe aChildStdOut(ChildProcessPipe::OUTPUT);
- ChildProcessPipe aChildStdErr(ChildProcessPipe::OUTPUT);
+ ChildProcessPipe aChildStdErr(redirect ? ChildProcessPipe::DUMMY
+ : ChildProcessPipe::OUTPUT);
outputStream = new FileOutputStream (new FileChannelImpl (
(jint) aChildStdIn.getParentHandle (),
@@ -291,7 +298,10 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
inputStream = new FileInputStream (new FileChannelImpl (
(jint) aChildStdOut.getParentHandle (),
FileChannelImpl::READ));
- errorStream = new FileInputStream (new FileChannelImpl (
+ if (redirect)
+ errorStream = Win32Process$EOFInputStream::instance;
+ else
+ errorStream = new FileInputStream (new FileChannelImpl (
(jint) aChildStdErr.getParentHandle (),
FileChannelImpl::READ));
@@ -309,7 +319,8 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
si.hStdInput = aChildStdIn.getChildHandle();
si.hStdOutput = aChildStdOut.getChildHandle();
- si.hStdError = aChildStdErr.getChildHandle();
+ si.hStdError = redirect ? aChildStdOut.getChildHandle()
+ : aChildStdErr.getChildHandle();
// Spawn the process. CREATE_NO_WINDOW only applies when
// starting a console application; it suppresses the
diff --git a/libjava/java/lang/reflect/Method.h b/libjava/java/lang/reflect/Method.h
index 7d4b46d3e27..8a843d5d154 100644
--- a/libjava/java/lang/reflect/Method.h
+++ b/libjava/java/lang/reflect/Method.h
@@ -12,6 +12,7 @@
jmethodID _Jv_FromReflectedMethod (java::lang::reflect::Method *);
jobject _Jv_JNI_ToReflectedMethod (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
+::java::lang::reflect::Method *_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
class java::lang::reflect::Method : public ::java::lang::reflect::AccessibleObject
{
@@ -29,7 +30,13 @@ public:
jboolean isVarArgs();
::java::lang::Class * getReturnType();
JArray< ::java::lang::Class * > * getParameterTypes();
+public: // actually package-private
+ JArray< ::java::lang::Class * > * internalGetParameterTypes();
+public:
JArray< ::java::lang::Class * > * getExceptionTypes();
+public: // actually package-private
+ JArray< ::java::lang::Class * > * internalGetExceptionTypes();
+public:
jboolean equals(::java::lang::Object *);
jint hashCode();
::java::lang::String * toString();
@@ -71,6 +78,7 @@ public:
friend jobject (::_Jv_JNI_ToReflectedMethod) (_Jv_JNIEnv *, jclass, jmethodID, jboolean);
friend class java::lang::Class;
friend class java::io::ObjectInputStream;
+ friend java::lang::reflect::Method* ::_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
};
#endif // __java_lang_reflect_Method__
diff --git a/libjava/java/lang/reflect/Method.java b/libjava/java/lang/reflect/Method.java
index 6fa2956e40e..878210abbd2 100644
--- a/libjava/java/lang/reflect/Method.java
+++ b/libjava/java/lang/reflect/Method.java
@@ -153,6 +153,15 @@ public final class Method
return (Class<?>[]) parameter_types.clone();
}
+ // Just like getParameterTypes, but don't clone the array.
+ // Package private for use by VMProxy.
+ final Class<?>[] internalGetParameterTypes ()
+ {
+ if (parameter_types == null)
+ getType();
+ return (Class<?>[]) parameter_types;
+ }
+
/**
* Get the exception types this method says it throws, in no particular
* order. If the method has no throws clause, returns a 0-length array
@@ -167,6 +176,15 @@ public final class Method
return (Class<?>[]) exception_types.clone();
}
+ // Just like getExceptionTypes, but don't clone the array.
+ // Package private for use by VMProxy.
+ final Class<?>[] internalGetExceptionTypes ()
+ {
+ if (exception_types == null)
+ getType();
+ return (Class<?>[]) exception_types;
+ }
+
/**
* Compare two objects to see if they are semantically equivalent.
* Two Methods are semantically equivalent if they have the same declaring
diff --git a/libjava/java/lang/reflect/natVMProxy.cc b/libjava/java/lang/reflect/natVMProxy.cc
index 8d803a85971..5704049909a 100644
--- a/libjava/java/lang/reflect/natVMProxy.cc
+++ b/libjava/java/lang/reflect/natVMProxy.cc
@@ -1,6 +1,6 @@
// natVMProxy.cc -- Implementation of VMProxy methods.
-/* Copyright (C) 2006
+/* Copyright (C) 2006, 2007
Free Software Foundation
This file is part of libgcj.
@@ -66,7 +66,7 @@ using namespace java::lang::reflect;
using namespace java::lang;
typedef void (*closure_fun) (ffi_cif*, void*, void**, void*);
-static void *ncode (_Jv_Method *self, closure_fun fun, Method *meth);
+static void *ncode (jclass klass, _Jv_Method *self, closure_fun fun);
static void run_proxy (ffi_cif*, void*, void**, void*);
typedef jobject invoke_t (jobject, Proxy *, Method *, JArray< jobject > *);
@@ -165,7 +165,7 @@ java::lang::reflect::VMProxy::generateProxyClass
// the interfaces of which it is a proxy will also be reachable,
// so this is safe.
method = imethod;
- method.ncode = ncode (&method, run_proxy, elements(d->methods)[i]);
+ method.ncode = ncode (klass, &method, run_proxy);
method.accflags &= ~Modifier::ABSTRACT;
}
@@ -283,15 +283,14 @@ unbox (jobject o, jclass klass, void *rvalue, FFI_TYPE type)
JvFail ("Bad ffi type in proxy");
}
-
// run_proxy is the entry point for all proxy methods. It boxes up
// all the arguments and then invokes the invocation handler's invoke()
// method. Exceptions are caught and propagated.
typedef struct {
ffi_closure closure;
+ _Jv_ClosureList list;
ffi_cif cif;
- Method *meth;
_Jv_Method *self;
ffi_type *arg_types[0];
} ncode_closure;
@@ -313,9 +312,15 @@ run_proxy (ffi_cif *cif,
Thread *thread = Thread::currentThread();
_Jv_InterpFrame frame_desc (self->self, thread, proxy->getClass());
+ Method *meth = _Jv_GetReflectedMethod (proxy->getClass(),
+ self->self->name,
+ self->self->signature);
+ JArray<jclass> *parameter_types = meth->internalGetParameterTypes ();
+ JArray<jclass> *exception_types = meth->internalGetExceptionTypes ();
+
InvocationHandler *handler = proxy->h;
void *poo
- = _Jv_NewObjectArray (self->meth->parameter_types->length, &Object::class$, NULL);
+ = _Jv_NewObjectArray (parameter_types->length, &Object::class$, NULL);
JArray<jobject> *argsArray = (JArray<jobject> *) poo;
jobject *jargs = elements(argsArray);
@@ -331,14 +336,14 @@ run_proxy (ffi_cif *cif,
// Copy and box all the args.
int index = 1;
- for (int i = 0; i < self->meth->parameter_types->length; i++, index++)
- jargs[i] = box (args[index], elements(self->meth->parameter_types)[i],
+ for (int i = 0; i < parameter_types->length; i++, index++)
+ jargs[i] = box (args[index], elements(parameter_types)[i],
cif->arg_types[index]->type);
jobject ret;
try
{
- ret = invoke (handler, proxy, self->meth, argsArray);
+ ret = invoke (handler, proxy, meth, argsArray);
}
catch (Throwable *t)
{
@@ -346,15 +351,15 @@ run_proxy (ffi_cif *cif,
|| _Jv_IsInstanceOf (t, &Error::class$))
throw t;
- Class **throwables = elements (self->meth->exception_types);
- for (int i = 0; i < self->meth->exception_types->length; i++)
+ Class **throwables = elements (exception_types);
+ for (int i = 0; i < exception_types->length; i++)
if (_Jv_IsInstanceOf (t, throwables[i]))
throw t;
throw new UndeclaredThrowableException (t);
}
- unbox (ret, self->meth->return_type, rvalue, cif->rtype->type);
+ unbox (ret, meth->return_type, rvalue, cif->rtype->type);
}
@@ -362,16 +367,19 @@ run_proxy (ffi_cif *cif,
// the address of its closure.
static void *
-ncode (_Jv_Method *self, closure_fun fun, Method *meth)
+ncode (jclass klass, _Jv_Method *self, closure_fun fun)
{
using namespace java::lang::reflect;
jboolean staticp = (self->accflags & Modifier::STATIC) != 0;
int arg_count = _Jv_count_arguments (self->signature, staticp);
+ void *code;
ncode_closure *closure =
- (ncode_closure*)_Jv_AllocBytes (sizeof (ncode_closure)
- + arg_count * sizeof (ffi_type*));
+ (ncode_closure*)ffi_closure_alloc (sizeof (ncode_closure)
+ + arg_count * sizeof (ffi_type*),
+ &code);
+ closure->list.registerClosure (klass, closure);
_Jv_init_cif (self->signature,
arg_count,
@@ -379,16 +387,16 @@ ncode (_Jv_Method *self, closure_fun fun, Method *meth)
&closure->cif,
&closure->arg_types[0],
NULL);
- closure->meth = meth;
closure->self = self;
JvAssert ((self->accflags & Modifier::NATIVE) == 0);
- ffi_prep_closure (&closure->closure,
- &closure->cif,
- fun,
- (void*)closure);
+ ffi_prep_closure_loc (&closure->closure,
+ &closure->cif,
+ fun,
+ code,
+ code);
- self->ncode = (void*)closure;
+ self->ncode = code;
return self->ncode;
}
diff --git a/libjava/java/security/VMSecureRandom$Spinner.h b/libjava/java/security/VMSecureRandom$Spinner.h
index 32a1e31acdf..0013a3fc8ca 100644
--- a/libjava/java/security/VMSecureRandom$Spinner.h
+++ b/libjava/java/security/VMSecureRandom$Spinner.h
@@ -29,8 +29,8 @@ private:
void stop();
public: // actually package-private
static void access$0(::java::security::VMSecureRandom$Spinner *);
- volatile jbyte __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
- volatile jboolean running;
+ jbyte volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
+ jboolean volatile running;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/TimeZone.h b/libjava/java/util/TimeZone.h
index 3eb30ad5ff5..9ae0ebc3f16 100644
--- a/libjava/java/util/TimeZone.h
+++ b/libjava/java/util/TimeZone.h
@@ -40,8 +40,14 @@ public:
virtual jboolean useDaylightTime() = 0;
virtual jboolean inDaylightTime(::java::util::Date *) = 0;
virtual jint getDSTSavings();
+private:
+ static ::java::util::TimeZone * getTimeZoneInternal(::java::lang::String *);
+public:
static ::java::util::TimeZone * getTimeZone(::java::lang::String *);
static JArray< ::java::lang::String * > * getAvailableIDs(jint);
+private:
+ static jint getAvailableIDs(::java::io::File *, ::java::lang::String *, ::java::util::ArrayList *);
+public:
static JArray< ::java::lang::String * > * getAvailableIDs();
static ::java::util::TimeZone * getDefault();
static void setDefault(::java::util::TimeZone *);
@@ -53,6 +59,9 @@ private:
::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) ID;
static ::java::util::TimeZone * defaultZone0;
static const jlong serialVersionUID = 3581463369166924961LL;
+ static ::java::lang::String * zoneinfo_dir;
+ static JArray< ::java::lang::String * > * availableIDs;
+ static ::java::util::HashMap * aliases0;
static ::java::util::HashMap * timezones0;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/VMTimeZone.h b/libjava/java/util/VMTimeZone.h
index 6e571143dd0..26ca5e224cb 100644
--- a/libjava/java/util/VMTimeZone.h
+++ b/libjava/java/util/VMTimeZone.h
@@ -16,8 +16,7 @@ public: // actually package-private
static ::java::util::TimeZone * getDefaultTimeZoneId();
private:
static ::java::lang::String * readTimeZoneFile(::java::lang::String *);
- static ::java::lang::String * readtzFile(::java::lang::String *);
- static void skipFully(::java::io::InputStream *, jlong);
+ static ::java::lang::String * readSysconfigClockFile(::java::lang::String *);
static ::java::lang::String * getSystemTimeZoneId();
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/VMTimeZone.java b/libjava/java/util/VMTimeZone.java
index 27bab939166..992ecaf28a8 100644
--- a/libjava/java/util/VMTimeZone.java
+++ b/libjava/java/util/VMTimeZone.java
@@ -40,9 +40,9 @@ exception statement from your version. */
package java.util;
import gnu.classpath.Configuration;
+import gnu.classpath.SystemProperties;
+import gnu.java.util.ZoneInfo;
import java.util.TimeZone;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
import java.io.*;
@@ -78,9 +78,10 @@ final class VMTimeZone
* The reference implementation which is made for GNU/Posix like
* systems calls <code>System.getenv("TZ")</code>,
* <code>readTimeZoneFile("/etc/timezone")</code>,
- * <code>readtzFile("/etc/localtime")</code> and finally
- * <code>getSystemTimeZoneId()</code> till a supported TimeZone is
- * found through <code>TimeZone.getDefaultTimeZone(String)</code>.
+ * <code>ZoneInfo.readTZFile((String)null, "/etc/localtime")</code>
+ * and finally <code>getSystemTimeZoneId()</code> till a supported
+ * TimeZone is found through
+ * <code>TimeZone.getDefaultTimeZone(String)</code>.
* If every method fails <code>null</code> is returned (which means
* the TimeZone code will fall back on GMT as default time zone).
* <p>
@@ -111,9 +112,51 @@ final class VMTimeZone
// Try to parse /etc/localtime
if (zone == null)
{
- tzid = readtzFile("/etc/localtime");
- if (tzid != null && !tzid.equals(""))
- zone = TimeZone.getDefaultTimeZone(tzid);
+ zone = ZoneInfo.readTZFile((String) null, "/etc/localtime");
+ if (zone != null)
+ {
+ // Try to find a more suitable ID for the /etc/localtime
+ // timezone.
+ // Sometimes /etc/localtime is a symlink to some
+ // /usr/share/zoneinfo/ file.
+ String id = null;
+ try
+ {
+ id = new File("/etc/localtime").getCanonicalPath();
+ if (id != null)
+ {
+ String zoneinfo_dir
+ = SystemProperties.getProperty("gnu.java.util.zoneinfo.dir");
+ if (zoneinfo_dir != null)
+ zoneinfo_dir
+ = new File(zoneinfo_dir
+ + File.separatorChar).getCanonicalPath();
+ if (zoneinfo_dir != null && id.startsWith(zoneinfo_dir))
+ {
+ int pos = zoneinfo_dir.length();
+ while (pos < id.length()
+ && id.charAt(pos) == File.separatorChar)
+ pos++;
+ if (pos < id.length())
+ id = id.substring(pos);
+ else
+ id = null;
+ }
+ else
+ id = null;
+ }
+ }
+ catch (IOException ioe)
+ {
+ id = null;
+ }
+
+ if (id == null)
+ id = readSysconfigClockFile("/etc/sysconfig/clock");
+
+ if (id != null)
+ zone.setID(id);
+ }
}
// Try some system specific way
@@ -189,466 +232,47 @@ final class VMTimeZone
}
/**
- * Tries to read a file as a "standard" tzfile and return a time
- * zone id string as expected by <code>getDefaultTimeZone(String)</code>.
- * If the file doesn't exist, an IOException occurs or it isn't a tzfile
- * that can be parsed null is returned.
+ * Tries to read the time zone name from a file.
+ * If the file cannot be read or an IOException occurs null is returned.
* <p>
- * The tzfile structure (as also used by glibc) is described in the Olson
- * tz database archive as can be found at
- * <code>ftp://elsie.nci.nih.gov/pub/</code>.
- * <p>
- * At least the following platforms support the tzdata file format
- * and /etc/localtime (GNU/Linux, Darwin, Solaris and FreeBSD at
- * least). Some systems (like Darwin) don't start the file with the
- * required magic bytes 'TZif', this implementation can handle
- * that).
+ * The /etc/sysconfig/clock file is not standard, but a lot of systems
+ * have it. The file is included by shell scripts and the timezone
+ * name is defined in ZONE variable.
+ * This routine should grok it with or without quotes:
+ * ZONE=America/New_York
+ * or
+ * ZONE="Europe/London"
*/
- private static String readtzFile(String file)
+ private static String readSysconfigClockFile(String file)
{
- File f = new File(file);
- if (!f.exists())
- return null;
-
- DataInputStream dis = null;
+ BufferedReader br = null;
try
{
- FileInputStream fis = new FileInputStream(f);
+ FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
- dis = new DataInputStream(bis);
-
- // Make sure we are reading a tzfile.
- byte[] tzif = new byte[5];
- dis.readFully(tzif);
- int tzif2 = 4;
- if (tzif[0] == 'T' && tzif[1] == 'Z'
- && tzif[2] == 'i' && tzif[3] == 'f')
- {
- if (tzif[4] >= '2')
- tzif2 = 8;
- // Reserved bytes
- skipFully(dis, 16 - 1);
- }
- else
- // Darwin has tzdata files that don't start with the TZif marker
- skipFully(dis, 16 - 5);
-
- String id = null;
- int ttisgmtcnt = dis.readInt();
- int ttisstdcnt = dis.readInt();
- int leapcnt = dis.readInt();
- int timecnt = dis.readInt();
- int typecnt = dis.readInt();
- int charcnt = dis.readInt();
- if (tzif2 == 8)
- {
- skipFully(dis, timecnt * (4 + 1) + typecnt * (4 + 1 + 1) + charcnt
- + leapcnt * (4 + 4) + ttisgmtcnt + ttisstdcnt);
-
- dis.readFully(tzif);
- if (tzif[0] != 'T' || tzif[1] != 'Z' || tzif[2] != 'i'
- || tzif[3] != 'f' || tzif[4] < '2')
- return null;
-
- // Reserved bytes
- skipFully(dis, 16 - 1);
- ttisgmtcnt = dis.readInt();
- ttisstdcnt = dis.readInt();
- leapcnt = dis.readInt();
- timecnt = dis.readInt();
- typecnt = dis.readInt();
- charcnt = dis.readInt();
- }
- if (typecnt > 0)
- {
- int seltimecnt = timecnt;
- if (seltimecnt > 16)
- seltimecnt = 16;
-
- long[] times = new long[seltimecnt];
- int[] types = new int[seltimecnt];
-
- // Transition times
- skipFully(dis, (timecnt - seltimecnt) * tzif2);
-
- for (int i = 0; i < seltimecnt; i++)
- if (tzif2 == 8)
- times[i] = dis.readLong();
- else
- times[i] = (long) dis.readInt();
-
- // Transition types
- skipFully(dis, timecnt - seltimecnt);
- for (int i = 0; i < seltimecnt; i++)
- {
- types[i] = dis.readByte();
- if (types[i] < 0)
- types[i] += 256;
- }
-
- // Get std/dst_offset and dst/non-dst time zone names.
- int std_abbrind = -1;
- int dst_abbrind = -1;
- int std_offset = 0;
- int dst_offset = 0;
- int std_ind = -1;
- int dst_ind = -1;
-
- int alternation = 0;
- if (seltimecnt >= 4 && types[0] != types[1]
- && types[0] < typecnt && types[1] < typecnt)
- {
- // Verify only two types are involved
- // in the transitions and they alternate.
- alternation = 1;
- for (int i = 2; i < seltimecnt; i++)
- if (types[i] != types[i % 2])
- alternation = 0;
- }
-
- // If a timezone previously used DST, but no longer does
- // (or no longer will in the near future, say 5 years),
- // then always pick only the std zone type corresponding
- // to latest applicable transition.
- if (seltimecnt > 0
- && times[seltimecnt - 1]
- < System.currentTimeMillis() / 1000 + 5 * 365 * 86400)
- alternation = -1;
-
- for (int i = 0; i < typecnt; i++)
- {
- // gmtoff
- int offset = dis.readInt();
- int dst = dis.readByte();
- int abbrind = dis.readByte();
- if (dst == 0)
- {
- if (alternation == 0
- || (alternation == 1
- && (i == types[0] || i == types[1]))
- || (alternation == -1 && i == types[seltimecnt - 1]))
- {
- std_abbrind = abbrind;
- std_offset = offset * -1;
- std_ind = i;
- }
- }
- else if (alternation >= 0)
- {
- if (alternation == 0 || i == types[0] || i == types[1])
- {
- dst_abbrind = abbrind;
- dst_offset = offset * -1;
- dst_ind = i;
- }
- }
- }
-
- if (std_abbrind >= 0)
- {
- byte[] names = new byte[charcnt];
- dis.readFully(names);
- int j = std_abbrind;
- while (j < charcnt && names[j] != 0)
- j++;
-
- String zonename = new String(names, std_abbrind,
- j - std_abbrind, "ASCII");
-
- String dst_zonename;
- if (dst_abbrind >= 0)
- {
- j = dst_abbrind;
- while (j < charcnt && names[j] != 0)
- j++;
- dst_zonename = new String(names, dst_abbrind,
- j - dst_abbrind, "ASCII");
- }
- else
- dst_zonename = "";
+ br = new BufferedReader(new InputStreamReader(bis));
- String[] change_spec = { null, null };
- if (dst_abbrind >= 0 && alternation > 0)
- {
- // Guess rules for the std->dst and dst->std transitions
- // from the transition times since Epoch.
- // tzdata actually uses only 3 forms of rules:
- // fixed date within a month, e.g. change on April, 5th
- // 1st weekday on or after Nth: change on Sun>=15 in April
- // last weekday in a month: change on lastSun in April
- GregorianCalendar cal
- = new GregorianCalendar (TimeZone.getTimeZone("GMT"));
-
- int[] values = new int[2 * 11];
- int i;
- for (i = seltimecnt - 1; i >= 0; i--)
- {
- int base = (i % 2) * 11;
- int offset = types[i] == dst_ind ? std_offset : dst_offset;
- cal.setTimeInMillis((times[i] - offset) * 1000);
- if (i >= seltimecnt - 2)
- {
- values[base + 0] = cal.get(Calendar.YEAR);
- values[base + 1] = cal.get(Calendar.MONTH);
- values[base + 2] = cal.get(Calendar.DAY_OF_MONTH);
- values[base + 3]
- = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
- values[base + 4] = cal.get(Calendar.DAY_OF_WEEK);
- values[base + 5] = cal.get(Calendar.HOUR_OF_DAY);
- values[base + 6] = cal.get(Calendar.MINUTE);
- values[base + 7] = cal.get(Calendar.SECOND);
- values[base + 8] = values[base + 2]; // Range start
- values[base + 9] = values[base + 2]; // Range end
- values[base + 10] = 0; // Determined type
- }
- else
- {
- int year = cal.get(Calendar.YEAR);
- int month = cal.get(Calendar.MONTH);
- int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
- int month_days
- = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
- int day_of_week = cal.get(Calendar.DAY_OF_WEEK);
- int hour = cal.get(Calendar.HOUR_OF_DAY);
- int minute = cal.get(Calendar.MINUTE);
- int second = cal.get(Calendar.SECOND);
- if (year != values[base + 0] - 1
- || month != values[base + 1]
- || hour != values[base + 5]
- || minute != values[base + 6]
- || second != values[base + 7])
- break;
- if (day_of_week == values[base + 4])
- {
- // Either a Sun>=8 or lastSun rule.
- if (day_of_month < values[base + 8])
- values[base + 8] = day_of_month;
- if (day_of_month > values[base + 9])
- values[base + 9] = day_of_month;
- if (values[base + 10] < 0)
- break;
- if (values[base + 10] == 0)
- {
- values[base + 10] = 1;
- // If day of month > 28, this is
- // certainly lastSun rule.
- if (values[base + 2] > 28)
- values[base + 2] = 3;
- // If day of month isn't in the last
- // week, it can't be lastSun rule.
- else if (values[base + 2]
- <= values[base + 3] - 7)
- values[base + 3] = 2;
- }
- if (values[base + 10] == 1)
- {
- // If day of month is > 28, this is
- // certainly lastSun rule.
- if (day_of_month > 28)
- values[base + 10] = 3;
- // If day of month isn't in the last
- // week, it can't be lastSun rule.
- else if (day_of_month <= month_days - 7)
- values[base + 10] = 2;
- }
- else if ((values[base + 10] == 2
- && day_of_month > 28)
- || (values[base + 10] == 3
- && day_of_month
- <= month_days - 7))
- break;
- }
- else
- {
- // Must be fixed day in month rule.
- if (day_of_month != values[base + 2]
- || values[base + 10] > 0)
- break;
- values[base + 4] = day_of_week;
- values[base + 10] = -1;
- }
- values[base + 0] -= 1;
- }
- }
- if (i < 0)
- {
- for (i = 0; i < 2; i++)
- {
- int base = 11 * i;
- if (values[base + 10] == 0)
- continue;
- if (values[base + 10] == -1)
- {
- int[] dayCount
- = { 0, 31, 59, 90, 120, 151,
- 181, 212, 243, 273, 304, 334 };
- int d = dayCount[values[base + 1]
- - Calendar.JANUARY];
- d += values[base + 2];
- change_spec[i] = ",J" + Integer.toString(d);
- }
- else if (values[base + 10] == 2)
- {
- // If we haven't seen all days of the week,
- // we can't be sure what the rule really is.
- if (values[base + 8] + 6 != values[base + 9])
- continue;
-
- // FIXME: Sun >= 5 is representable in
- // SimpleTimeZone, but not in POSIX TZ env
- // strings. Should we change readtzFile
- // to actually return a SimpleTimeZone
- // rather than POSIX TZ string?
- if ((values[base + 8] % 7) != 1)
- continue;
-
- int d;
- d = values[base + 1] - Calendar.JANUARY + 1;
- change_spec[i] = ",M" + Integer.toString(d);
- d = (values[base + 8] + 6) / 7;
- change_spec[i] += "." + Integer.toString(d);
- d = values[base + 4] - Calendar.SUNDAY;
- change_spec[i] += "." + Integer.toString(d);
- }
- else
- {
- // If we don't know whether this is lastSun or
- // Sun >= 22 rule. That can be either because
- // there was insufficient number of
- // transitions, or February, where it is quite
- // probable we haven't seen any 29th dates.
- // For February, assume lastSun rule, otherwise
- // punt.
- if (values[base + 10] == 1
- && values[base + 1] != Calendar.FEBRUARY)
- continue;
-
- int d;
- d = values[base + 1] - Calendar.JANUARY + 1;
- change_spec[i] = ",M" + Integer.toString(d);
- d = values[base + 4] - Calendar.SUNDAY;
- change_spec[i] += ".5." + Integer.toString(d);
- }
-
- // Don't add time specification if time is
- // 02:00:00.
- if (values[base + 5] != 2
- || values[base + 6] != 0
- || values[base + 7] != 0)
- {
- int d = values[base + 5];
- change_spec[i] += "/" + Integer.toString(d);
- if (values[base + 6] != 0
- || values[base + 7] != 0)
- {
- d = values[base + 6];
- if (d < 10)
- change_spec[i]
- += ":0" + Integer.toString(d);
- else
- change_spec[i]
- += ":" + Integer.toString(d);
- d = values[base + 7];
- if (d >= 10)
- change_spec[i]
- += ":" + Integer.toString(d);
- else if (d > 0)
- change_spec[i]
- += ":0" + Integer.toString(d);
- }
- }
- }
- if (types[0] == std_ind)
- {
- String tmp = change_spec[0];
- change_spec[0] = change_spec[1];
- change_spec[1] = tmp;
- }
- }
- }
-
- // Only use gmt offset when necessary.
- // Also special case GMT+/- timezones.
- String offset_string, dst_offset_string = "";
- if (dst_abbrind < 0
- && (std_offset == 0
- || zonename.startsWith("GMT+")
- || zonename.startsWith("GMT-")))
- offset_string = "";
- else
- {
- offset_string = Integer.toString(std_offset / 3600);
- int seconds = std_offset % 3600;
- if (seconds != 0)
- {
- if (seconds < 0)
- seconds *= -1;
- if (seconds < 600)
- offset_string
- += ":0" + Integer.toString(seconds / 60);
- else
- offset_string
- += ":" + Integer.toString(seconds / 60);
- seconds = seconds % 60;
- if (seconds >= 10)
- offset_string
- += ":" + Integer.toString(seconds);
- else if (seconds > 0)
- offset_string
- += ":0" + Integer.toString(seconds);
- }
- if (dst_abbrind >= 0
- && dst_offset != std_offset - 3600)
- {
- dst_offset_string
- = Integer.toString(dst_offset / 3600);
- seconds = dst_offset % 3600;
- if (seconds != 0)
- {
- if (seconds < 0)
- seconds *= -1;
- if (seconds < 600)
- dst_offset_string
- += ":0" + Integer.toString(seconds / 60);
- else
- dst_offset_string
- += ":" + Integer.toString(seconds / 60);
- seconds = seconds % 60;
- if (seconds >= 10)
- dst_offset_string
- += ":" + Integer.toString(seconds);
- else if (seconds > 0)
- dst_offset_string
- += ":0" + Integer.toString(seconds);
- }
- }
- }
-
- if (dst_abbrind < 0)
- id = zonename + offset_string;
- else if (change_spec[0] != null && change_spec[1] != null)
- id = zonename + offset_string + dst_zonename
- + dst_offset_string + change_spec[0] + change_spec[1];
- }
- else if (tzif2 == 8)
- skipFully(dis, charcnt);
- }
- else if (tzif2 == 8)
- skipFully(dis, timecnt * (8 + 1) + typecnt * (4 + 1 + 1) + charcnt);
-
- if (tzif2 == 8)
+ for (String line = br.readLine(); line != null; line = br.readLine())
{
- // Skip over the rest of 64-bit data
- skipFully(dis, leapcnt * (8 + 4) + ttisgmtcnt + ttisstdcnt);
- if (dis.readByte() == '\n')
+ line = line.trim();
+ if (line.length() < 8 || !line.startsWith("ZONE="))
+ continue;
+ int posstart = 6;
+ int posend;
+ if (line.charAt(5) == '"')
+ posend = line.indexOf('"', 6);
+ else if (line.charAt(5) == '\'')
+ posend = line.indexOf('\'', 6);
+ else
{
- String posixtz = dis.readLine();
- if (posixtz.length() > 0)
- id = posixtz;
+ posstart = 5;
+ posend = line.length();
}
+ if (posend < 0)
+ return null;
+ return line.substring(posstart, posend);
}
-
- return id;
+ return null;
}
catch (IOException ioe)
{
@@ -659,31 +283,15 @@ final class VMTimeZone
{
try
{
- if (dis != null)
- dis.close();
+ if (br != null)
+ br.close();
}
- catch(IOException ioe)
+ catch (IOException ioe)
{
// Error while close, nothing we can do.
}
}
}
-
- /**
- * Skips the requested number of bytes in the given InputStream.
- * Throws EOFException if not enough bytes could be skipped.
- * Negative numbers of bytes to skip are ignored.
- */
- private static void skipFully(InputStream is, long l) throws IOException
- {
- while (l > 0)
- {
- long k = is.skip(l);
- if (k <= 0)
- throw new EOFException();
- l -= k;
- }
- }
/**
* Tries to get the system time zone id through native code.
diff --git a/libjava/java/util/concurrent/ConcurrentHashMap$HashEntry.h b/libjava/java/util/concurrent/ConcurrentHashMap$HashEntry.h
index 730394d1c23..2667ed07c5b 100644
--- a/libjava/java/util/concurrent/ConcurrentHashMap$HashEntry.h
+++ b/libjava/java/util/concurrent/ConcurrentHashMap$HashEntry.h
@@ -18,7 +18,7 @@ public: // actually package-private
static JArray< ::java::util::concurrent::ConcurrentHashMap$HashEntry * > * newArray(jint);
::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
jint hash;
- volatile ::java::lang::Object * value;
+ ::java::lang::Object * volatile value;
::java::util::concurrent::ConcurrentHashMap$HashEntry * next;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/ConcurrentHashMap$Segment.h b/libjava/java/util/concurrent/ConcurrentHashMap$Segment.h
index aaa2a7ae10d..55d06e8698f 100644
--- a/libjava/java/util/concurrent/ConcurrentHashMap$Segment.h
+++ b/libjava/java/util/concurrent/ConcurrentHashMap$Segment.h
@@ -31,10 +31,10 @@ public: // actually package-private
private:
static const jlong serialVersionUID = 2249069246763182397LL;
public: // actually package-private
- volatile jint __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::ReentrantLock)))) count;
+ jint volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::ReentrantLock)))) count;
jint modCount;
jint threshold;
- volatile JArray< ::java::util::concurrent::ConcurrentHashMap$HashEntry * > * table;
+ JArray< ::java::util::concurrent::ConcurrentHashMap$HashEntry * > * volatile table;
jfloat loadFactor;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/ConcurrentLinkedQueue$Node.h b/libjava/java/util/concurrent/ConcurrentLinkedQueue$Node.h
index 60fee41a4d0..af69ba60a4e 100644
--- a/libjava/java/util/concurrent/ConcurrentLinkedQueue$Node.h
+++ b/libjava/java/util/concurrent/ConcurrentLinkedQueue$Node.h
@@ -21,8 +21,8 @@ public: // actually package-private
virtual jboolean casNext(::java::util::concurrent::ConcurrentLinkedQueue$Node *, ::java::util::concurrent::ConcurrentLinkedQueue$Node *);
virtual void setNext(::java::util::concurrent::ConcurrentLinkedQueue$Node *);
private:
- volatile ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) item;
- volatile ::java::util::concurrent::ConcurrentLinkedQueue$Node * next;
+ ::java::lang::Object * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) item;
+ ::java::util::concurrent::ConcurrentLinkedQueue$Node * volatile next;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * nextUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * itemUpdater;
public:
diff --git a/libjava/java/util/concurrent/ConcurrentLinkedQueue.h b/libjava/java/util/concurrent/ConcurrentLinkedQueue.h
index 281690e36fb..512bc0e0736 100644
--- a/libjava/java/util/concurrent/ConcurrentLinkedQueue.h
+++ b/libjava/java/util/concurrent/ConcurrentLinkedQueue.h
@@ -34,8 +34,8 @@ private:
static const jlong serialVersionUID = 196745693267521676LL;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * tailUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * headUpdater;
- volatile ::java::util::concurrent::ConcurrentLinkedQueue$Node * __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) head;
- volatile ::java::util::concurrent::ConcurrentLinkedQueue$Node * tail;
+ ::java::util::concurrent::ConcurrentLinkedQueue$Node * volatile __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) head;
+ ::java::util::concurrent::ConcurrentLinkedQueue$Node * volatile tail;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/ConcurrentSkipListMap$Index.h b/libjava/java/util/concurrent/ConcurrentSkipListMap$Index.h
index c71b25bd327..629cff881e9 100644
--- a/libjava/java/util/concurrent/ConcurrentSkipListMap$Index.h
+++ b/libjava/java/util/concurrent/ConcurrentSkipListMap$Index.h
@@ -19,7 +19,7 @@ public: // actually package-private
virtual jboolean unlink(::java::util::concurrent::ConcurrentSkipListMap$Index *);
::java::util::concurrent::ConcurrentSkipListMap$Node * __attribute__((aligned(__alignof__( ::java::lang::Object)))) node;
::java::util::concurrent::ConcurrentSkipListMap$Index * down;
- volatile ::java::util::concurrent::ConcurrentSkipListMap$Index * right;
+ ::java::util::concurrent::ConcurrentSkipListMap$Index * volatile right;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * rightUpdater;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/ConcurrentSkipListMap$Node.h b/libjava/java/util/concurrent/ConcurrentSkipListMap$Node.h
index 1b94c359071..c9d5d890d1c 100644
--- a/libjava/java/util/concurrent/ConcurrentSkipListMap$Node.h
+++ b/libjava/java/util/concurrent/ConcurrentSkipListMap$Node.h
@@ -23,8 +23,8 @@ public: // actually package-private
::java::lang::Object * getValidValue();
::java::util::AbstractMap$SimpleImmutableEntry * createSnapshot();
::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
- volatile ::java::lang::Object * value;
- volatile ::java::util::concurrent::ConcurrentSkipListMap$Node * next;
+ ::java::lang::Object * volatile value;
+ ::java::util::concurrent::ConcurrentSkipListMap$Node * volatile next;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * nextUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * valueUpdater;
public:
diff --git a/libjava/java/util/concurrent/ConcurrentSkipListMap.h b/libjava/java/util/concurrent/ConcurrentSkipListMap.h
index 4d42f54688a..be9beb80ca9 100644
--- a/libjava/java/util/concurrent/ConcurrentSkipListMap.h
+++ b/libjava/java/util/concurrent/ConcurrentSkipListMap.h
@@ -118,7 +118,7 @@ private:
static const jlong serialVersionUID = -8627078645895051609LL;
static ::java::util::Random * seedGenerator;
static ::java::lang::Object * BASE_HEADER;
- volatile ::java::util::concurrent::ConcurrentSkipListMap$HeadIndex * __attribute__((aligned(__alignof__( ::java::util::AbstractMap)))) head;
+ ::java::util::concurrent::ConcurrentSkipListMap$HeadIndex * volatile __attribute__((aligned(__alignof__( ::java::util::AbstractMap)))) head;
::java::util::Comparator * comparator__;
jint randomSeed;
::java::util::concurrent::ConcurrentSkipListMap$KeySet * keySet__;
diff --git a/libjava/java/util/concurrent/Exchanger$Node.h b/libjava/java/util/concurrent/Exchanger$Node.h
index 5e1087b7611..4bd3890eac8 100644
--- a/libjava/java/util/concurrent/Exchanger$Node.h
+++ b/libjava/java/util/concurrent/Exchanger$Node.h
@@ -14,7 +14,7 @@ class java::util::concurrent::Exchanger$Node : public ::java::util::concurrent::
public:
Exchanger$Node(::java::lang::Object *);
::java::lang::Object * __attribute__((aligned(__alignof__( ::java::util::concurrent::atomic::AtomicReference)))) item;
- volatile ::java::lang::Thread * waiter;
+ ::java::lang::Thread * volatile waiter;
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/Exchanger.h b/libjava/java/util/concurrent/Exchanger.h
index 5ed4d252a90..5a0993e2656 100644
--- a/libjava/java/util/concurrent/Exchanger.h
+++ b/libjava/java/util/concurrent/Exchanger.h
@@ -33,7 +33,7 @@ private:
static jint TIMED_SPINS;
static ::java::lang::Object * CANCEL;
static ::java::lang::Object * NULL_ITEM;
- volatile JArray< ::java::util::concurrent::Exchanger$Slot * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) arena;
+ JArray< ::java::util::concurrent::Exchanger$Slot * > * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) arena;
::java::util::concurrent::atomic::AtomicInteger * max;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/FutureTask$Sync.h b/libjava/java/util/concurrent/FutureTask$Sync.h
index 18808697181..edaa1cad7bd 100644
--- a/libjava/java/util/concurrent/FutureTask$Sync.h
+++ b/libjava/java/util/concurrent/FutureTask$Sync.h
@@ -36,7 +36,7 @@ private:
::java::util::concurrent::Callable * __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::AbstractQueuedSynchronizer)))) callable;
::java::lang::Object * result;
::java::lang::Throwable * exception;
- volatile ::java::lang::Thread * runner;
+ ::java::lang::Thread * volatile runner;
public: // actually package-private
::java::util::concurrent::FutureTask * this$0;
public:
diff --git a/libjava/java/util/concurrent/LinkedBlockingQueue$Node.h b/libjava/java/util/concurrent/LinkedBlockingQueue$Node.h
index 36d1f654a64..1cf8cda9db8 100644
--- a/libjava/java/util/concurrent/LinkedBlockingQueue$Node.h
+++ b/libjava/java/util/concurrent/LinkedBlockingQueue$Node.h
@@ -13,7 +13,7 @@ class java::util::concurrent::LinkedBlockingQueue$Node : public ::java::lang::Ob
public: // actually package-private
LinkedBlockingQueue$Node(::java::lang::Object *);
- volatile ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) item;
+ ::java::lang::Object * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) item;
::java::util::concurrent::LinkedBlockingQueue$Node * next;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/ScheduledThreadPoolExecutor.h b/libjava/java/util/concurrent/ScheduledThreadPoolExecutor.h
index e01b42074bf..8e651b36a53 100644
--- a/libjava/java/util/concurrent/ScheduledThreadPoolExecutor.h
+++ b/libjava/java/util/concurrent/ScheduledThreadPoolExecutor.h
@@ -45,8 +45,8 @@ public: // actually package-private
static ::java::util::concurrent::atomic::AtomicLong * access$0();
static ::java::util::concurrent::BlockingQueue * access$1(::java::util::concurrent::ScheduledThreadPoolExecutor *);
private:
- volatile jboolean __attribute__((aligned(__alignof__( ::java::util::concurrent::ThreadPoolExecutor)))) continueExistingPeriodicTasksAfterShutdown;
- volatile jboolean executeExistingDelayedTasksAfterShutdown;
+ jboolean volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::ThreadPoolExecutor)))) continueExistingPeriodicTasksAfterShutdown;
+ jboolean volatile executeExistingDelayedTasksAfterShutdown;
static ::java::util::concurrent::atomic::AtomicLong * sequencer;
static jlong NANO_ORIGIN;
public:
diff --git a/libjava/java/util/concurrent/SynchronousQueue$TransferQueue$QNode.h b/libjava/java/util/concurrent/SynchronousQueue$TransferQueue$QNode.h
index 07486a9abf8..105c64e6659 100644
--- a/libjava/java/util/concurrent/SynchronousQueue$TransferQueue$QNode.h
+++ b/libjava/java/util/concurrent/SynchronousQueue$TransferQueue$QNode.h
@@ -18,9 +18,9 @@ public: // actually package-private
void tryCancel(::java::lang::Object *);
jboolean isCancelled();
jboolean isOffList();
- volatile ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * __attribute__((aligned(__alignof__( ::java::lang::Object)))) next;
- volatile ::java::lang::Object * item;
- volatile ::java::lang::Thread * waiter;
+ ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) next;
+ ::java::lang::Object * volatile item;
+ ::java::lang::Thread * volatile waiter;
jboolean isData;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * nextUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * itemUpdater;
diff --git a/libjava/java/util/concurrent/SynchronousQueue$TransferQueue.h b/libjava/java/util/concurrent/SynchronousQueue$TransferQueue.h
index d1b55c99983..921c36377f7 100644
--- a/libjava/java/util/concurrent/SynchronousQueue$TransferQueue.h
+++ b/libjava/java/util/concurrent/SynchronousQueue$TransferQueue.h
@@ -19,9 +19,9 @@ public: // actually package-private
::java::lang::Object * transfer(::java::lang::Object *, jboolean, jlong);
::java::lang::Object * awaitFulfill(::java::util::concurrent::SynchronousQueue$TransferQueue$QNode *, ::java::lang::Object *, jboolean, jlong);
void clean(::java::util::concurrent::SynchronousQueue$TransferQueue$QNode *, ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode *);
- volatile ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * __attribute__((aligned(__alignof__( ::java::util::concurrent::SynchronousQueue$Transferer)))) head;
- volatile ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * tail;
- volatile ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * cleanMe;
+ ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::SynchronousQueue$Transferer)))) head;
+ ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * volatile tail;
+ ::java::util::concurrent::SynchronousQueue$TransferQueue$QNode * volatile cleanMe;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * headUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * tailUpdater;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * cleanMeUpdater;
diff --git a/libjava/java/util/concurrent/SynchronousQueue$TransferStack$SNode.h b/libjava/java/util/concurrent/SynchronousQueue$TransferStack$SNode.h
index 77af8cb17f4..48e22f2a68d 100644
--- a/libjava/java/util/concurrent/SynchronousQueue$TransferStack$SNode.h
+++ b/libjava/java/util/concurrent/SynchronousQueue$TransferStack$SNode.h
@@ -17,9 +17,9 @@ public: // actually package-private
jboolean tryMatch(::java::util::concurrent::SynchronousQueue$TransferStack$SNode *);
void tryCancel();
jboolean isCancelled();
- volatile ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * __attribute__((aligned(__alignof__( ::java::lang::Object)))) next;
- volatile ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * match;
- volatile ::java::lang::Thread * waiter;
+ ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) next;
+ ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * volatile match;
+ ::java::lang::Thread * volatile waiter;
::java::lang::Object * item;
jint mode;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * nextUpdater;
diff --git a/libjava/java/util/concurrent/SynchronousQueue$TransferStack.h b/libjava/java/util/concurrent/SynchronousQueue$TransferStack.h
index b29138fede4..5722c419bf4 100644
--- a/libjava/java/util/concurrent/SynchronousQueue$TransferStack.h
+++ b/libjava/java/util/concurrent/SynchronousQueue$TransferStack.h
@@ -23,7 +23,7 @@ public: // actually package-private
static const jint REQUEST = 0;
static const jint DATA = 1;
static const jint FULFILLING = 2;
- volatile ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * __attribute__((aligned(__alignof__( ::java::util::concurrent::SynchronousQueue$Transferer)))) head;
+ ::java::util::concurrent::SynchronousQueue$TransferStack$SNode * volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::SynchronousQueue$Transferer)))) head;
static ::java::util::concurrent::atomic::AtomicReferenceFieldUpdater * headUpdater;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/SynchronousQueue.h b/libjava/java/util/concurrent/SynchronousQueue.h
index 82ecce492c1..7606ddcfe49 100644
--- a/libjava/java/util/concurrent/SynchronousQueue.h
+++ b/libjava/java/util/concurrent/SynchronousQueue.h
@@ -47,7 +47,7 @@ public: // actually package-private
static jint maxUntimedSpins;
static const jlong spinForTimeoutThreshold = 1000LL;
private:
- volatile ::java::util::concurrent::SynchronousQueue$Transferer * __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) transferer;
+ ::java::util::concurrent::SynchronousQueue$Transferer * volatile __attribute__((aligned(__alignof__( ::java::util::AbstractQueue)))) transferer;
::java::util::concurrent::locks::ReentrantLock * qlock;
::java::util::concurrent::SynchronousQueue$WaitQueue * waitingProducers;
::java::util::concurrent::SynchronousQueue$WaitQueue * waitingConsumers;
diff --git a/libjava/java/util/concurrent/ThreadPoolExecutor$Worker.h b/libjava/java/util/concurrent/ThreadPoolExecutor$Worker.h
index 18d3f3204a3..a1b5dc3feee 100644
--- a/libjava/java/util/concurrent/ThreadPoolExecutor$Worker.h
+++ b/libjava/java/util/concurrent/ThreadPoolExecutor$Worker.h
@@ -24,7 +24,7 @@ private:
::java::util::concurrent::locks::ReentrantLock * __attribute__((aligned(__alignof__( ::java::lang::Object)))) runLock;
::java::lang::Runnable * firstTask;
public: // actually package-private
- volatile jlong completedTasks;
+ jlong volatile completedTasks;
::java::lang::Thread * thread;
::java::util::concurrent::ThreadPoolExecutor * this$0;
public:
diff --git a/libjava/java/util/concurrent/ThreadPoolExecutor.h b/libjava/java/util/concurrent/ThreadPoolExecutor.h
index 00b9dde7c9f..b69b1f65599 100644
--- a/libjava/java/util/concurrent/ThreadPoolExecutor.h
+++ b/libjava/java/util/concurrent/ThreadPoolExecutor.h
@@ -71,20 +71,20 @@ private:
::java::util::concurrent::locks::ReentrantLock * mainLock;
::java::util::concurrent::locks::Condition * termination;
::java::util::HashSet * workers;
- volatile jlong keepAliveTime;
- volatile jboolean allowCoreThreadTimeOut__;
- volatile jint corePoolSize;
- volatile jint maximumPoolSize;
- volatile jint poolSize;
+ jlong volatile keepAliveTime;
+ jboolean volatile allowCoreThreadTimeOut__;
+ jint volatile corePoolSize;
+ jint volatile maximumPoolSize;
+ jint volatile poolSize;
public: // actually package-private
- volatile jint runState;
+ jint volatile runState;
static const jint RUNNING = 0;
static const jint SHUTDOWN = 1;
static const jint STOP = 2;
static const jint TERMINATED = 3;
private:
- volatile ::java::util::concurrent::RejectedExecutionHandler * handler;
- volatile ::java::util::concurrent::ThreadFactory * threadFactory;
+ ::java::util::concurrent::RejectedExecutionHandler * volatile handler;
+ ::java::util::concurrent::ThreadFactory * volatile threadFactory;
jint largestPoolSize;
jlong completedTaskCount;
static ::java::util::concurrent::RejectedExecutionHandler * defaultHandler;
diff --git a/libjava/java/util/concurrent/atomic/AtomicBoolean.h b/libjava/java/util/concurrent/atomic/AtomicBoolean.h
index 08a6d597e14..60d22a952ae 100644
--- a/libjava/java/util/concurrent/atomic/AtomicBoolean.h
+++ b/libjava/java/util/concurrent/atomic/AtomicBoolean.h
@@ -35,7 +35,7 @@ private:
static const jlong serialVersionUID = 4654671469794556979LL;
static ::sun::misc::Unsafe * unsafe;
static jlong valueOffset;
- volatile jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
+ jint volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/atomic/AtomicInteger.h b/libjava/java/util/concurrent/atomic/AtomicInteger.h
index 286aff1d003..136a578b514 100644
--- a/libjava/java/util/concurrent/atomic/AtomicInteger.h
+++ b/libjava/java/util/concurrent/atomic/AtomicInteger.h
@@ -45,7 +45,7 @@ private:
static const jlong serialVersionUID = 6214790243416807050LL;
static ::sun::misc::Unsafe * unsafe;
static jlong valueOffset;
- volatile jint __attribute__((aligned(__alignof__( ::java::lang::Number)))) value;
+ jint volatile __attribute__((aligned(__alignof__( ::java::lang::Number)))) value;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/atomic/AtomicLong.h b/libjava/java/util/concurrent/atomic/AtomicLong.h
index c70a4e6d839..0d0c3b00f3e 100644
--- a/libjava/java/util/concurrent/atomic/AtomicLong.h
+++ b/libjava/java/util/concurrent/atomic/AtomicLong.h
@@ -49,7 +49,7 @@ private:
public: // actually package-private
static jboolean VM_SUPPORTS_LONG_CAS;
private:
- volatile jlong __attribute__((aligned(__alignof__( ::java::lang::Number)))) value;
+ jlong volatile __attribute__((aligned(__alignof__( ::java::lang::Number)))) value;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/atomic/AtomicReference.h b/libjava/java/util/concurrent/atomic/AtomicReference.h
index e8862e8433f..363fca6ea10 100644
--- a/libjava/java/util/concurrent/atomic/AtomicReference.h
+++ b/libjava/java/util/concurrent/atomic/AtomicReference.h
@@ -35,7 +35,7 @@ private:
static const jlong serialVersionUID = -1848883965231344442LL;
static ::sun::misc::Unsafe * unsafe;
static jlong valueOffset;
- volatile ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
+ ::java::lang::Object * volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.h b/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.h
index 423f2a06356..0976920620f 100644
--- a/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.h
+++ b/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.h
@@ -22,10 +22,10 @@ public: // actually package-private
static const jint CONDITION = -2;
static ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * SHARED;
static ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * EXCLUSIVE;
- volatile jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) waitStatus;
- volatile ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * prev;
- volatile ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * next;
- volatile ::java::lang::Thread * thread;
+ jint volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) waitStatus;
+ ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * volatile prev;
+ ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * volatile next;
+ ::java::lang::Thread * volatile thread;
::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * nextWaiter;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.h b/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.h
index 1e95c3d34b8..41f1f7cba88 100644
--- a/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.h
+++ b/libjava/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.h
@@ -97,9 +97,9 @@ public: // actually package-private
static void access$0();
private:
static const jlong serialVersionUID = 7373984972572414692LL;
- volatile ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::AbstractOwnableSynchronizer)))) head;
- volatile ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * tail;
- volatile jlong state;
+ ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::AbstractOwnableSynchronizer)))) head;
+ ::java::util::concurrent::locks::AbstractQueuedLongSynchronizer$Node * volatile tail;
+ jlong volatile state;
public: // actually package-private
static const jlong spinForTimeoutThreshold = 1000LL;
private:
diff --git a/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.h b/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.h
index 0abbb8fd23a..cc49550577d 100644
--- a/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.h
+++ b/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.h
@@ -22,10 +22,10 @@ public: // actually package-private
static const jint CONDITION = -2;
static ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * SHARED;
static ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * EXCLUSIVE;
- volatile jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) waitStatus;
- volatile ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * prev;
- volatile ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * next;
- volatile ::java::lang::Thread * thread;
+ jint volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) waitStatus;
+ ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * volatile prev;
+ ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * volatile next;
+ ::java::lang::Thread * volatile thread;
::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * nextWaiter;
public:
static ::java::lang::Class class$;
diff --git a/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer.h b/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer.h
index fc2b9df033d..e50fcef61af 100644
--- a/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer.h
+++ b/libjava/java/util/concurrent/locks/AbstractQueuedSynchronizer.h
@@ -97,9 +97,9 @@ public: // actually package-private
static void access$0();
private:
static const jlong serialVersionUID = 7373984972572414691LL;
- volatile ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::AbstractOwnableSynchronizer)))) head;
- volatile ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * tail;
- volatile jint state;
+ ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * volatile __attribute__((aligned(__alignof__( ::java::util::concurrent::locks::AbstractOwnableSynchronizer)))) head;
+ ::java::util::concurrent::locks::AbstractQueuedSynchronizer$Node * volatile tail;
+ jint volatile state;
public: // actually package-private
static const jlong spinForTimeoutThreshold = 1000LL;
private:
diff --git a/libjava/java/util/logging/ErrorManager.h b/libjava/java/util/logging/ErrorManager.h
index e6c115e29d8..58d48c9e2a8 100644
--- a/libjava/java/util/logging/ErrorManager.h
+++ b/libjava/java/util/logging/ErrorManager.h
@@ -21,7 +21,7 @@ public:
static const jint OPEN_FAILURE = 4;
static const jint FORMAT_FAILURE = 5;
private:
- volatile jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) everUsed;
+ jboolean volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) everUsed;
public:
static ::java::lang::Class class$;
};
diff --git a/libjava/javax/swing/plaf/basic/BasicSpinnerUI$2.h b/libjava/javax/swing/plaf/basic/BasicSpinnerUI$2.h
index 5d8697b83c5..2b6cc2a134e 100644
--- a/libjava/javax/swing/plaf/basic/BasicSpinnerUI$2.h
+++ b/libjava/javax/swing/plaf/basic/BasicSpinnerUI$2.h
@@ -46,7 +46,7 @@ public:
void mouseReleased(::java::awt::event::MouseEvent *);
public: // actually package-private
void increment();
- volatile jboolean __attribute__((aligned(__alignof__( ::java::awt::event::MouseAdapter)))) mouseDown;
+ jboolean volatile __attribute__((aligned(__alignof__( ::java::awt::event::MouseAdapter)))) mouseDown;
::javax::swing::Timer * timer;
::javax::swing::plaf::basic::BasicSpinnerUI * this$0;
public:
diff --git a/libjava/javax/swing/plaf/basic/BasicSpinnerUI$4.h b/libjava/javax/swing/plaf/basic/BasicSpinnerUI$4.h
index 0d9dddce85a..c6e68952cb6 100644
--- a/libjava/javax/swing/plaf/basic/BasicSpinnerUI$4.h
+++ b/libjava/javax/swing/plaf/basic/BasicSpinnerUI$4.h
@@ -46,7 +46,7 @@ public:
void mouseReleased(::java::awt::event::MouseEvent *);
public: // actually package-private
void decrement();
- volatile jboolean __attribute__((aligned(__alignof__( ::java::awt::event::MouseAdapter)))) mouseDown;
+ jboolean volatile __attribute__((aligned(__alignof__( ::java::awt::event::MouseAdapter)))) mouseDown;
::javax::swing::Timer * timer;
::javax::swing::plaf::basic::BasicSpinnerUI * this$0;
public:
diff --git a/libjava/jni.cc b/libjava/jni.cc
index d71b16d99ea..9e33be6e69f 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -751,7 +751,8 @@ _Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
java::lang::StringBuffer *name_sig =
new java::lang::StringBuffer (JvNewStringUTF (name));
- name_sig->append ((jchar) ' ')->append (JvNewStringUTF (s));
+ name_sig->append ((jchar) ' ');
+ name_sig->append (JvNewStringUTF (s));
env->ex = new java::lang::NoSuchMethodError (name_sig->toString ());
}
catch (jthrowable t)
diff --git a/libjava/jvmti.cc b/libjava/jvmti.cc
index faa7401c1ce..716e96ae682 100644
--- a/libjava/jvmti.cc
+++ b/libjava/jvmti.cc
@@ -997,23 +997,23 @@ _Jv_JVMTI_GetLocalVariableTable (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
table_slot)
>= 0)
{
+ char **str_ptr = &(*locals)[table_slot].name;
jerr = env->Allocate (static_cast<jlong> (strlen (name) + 1),
- reinterpret_cast<unsigned char **>
- (&(*locals)[table_slot].name));
+ reinterpret_cast<unsigned char **> (str_ptr));
if (jerr != JVMTI_ERROR_NONE)
return jerr;
strcpy ((*locals)[table_slot].name, name);
-
- jerr = env->Allocate (static_cast<jlong> (strlen (name) + 1),
- reinterpret_cast<unsigned char **>
- (&(*locals)[table_slot].signature));
+
+ str_ptr = &(*locals)[table_slot].signature;
+ jerr = env->Allocate (static_cast<jlong> (strlen (sig) + 1),
+ reinterpret_cast<unsigned char **> (str_ptr));
if (jerr != JVMTI_ERROR_NONE)
return jerr;
strcpy ((*locals)[table_slot].signature, sig);
-
- jerr = env->Allocate (static_cast<jlong> (strlen (name) + 1),
- reinterpret_cast<unsigned char **>
- (&(*locals)[table_slot].generic_signature));
+
+ str_ptr = &(*locals)[table_slot].generic_signature;
+ jerr = env->Allocate (static_cast<jlong> (strlen (generic_sig) + 1),
+ reinterpret_cast<unsigned char **> (str_ptr));
if (jerr != JVMTI_ERROR_NONE)
return jerr;
strcpy ((*locals)[table_slot].generic_signature, generic_sig);
@@ -1111,7 +1111,13 @@ _Jv_JVMTI_GetArgumentsSize (jvmtiEnv *env, jmethodID method, jint *size)
|| sig[i] == 'I' || sig[i] == 'F')
num_slots++;
else if (sig[i] == 'J' || sig[i] == 'D')
- num_slots+=2;
+ {
+ // If this is an array of wide types it uses a single slot
+ if (i > 0 && sig[i - 1] == '[')
+ num_slots++;
+ else
+ num_slots += 2;
+ }
else if (sig[i] == 'L')
{
num_slots++;
diff --git a/libjava/libgcj_bc.c b/libjava/libgcj_bc.c
index d48ce7d3049..b26e3f7a1ea 100644
--- a/libjava/libgcj_bc.c
+++ b/libjava/libgcj_bc.c
@@ -58,6 +58,7 @@ void _Jv_RegisterNewClasses ()
/* Symbols used by jvgenmain (-fmain). */
void JvRunMain () {}
+void JvRunMainName () {}
const char **_Jv_Compiler_Properties;
/* Functions used by -fjni. */
diff --git a/libjava/link.cc b/libjava/link.cc
index 006676c3f4c..4ea548ec905 100644
--- a/libjava/link.cc
+++ b/libjava/link.cc
@@ -1022,15 +1022,17 @@ struct method_closure
// be the same as the address of the overall structure. This is due
// to disabling interior pointers in the GC.
ffi_closure closure;
+ _Jv_ClosureList list;
ffi_cif cif;
ffi_type *arg_types[1];
};
void *
-_Jv_Linker::create_error_method (_Jv_Utf8Const *class_name)
+_Jv_Linker::create_error_method (_Jv_Utf8Const *class_name, jclass klass)
{
+ void *code;
method_closure *closure
- = (method_closure *) _Jv_AllocBytes(sizeof (method_closure));
+ = (method_closure *)ffi_closure_alloc (sizeof (method_closure), &code);
closure->arg_types[0] = &ffi_type_void;
@@ -1042,13 +1044,18 @@ _Jv_Linker::create_error_method (_Jv_Utf8Const *class_name)
1,
&ffi_type_void,
closure->arg_types) == FFI_OK
- && ffi_prep_closure (&closure->closure,
- &closure->cif,
- _Jv_ThrowNoClassDefFoundErrorTrampoline,
- class_name) == FFI_OK)
- return &closure->closure;
+ && ffi_prep_closure_loc (&closure->closure,
+ &closure->cif,
+ _Jv_ThrowNoClassDefFoundErrorTrampoline,
+ class_name,
+ code) == FFI_OK)
+ {
+ closure->list.registerClosure (klass, closure);
+ return code;
+ }
else
{
+ ffi_closure_free (closure);
java::lang::StringBuffer *buffer = new java::lang::StringBuffer();
buffer->append(JvNewStringLatin1("Error setting up FFI closure"
" for static method of"
@@ -1059,7 +1066,7 @@ _Jv_Linker::create_error_method (_Jv_Utf8Const *class_name)
}
#else
void *
-_Jv_Linker::create_error_method (_Jv_Utf8Const *)
+_Jv_Linker::create_error_method (_Jv_Utf8Const *, jclass)
{
// Codepath for platforms which do not support (or want) libffi.
// You have to accept that it is impossible to provide the name
@@ -1090,8 +1097,6 @@ static bool debug_link = false;
// at the corresponding position in the virtual method offset table
// (klass->otable).
-// The same otable and atable may be shared by many classes.
-
// This must be called while holding the class lock.
void
@@ -1242,13 +1247,15 @@ _Jv_Linker::link_symbol_table (jclass klass)
// NullPointerException
klass->atable->addresses[index] = NULL;
+ bool use_error_method = false;
+
// If the target class is missing we prepare a function call
// that throws a NoClassDefFoundError and store the address of
// that newly prepared method in the atable. The user can run
// code in classes where the missing class is part of the
// execution environment as long as it is never referenced.
if (target_class == NULL)
- klass->atable->addresses[index] = create_error_method(sym.class_name);
+ use_error_method = true;
// We're looking for a static field or a static method, and we
// can tell which is needed by looking at the signature.
else if (signature->first() == '(' && signature->len() >= 2)
@@ -1296,12 +1303,16 @@ _Jv_Linker::link_symbol_table (jclass klass)
}
}
else
+ use_error_method = true;
+
+ if (use_error_method)
klass->atable->addresses[index]
- = create_error_method(sym.class_name);
+ = create_error_method(sym.class_name, klass);
continue;
}
+
// Try fields only if the target class exists.
if (target_class != NULL)
{
diff --git a/libjava/nogc.cc b/libjava/nogc.cc
index f25037aae0e..126e4de5c2b 100644
--- a/libjava/nogc.cc
+++ b/libjava/nogc.cc
@@ -1,6 +1,7 @@
// nogc.cc - Implement null garbage collector.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006, 2007
+ Free Software Foundation
This file is part of libgcj.
@@ -71,6 +72,14 @@ _Jv_AllocRawObj (jsize size)
return calloc (size, 1);
}
+_Jv_ClosureList **
+_Jv_ClosureListFinalizer ()
+{
+ _Jv_ClosureList **clpp;
+ clpp = (_Jv_ClosureList **)_Jv_AllocBytes (sizeof (*clpp));
+ return clpp;
+}
+
void
_Jv_RegisterFinalizer (void *, _Jv_FinalizerFunc *)
{
diff --git a/libjava/posix.cc b/libjava/posix.cc
index df798b88a2b..5d64094c815 100644
--- a/libjava/posix.cc
+++ b/libjava/posix.cc
@@ -139,6 +139,10 @@ _Jv_platform_initProperties (java::util::Properties* newprops)
if (! tmpdir)
tmpdir = "/tmp";
SET ("java.io.tmpdir", tmpdir);
+ const char *zoneinfodir = ::getenv("TZDATA");
+ if (! zoneinfodir)
+ zoneinfodir = "/usr/share/zoneinfo";
+ SET ("gnu.java.util.zoneinfo.dir", zoneinfodir);
}
static inline void
diff --git a/libjava/scripts/makemake.tcl b/libjava/scripts/makemake.tcl
index 59a5915a5fe..0fc06fce15d 100755
--- a/libjava/scripts/makemake.tcl
+++ b/libjava/scripts/makemake.tcl
@@ -123,6 +123,14 @@ set properties_map(java/util/logging) _
# We haven't merged locale resources yet.
set properties_map(gnu/java/locale) _
+# We want to be able to load xerces if it is on the class path. So,
+# we have to avoid compiling in the XML-related service files.
+set properties_map(META-INF/services/javax.xml.parsers.DocumentBuilderFactory) _
+set properties_map(META-INF/services/javax.xml.parsers.SAXParserFactory) _
+set properties_map(META-INF/services/javax.xml.parsers.TransformerFactory) _
+set properties_map(META-INF/services/org.relaxng.datatype.DatatypeLibraryFactory) _
+set properties_map(META-INF/services/org.w3c.dom.DOMImplementationSourceList) _
+set properties_map(META-INF/services/org.xml.sax.driver) _
# List of all properties files.
set properties_files {}
@@ -223,8 +231,10 @@ proc scan_directory {basedir subdir} {
} elseif {[file isdirectory $file]} {
lappend subdirs $subdir/$file
} elseif {$subdir == "META-INF/services"} {
- # All service files are included as properties.
- lappend properties_files $basedir/$subdir/$file
+ # Service files are generally included as properties.
+ if {! [info exists properties_map($subdir/$file)]} {
+ lappend properties_files $basedir/$subdir/$file
+ }
}
}
cd $here
@@ -242,7 +252,7 @@ proc scan_directory {basedir subdir} {
# Scan known packages beneath the base directory for .java source
# files.
proc scan_packages {basedir} {
- foreach subdir {gnu java javax org sun META-INF} {
+ foreach subdir {gnu java javax org sun com META-INF} {
if {[file exists $basedir/$subdir]} {
scan_directory $basedir $subdir
}
@@ -304,7 +314,7 @@ proc emit_package_rule {package} {
# Object and Class are special cases due to an apparent compiler
# bug. Process is a special case because we don't build all
# concrete implementations of Process on all platforms.
- set omit "| tr ' ' '\\n' | fgrep -v Object.class | fgrep -v Class.class | grep -v '\[^/\]Process' "
+ set omit "| tr ' ' '\\n' | fgrep -v Object.class | fgrep -v Class.class | egrep -v '\(Ecos\|Posix\|Win32\)Process' "
} else {
set omit ""
}
diff --git a/libjava/sources.am b/libjava/sources.am
index 01618ce0c20..713e4e7c697 100644
--- a/libjava/sources.am
+++ b/libjava/sources.am
@@ -326,6 +326,7 @@ gnu/classpath/jdwp/event/filters.list: $(gnu_classpath_jdwp_event_filters_source
gnu_classpath_jdwp_exception_source_files = \
+classpath/gnu/classpath/jdwp/exception/AbsentInformationException.java \
classpath/gnu/classpath/jdwp/exception/InvalidClassException.java \
classpath/gnu/classpath/jdwp/exception/InvalidClassLoaderException.java \
classpath/gnu/classpath/jdwp/exception/InvalidCountException.java \
@@ -2110,7 +2111,8 @@ gnu/java/text.list: $(gnu_java_text_source_files)
gnu_java_util_source_files = \
classpath/gnu/java/util/DoubleEnumeration.java \
classpath/gnu/java/util/EmptyEnumeration.java \
-classpath/gnu/java/util/WeakIdentityHashMap.java
+classpath/gnu/java/util/WeakIdentityHashMap.java \
+classpath/gnu/java/util/ZoneInfo.java
gnu_java_util_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_util_source_files)))
@@ -4720,7 +4722,7 @@ classpath/java/lang/Override.java \
classpath/java/lang/Package.java \
java/lang/PosixProcess.java \
classpath/java/lang/Process.java \
-java/lang/ProcessBuilder.java \
+classpath/java/lang/ProcessBuilder.java \
classpath/java/lang/Readable.java \
classpath/java/lang/Runnable.java \
java/lang/Runtime.java \
@@ -4752,6 +4754,7 @@ java/lang/VMClassLoader.java \
java/lang/VMCompiler.java \
java/lang/VMDouble.java \
java/lang/VMFloat.java \
+java/lang/VMProcess.java \
java/lang/VMThrowable.java \
classpath/java/lang/VerifyError.java \
classpath/java/lang/VirtualMachineError.java \
@@ -4762,7 +4765,7 @@ java_lang_header_files = $(filter-out java/lang/Object.h java/lang/Class.h,$(pat
java/lang.list: $(java_lang_source_files)
@$(mkinstalldirs) $(dir $@)
- echo $(srcdir)/classpath/lib/java/lang/*.class | tr ' ' '\n' | fgrep -v Object.class | fgrep -v Class.class | grep -v '[^/]Process' > java/lang.list
+ echo $(srcdir)/classpath/lib/java/lang/*.class | tr ' ' '\n' | fgrep -v Object.class | fgrep -v Class.class | egrep -v '(Ecos|Posix|Win32)Process' > java/lang.list
-include java/lang.deps
@@ -8372,7 +8375,7 @@ sun/reflect.list: $(sun_reflect_source_files)
sun_reflect_annotation_source_files = \
-classpath/sun/reflect/annotation/AnnotationInvocationHandler.java \
+sun/reflect/annotation/AnnotationInvocationHandler.java \
classpath/sun/reflect/annotation/AnnotationParser.java \
classpath/sun/reflect/annotation/AnnotationType.java \
classpath/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java \
@@ -8972,13 +8975,10 @@ property_files = \
classpath/resource/java/util/iso4217.properties \
classpath/resource/javax/imageio/plugins/jpeg/MessagesBundle.properties \
classpath/resource/org/ietf/jgss/MessagesBundle.properties \
+ classpath/resource/sun/rmi/rmic/messages.properties \
+ classpath/resource/com/sun/tools/javac/messages.properties \
classpath/resource/META-INF/services/java.util.prefs.PreferencesFactory.in \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiDeviceProvider \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileReader \
classpath/resource/META-INF/services/javax.sound.midi.spi.MidiFileWriter \
- classpath/resource/META-INF/services/javax.sound.sampled.spi.AudioFileReader \
- classpath/resource/META-INF/services/javax.xml.parsers.DocumentBuilderFactory \
- classpath/resource/META-INF/services/javax.xml.parsers.SAXParserFactory \
- classpath/resource/META-INF/services/javax.xml.parsers.TransformerFactory \
- classpath/resource/META-INF/services/org.relaxng.datatype.DatatypeLibraryFactory \
- classpath/resource/META-INF/services/org.xml.sax.driver
+ classpath/resource/META-INF/services/javax.sound.sampled.spi.AudioFileReader
diff --git a/libjava/sun/reflect/annotation/AnnotationInvocationHandler.h b/libjava/sun/reflect/annotation/AnnotationInvocationHandler.h
index 0679e3c3fd5..356c8a029c8 100644
--- a/libjava/sun/reflect/annotation/AnnotationInvocationHandler.h
+++ b/libjava/sun/reflect/annotation/AnnotationInvocationHandler.h
@@ -29,19 +29,19 @@ class sun::reflect::annotation::AnnotationInvocationHandler : public ::java::lan
public:
AnnotationInvocationHandler(::java::lang::Class *, ::java::util::Map *);
static ::java::lang::annotation::Annotation * create(::java::lang::Class *, ::java::util::Map *);
- static jboolean equals(::java::lang::Class *, ::java::util::Map *, ::java::lang::Object *);
+ jboolean equals(::java::lang::Object *, ::java::lang::Object *);
private:
static jboolean deepEquals(::java::lang::Object *, ::java::lang::Object *);
static jint deepHashCode(::java::lang::Object *);
public:
- static jint hashCode(::java::lang::Class *, ::java::util::Map *);
+ jint hashCode();
private:
static ::java::lang::String * deepToString(::java::lang::Object *);
public:
- static ::java::lang::String * toString(::java::lang::Class *, ::java::util::Map *);
+ ::java::lang::String * toString();
private:
static ::java::lang::Class * getBoxedReturnType(::java::lang::reflect::Method *);
- ::java::lang::Object * arrayClone(::java::lang::Object *);
+ ::java::lang::Object * coerce(::java::lang::Object *, ::java::lang::Class *);
public:
::java::lang::Object * invoke(::java::lang::Object *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *);
private:
diff --git a/libjava/sun/reflect/annotation/AnnotationInvocationHandler.java b/libjava/sun/reflect/annotation/AnnotationInvocationHandler.java
new file mode 100644
index 00000000000..f883faa16ac
--- /dev/null
+++ b/libjava/sun/reflect/annotation/AnnotationInvocationHandler.java
@@ -0,0 +1,441 @@
+/* sun.reflect.annotation.AnnotationInvocationHandler
+ Copyright (C) 2006, 2007
+ Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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 Classpath 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 Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package sun.reflect.annotation;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.AnnotationTypeMismatchException;
+import java.lang.annotation.IncompleteAnnotationException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * This class exists for serialization compatibility with the JDK.
+ * VMs can choose to implement annotations by constructing proxies
+ * with this invocation handler, but that is not required.
+ * If a different strategy for proxy objects is chosen, they can
+ * have a writeReplace method to substitute a Proxy based on this
+ * invocation handler is used for serialization.
+ */
+public final class AnnotationInvocationHandler
+ implements InvocationHandler, Serializable
+{
+ private static final long serialVersionUID = 6182022883658399397L;
+ private final Class<? extends Annotation> type;
+ private final Map<String, ?> memberValues;
+
+ /**
+ * Construct a new invocation handler for an annotation proxy.
+ * Note that the VM is responsible for filling the memberValues map
+ * with the default values of all the annotation members.
+ */
+ public AnnotationInvocationHandler(Class<? extends Annotation> type, Map memberValues)
+ {
+ this.type = type;
+ this.memberValues = (Map<String, ?>)memberValues;
+ }
+
+ public static Annotation create(Class<? extends Annotation> type, Map memberValues)
+ {
+ for (Method m : type.getDeclaredMethods())
+ {
+ String name = m.getName();
+ if (! memberValues.containsKey(name))
+ {
+ // FIXME: what to do about exceptions here?
+ memberValues.put(name, m.getDefaultValue());
+ }
+ }
+ AnnotationInvocationHandler handler
+ = new AnnotationInvocationHandler(type, memberValues);
+ return (Annotation) Proxy.newProxyInstance(type.getClassLoader(),
+ new Class[] { type },
+ handler);
+ }
+
+ /**
+ * Compare an instance of AnnotationInvocationHandler with another object.
+ * Note that the other object does not have to be an
+ * AnnotationInvocationHandler, any implementation of the annotation
+ * interface is allowed to be compared for equality.
+ * Note that this makes the equals method asymmetric, but this behavior
+ * is specified by Annotation.equals and identical to the JDK.
+ *
+ * This method is public for use by other parts of the VM. Some VMs
+ * (can) use different representations of annotations that reuse this
+ * method.
+ */
+ public boolean equals(Object proxy, Object other)
+ {
+ if (type.isInstance(other))
+ {
+ try
+ {
+ Method[] methods = type.getDeclaredMethods();
+ if (methods.length == memberValues.size())
+ {
+ for (int i = 0; i < methods.length; i++)
+ {
+ String key = methods[i].getName();
+ Object val = methods[i].invoke(other, (Object[])null);
+ Object thisVal
+ = invoke(proxy,
+ methods[i],
+ (Object[])null);
+ if (! deepEquals(thisVal, val))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ catch (Throwable _)
+ {
+ // Ignore exception, like the JDK
+ }
+ }
+ return false;
+ }
+
+ private static boolean deepEquals(Object o1, Object o2)
+ {
+ if (o1 == o2)
+ return true;
+
+ if (o1 == null || o2 == null)
+ return false;
+
+ if (o1 instanceof boolean[] && o2 instanceof boolean[])
+ return Arrays.equals((boolean[]) o1, (boolean[]) o2);
+
+ if (o1 instanceof byte[] && o2 instanceof byte[])
+ return Arrays.equals((byte[]) o1, (byte[]) o2);
+
+ if (o1 instanceof char[] && o2 instanceof char[])
+ return Arrays.equals((char[]) o1, (char[]) o2);
+
+ if (o1 instanceof short[] && o2 instanceof short[])
+ return Arrays.equals((short[]) o1, (short[]) o2);
+
+ if (o1 instanceof int[] && o2 instanceof int[])
+ return Arrays.equals((int[]) o1, (int[]) o2);
+
+ if (o1 instanceof float[] && o2 instanceof float[])
+ return Arrays.equals((float[]) o1, (float[]) o2);
+
+ if (o1 instanceof long[] && o2 instanceof long[])
+ return Arrays.equals((long[]) o1, (long[]) o2);
+
+ if (o1 instanceof double[] && o2 instanceof double[])
+ return Arrays.equals((double[]) o1, (double[]) o2);
+
+ if (o1 instanceof Object[] && o2 instanceof Object[])
+ return Arrays.equals((Object[]) o1, (Object[]) o2);
+
+ return o1.equals(o2);
+ }
+
+ private static int deepHashCode(Object obj)
+ {
+ if (obj instanceof boolean[])
+ return Arrays.hashCode((boolean[]) obj);
+
+ if (obj instanceof byte[])
+ return Arrays.hashCode((byte[]) obj);
+
+ if (obj instanceof char[])
+ return Arrays.hashCode((char[]) obj);
+
+ if (obj instanceof short[])
+ return Arrays.hashCode((short[]) obj);
+
+ if (obj instanceof int[])
+ return Arrays.hashCode((int[]) obj);
+
+ if (obj instanceof float[])
+ return Arrays.hashCode((float[]) obj);
+
+ if (obj instanceof long[])
+ return Arrays.hashCode((long[]) obj);
+
+ if (obj instanceof double[])
+ return Arrays.hashCode((double[]) obj);
+
+ if (obj instanceof Object[])
+ return Arrays.hashCode((Object[]) obj);
+
+ return obj.hashCode();
+ }
+
+ /**
+ * Compute the hashCode for an annotation. Note that the algorithm is
+ * specified by Annotation.hashCode.
+ *
+ * This method is public for use by other parts of the VM. Some VMs
+ * (can) use different representations of annotations that reuse this
+ * method.
+ */
+ public int hashCode()
+ {
+ int h = 0;
+ Iterator iter = memberValues.keySet().iterator();
+ while (iter.hasNext())
+ {
+ Object key = iter.next();
+ try
+ {
+ Object val
+ = invoke(null,
+ type.getDeclaredMethod((String)key, (Class[])null),
+ (Object[])null);
+ h += deepHashCode(val) ^ 127 * key.hashCode();
+ }
+ catch (Throwable _)
+ {
+ }
+ }
+ return h;
+ }
+
+ private static String deepToString(Object obj)
+ {
+ if (obj instanceof Object[])
+ return Arrays.toString((Object[]) obj);
+
+ return obj.toString();
+ }
+
+ /**
+ * This method is public for use by other parts of the VM. Some VMs
+ * (can) use different representations of annotations that reuse this
+ * method.
+ */
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append('@').append(type.getName()).append('(');
+ String sep = "";
+ Iterator iter = memberValues.keySet().iterator();
+ while (iter.hasNext())
+ {
+ Object key = iter.next();
+ Object val = memberValues.get(key);
+ sb.append(sep).append(key).append('=').append(deepToString(val));
+ sep = ", ";
+ }
+ sb.append(')');
+ return sb.toString();
+ }
+
+
+ private static Class getBoxedReturnType(Method method)
+ {
+ Class returnType = method.getReturnType();
+
+ if (returnType == boolean.class)
+ return Boolean.class;
+
+ if (returnType == byte.class)
+ return Byte.class;
+
+ if (returnType == char.class)
+ return Character.class;
+
+ if (returnType == short.class)
+ return Short.class;
+
+ if (returnType == int.class)
+ return Integer.class;
+
+ if (returnType == float.class)
+ return Float.class;
+
+ if (returnType == long.class)
+ return Long.class;
+
+ if (returnType == double.class)
+ return Double.class;
+
+ return returnType;
+ }
+
+ // This is slightly awkward. When the value of an annotation is an
+ // array, libgcj constructs an Object[], but the value() method
+ // returns an arrays of the appropriate primitive type. We should
+ // perhaps save the resulting array rather than the Object[].
+
+ private Object coerce(Object val, Class dstType)
+ throws ArrayStoreException
+ {
+ if (! val.getClass().isArray())
+ return val;
+
+ Object[] srcArray = (Object[])val;
+ final int len = srcArray.length;
+
+ if (dstType.getComponentType().isPrimitive())
+ {
+ if (dstType == boolean[].class)
+ {
+ boolean[] dst = new boolean[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Boolean)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == byte[].class)
+ {
+ byte[] dst = new byte[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Byte)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == char[].class)
+ {
+ char[] dst = new char[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Character)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == short[].class)
+ {
+ short[] dst = new short[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Short)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == int[].class)
+ {
+ int[] dst = new int[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Integer)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == long[].class)
+ {
+ long[] dst = new long[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Long)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == float[].class)
+ {
+ float[] dst = new float[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Float)srcArray[i];
+ return dst;
+ }
+
+ if (dstType == double[].class)
+ {
+ double[] dst = new double[len];
+ for (int i = 0; i < len; i++)
+ dst[i] = (Double)srcArray[i];
+ return dst;
+ }
+ }
+
+ Object dst = Array.newInstance(dstType.getComponentType(), len);
+ System.arraycopy((Object)srcArray, 0, dst, 0, len);
+ return dst;
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable
+ {
+ String methodName = method.getName().intern();
+
+ if (args == null || args.length == 0)
+ {
+ if (methodName == "toString")
+ {
+ return toString();
+ }
+ else if (methodName == "hashCode")
+ {
+ return Integer.valueOf(hashCode());
+ }
+ else if (methodName == "annotationType")
+ {
+ return type;
+ }
+ else
+ {
+ Object val = memberValues.get(methodName);
+ if (val == null)
+ {
+ throw new IncompleteAnnotationException(type, methodName);
+ }
+ try
+ {
+ if (val.getClass().isArray())
+ val = coerce((Object[])val, method.getReturnType());
+ }
+ catch (ArrayStoreException _)
+ {
+ throw new AnnotationTypeMismatchException
+ (method, val.getClass().getName());
+ }
+ if (! getBoxedReturnType(method).isInstance(val))
+ throw (new AnnotationTypeMismatchException
+ (method, val.getClass().getName()));
+ return val;
+ }
+ }
+ else if (args.length == 1)
+ {
+ if (methodName == "equals")
+ {
+ return Boolean.valueOf(equals(proxy, args[0]));
+ }
+ }
+ throw new InternalError("Invalid annotation proxy");
+ }
+}
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index e4316cbe150..0b4f133d5b5 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -123,7 +123,6 @@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
-GREP = @GREP@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
@@ -227,7 +226,6 @@ USING_WIN32_THREADS_TRUE = @USING_WIN32_THREADS_TRUE@
VERSION = @VERSION@
XLIB_AWT_FALSE = @XLIB_AWT_FALSE@
XLIB_AWT_TRUE = @XLIB_AWT_TRUE@
-XMKMF = @XMKMF@
X_AWT_FALSE = @X_AWT_FALSE@
X_AWT_TRUE = @X_AWT_TRUE@
X_CFLAGS = @X_CFLAGS@
@@ -239,8 +237,14 @@ ZIP = @ZIP@
ZLIBS = @ZLIBS@
ZLIBSPEC = @ZLIBSPEC@
ZLIBTESTSPEC = @ZLIBTESTSPEC@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
+ac_ct_GCJ = @ac_ct_GCJ@
+ac_ct_LD = @ac_ct_LD@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
@@ -261,10 +265,7 @@ build_os = @build_os@
build_subdir = @build_subdir@
build_vendor = @build_vendor@
datadir = @datadir@
-datarootdir = @datarootdir@
dbexecdir = @dbexecdir@
-docdir = @docdir@
-dvidir = @dvidir@
exec_prefix = @exec_prefix@
extra_ldflags_libjava = @extra_ldflags_libjava@
gxx_include_dir = @gxx_include_dir@
@@ -276,24 +277,20 @@ host_exeext = @host_exeext@
host_os = @host_os@
host_subdir = @host_subdir@
host_vendor = @host_vendor@
-htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libstdcxx_incdir = @libstdcxx_incdir@
-localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
mkinstalldirs = @mkinstalldirs@
multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
-psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
subdirs = @subdirs@
diff --git a/libjava/testsuite/libjava.jar/TestClosureGC.jar b/libjava/testsuite/libjava.jar/TestClosureGC.jar
new file mode 100644
index 00000000000..60d948ad58b
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/TestClosureGC.jar
Binary files differ
diff --git a/libjava/testsuite/libjava.jar/TestClosureGC.java b/libjava/testsuite/libjava.jar/TestClosureGC.java
new file mode 100644
index 00000000000..69a325a9994
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/TestClosureGC.java
@@ -0,0 +1,116 @@
+/* Verify that libffi closures aren't deallocated too early.
+
+ Copyright (C) 2007 Free Software Foundation, Inc
+ Contributed by Alexandre Oliva <aoliva@redhat.com>
+
+ If libffi closures are released too early, we lose.
+ */
+
+import java.util.HashSet;
+
+public class TestClosureGC {
+ public static String objId (Object obj) {
+ return obj + "/"
+ + Integer.toHexString(obj.getClass().getClassLoader().hashCode());
+ }
+ public static class cld extends java.net.URLClassLoader {
+ static final Object obj = new cl0();
+ public cld () throws Exception {
+ super(new java.net.URL[] { });
+ /* System.out.println (objId (this) + " created"); */
+ }
+ public void finalize () {
+ /* System.out.println (objId (this) + " finalized"); */
+ }
+ public String toString () {
+ return this.getClass().getName() + "@"
+ + Integer.toHexString (hashCode ());
+ }
+ public Class loadClass (String name) throws ClassNotFoundException {
+ try {
+ java.io.InputStream IS = getSystemResourceAsStream
+ (name + ".class");
+ int maxsz = 1024, readsz = 0;
+ byte buf[] = new byte[maxsz];
+ for(;;) {
+ int readnow = IS.read (buf, readsz, maxsz - readsz);
+ if (readnow <= 0)
+ break;
+ readsz += readnow;
+ if (readsz == maxsz) {
+ byte newbuf[] = new byte[maxsz *= 2];
+ System.arraycopy (buf, 0, newbuf, 0, readsz);
+ buf = newbuf;
+ }
+ }
+ return defineClass (name, buf, 0, readsz);
+ } catch (Exception e) {
+ return super.loadClass (name);
+ }
+ }
+ }
+ public static class cl0 {
+ public cl0 () {
+ /* System.out.println (objId (this) + " created"); */
+ }
+ public void finalize () {
+ /* System.out.println (objId (this) + " finalized"); */
+ }
+ }
+ public static class cl1 {
+ final HashSet hs;
+ static final Object obj = new cl0();
+ public cl1 (final HashSet hs) {
+ this.hs = hs;
+ /* System.out.println (objId (this) + " created"); */
+ }
+ public void finalize () {
+ /* System.out.println (objId (this) + " finalized"); */
+ }
+ }
+ public static class cl2 {
+ final HashSet hs;
+ static final Object obj = new cl0();
+ public cl2 (final HashSet hs) {
+ this.hs = hs;
+ /* System.out.println (objId (this) + " created"); */
+ }
+ public void finalize () {
+ /* System.out.println (objId (this) + " finalized"); */
+ hs.add(this);
+ hs.add(new cl0());
+ }
+ }
+ static final HashSet hs = new HashSet();
+ static final Object obj = new cl0();
+ public static void main(String[] argv) throws Exception {
+ {
+ Class[] hscs = { HashSet.class };
+ Object[] hsos = { hs };
+ new cld().loadClass ("TestClosureGC$cl1").
+ getConstructor (hscs).newInstance (hsos);
+ new cld().loadClass ("TestClosureGC$cl2").
+ getConstructor (hscs).newInstance (hsos);
+ new cld().loadClass ("TestClosureGC$cl1").
+ getConstructor (hscs).newInstance (hsos);
+ new cld().loadClass ("TestClosureGC$cl1").
+ getConstructor (hscs).newInstance (hsos);
+ }
+ for (int i = 1; i <= 5; i++) {
+ /* System.out.println ("Will run GC and finalization " + i); */
+ System.gc ();
+ Thread.sleep (100);
+ System.runFinalization ();
+ Thread.sleep (100);
+ if (hs.isEmpty ())
+ continue;
+ java.util.Iterator it = hs.iterator ();
+ while (it.hasNext ()) {
+ Object obj = it.next();
+ /* System.out.println (objId (obj) + " in ht, removing"); */
+ it.remove ();
+ }
+ }
+ System.out.println ("ok");
+ }
+}
diff --git a/libjava/testsuite/libjava.jar/TestClosureGC.out b/libjava/testsuite/libjava.jar/TestClosureGC.out
new file mode 100644
index 00000000000..9766475a418
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/TestClosureGC.out
@@ -0,0 +1 @@
+ok
diff --git a/libjava/testsuite/libjava.jar/TestClosureGC.xfail b/libjava/testsuite/libjava.jar/TestClosureGC.xfail
new file mode 100644
index 00000000000..963b35a7c70
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/TestClosureGC.xfail
@@ -0,0 +1 @@
+main=TestClosureGC
diff --git a/libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc b/libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc
index 3ca112d30f6..8899bac3b87 100644
--- a/libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc
+++ b/libjava/testsuite/libjava.jvmti/interp/natgetlocalvartable.cc
@@ -53,8 +53,11 @@ JNIEXPORT jint JNICALL Java_getlocalvartable_do_1getlocalvartable_1tests
{
printf ("Slot: %d\n", static_cast<int> (var_table[j].slot));
printf (" Name: %s\n", var_table[j].name);
+ jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].name));
printf (" Sig: %s\n", var_table[j].signature);
+ jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].signature));
printf (" Gen Sig: %s\n", var_table[j].generic_signature);
+ jvmti->Deallocate (reinterpret_cast<unsigned char *> (var_table[j].generic_signature));
printf (" Start Loc: %ld\n", static_cast<long> (var_table[j].start_location));
printf (" Length: %d\n", static_cast<int> (var_table[j].length));
}
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 80096e8c859..8a86b6606f5 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,3 +1,12 @@
+2007-03-14 Uros Bizjak <ubizjak@gmail.com>
+
+ * testsuite/libmudflap.cth/pass59-frag.c (main): Fix casting of arg.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
2007-02-07 Jakub Jelinek <jakub@redhat.com>
PR libgomp/28468
diff --git a/libmudflap/Makefile.am b/libmudflap/Makefile.am
index 8575da272be..d1e56a3bf9c 100644
--- a/libmudflap/Makefile.am
+++ b/libmudflap/Makefile.am
@@ -107,9 +107,10 @@ AM_MAKEFLAGS = \
MAKEOVERRIDES=
-.PHONY: install-html
-
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
## ################################################################
diff --git a/libmudflap/Makefile.in b/libmudflap/Makefile.in
index 7eaa0ec2895..08d8a776b2b 100644
--- a/libmudflap/Makefile.in
+++ b/libmudflap/Makefile.in
@@ -862,9 +862,10 @@ pth/mf-hooks2.lo: mf-hooks2.c mf-runtime.h mf-impl.h
pth/mf-hooks3.lo: mf-hooks3.c mf-runtime.h mf-impl.h
$(LTCOMPILE) -DLIBMUDFLAPTH -c $(srcdir)/mf-hooks3.c -o $@
-.PHONY: install-html
-
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libmudflap/testsuite/libmudflap.cth/pass59-frag.c b/libmudflap/testsuite/libmudflap.cth/pass59-frag.c
index bf6c293136d..49013067705 100644
--- a/libmudflap/testsuite/libmudflap.cth/pass59-frag.c
+++ b/libmudflap/testsuite/libmudflap.cth/pass59-frag.c
@@ -13,8 +13,8 @@ void* test_thread(void* arg)
int main()
{
pthread_t thread;
- int arg = 0;
- pthread_create(&thread, NULL, test_thread, (void*)arg);
+ void *arg = NULL;
+ pthread_create(&thread, NULL, test_thread, arg);
pthread_join(thread, NULL);
pthread_exit(NULL);
return 0;
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 880112276bd..e05cac4456f 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,7 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.in: Add dummy install-pdf target.
+
2007-02-18 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
* objc/objc-list.h (list_free): Add keyword 'inline' to avoid
diff --git a/libobjc/Makefile.in b/libobjc/Makefile.in
index 203629f4f10..eae8e84907b 100644
--- a/libobjc/Makefile.in
+++ b/libobjc/Makefile.in
@@ -269,9 +269,10 @@ exception_gc.lo: exception.c
doc: info dvi pdf html
-# No install-html support
-.PHONY: install-html
+# No install-html or install-pdf support
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
libobjc$(libext).la: $(OBJS)
$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
diff --git a/libssp/ChangeLog b/libssp/ChangeLog
index 213f763defe..ab63d486f22 100644
--- a/libssp/ChangeLog
+++ b/libssp/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
2006-10-14 Geoffrey Keating <geoffk@apple.com>
* aclocal.m4: Regenerate.
diff --git a/libssp/Makefile.am b/libssp/Makefile.am
index 22e83d9a1fa..085561b4e8f 100644
--- a/libssp/Makefile.am
+++ b/libssp/Makefile.am
@@ -90,9 +90,10 @@ AM_MAKEFLAGS = \
MAKEOVERRIDES=
-.PHONY: install-html
-
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
## ################################################################
diff --git a/libssp/Makefile.in b/libssp/Makefile.in
index b098221eb50..8186a5eef3f 100644
--- a/libssp/Makefile.in
+++ b/libssp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -15,8 +15,6 @@
@SET_MAKE@
-SOURCES = $(libssp_la_SOURCES) $(libssp_nonshared_la_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -53,6 +51,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -755,9 +754,10 @@ uninstall-am: uninstall-info-am uninstall-nobase_libsubincludeHEADERS \
uninstall-toolexeclibLTLIBRARIES
-.PHONY: install-html
-
+# No install-html or install-pdf support in automake yet
+.PHONY: install-html install-pdf
install-html:
+install-pdf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index ba0a40b31f1..f6af0df8cf6 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,856 @@
+2007-03-14 Nathan Sidwell <nathan@codesourcery.com>
+ Joseph Myers <joseph@codesourcery.com>::
+
+ * testsuite/lib/libstdc++.exp (check_v3_target_fileio,
+ check_v3_target_time): New.
+ * testsuite/lib/dg-options.exp (dg-require-fileio,
+ dg-require-time): New.
+ * testsuite/ext/stdio_sync_filebuf/char/12048-1.cc: Use it.
+ * testsuite/ext/stdio_sync_filebuf/char/12048-2.cc: Use it.
+ * testsuite/ext/stdio_sync_filebuf/char/12048-3.cc: Use it.
+ * testsuite/ext/stdio_sync_filebuf/char/12048-4.cc: Use it.
+ * testsuite/ext/stdio_sync_filebuf/char/1.cc: Use it.
+ * testsuite/ext/stdio_filebuf/char/2.cc: Use it.
+ * testsuite/ext/stdio_filebuf/char/10063-1.cc: Use it.
+ * testsuite/ext/stdio_filebuf/char/10063-2.cc: Use it.
+ * testsuite/ext/stdio_filebuf/char/10063-3.cc: Use it.
+ * testsuite/22_locale/time_put/put/char/12439_1.cc: Use it.
+ * testsuite/22_locale/time_put/put/char/12439_3.cc: Use it.
+ * testsuite/27_io/basic_ofstream/open/char/1.cc: Use it.
+ * testsuite/27_io/basic_ofstream/cons/char/2.cc: Use it.
+ * testsuite/27_io/objects/char/12048-2.cc: Use it.
+ * testsuite/27_io/objects/char/12048-4.cc: Use it.
+ * testsuite/27_io/objects/char/12048-1.cc: Use it.
+ * testsuite/27_io/objects/char/12048-3.cc: Use it.
+ * testsuite/27_io/objects/char/10.cc: Use it.
+ * testsuite/27_io/objects/char/12048-5.cc: Use it.
+ * testsuite/27_io/basic_istream/get/char/2.cc: Use it.
+ * testsuite/27_io/basic_istream/ignore/char/2.cc: Use it.
+ * testsuite/27_io/basic_istream/ignore/char/3.cc: Use it.
+ * testsuite/27_io/basic_istream/getline/char/5.cc: Use it.
+ * testsuite/27_io/basic_istream/seekg/char/sstream.cc: Use it.
+ * testsuite/27_io/basic_istream/seekg/char/fstream.cc: Use it.
+ * testsuite/27_io/basic_istream/readsome/char/6746-2.cc: Use it.
+ * testsuite/27_io/basic_istream/extractors_other/char/2.cc: Use it.
+ * testsuite/27_io/basic_istream/tellg/char/sstream.cc: Use it.
+ * testsuite/27_io/basic_istream/tellg/char/1.cc: Use it.
+ * testsuite/27_io/basic_istream/tellg/char/fstream.cc: Use it.
+ * testsuite/27_io/basic_istream/extractors_character/char/4.cc: Use it.
+ * testsuite/27_io/basic_ostream/inserters_other/char/1.cc: Use it.
+ * testsuite/27_io/basic_ostream/tellp/char/1.cc: Use it.
+ * testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc: Use it.
+ * testsuite/27_io/basic_ifstream/open/char/1.cc: Use it.
+ * testsuite/27_io/basic_ifstream/cons/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetn/char/3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-4.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/11543.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc: Use it.
+ * testsuite/27_io/basic_filebuf/in_avail/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/setbuf/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/setbuf/char/2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/setbuf/char/3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc: Use it.
+ * testsuite/27_io/basic_filebuf/is_open/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputc/char/1-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputc/char/2-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/open/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/open/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/open/char/2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/open/char/3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc: Use it.
+ * testsuite/27_io/basic_filebuf/overflow/char/2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/overflow/char/9988.cc: Use it.
+ * testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/overflow/char/9169.cc: Use it.
+ * testsuite/27_io/basic_filebuf/snextc/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/snextc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/snextc/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/snextc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/12790-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/12790-3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/12790-4.cc: Use it.
+ * testsuite/27_io/basic_filebuf/close/char/4.cc: Use it.
+ * testsuite/27_io/basic_filebuf/underflow/10096.cc: Use it.
+ * testsuite/27_io/basic_filebuf/underflow/char/2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-3.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputn/char/1-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputn/char/1-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputn/char/2-io.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputn/char/2-out.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sputn/char/9339.cc: Use it.
+ * testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc: Use it.
+ * testsuite/27_io/basic_filebuf/sync/char/9182-1.cc: Use it.
+ * testsuite/21_strings/basic_string/inserters_extractors/char/10.cc: Use it.
+ * testsuite/21_strings/basic_string/inserters_extractors/char/11.cc: Use it.
+ * testsuite/21_strings/basic_string/inserters_extractors/char/5.cc: Use it.
+
+2007-03-13 Paolo Carlini <pcarlini@suse.de>
+
+ * include/tr1/tuple: Only include <utility> for std::pair, and
+ forward declare reference_wrapper; formatting fixes.
+ * include/tr1/ref_fwd.h: Remove.
+ * include/tr1/tuple_defs.h: Remove, unused.
+ * include/Makefile.am: Update.
+ * include/Makefile.in: Regenerate.
+ * testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc:
+ Include <tr1/functional> too.
+
+ * include/tr1/tuple: Define tuple_size<tuple<_Elements...> >::value.
+
+2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+
+ * include/tr1/regex: Add "boilerplate" implementations.
+ * testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/
+ translate_nocase.cc: New.
+ * testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/
+ ctor.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex_traits/char/
+ translate_nocase.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex_traits/char/
+ ctor.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_ecma.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ default.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_grep.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_extended.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_basic.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_awk.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/regex/cons/char/
+ c_string_egrep.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ range.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ string_op.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ string.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ pstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ cstring_op.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/
+ cstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ range.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ string_op.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ string.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ pstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ cstring_op.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/
+ cstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/
+ range.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/
+ default.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/
+ string.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/
+ pstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/
+ cstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/
+ range.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/
+ default.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/
+ string.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/
+ pstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/
+ cstring.cc: Likewise.
+ * testsuite/tr1/7_regular_expressions/match_results/ctors/char/
+ default.cc: Likewise.
+
+2007-03-12 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/stl_algo.h (swap_ranges): Move...
+ * include/bits/stl_algobase.h: ... here.
+ * include/tr1/array: Trim includes, stl_algobase.h is enough.
+
+2007-03-11 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (final)
+ * include/std/iosfwd: Do not include <bits/c++io.h>.
+ * config/io/basic_file_stdio.h: Do it here.
+ * include/ext/stdio_sync_filebuf.h: Likewise.
+ * include/ext/rope: Include <bits/gthr.h> unconditionally.
+ * include/std/fstream: Do not include <bits/gthr.h>.
+
+ * include/std/ios: Do not include <cstdio>.
+ * include/bits/ios_base.h: Do it here.
+ * testsuite/27_io/ios_base/cons/assign_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/27_io/ios_base/cons/copy_neg.cc: Likewise.
+
+2007-03-10 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/std/memory: Move C++03 implementation...
+ * include/bits/stl_memory.h: ... here, new.
+ * include/Makefile.am: Add.
+ * include/bits/stl_tempbuf.h: Include the latter instead.
+ * include/tr1/hashtable: Include allocator.h instead of
+ the whole <memory>.
+ * include/tr1/hashtable_policy.h: Include stl_function.h
+ instead of <functional>.
+ * include/Makefile.in: Regenerate.
+ * testsuite/20_util/auto_ptr/assign_neg.cc: Adjust dg-error
+ line numbers.
+
+2007-03-09 Douglas Gregor <doug.gregor@gmail.com>
+
+ * include/Makefile.in: Regenerate.
+ * include/tr1/mu_iterate.h: Remove.
+ * include/tr1/tuple (_Tuple_impl): New.
+ (tuple): Make variadic, re-implement as shell over _Tuple_impl.
+ (0-element tuple): Basis case.
+ (2-element tuple): Handle pair methods.
+ (__get_helper): Remove.
+ (tuple_element): Reimplement with variadic templates.
+ (tuple_size): Ditto.
+ (get): Ditto.
+ (operator==): Use variadic templates in the signature.
+ (operator<): Ditto.
+ (operator!=): Ditto.
+ (operator>): Ditto.
+ (operator<=): Ditto.
+ (operator>=): Ditto.
+ (__stripped_tuple_type): Remove; we've inlined its behavior.
+ (make_tuple): Reimplement with variadic templates.
+ (tie): Ditto.
+ * include/tr1/tuple_iterate.h: Remove.
+ * include/tr1/bind_repeat.h: Remove.
+ * include/tr1/ref_wrap_iterate.h: Remove.
+ * include/tr1/bind_iterate.h: Remove.
+ * include/tr1/functional (_Weak_result_type): Add variadic
+ partial specializations.
+ (result_of): Ditto.
+ (__invoke): Reimplement using variadic templates.
+ (reference_wrapper): Reimplement operator() with variadic
+ templates.
+ (_Maybe_unary_or_binary_function): New.
+ (_Mem_fn): Implement for member function pointers using variadic
+ templates.
+ (placeholders): Define 30 placeholders.
+ (_Index_tuple): New.
+ (_Build_index_tuple): New.
+ (_No_tuple_element): New.
+ (_Safe_tuple_element_impl): New.
+ (_Safe_tuple_element): New.
+ (_Mu): Reimplement with variadic templates, use
+ _Safe_tuple_element instead of tuple_element.
+ (_Bind): Reimplement with variadic templates and tuples.
+ (_Bind_result): Ditto.
+ (bind): Reimplement with variadic templates.
+ (_Function_handler): Ditto.
+ (function): Ditto.
+ * include/tr1/functional_iterate.h: Remove.
+ * include/tr1/repeat.h: Remove.
+ * include/Makefile.am: Don't install removed headers.
+
+2007-03-06 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/bits/stl_algobase.h: Do not include <cstdlib>.
+ * src/localename.cc: Do it here.
+ * src/ctype.cc: Likewise.
+ * include/ext/pb_ds/detail/map_debug_base.hpp: Likewise.
+ * include/ext/pb_ds/exception.hpp: Likewise.
+ * include/ext/pb_ds/list_update_policy.hpp: Likewise.
+ * include/bits/stl_algo.h: Likewise.
+ * include/tr1/random: Likewise.
+ * testsuite/util/testsuite_hooks.cc: Likewise.
+ * testsuite/util/testsuite_abi_check.cc: Likewise.
+ * testsuite/util/testsuite_abi.cc: Likewise.
+ * testsuite/util/performance/assoc/timing/
+ tree_order_statistics_test.hpp: Likewise.
+ * config/locale/darwin/ctype_members.cc: Likewise.
+ * config/locale/gnu/c++locale_internal.h: Likewise.
+ * config/locale/generic/ctype_members.cc: Likewise.
+ * config/locale/generic/time_members.cc: Likewise.
+
+ * include/ext/pb_ds/detail/resize_policy/
+ hash_load_check_resize_trigger_imp.hpp: Qualify abort.
+ * testsuite/util/performance/assoc/timing/
+ multimap_find_test.hpp: Likewise.
+ * include/std/valarray: Do include <cstdlib>.
+ * include/tr1/hashtable: Likewise.
+
+2007-03-05 Joseph Myers <joseph@codesourcery.com>
+
+ PR libstdc++/30675
+ * testsuite/lib/libstdc++.exp (v3-build_support): Use [transform
+ "ar"] and [transform "ranlib"].
+
+2007-03-04 Paolo Carlini <pcarlini@suse.de>
+
+ * testsuite/27_io/basic_ostream/inserters_arithmetic/
+ char/31031.cc: Include the right header.
+
+2007-03-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * acinclude.m4 (GLIBCXX_ENABLE_CHEADERS): Add c_global.
+ * configure.host (c_model): Set default to c_global.
+ * configure: Regenerate.
+ * include/Makefile.am (c_compatibility_headers_extra): Make
+ conditional on GLIBCXX_C_HEADERS_COMPATIBILITY.
+ (c_base_headers_extra): Make conditional on GLIBCXX_C_HEADERS_EXTRA.
+ (c_compatibility_headers): Make conditional on c/c_std/c_global.
+ * include/Makefile.in: Regenerate.
+ * docs/html/configopts.html: Add c_global information to
+ --enable-cheaders. Eventually, "c_std" should mean "C" includes
+ that are in namespace std, with optional C++ "C" compatibility
+ includes to inject into global scope. And "c_global" should mean
+ "C" includes that are in the global namespace, with C++ includes
+ injecting into namespace std and no C++ "C" compatibility
+ includes.
+
+2007-03-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/c++config: Add _GLIBCXX_NAMEPACE_C.
+ Add _GLIBCXX_NAMESPACE_ASSOCIATION_CXX200x.
+ Add _GLIBCXX_TR1 as namespace macro.
+ Add namespace associations for std::__cxx200x conditionally.
+
+ * include/c_compatibility/assert.h: Correct doxygen markup,
+ conditionalize the global injections on _GLIBCXX_NAMESPACE_C.
+ * include/c_compatibility/ctype.h: Same.
+ * include/c_compatibility/errno.h: Same.
+ * include/c_compatibility/float.h: Same.
+ * include/c_compatibility/iso646.h: Same.
+ * include/c_compatibility/limits.h: Same.
+ * include/c_compatibility/locale.h: Same.
+ * include/c_compatibility/math.h: Same.
+ * include/c_compatibility/setjmp.h: Same.
+ * include/c_compatibility/signal.h: Same.
+ * include/c_compatibility/stdarg.h: Same.
+ * include/c_compatibility/stddef.h: Same.
+ * include/c_compatibility/stdio.h: Same.
+ * include/c_compatibility/stdlib.h: Same.
+ * include/c_compatibility/string.h: Same.
+ * include/c_compatibility/time.h: Same.
+ * include/c_compatibility/wchar.h: Same.
+ * include/c_compatibility/wctype.h: Same.
+
+ * include/c_compatibility/complex.h: Add.
+ * include/c_compatibility/fenv.h: Same.
+ * include/c_compatibility/inttypes.h: Same.
+ * include/c_compatibility/stdbool.h: Same.
+ * include/c_compatibility/stdint.h: Same.
+ * include/c_compatibility/tgmath.h: Same.
+
+ * include/c_global/cassert: Add, use include_next, use C++0x features
+ if -std=c++0x.
+ * include/c_global/cctype: Same.
+ * include/c_global/cerrno: Same.
+ * include/c_global/cfloat: Same.
+ * include/c_global/ciso646: Same.
+ * include/c_global/climits: Same.
+ * include/c_global/clocale: Same.
+ * include/c_global/cmath: Same.
+ * include/c_global/cmath.tcc: Same.
+ * include/c_global/csetjmp: Same.
+ * include/c_global/csignal: Same.
+ * include/c_global/cstdarg: Same.
+ * include/c_global/cstddef: Same.
+ * include/c_global/cstdio: Same.
+ * include/c_global/cstdlib: Same.
+ * include/c_global/cstring: Same.
+ * include/c_global/ctime: Same.
+ * include/c_global/cwchar: Same.
+ * include/c_global/cwctype: Same.
+
+ * include/c_global/ccomplex: Add.
+ * include/c_global/cfenv: Add.
+ * include/c_global/cinttypes: Add.
+ * include/c_global/cstdbool: Add.
+ * include/c_global/cstdint: Add.
+ * include/c_global/ctgmath: Add.
+
+ * include/std/algorithm: Use C++0x features if -std=c++0x.
+ * include/std/bitset: Same.
+ * include/std/complex: Same.
+ * include/std/deque: Same.
+ * include/std/fstream: Same.
+ * include/std/functional: Same.
+ * include/std/iomanip: Same.
+ * include/std/ios: Same.
+ * include/std/iosfwd: Same.
+ * include/std/iostream: Same.
+ * include/std/istream: Same.
+ * include/std/iterator: Same.
+ * include/std/limits: Same.
+ * include/std/list: Same.
+ * include/std/locale: Same.
+ * include/std/map: Same.
+ * include/std/memory: Same.
+ * include/std/numeric: Same.
+ * include/std/ostream: Same.
+ * include/std/queue: Same.
+ * include/std/set: Same.
+ * include/std/sstream: Same.
+ * include/std/stack: Same.
+ * include/std/stdexcept: Same.
+ * include/std/streambuf: Same.
+ * include/std/string: Same.
+ * include/std/utility: Same.
+ * include/std/valarray: Same.
+ * include/std/vector: Same.
+
+ * include/std/array: Add.
+ * include/std/random: Add.
+ * include/std/regex: Add.
+ * include/std/tuple: Add.
+ * include/std/type_traits: Add.
+ * include/std/unordered_map: Add.
+ * include/std/unordered_set: Add.
+ * include/std/c++0x_warning.h: Add.
+
+ * include/tr1/array: Switch namespaces based on _GLIBCXX_TR1.
+ * include/tr1/boost_shared_ptr.h: Same.
+ * include/tr1/cctype: Same.
+ * include/tr1/cfenv: Same.
+ * include/tr1/cinttypes: Same.
+ * include/tr1/cmath: Same.
+ * include/tr1/common.h: Same.
+ * include/tr1/complex: Same.
+ * include/tr1/cstdint: Same.
+ * include/tr1/cstdio: Same.
+ * include/tr1/cstdlib: Same.
+ * include/tr1/cwchar: Same.
+ * include/tr1/cwctype: Same.
+ * include/tr1/functional: Same.
+ * include/tr1/functional_hash.h: Same.
+ * include/tr1/functional_iterate.h: Same.
+ * include/tr1/hashtable: Same.
+ * include/tr1/hashtable_policy.h: Same.
+ * include/tr1/math.h: Same.
+ * include/tr1/memory: Same.
+ * include/tr1/random: Same.
+ * include/tr1/random.tcc: Same.
+ * include/tr1/ref_fwd.h: Same.
+ * include/tr1/repeat.h: Same.
+ * include/tr1/stdlib.h: Same.
+ * include/tr1/tuple: Same.
+ * include/tr1/tuple_iterate.h: Same.
+ * include/tr1/type_traits: Same.
+ * include/tr1/type_traits_fwd.h: Same.
+ * include/tr1/unordered_map: Same.
+ * include/tr1/unordered_set: Same.
+ * include/tr1/utility: Same.
+
+ * include/tr1/ccomplex: Add.
+ * include/tr1/complex.h: Add.
+ * include/tr1/regex: Add.
+
+ * include/Makefile.am: Add C++0x headers, "C" compatibility headers.
+ * include/Makefile.in: Regenerate.
+
+ * testsuite/tr1/headers.cc: Add in regex/complex.
+
+ * testsuite/17_intro/headers/c++200x/all.cc: New.
+ * testsuite/17_intro/headers/c++200x/all_multiple_inclusion.cc: Same.
+ * testsuite/17_intro/using_namespace_std_tr1_neg.cc: Same.
+ * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc: Same.
+ * testsuite/18_support/headers/cstdint/std_c++0x_neg.cc: Same.
+ * testsuite/18_support/headers/cstdint/types_std_c++0x.cc: Same.
+ * testsuite/20_util/enable_shared_from_this/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/headers/functional/types_std_c++0x.cc: Same.
+ * testsuite/20_util/headers/functional/
+ using_namespace_std_placeholders.cc: Same.
+ * testsuite/20_util/headers/memory/types_std_c++0x.cc: Same.
+ * testsuite/20_util/headers/type_traits/std_c++0x_neg.cc: Same.
+ * testsuite/20_util/headers/type_traits/types_std_c++0x.cc: Same.
+ * testsuite/20_util/shared_ptr/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/20_util/weak_ptr/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/array/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/hash/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/headers/array/std_c++0x_neg.cc: Same.
+ * testsuite/23_containers/headers/tuple/std_c++0x_neg.cc: Same.
+ * testsuite/23_containers/headers/tuple/types_std_c++0x.cc: Same.
+ * testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc: Same.
+ * testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc: Same.
+ * testsuite/23_containers/tuple/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/unordered_map/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/unordered_multimap/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/unordered_multiset/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/23_containers/unordered_set/requirements/
+ explicit_instantiation.cc: Same.
+ * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Same.
+ * testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc: Same.
+ * testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc: Same.
+ * testsuite/26_numerics/headers/cmath/types_std_c++0x.cc: Same.
+ * testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc: Same.
+ * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Same.
+ * testsuite/26_numerics/headers/random/std_c++0x_neg.cc: Same.
+ * testsuite/26_numerics/headers/random/types_std_c++0x.cc: Same.
+ * testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc: Same.
+ * testsuite/27_io/headers/cinttypes/types_std_c++0x.cc: Same.
+ * testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Same.
+
+ * testsuite/tr1/8_c_compatibility/cfenv/types.cc: Rename ...
+ * testsuite/tr1/8_c_compatibility/cinttypes/types.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cmath/types.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cstdint/types.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cstdlib/types.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc: ...to this.
+ * testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc: Same.
+ * testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc: Same.
+
+2007-03-03 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/31031
+ * include/bits/istream.tcc: Inhibit implicit instantiation of
+ the _M_insert helpers.
+ * include/bits/ostream.tcc: Likewise for _M_extract.
+ * testsuite/27_io/basic_ostream/inserters_arithmetic/char/
+ 31031.cc: New.
+ * testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/
+ 31031.cc: Likewise.
+
+2007-03-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/debug/functions.h: Use cstddef.
+
+ * testsuite/tr1/3_function_objects/headers/functional/
+ using_namespace_std_tr1_placeholders.cc: Fix include.
+
+2007-03-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * crossconfig.m4 (djgpp): Correct builtin defines to HAVE___,
+ instead of HAVE____.
+ * configure: Regenerate.
+
+2007-03-03 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/bits/stl_algobase.h: Do not include <iosfwd>,
+ <bits/functexcept.h> is enough; adjust __copy_aux declarations;
+ remove declaration of copy overload for istreambuf_iterator /
+ ostreambuf_iterator.
+ * src/debug.cc: Include <cstdio>.
+ * include/ext/rope: Include <iosfwd>.
+ * include/bits/char_traits.h: Include <cstdio> and <cwchar>.
+ * include/bits/stl_algo.h: Remove declaration of find overload
+ for istreambuf_iterator.
+ * include/std/queue: Clean up includes.
+ * include/std/stack: Likewise.
+ * include/std/memory: Likewise.
+ * include/std/algorithm: Likewise.
+ * include/std/vector: Likewise.
+ * include/std/deque: Likewise.
+ * include/std/list: Likewise.
+ * include/bits/stl_tree.h: Likewise.
+ * testsuite/ext/type_traits/remove_unsigned_integer_neg.cc: Adjust
+ dg-error markers.
+ * testsuite/ext/type_traits/add_unsigned_floating_neg.cc: Likewise.
+ * testsuite/ext/type_traits/remove_unsigned_floating_neg.cc: Likewise.
+ * testsuite/ext/type_traits/add_unsigned_integer_neg.cc: Likewise.
+ * testsuite/23_containers/set/operators/1_neg.cc: Likewise.
+ * testsuite/23_containers/map/operators/1_neg.cc: Likewise.
+ * testsuite/20_util/auto_ptr/assign_neg.cc: Likewise.
+
+ * include/ext/type_traits.h: Fix type of __max_digits10; clean up
+ includes.
+
+ * testsuite/util/testsuite_hooks.h: Do not include <cstddef>.
+ * testsuite/util/testsuite_hooks.cc: Do it here.
+
+2007-03-02 Paolo Carlini <pcarlini@suse.de>
+
+ * testsuite/27_io/objects/wchar_t/9661-1.cc: Include <cstdlib>.
+ * testsuite/27_io/objects/wchar_t/7.cc: Likewise.
+ * testsuite/27_io/objects/char/9661-1.cc: Likewise.
+ * testsuite/27_io/objects/char/7.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/wchar_t/2.cc: Likewise.
+ * testsuite/27_io/basic_istream/ignore/char/2.cc: Likewise.
+ * testsuite/27_io/basic_istream/getline/wchar_t/5.cc: Likewise.
+ * testsuite/27_io/basic_istream/getline/char/5.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/char/
+ 11.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/wchar_t/
+ 4.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/char/
+ 4.cc: Likewise.
+ * testsuite/27_io/basic_ostream/seekp/wchar_t/
+ 2346-fstream.cc: Likewise.
+ * testsuite/27_io/basic_ostream/seekp/char/
+ 2346-fstream.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/seekoff/char/26777.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/4879.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/close/char/9964.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/underflow/char/10097.cc: Likewise.
+ * testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/
+ wchar_t/10.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/
+ wchar_t/11.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/
+ char/10.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/
+ char/11.cc: Likewise.
+ * testsuite/ext/pb_ds/example/trie_dna.cc: Likewise.
+ * testsuite/ext/new_allocator/deallocate_global.cc: Likewise.
+ * testsuite/ext/new_allocator/deallocate_local.cc: Likewise.
+ * testsuite/performance/27_io/filebuf_sgetn_unbuf.cc: Likewise.
+ * testsuite/performance/27_io/ifstream_getline.cc: Likewise.
+ * testsuite/22_locale/locale/cons/4.cc: Likewise.
+ * testsuite/22_locale/locale/cons/5.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/thread/
+ mutex_weaktoshared.cc: Likewise.
+ * testsuite/tr1/2_general_utilities/shared_ptr/thread/
+ default_weaktoshared.cc: Likewise.
+ * testsuite/thread/pthread5.cc: Likewise.
+ * testsuite/thread/pthread1.cc: Likewise.
+ * testsuite/23_containers/deque/cons/assign/1.cc: Likewise.
+
+2007-03-02 Paolo Carlini <pcarlini@suse.de>
+
+ * testsuite/thread/pthread1.cc: Include <pthread.h>.
+ * testsuite/thread/pthread2.cc: Likewise.
+ * testsuite/thread/pthread3.cc: Likewise.
+ * testsuite/thread/pthread4.cc: Likewise.
+ * testsuite/thread/pthread5.cc: Likewise.
+ * testsuite/thread/pthread6.cc: Likewise.
+ * testsuite/thread/pthread7-rope.cc: Likewise.
+
+2007-03-02 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/tr1/random (class random_device): Rework to use simple
+ <cstdio> input, do not include <fstream>.
+ * include/tr1/random.tcc (all inserters and extractors): Refer
+ to ios_base as base class of basic_istream or basic_ostream.
+
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
+2007-03-01 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/31005
+ * include/bits/localefwd.h: Include <cctype>.
+
+2007-02-27 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/std/bitset: Do not include <ios>, <iosfwd> is enough.
+ (operator>>(std::basic_istream<>&, bitset<>&)): Tweak, refer to
+ ios_base as a base of basic_istream.
+ * include/std/iomanip: Do not include <ios>, <iosfwd> +
+ <bits/ios_base.h> is enough.
+ * include/std/iosfwd: Do not include <cctype> here...
+ * include/bits/locale_facets.h: ... do it here, when needed.
+ * include/bits/ostream.tcc: Clean up, do not include <locale> here...
+ * include/std/ostream: ... here instead.
+ * include/bits/istream.tcc: Likewise for <locale> and <ostream>...
+ * include/std/istream: ... here.
+ * include/bits/sstream.tcc: Do not include <sstream>.
+
+2007-02-27 Richard Guenther <rguenther@suse.de>
+
+ * acinclude.m4: Adjust regular expression for ld version extraction.
+ * configure: Regenerate.
+
+2007-02-26 DJ Delorie <dj@redhat.com>
+
+ * crossconfig.m4 (djgpp): Pre-detect djgpp-specific results, to
+ avoid needing to link during cross compiling.
+ * configure: Regenerated.
+
+2007-02-26 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/28080 (partial)
+ * include/std/bitset: Do not include <istream> and <ostream>,
+ <ios> is enough.
+ * include/std/iomanip: Do not include the whole <istream>,
+ <ios> is enough; do not include <functional>; reformat.
+ * include/std/functional: Do not include <cstddef>.
+ * include/std/list: Do not include <bits/stl_uninitialized.h>.
+ * include/std/numeric: Do not include the whole <iterator> and
+ <bits/stl_function.h>.
+ * include/std/valarray: Do not include <numeric>.
+ * include/bits/stl_numeric.h: Include <bits/concept_check.h>.
+ * src/iostream-inst.cc: Include <istream>.
+ * include/ext/functional: Include <cstddef>.
+ * testsuite/util/testsuite_hooks.h: Do not include <locale>,
+ <ctime> is enough; qualify tm.
+ * testsuite/util/testsuite_hooks.cc: Qualify tm.
+
+2007-02-26 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/locale_facets.h (class ctype_byname<char>,
+ class ctype_byname<wchar_t>): Declare.
+ * src/ctype.cc (ctype_byname<wchar_t>::ctype_byname(const char*,
+ size_t), ctype_byname<wchar_t>::~ctype_byname): Define.
+ * config/locale/generic/ctype_members.cc (ctype_byname<char>::
+ ctype_byname(const char*, size_t), ctype_byname<char>::~ctype_byname):
+ Likewise.
+ * config/locale/gnu/ctype_members.cc (ctype_byname<char>::
+ ctype_byname(const char*, size_t), ctype_byname<char>::~ctype_byname):
+ Likewise.
+ * config/locale/darwin/ctype_members.cc (ctype_byname<char>::
+ ctype_byname(const char*, size_t), ctype_byname<char>::~ctype_byname):
+ Likewise.
+ * testsuite/22_locale/headers/locale/synopsis.cc: Remove xfail.
+
+2007-02-25 Paolo Carlini <pcarlini@suse.de>
+
+ * testsuite/19_diagnostics/headers/cerrno/macros.cc: Include
+ the right header.
+ * testsuite/18_support/headers/cstdlib/macros.cc: Likewise.
+
+2007-02-23 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/25896
+ * include/tr1/hashtable (_Hashtable<>::erase(const key_type&)):
+ Take care of &_M_extract((*__slot)->_M_v) == &__k.
+
+ * testsuite/tr1/6_containers/unordered_map/erase/1.cc: New.
+ * testsuite/tr1/6_containers/unordered_multimap/erase/1.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_multiset/erase/1.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_set/erase/1.cc: Likewise.
+
+2007-02-23 Mark Mitchell <mark@codesourcery.com>
+
+ * testsuite/27_io/ios_base/sync_with_stdio/1.cc: XFAIL for wrapped
+ targets.
+
+2007-02-23 Mark Mitchell <mark@codesourcery.com>
+
+ * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc:
+ XFAIL for Newlib targets.
+
+2007-02-22 Simon Martin <simartin@users.sourceforge.net>
+
+ * testsuite/27_io/basic_ios/cons/char/3.cc: Fixed type mismatches in
+ explicit instantiations.
+ * testsuite/27_io/basic_istream/extractors_other/pod/
+ 3983-3.cc: Likewise.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc:
+ Likewise.
+ * testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc:
+ Likewise.
+ * testsuite/27_io/basic_istream/sentry/pod/1.cc: Likewise.
+ * testsuite/27_io/basic_ostream/sentry/pod/1.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/
+ pod/10081-in.cc: Likewise.
+ * testsuite/21_strings/basic_string/inserters_extractors/pod/
+ 10081-out.cc: Likewise.
+ * testsuite/21_strings/basic_string/capacity/1.cc: Likewise.
+
+2007-02-22 Paolo Carlini <pcarlini@suse.de>
+
+ * include/tr1/unordered_map (class __unordered_map,
+ class __unordered_multimap): New.
+ (class unordered_map, class unordered_multimap): Forward to
+ the latter.
+ * include/tr1/unordered_set: Likewise for unordered_set and
+ unordered_multiset.
+ * testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc:
+ Remove xfail.
+ * testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc:
+ Likewise.
+ * testsuite/tr1/6_containers/unordered_multimap/requirements/
+ explicit_instantiation.cc: Adjust.
+ * testsuite/tr1/6_containers/unordered_set/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_map/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_multiset/requirements/
+ explicit_instantiation.cc: Likewise.
+ * testsuite/tr1/6_containers/unordered_map/24064.cc: Likewise.
+ * testsuite/util/native_type/assoc/native_hash_set.hpp: Likewise.
+ * testsuite/util/native_type/assoc/native_hash_map.hpp: Likewise.
+
+2007-02-20 Mark Mitchell <mark@codesourcery.com>
+
+ * testsuite/lib/libstdc++.exp (libstdc++_init): Compile testglue
+ with -fexceptions.
+
2007-02-20 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/28080 (partial)
diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am
index c1f17b651bc..562b3e86a91 100644
--- a/libstdc++-v3/Makefile.am
+++ b/libstdc++-v3/Makefile.am
@@ -113,6 +113,8 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS)
# Installation of distribution html documentation not yet supported
# TODO: Write custom install-html rule.
-.PHONY: install-html
+.PHONY: install-html install-pdf
install-html:
+# No install-pdf support in automake yet
+install-pdf:
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index cb77cbc8009..ae34b79c5e5 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -156,9 +156,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
@@ -798,8 +802,11 @@ TAGS: tags-recursive $(LISP)
# Installation of distribution html documentation not yet supported
# TODO: Write custom install-html rule.
-.PHONY: install-html
+.PHONY: install-html install-pdf
install-html:
+
+# No install-pdf support in automake yet
+install-pdf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index a74a52334b1..f40845dfa18 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -235,7 +235,7 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
AC_MSG_CHECKING([for ld version])
changequote(,)
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
changequote([,])
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
@@ -1264,19 +1264,30 @@ dnl
dnl --enable-cheaders= [does stuff].
dnl --disable-cheaders [does not do anything, really].
dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
-dnl Where DEFAULT is either `c' or `c_std'.
+dnl Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
dnl
AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
GLIBCXX_ENABLE(cheaders,$1,[=KIND],
- [construct "C" headers for g++], [permit c|c_std])
+ [construct "C" headers for g++], [permit c|c_std|c_global])
AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
+ # Allow overrides to configure.host here.
+ if test $enable_cheaders = c_global; then
+ c_compatibility=yes
+ fi
+
+ if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
+ c_extra=yes
+ fi
+
AC_SUBST(C_INCLUDE_DIR)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
+ GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
+ GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_EXTRA, test $c_extra = yes)
])
diff --git a/libstdc++-v3/config/io/basic_file_stdio.h b/libstdc++-v3/config/io/basic_file_stdio.h
index 175d13afd3c..bf2d5b3162b 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.h
+++ b/libstdc++-v3/config/io/basic_file_stdio.h
@@ -1,6 +1,6 @@
// Wrapper of C-language FILE struct -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,6 +43,7 @@
#pragma GCC system_header
#include <bits/c++config.h>
+#include <bits/c++io.h> // for __c_lock and __c_file
#include <ios>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/darwin/ctype_members.cc b/libstdc++-v3/config/locale/darwin/ctype_members.cc
index c2a5c4ac500..b50bd35d67e 100644
--- a/libstdc++-v3/config/locale/darwin/ctype_members.cc
+++ b/libstdc++-v3/config/locale/darwin/ctype_members.cc
@@ -1,6 +1,7 @@
// std::ctype implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,21 +36,25 @@
#include <locale>
#include <bits/c++locale_internal.h>
+#include <cstdlib>
namespace std
{
// NB: The other ctype<char> specializations are in src/locale.cc and
// various /config/os/* files.
- template<>
- ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
- : ctype<char>(0, false, __refs)
- {
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
- {
- this->_S_destroy_c_locale(this->_M_c_locale_ctype);
- this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
- }
- }
+
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ }
+ }
+
+ ctype_byname<char>::~ctype_byname()
+ { }
#ifdef _GLIBCXX_USE_WCHAR_T
ctype<wchar_t>::__wmask_type
diff --git a/libstdc++-v3/config/locale/generic/ctype_members.cc b/libstdc++-v3/config/locale/generic/ctype_members.cc
index 3af4440da8f..3c7209d65fb 100644
--- a/libstdc++-v3/config/locale/generic/ctype_members.cc
+++ b/libstdc++-v3/config/locale/generic/ctype_members.cc
@@ -1,6 +1,7 @@
// std::ctype implementation details, generic version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,21 +35,24 @@
// Written by Benjamin Kosnik <bkoz@redhat.com>
#include <locale>
+#include <cstdlib>
_GLIBCXX_BEGIN_NAMESPACE(std)
// NB: The other ctype<char> specializations are in src/locale.cc and
// various /config/os/* files.
- template<>
- ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
- : ctype<char>(0, false, __refs)
- {
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
- {
- this->_S_destroy_c_locale(this->_M_c_locale_ctype);
- this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
- }
- }
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ }
+ }
+
+ ctype_byname<char>::~ctype_byname()
+ { }
#ifdef _GLIBCXX_USE_WCHAR_T
ctype<wchar_t>::__wmask_type
diff --git a/libstdc++-v3/config/locale/generic/time_members.cc b/libstdc++-v3/config/locale/generic/time_members.cc
index dbb12ae6848..b8ebb746b1b 100644
--- a/libstdc++-v3/config/locale/generic/time_members.cc
+++ b/libstdc++-v3/config/locale/generic/time_members.cc
@@ -1,6 +1,7 @@
// std::time_get, std::time_put implementation, generic version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -35,6 +36,7 @@
// Written by Benjamin Kosnik <bkoz@redhat.com>
#include <locale>
+#include <cstdlib>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/config/locale/gnu/c++locale_internal.h b/libstdc++-v3/config/locale/gnu/c++locale_internal.h
index 0d6e9c2d445..6f9b5351033 100644
--- a/libstdc++-v3/config/locale/gnu/c++locale_internal.h
+++ b/libstdc++-v3/config/locale/gnu/c++locale_internal.h
@@ -1,6 +1,7 @@
// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
-// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,6 +37,7 @@
#include <bits/c++config.h>
#include <clocale>
+#include <cstdlib>
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc
index cb2887d9b98..3aec312f89b 100644
--- a/libstdc++-v3/config/locale/gnu/ctype_members.cc
+++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc
@@ -1,6 +1,7 @@
// std::ctype implementation details, GNU version -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,19 +41,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// NB: The other ctype<char> specializations are in src/locale.cc and
// various /config/os/* files.
- template<>
- ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
- : ctype<char>(0, false, __refs)
- {
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
- {
- this->_S_destroy_c_locale(this->_M_c_locale_ctype);
- this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
- this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
- this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
- this->_M_table = this->_M_c_locale_ctype->__ctype_b;
- }
- }
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
+ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
+ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
+ }
+ }
+
+ ctype_byname<char>::~ctype_byname()
+ { }
#ifdef _GLIBCXX_USE_WCHAR_T
ctype<wchar_t>::__wmask_type
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 5162b6b9167..d60c747e024 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -309,7 +309,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CPP CPPFLAGS EGREP LIBTOOL CXXCPP enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV LTLIBICONV SYMVER_FILE port_specific_symbol_files ENABLE_SYMVERS_TRUE ENABLE_SYMVERS_FALSE ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_GNU_NAMESPACE_TRUE ENABLE_SYMVERS_GNU_NAMESPACE_FALSE ENABLE_SYMVERS_DARWIN_TRUE ENABLE_SYMVERS_DARWIN_FALSE ENABLE_VISIBILITY_TRUE ENABLE_VISIBILITY_FALSE GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CPP CPPFLAGS EGREP LIBTOOL CXXCPP enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_C_GLOBAL_TRUE GLIBCXX_C_HEADERS_C_GLOBAL_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE GLIBCXX_C_HEADERS_EXTRA_TRUE GLIBCXX_C_HEADERS_EXTRA_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV LTLIBICONV SYMVER_FILE port_specific_symbol_files ENABLE_SYMVERS_TRUE ENABLE_SYMVERS_FALSE ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_GNU_NAMESPACE_TRUE ENABLE_SYMVERS_GNU_NAMESPACE_FALSE ENABLE_SYMVERS_DARWIN_TRUE ENABLE_SYMVERS_DARWIN_FALSE ENABLE_VISIBILITY_TRUE ENABLE_VISIBILITY_FALSE GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -6432,7 +6432,7 @@ if test "${enable_cheaders+set}" = set; then
enableval="$enable_cheaders"
case "$enableval" in
- c|c_std) ;;
+ c|c_std|c_global) ;;
*) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable cheaders" >&5
echo "$as_me: error: Unknown argument to enable/disable cheaders" >&2;}
{ (exit 1); exit 1; }; } ;;
@@ -6447,6 +6447,17 @@ echo "$as_me: \"C\" header strategy set to $enable_cheaders" >&6;}
C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
+ # Allow overrides to configure.host here.
+ if test $enable_cheaders = c_global; then
+ c_compatibility=yes
+ fi
+
+ if test $enable_cheaders = c_global || test $enable_cheaders = c_std; then
+ c_extra=yes
+ fi
+
+
+
@@ -8018,7 +8029,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
-#line 8021 "configure"
+#line 8032 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -8381,7 +8392,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -54185,20684 +54196,111 @@ fi
done
-
- # If we're not using GNU ld, then there's no point in even trying these
- # tests. Check for that first. We should have already tested for gld
- # by now (in libtool), but require it now just to be safe...
- test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
- test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
-
-
-
- # The name set by libtool depends on the version of libtool. Shame on us
- # for depending on an impl detail, but c'est la vie. Older versions used
- # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
- # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
- # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
- # set (hence we're using an older libtool), then set it.
- if test x${with_gnu_ld+set} != xset; then
- if test x${ac_cv_prog_gnu_ld+set} != xset; then
- # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
- with_gnu_ld=no
- else
- with_gnu_ld=$ac_cv_prog_gnu_ld
- fi
- fi
-
- # Start by getting the version number. I think the libtool test already
- # does some of this, but throws away the result.
- if test x"$with_gnu_ld" = x"yes"; then
- echo "$as_me:$LINENO: checking for ld version" >&5
-echo $ECHO_N "checking for ld version... $ECHO_C" >&6
-
- ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
-
- glibcxx_gnu_ld_version=`echo $ldver | \
- $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
- echo "$as_me:$LINENO: result: $glibcxx_gnu_ld_version" >&5
-echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6
- fi
-
- # Set --gc-sections.
- glibcxx_gcsections_min_ld=21602
- if test x"$with_gnu_ld" = x"yes" &&
- test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
-
- # Sufficiently young GNU ld it is! Joy and bunny rabbits!
- # NB: This flag only works reliably after 2.16.1. Configure tests
- # for this are difficult, so hard wire a value that should work.
-
- # All these tests are for C++, but run with the "C" compiler driver.
- # Need to do this so that g++ won't try to link in libstdc++/libsupc++.
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS='-x c++ -Wl,--gc-sections'
-
- # Check for -Wl,--gc-sections
- echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5
-echo $ECHO_N "checking for ld that supports -Wl,--gc-sections... $ECHO_C" >&6
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
- int one(void) { return 1; }
- int two(void) { return 2; }
-
-int
-main ()
-{
- two();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_gcsections=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_gcsections=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test "$ac_gcsections" = "yes"; then
- rm -f conftest.c
- touch conftest.c
- if $CC -c conftest.c; then
- if $LD --gc-sections -o conftest conftest.o 2>&1 | \
- grep "Warning: gc-sections option ignored" > /dev/null; then
- ac_gcsections=no
- fi
- fi
- rm -f conftest.c conftest.o conftest
- fi
- if test "$ac_gcsections" = "yes"; then
- SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
- fi
- echo "$as_me:$LINENO: result: $ac_gcsections" >&5
-echo "${ECHO_T}$ac_gcsections" >&6
-
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- else
- # this is the suspicious part
- CFLAGS=''
- fi
- fi
-
- # Set -z,relro.
- # Note this is only for shared objects.
- ac_ld_relro=no
- if test x"$with_gnu_ld" = x"yes"; then
- echo "$as_me:$LINENO: checking for ld that supports -Wl,-z,relro" >&5
-echo $ECHO_N "checking for ld that supports -Wl,-z,relro... $ECHO_C" >&6
- cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
- if test -n "$cxx_z_relo"; then
- OPT_LDFLAGS="-Wl,-z,relro"
- ac_ld_relro=yes
- fi
- echo "$as_me:$LINENO: result: $ac_ld_relro" >&5
-echo "${ECHO_T}$ac_ld_relro" >&6
- fi
-
- # Set linker optimization flags.
- if test x"$with_gnu_ld" = x"yes"; then
- OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
- fi
-
-
-
-
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
-
- echo "$as_me:$LINENO: checking for sin in -lm" >&5
-echo $ECHO_N "checking for sin in -lm... $ECHO_C" >&6
-if test "${ac_cv_lib_m_sin+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char sin ();
-int
-main ()
-{
-sin ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_m_sin=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_m_sin=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_m_sin" >&5
-echo "${ECHO_T}$ac_cv_lib_m_sin" >&6
-if test $ac_cv_lib_m_sin = yes; then
- libm="-lm"
-fi
-
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $libm"
-
-
-
- echo "$as_me:$LINENO: checking for isinf declaration" >&5
-echo $ECHO_N "checking for isinf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isinf_use+set} != xset; then
- if test "${glibcxx_cv_func_isinf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isinf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isinf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isinf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isinf_use" >&6
-
- if test x$glibcxx_cv_func_isinf_use = x"yes"; then
-
-for ac_func in isinf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isinf declaration" >&5
-echo $ECHO_N "checking for _isinf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isinf_use+set} != xset; then
- if test "${glibcxx_cv_func__isinf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isinf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isinf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isinf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isinf_use" >&6
-
- if test x$glibcxx_cv_func__isinf_use = x"yes"; then
-
-for ac_func in _isinf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for isnan declaration" >&5
-echo $ECHO_N "checking for isnan declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isnan_use+set} != xset; then
- if test "${glibcxx_cv_func_isnan_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnan(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isnan_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isnan_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isnan_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isnan_use" >&6
-
- if test x$glibcxx_cv_func_isnan_use = x"yes"; then
-
-for ac_func in isnan
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isnan declaration" >&5
-echo $ECHO_N "checking for _isnan declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isnan_use+set} != xset; then
- if test "${glibcxx_cv_func__isnan_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnan(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isnan_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isnan_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isnan_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isnan_use" >&6
-
- if test x$glibcxx_cv_func__isnan_use = x"yes"; then
-
-for ac_func in _isnan
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for finite declaration" >&5
-echo $ECHO_N "checking for finite declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_finite_use+set} != xset; then
- if test "${glibcxx_cv_func_finite_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finite(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_finite_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_finite_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_finite_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_finite_use" >&6
-
- if test x$glibcxx_cv_func_finite_use = x"yes"; then
-
-for ac_func in finite
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _finite declaration" >&5
-echo $ECHO_N "checking for _finite declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__finite_use+set} != xset; then
- if test "${glibcxx_cv_func__finite_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _finite(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__finite_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__finite_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__finite_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__finite_use" >&6
-
- if test x$glibcxx_cv_func__finite_use = x"yes"; then
-
-for ac_func in _finite
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for copysign declaration" >&5
-echo $ECHO_N "checking for copysign declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_copysign_use+set} != xset; then
- if test "${glibcxx_cv_func_copysign_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- copysign(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_copysign_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_copysign_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_copysign_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_copysign_use" >&6
-
- if test x$glibcxx_cv_func_copysign_use = x"yes"; then
-
-for ac_func in copysign
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _copysign declaration" >&5
-echo $ECHO_N "checking for _copysign declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__copysign_use+set} != xset; then
- if test "${glibcxx_cv_func__copysign_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _copysign(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__copysign_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__copysign_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__copysign_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__copysign_use" >&6
-
- if test x$glibcxx_cv_func__copysign_use = x"yes"; then
-
-for ac_func in _copysign
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for sincos declaration" >&5
-echo $ECHO_N "checking for sincos declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_sincos_use+set} != xset; then
- if test "${glibcxx_cv_func_sincos_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincos(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_sincos_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_sincos_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_sincos_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_sincos_use" >&6
-
- if test x$glibcxx_cv_func_sincos_use = x"yes"; then
-
-for ac_func in sincos
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _sincos declaration" >&5
-echo $ECHO_N "checking for _sincos declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__sincos_use+set} != xset; then
- if test "${glibcxx_cv_func__sincos_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincos(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__sincos_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__sincos_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__sincos_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__sincos_use" >&6
-
- if test x$glibcxx_cv_func__sincos_use = x"yes"; then
-
-for ac_func in _sincos
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for fpclass declaration" >&5
-echo $ECHO_N "checking for fpclass declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_fpclass_use+set} != xset; then
- if test "${glibcxx_cv_func_fpclass_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fpclass(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_fpclass_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_fpclass_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_fpclass_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_fpclass_use" >&6
-
- if test x$glibcxx_cv_func_fpclass_use = x"yes"; then
-
-for ac_func in fpclass
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _fpclass declaration" >&5
-echo $ECHO_N "checking for _fpclass declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__fpclass_use+set} != xset; then
- if test "${glibcxx_cv_func__fpclass_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fpclass(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__fpclass_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__fpclass_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__fpclass_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__fpclass_use" >&6
-
- if test x$glibcxx_cv_func__fpclass_use = x"yes"; then
-
-for ac_func in _fpclass
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for qfpclass declaration" >&5
-echo $ECHO_N "checking for qfpclass declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_qfpclass_use+set} != xset; then
- if test "${glibcxx_cv_func_qfpclass_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- qfpclass(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_qfpclass_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_qfpclass_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_qfpclass_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_qfpclass_use" >&6
-
- if test x$glibcxx_cv_func_qfpclass_use = x"yes"; then
-
-for ac_func in qfpclass
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _qfpclass declaration" >&5
-echo $ECHO_N "checking for _qfpclass declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__qfpclass_use+set} != xset; then
- if test "${glibcxx_cv_func__qfpclass_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _qfpclass(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__qfpclass_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__qfpclass_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__qfpclass_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__qfpclass_use" >&6
-
- if test x$glibcxx_cv_func__qfpclass_use = x"yes"; then
-
-for ac_func in _qfpclass
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for hypot declaration" >&5
-echo $ECHO_N "checking for hypot declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_hypot_use+set} != xset; then
- if test "${glibcxx_cv_func_hypot_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypot(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_hypot_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_hypot_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_hypot_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_hypot_use" >&6
-
- if test x$glibcxx_cv_func_hypot_use = x"yes"; then
-
-for ac_func in hypot
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _hypot declaration" >&5
-echo $ECHO_N "checking for _hypot declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__hypot_use+set} != xset; then
- if test "${glibcxx_cv_func__hypot_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypot(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__hypot_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__hypot_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__hypot_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__hypot_use" >&6
-
- if test x$glibcxx_cv_func__hypot_use = x"yes"; then
-
-for ac_func in _hypot
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for float trig functions" >&5
-echo $ECHO_N "checking for float trig functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func_float_trig_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-acosf (0); asinf (0); atanf (0); cosf (0); sinf (0); tanf (0); coshf (0); sinhf (0); tanhf (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_float_trig_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_float_trig_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_float_trig_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_float_trig_use" >&6
- if test x$glibcxx_cv_func_float_trig_use = x"yes"; then
-
-
-
-
-
-
-
-
-
-for ac_func in acosf asinf atanf cosf sinf tanf coshf sinhf tanhf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- echo "$as_me:$LINENO: checking for _float trig functions" >&5
-echo $ECHO_N "checking for _float trig functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func__float_trig_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_acosf (0); _asinf (0); _atanf (0); _cosf (0); _sinf (0); _tanf (0); _coshf (0); _sinhf (0); _tanhf (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__float_trig_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__float_trig_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__float_trig_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__float_trig_use" >&6
- if test x$glibcxx_cv_func__float_trig_use = x"yes"; then
-
-
-
-
-
-
-
-
-
-for ac_func in _acosf _asinf _atanf _cosf _sinf _tanf _coshf _sinhf _tanhf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for float round functions" >&5
-echo $ECHO_N "checking for float round functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func_float_round_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-ceilf (0); floorf (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_float_round_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_float_round_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_float_round_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_float_round_use" >&6
- if test x$glibcxx_cv_func_float_round_use = x"yes"; then
-
-
-for ac_func in ceilf floorf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- echo "$as_me:$LINENO: checking for _float round functions" >&5
-echo $ECHO_N "checking for _float round functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func__float_round_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_ceilf (0); _floorf (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__float_round_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__float_round_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__float_round_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__float_round_use" >&6
- if test x$glibcxx_cv_func__float_round_use = x"yes"; then
-
-
-for ac_func in _ceilf _floorf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for expf declaration" >&5
-echo $ECHO_N "checking for expf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_expf_use+set} != xset; then
- if test "${glibcxx_cv_func_expf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- expf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_expf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_expf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_expf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_expf_use" >&6
-
- if test x$glibcxx_cv_func_expf_use = x"yes"; then
-
-for ac_func in expf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _expf declaration" >&5
-echo $ECHO_N "checking for _expf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__expf_use+set} != xset; then
- if test "${glibcxx_cv_func__expf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _expf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__expf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__expf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__expf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__expf_use" >&6
-
- if test x$glibcxx_cv_func__expf_use = x"yes"; then
-
-for ac_func in _expf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for isnanf declaration" >&5
-echo $ECHO_N "checking for isnanf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isnanf_use+set} != xset; then
- if test "${glibcxx_cv_func_isnanf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnanf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isnanf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isnanf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isnanf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isnanf_use" >&6
-
- if test x$glibcxx_cv_func_isnanf_use = x"yes"; then
-
-for ac_func in isnanf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isnanf declaration" >&5
-echo $ECHO_N "checking for _isnanf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isnanf_use+set} != xset; then
- if test "${glibcxx_cv_func__isnanf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnanf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isnanf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isnanf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isnanf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isnanf_use" >&6
-
- if test x$glibcxx_cv_func__isnanf_use = x"yes"; then
-
-for ac_func in _isnanf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for isinff declaration" >&5
-echo $ECHO_N "checking for isinff declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isinff_use+set} != xset; then
- if test "${glibcxx_cv_func_isinff_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinff(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isinff_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isinff_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isinff_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isinff_use" >&6
-
- if test x$glibcxx_cv_func_isinff_use = x"yes"; then
-
-for ac_func in isinff
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isinff declaration" >&5
-echo $ECHO_N "checking for _isinff declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isinff_use+set} != xset; then
- if test "${glibcxx_cv_func__isinff_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinff(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isinff_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isinff_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isinff_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isinff_use" >&6
-
- if test x$glibcxx_cv_func__isinff_use = x"yes"; then
-
-for ac_func in _isinff
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for atan2f declaration" >&5
-echo $ECHO_N "checking for atan2f declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_atan2f_use+set} != xset; then
- if test "${glibcxx_cv_func_atan2f_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- atan2f(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_atan2f_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_atan2f_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_atan2f_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_atan2f_use" >&6
-
- if test x$glibcxx_cv_func_atan2f_use = x"yes"; then
-
-for ac_func in atan2f
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _atan2f declaration" >&5
-echo $ECHO_N "checking for _atan2f declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__atan2f_use+set} != xset; then
- if test "${glibcxx_cv_func__atan2f_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _atan2f(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__atan2f_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__atan2f_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__atan2f_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__atan2f_use" >&6
-
- if test x$glibcxx_cv_func__atan2f_use = x"yes"; then
-
-for ac_func in _atan2f
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for fabsf declaration" >&5
-echo $ECHO_N "checking for fabsf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_fabsf_use+set} != xset; then
- if test "${glibcxx_cv_func_fabsf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_fabsf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_fabsf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_fabsf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_fabsf_use" >&6
-
- if test x$glibcxx_cv_func_fabsf_use = x"yes"; then
-
-for ac_func in fabsf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _fabsf declaration" >&5
-echo $ECHO_N "checking for _fabsf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__fabsf_use+set} != xset; then
- if test "${glibcxx_cv_func__fabsf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__fabsf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__fabsf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__fabsf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__fabsf_use" >&6
-
- if test x$glibcxx_cv_func__fabsf_use = x"yes"; then
-
-for ac_func in _fabsf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for fmodf declaration" >&5
-echo $ECHO_N "checking for fmodf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_fmodf_use+set} != xset; then
- if test "${glibcxx_cv_func_fmodf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- fmodf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_fmodf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_fmodf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_fmodf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_fmodf_use" >&6
-
- if test x$glibcxx_cv_func_fmodf_use = x"yes"; then
-
-for ac_func in fmodf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _fmodf declaration" >&5
-echo $ECHO_N "checking for _fmodf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__fmodf_use+set} != xset; then
- if test "${glibcxx_cv_func__fmodf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _fmodf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__fmodf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__fmodf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__fmodf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__fmodf_use" >&6
-
- if test x$glibcxx_cv_func__fmodf_use = x"yes"; then
-
-for ac_func in _fmodf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for frexpf declaration" >&5
-echo $ECHO_N "checking for frexpf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_frexpf_use+set} != xset; then
- if test "${glibcxx_cv_func_frexpf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- frexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_frexpf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_frexpf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_frexpf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_frexpf_use" >&6
-
- if test x$glibcxx_cv_func_frexpf_use = x"yes"; then
-
-for ac_func in frexpf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _frexpf declaration" >&5
-echo $ECHO_N "checking for _frexpf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__frexpf_use+set} != xset; then
- if test "${glibcxx_cv_func__frexpf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _frexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__frexpf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__frexpf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__frexpf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__frexpf_use" >&6
-
- if test x$glibcxx_cv_func__frexpf_use = x"yes"; then
-
-for ac_func in _frexpf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for hypotf declaration" >&5
-echo $ECHO_N "checking for hypotf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_hypotf_use+set} != xset; then
- if test "${glibcxx_cv_func_hypotf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypotf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_hypotf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_hypotf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_hypotf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_hypotf_use" >&6
-
- if test x$glibcxx_cv_func_hypotf_use = x"yes"; then
-
-for ac_func in hypotf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _hypotf declaration" >&5
-echo $ECHO_N "checking for _hypotf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__hypotf_use+set} != xset; then
- if test "${glibcxx_cv_func__hypotf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypotf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__hypotf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__hypotf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__hypotf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__hypotf_use" >&6
-
- if test x$glibcxx_cv_func__hypotf_use = x"yes"; then
-
-for ac_func in _hypotf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for ldexpf declaration" >&5
-echo $ECHO_N "checking for ldexpf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_ldexpf_use+set} != xset; then
- if test "${glibcxx_cv_func_ldexpf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- ldexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_ldexpf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_ldexpf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_ldexpf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_ldexpf_use" >&6
-
- if test x$glibcxx_cv_func_ldexpf_use = x"yes"; then
-
-for ac_func in ldexpf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _ldexpf declaration" >&5
-echo $ECHO_N "checking for _ldexpf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__ldexpf_use+set} != xset; then
- if test "${glibcxx_cv_func__ldexpf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _ldexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__ldexpf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__ldexpf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__ldexpf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__ldexpf_use" >&6
-
- if test x$glibcxx_cv_func__ldexpf_use = x"yes"; then
-
-for ac_func in _ldexpf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for logf declaration" >&5
-echo $ECHO_N "checking for logf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_logf_use+set} != xset; then
- if test "${glibcxx_cv_func_logf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- logf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_logf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_logf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_logf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_logf_use" >&6
-
- if test x$glibcxx_cv_func_logf_use = x"yes"; then
-
-for ac_func in logf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _logf declaration" >&5
-echo $ECHO_N "checking for _logf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__logf_use+set} != xset; then
- if test "${glibcxx_cv_func__logf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _logf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__logf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__logf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__logf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__logf_use" >&6
-
- if test x$glibcxx_cv_func__logf_use = x"yes"; then
-
-for ac_func in _logf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for log10f declaration" >&5
-echo $ECHO_N "checking for log10f declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_log10f_use+set} != xset; then
- if test "${glibcxx_cv_func_log10f_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- log10f(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_log10f_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_log10f_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_log10f_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_log10f_use" >&6
-
- if test x$glibcxx_cv_func_log10f_use = x"yes"; then
-
-for ac_func in log10f
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _log10f declaration" >&5
-echo $ECHO_N "checking for _log10f declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__log10f_use+set} != xset; then
- if test "${glibcxx_cv_func__log10f_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _log10f(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__log10f_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__log10f_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__log10f_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__log10f_use" >&6
-
- if test x$glibcxx_cv_func__log10f_use = x"yes"; then
-
-for ac_func in _log10f
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for modff declaration" >&5
-echo $ECHO_N "checking for modff declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_modff_use+set} != xset; then
- if test "${glibcxx_cv_func_modff_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modff(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_modff_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_modff_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_modff_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_modff_use" >&6
-
- if test x$glibcxx_cv_func_modff_use = x"yes"; then
-
-for ac_func in modff
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _modff declaration" >&5
-echo $ECHO_N "checking for _modff declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__modff_use+set} != xset; then
- if test "${glibcxx_cv_func__modff_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modff(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__modff_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__modff_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__modff_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__modff_use" >&6
-
- if test x$glibcxx_cv_func__modff_use = x"yes"; then
-
-for ac_func in _modff
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for modf declaration" >&5
-echo $ECHO_N "checking for modf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_modf_use+set} != xset; then
- if test "${glibcxx_cv_func_modf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_modf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_modf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_modf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_modf_use" >&6
-
- if test x$glibcxx_cv_func_modf_use = x"yes"; then
-
-for ac_func in modf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _modf declaration" >&5
-echo $ECHO_N "checking for _modf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__modf_use+set} != xset; then
- if test "${glibcxx_cv_func__modf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__modf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__modf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__modf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__modf_use" >&6
-
- if test x$glibcxx_cv_func__modf_use = x"yes"; then
-
-for ac_func in _modf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for powf declaration" >&5
-echo $ECHO_N "checking for powf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_powf_use+set} != xset; then
- if test "${glibcxx_cv_func_powf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- powf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_powf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_powf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_powf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_powf_use" >&6
-
- if test x$glibcxx_cv_func_powf_use = x"yes"; then
-
-for ac_func in powf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _powf declaration" >&5
-echo $ECHO_N "checking for _powf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__powf_use+set} != xset; then
- if test "${glibcxx_cv_func__powf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _powf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__powf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__powf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__powf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__powf_use" >&6
-
- if test x$glibcxx_cv_func__powf_use = x"yes"; then
-
-for ac_func in _powf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for sqrtf declaration" >&5
-echo $ECHO_N "checking for sqrtf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_sqrtf_use+set} != xset; then
- if test "${glibcxx_cv_func_sqrtf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_sqrtf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_sqrtf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_sqrtf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_sqrtf_use" >&6
-
- if test x$glibcxx_cv_func_sqrtf_use = x"yes"; then
-
-for ac_func in sqrtf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _sqrtf declaration" >&5
-echo $ECHO_N "checking for _sqrtf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__sqrtf_use+set} != xset; then
- if test "${glibcxx_cv_func__sqrtf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__sqrtf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__sqrtf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__sqrtf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__sqrtf_use" >&6
-
- if test x$glibcxx_cv_func__sqrtf_use = x"yes"; then
-
-for ac_func in _sqrtf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for sincosf declaration" >&5
-echo $ECHO_N "checking for sincosf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_sincosf_use+set} != xset; then
- if test "${glibcxx_cv_func_sincosf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincosf(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_sincosf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_sincosf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_sincosf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_sincosf_use" >&6
-
- if test x$glibcxx_cv_func_sincosf_use = x"yes"; then
-
-for ac_func in sincosf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _sincosf declaration" >&5
-echo $ECHO_N "checking for _sincosf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__sincosf_use+set} != xset; then
- if test "${glibcxx_cv_func__sincosf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincosf(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__sincosf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__sincosf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__sincosf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__sincosf_use" >&6
-
- if test x$glibcxx_cv_func__sincosf_use = x"yes"; then
-
-for ac_func in _sincosf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for finitef declaration" >&5
-echo $ECHO_N "checking for finitef declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_finitef_use+set} != xset; then
- if test "${glibcxx_cv_func_finitef_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finitef(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_finitef_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_finitef_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_finitef_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_finitef_use" >&6
-
- if test x$glibcxx_cv_func_finitef_use = x"yes"; then
-
-for ac_func in finitef
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _finitef declaration" >&5
-echo $ECHO_N "checking for _finitef declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__finitef_use+set} != xset; then
- if test "${glibcxx_cv_func__finitef_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _finitef(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__finitef_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__finitef_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__finitef_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__finitef_use" >&6
-
- if test x$glibcxx_cv_func__finitef_use = x"yes"; then
-
-for ac_func in _finitef
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for long double trig functions" >&5
-echo $ECHO_N "checking for long double trig functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func_long_double_trig_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-acosl (0); asinl (0); atanl (0); cosl (0); sinl (0); tanl (0); coshl (0); sinhl (0); tanhl (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_long_double_trig_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_long_double_trig_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_long_double_trig_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_long_double_trig_use" >&6
- if test x$glibcxx_cv_func_long_double_trig_use = x"yes"; then
-
-
-
-
-
-
-
-
-
-for ac_func in acosl asinl atanl cosl sinl tanl coshl sinhl tanhl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- echo "$as_me:$LINENO: checking for _long double trig functions" >&5
-echo $ECHO_N "checking for _long double trig functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func__long_double_trig_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_acosl (0); _asinl (0); _atanl (0); _cosl (0); _sinl (0); _tanl (0); _coshl (0); _sinhl (0); _tanhl (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__long_double_trig_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__long_double_trig_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__long_double_trig_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__long_double_trig_use" >&6
- if test x$glibcxx_cv_func__long_double_trig_use = x"yes"; then
-
-
-
-
-
-
-
-
-
-for ac_func in _acosl _asinl _atanl _cosl _sinl _tanl _coshl _sinhl _tanhl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for long double round functions" >&5
-echo $ECHO_N "checking for long double round functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func_long_double_round_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-ceill (0); floorl (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_long_double_round_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_long_double_round_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_long_double_round_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_long_double_round_use" >&6
- if test x$glibcxx_cv_func_long_double_round_use = x"yes"; then
-
-
-for ac_func in ceill floorl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- echo "$as_me:$LINENO: checking for _long double round functions" >&5
-echo $ECHO_N "checking for _long double round functions... $ECHO_C" >&6
- if test "${glibcxx_cv_func__long_double_round_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_ceill (0); _floorl (0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__long_double_round_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__long_double_round_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__long_double_round_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__long_double_round_use" >&6
- if test x$glibcxx_cv_func__long_double_round_use = x"yes"; then
-
-
-for ac_func in _ceill _floorl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for isnanl declaration" >&5
-echo $ECHO_N "checking for isnanl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isnanl_use+set} != xset; then
- if test "${glibcxx_cv_func_isnanl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnanl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isnanl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isnanl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isnanl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isnanl_use" >&6
-
- if test x$glibcxx_cv_func_isnanl_use = x"yes"; then
-
-for ac_func in isnanl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isnanl declaration" >&5
-echo $ECHO_N "checking for _isnanl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isnanl_use+set} != xset; then
- if test "${glibcxx_cv_func__isnanl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnanl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isnanl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isnanl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isnanl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isnanl_use" >&6
-
- if test x$glibcxx_cv_func__isnanl_use = x"yes"; then
-
-for ac_func in _isnanl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for isinfl declaration" >&5
-echo $ECHO_N "checking for isinfl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_isinfl_use+set} != xset; then
- if test "${glibcxx_cv_func_isinfl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinfl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_isinfl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_isinfl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_isinfl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_isinfl_use" >&6
-
- if test x$glibcxx_cv_func_isinfl_use = x"yes"; then
-
-for ac_func in isinfl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _isinfl declaration" >&5
-echo $ECHO_N "checking for _isinfl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__isinfl_use+set} != xset; then
- if test "${glibcxx_cv_func__isinfl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinfl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__isinfl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__isinfl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__isinfl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__isinfl_use" >&6
-
- if test x$glibcxx_cv_func__isinfl_use = x"yes"; then
-
-for ac_func in _isinfl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for copysignl declaration" >&5
-echo $ECHO_N "checking for copysignl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_copysignl_use+set} != xset; then
- if test "${glibcxx_cv_func_copysignl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- copysignl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_copysignl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_copysignl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_copysignl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_copysignl_use" >&6
-
- if test x$glibcxx_cv_func_copysignl_use = x"yes"; then
-
-for ac_func in copysignl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _copysignl declaration" >&5
-echo $ECHO_N "checking for _copysignl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__copysignl_use+set} != xset; then
- if test "${glibcxx_cv_func__copysignl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _copysignl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__copysignl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__copysignl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__copysignl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__copysignl_use" >&6
-
- if test x$glibcxx_cv_func__copysignl_use = x"yes"; then
-
-for ac_func in _copysignl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for atan2l declaration" >&5
-echo $ECHO_N "checking for atan2l declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_atan2l_use+set} != xset; then
- if test "${glibcxx_cv_func_atan2l_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- atan2l(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_atan2l_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_atan2l_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_atan2l_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_atan2l_use" >&6
-
- if test x$glibcxx_cv_func_atan2l_use = x"yes"; then
-
-for ac_func in atan2l
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _atan2l declaration" >&5
-echo $ECHO_N "checking for _atan2l declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__atan2l_use+set} != xset; then
- if test "${glibcxx_cv_func__atan2l_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _atan2l(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__atan2l_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__atan2l_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__atan2l_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__atan2l_use" >&6
-
- if test x$glibcxx_cv_func__atan2l_use = x"yes"; then
-
-for ac_func in _atan2l
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for expl declaration" >&5
-echo $ECHO_N "checking for expl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_expl_use+set} != xset; then
- if test "${glibcxx_cv_func_expl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- expl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_expl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_expl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_expl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_expl_use" >&6
-
- if test x$glibcxx_cv_func_expl_use = x"yes"; then
-
-for ac_func in expl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _expl declaration" >&5
-echo $ECHO_N "checking for _expl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__expl_use+set} != xset; then
- if test "${glibcxx_cv_func__expl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _expl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__expl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__expl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__expl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__expl_use" >&6
-
- if test x$glibcxx_cv_func__expl_use = x"yes"; then
-
-for ac_func in _expl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for fabsl declaration" >&5
-echo $ECHO_N "checking for fabsl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_fabsl_use+set} != xset; then
- if test "${glibcxx_cv_func_fabsl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_fabsl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_fabsl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_fabsl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_fabsl_use" >&6
-
- if test x$glibcxx_cv_func_fabsl_use = x"yes"; then
-
-for ac_func in fabsl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _fabsl declaration" >&5
-echo $ECHO_N "checking for _fabsl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__fabsl_use+set} != xset; then
- if test "${glibcxx_cv_func__fabsl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__fabsl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__fabsl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__fabsl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__fabsl_use" >&6
-
- if test x$glibcxx_cv_func__fabsl_use = x"yes"; then
-
-for ac_func in _fabsl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for fmodl declaration" >&5
-echo $ECHO_N "checking for fmodl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_fmodl_use+set} != xset; then
- if test "${glibcxx_cv_func_fmodl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- fmodl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_fmodl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_fmodl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_fmodl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_fmodl_use" >&6
-
- if test x$glibcxx_cv_func_fmodl_use = x"yes"; then
-
-for ac_func in fmodl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _fmodl declaration" >&5
-echo $ECHO_N "checking for _fmodl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__fmodl_use+set} != xset; then
- if test "${glibcxx_cv_func__fmodl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _fmodl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__fmodl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__fmodl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__fmodl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__fmodl_use" >&6
-
- if test x$glibcxx_cv_func__fmodl_use = x"yes"; then
-
-for ac_func in _fmodl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for frexpl declaration" >&5
-echo $ECHO_N "checking for frexpl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_frexpl_use+set} != xset; then
- if test "${glibcxx_cv_func_frexpl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- frexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_frexpl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_frexpl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_frexpl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_frexpl_use" >&6
-
- if test x$glibcxx_cv_func_frexpl_use = x"yes"; then
-
-for ac_func in frexpl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _frexpl declaration" >&5
-echo $ECHO_N "checking for _frexpl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__frexpl_use+set} != xset; then
- if test "${glibcxx_cv_func__frexpl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _frexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__frexpl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__frexpl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__frexpl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__frexpl_use" >&6
-
- if test x$glibcxx_cv_func__frexpl_use = x"yes"; then
-
-for ac_func in _frexpl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for hypotl declaration" >&5
-echo $ECHO_N "checking for hypotl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_hypotl_use+set} != xset; then
- if test "${glibcxx_cv_func_hypotl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypotl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_hypotl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_hypotl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_hypotl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_hypotl_use" >&6
-
- if test x$glibcxx_cv_func_hypotl_use = x"yes"; then
-
-for ac_func in hypotl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _hypotl declaration" >&5
-echo $ECHO_N "checking for _hypotl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__hypotl_use+set} != xset; then
- if test "${glibcxx_cv_func__hypotl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypotl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__hypotl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__hypotl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__hypotl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__hypotl_use" >&6
-
- if test x$glibcxx_cv_func__hypotl_use = x"yes"; then
-
-for ac_func in _hypotl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for ldexpl declaration" >&5
-echo $ECHO_N "checking for ldexpl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_ldexpl_use+set} != xset; then
- if test "${glibcxx_cv_func_ldexpl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- ldexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_ldexpl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_ldexpl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_ldexpl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_ldexpl_use" >&6
-
- if test x$glibcxx_cv_func_ldexpl_use = x"yes"; then
-
-for ac_func in ldexpl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _ldexpl declaration" >&5
-echo $ECHO_N "checking for _ldexpl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__ldexpl_use+set} != xset; then
- if test "${glibcxx_cv_func__ldexpl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _ldexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__ldexpl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__ldexpl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__ldexpl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__ldexpl_use" >&6
-
- if test x$glibcxx_cv_func__ldexpl_use = x"yes"; then
-
-for ac_func in _ldexpl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for logl declaration" >&5
-echo $ECHO_N "checking for logl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_logl_use+set} != xset; then
- if test "${glibcxx_cv_func_logl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- logl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_logl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_logl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_logl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_logl_use" >&6
-
- if test x$glibcxx_cv_func_logl_use = x"yes"; then
-
-for ac_func in logl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _logl declaration" >&5
-echo $ECHO_N "checking for _logl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__logl_use+set} != xset; then
- if test "${glibcxx_cv_func__logl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _logl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__logl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__logl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__logl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__logl_use" >&6
-
- if test x$glibcxx_cv_func__logl_use = x"yes"; then
-
-for ac_func in _logl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for log10l declaration" >&5
-echo $ECHO_N "checking for log10l declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_log10l_use+set} != xset; then
- if test "${glibcxx_cv_func_log10l_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- log10l(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_log10l_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_log10l_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_log10l_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_log10l_use" >&6
-
- if test x$glibcxx_cv_func_log10l_use = x"yes"; then
-
-for ac_func in log10l
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _log10l declaration" >&5
-echo $ECHO_N "checking for _log10l declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__log10l_use+set} != xset; then
- if test "${glibcxx_cv_func__log10l_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _log10l(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__log10l_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__log10l_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__log10l_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__log10l_use" >&6
-
- if test x$glibcxx_cv_func__log10l_use = x"yes"; then
-
-for ac_func in _log10l
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for modfl declaration" >&5
-echo $ECHO_N "checking for modfl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_modfl_use+set} != xset; then
- if test "${glibcxx_cv_func_modfl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modfl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_modfl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_modfl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_modfl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_modfl_use" >&6
-
- if test x$glibcxx_cv_func_modfl_use = x"yes"; then
-
-for ac_func in modfl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _modfl declaration" >&5
-echo $ECHO_N "checking for _modfl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__modfl_use+set} != xset; then
- if test "${glibcxx_cv_func__modfl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modfl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__modfl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__modfl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__modfl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__modfl_use" >&6
-
- if test x$glibcxx_cv_func__modfl_use = x"yes"; then
-
-for ac_func in _modfl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for powl declaration" >&5
-echo $ECHO_N "checking for powl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_powl_use+set} != xset; then
- if test "${glibcxx_cv_func_powl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- powl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_powl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_powl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_powl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_powl_use" >&6
-
- if test x$glibcxx_cv_func_powl_use = x"yes"; then
-
-for ac_func in powl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _powl declaration" >&5
-echo $ECHO_N "checking for _powl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__powl_use+set} != xset; then
- if test "${glibcxx_cv_func__powl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _powl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__powl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__powl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__powl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__powl_use" >&6
-
- if test x$glibcxx_cv_func__powl_use = x"yes"; then
-
-for ac_func in _powl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for sqrtl declaration" >&5
-echo $ECHO_N "checking for sqrtl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_sqrtl_use+set} != xset; then
- if test "${glibcxx_cv_func_sqrtl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_sqrtl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_sqrtl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_sqrtl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_sqrtl_use" >&6
-
- if test x$glibcxx_cv_func_sqrtl_use = x"yes"; then
-
-for ac_func in sqrtl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _sqrtl declaration" >&5
-echo $ECHO_N "checking for _sqrtl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__sqrtl_use+set} != xset; then
- if test "${glibcxx_cv_func__sqrtl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__sqrtl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__sqrtl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__sqrtl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__sqrtl_use" >&6
-
- if test x$glibcxx_cv_func__sqrtl_use = x"yes"; then
-
-for ac_func in _sqrtl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for sincosl declaration" >&5
-echo $ECHO_N "checking for sincosl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_sincosl_use+set} != xset; then
- if test "${glibcxx_cv_func_sincosl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincosl(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_sincosl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_sincosl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_sincosl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_sincosl_use" >&6
-
- if test x$glibcxx_cv_func_sincosl_use = x"yes"; then
-
-for ac_func in sincosl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _sincosl declaration" >&5
-echo $ECHO_N "checking for _sincosl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__sincosl_use+set} != xset; then
- if test "${glibcxx_cv_func__sincosl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincosl(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__sincosl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__sincosl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__sincosl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__sincosl_use" >&6
-
- if test x$glibcxx_cv_func__sincosl_use = x"yes"; then
-
-for ac_func in _sincosl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- echo "$as_me:$LINENO: checking for finitel declaration" >&5
-echo $ECHO_N "checking for finitel declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_finitel_use+set} != xset; then
- if test "${glibcxx_cv_func_finitel_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finitel(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_finitel_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_finitel_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_finitel_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_finitel_use" >&6
-
- if test x$glibcxx_cv_func_finitel_use = x"yes"; then
-
-for ac_func in finitel
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
-
- echo "$as_me:$LINENO: checking for _finitel declaration" >&5
-echo $ECHO_N "checking for _finitel declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func__finitel_use+set} != xset; then
- if test "${glibcxx_cv_func__finitel_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+ # GLIBCXX_CHECK_MATH_SUPPORT
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBM 1
_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-int
-main ()
-{
- _finitel(0);
- ;
- return 0;
-}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISINF 1
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func__finitel_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func__finitel_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func__finitel_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func__finitel_use" >&6
-
- if test x$glibcxx_cv_func__finitel_use = x"yes"; then
-for ac_func in _finitel
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISNAN 1
_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_FINITE 1
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_COPYSIGN 1
_ACEOF
-fi
-done
-
- fi
- fi
-
-
-
-
-
- LIBS="$ac_save_LIBS"
- CXXFLAGS="$ac_save_CXXFLAGS"
-
-
-
- echo "$as_me:$LINENO: checking for __builtin_abs declaration" >&5
-echo $ECHO_N "checking for __builtin_abs declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_abs_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_abs_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_abs(0);
- ;
- return 0;
-}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_SINCOS 1
_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_abs_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-glibcxx_cv_func___builtin_abs_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_abs_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_abs_use" >&6
- if test x$glibcxx_cv_func___builtin_abs_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_abs linkage" >&5
-echo $ECHO_N "checking for __builtin_abs linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_abs_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_abs_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_abs(0);
- ;
- return 0;
-}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_HYPOT 1
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_abs_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_abs_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_abs_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_abs_link" >&6
-
- if test x$glibcxx_cv_func___builtin_abs_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ # GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_ABS 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_fabsf declaration" >&5
-echo $ECHO_N "checking for __builtin_fabsf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabsf_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabsf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabsf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabsf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabsf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabsf_use" >&6
- if test x$glibcxx_cv_func___builtin_fabsf_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_fabsf linkage" >&5
-echo $ECHO_N "checking for __builtin_fabsf linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabsf_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabsf_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabsf_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabsf_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabsf_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabsf_link" >&6
-
- if test x$glibcxx_cv_func___builtin_fabsf_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_FABSF 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_fabs declaration" >&5
-echo $ECHO_N "checking for __builtin_fabs declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabs_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabs_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabs(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabs_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabs_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabs_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabs_use" >&6
- if test x$glibcxx_cv_func___builtin_fabs_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_fabs linkage" >&5
-echo $ECHO_N "checking for __builtin_fabs linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabs_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabs_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabs(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabs_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabs_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabs_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabs_link" >&6
-
- if test x$glibcxx_cv_func___builtin_fabs_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_FABS 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_fabsl declaration" >&5
-echo $ECHO_N "checking for __builtin_fabsl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabsl_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabsl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabsl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabsl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabsl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabsl_use" >&6
- if test x$glibcxx_cv_func___builtin_fabsl_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_fabsl linkage" >&5
-echo $ECHO_N "checking for __builtin_fabsl linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_fabsl_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_fabsl_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_fabsl_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_fabsl_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_fabsl_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_fabsl_link" >&6
-
- if test x$glibcxx_cv_func___builtin_fabsl_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_FABSL 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_labs declaration" >&5
-echo $ECHO_N "checking for __builtin_labs declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_labs_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_labs_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_labs(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_labs_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_labs_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_labs_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_labs_use" >&6
- if test x$glibcxx_cv_func___builtin_labs_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_labs linkage" >&5
-echo $ECHO_N "checking for __builtin_labs linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_labs_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_labs_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_labs(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_labs_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_labs_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_labs_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_labs_link" >&6
-
- if test x$glibcxx_cv_func___builtin_labs_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_LABS 1
_ACEOF
- fi
-
- fi
-
-
-
- echo "$as_me:$LINENO: checking for __builtin_sqrtf declaration" >&5
-echo $ECHO_N "checking for __builtin_sqrtf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrtf_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrtf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrtf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrtf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrtf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrtf_use" >&6
- if test x$glibcxx_cv_func___builtin_sqrtf_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sqrtf linkage" >&5
-echo $ECHO_N "checking for __builtin_sqrtf linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrtf_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrtf_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrtf_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrtf_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrtf_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrtf_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sqrtf_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SQRTF 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_sqrt declaration" >&5
-echo $ECHO_N "checking for __builtin_sqrt declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrt_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrt_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrt(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrt_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrt_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrt_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrt_use" >&6
- if test x$glibcxx_cv_func___builtin_sqrt_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sqrt linkage" >&5
-echo $ECHO_N "checking for __builtin_sqrt linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrt_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrt_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrt(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrt_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrt_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrt_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrt_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sqrt_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SQRT 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_sqrtl declaration" >&5
-echo $ECHO_N "checking for __builtin_sqrtl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrtl_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrtl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrtl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrtl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrtl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrtl_use" >&6
- if test x$glibcxx_cv_func___builtin_sqrtl_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sqrtl linkage" >&5
-echo $ECHO_N "checking for __builtin_sqrtl linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sqrtl_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sqrtl_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sqrtl_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sqrtl_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sqrtl_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sqrtl_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sqrtl_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SQRTL 1
_ACEOF
- fi
-
- fi
-
-
-
- echo "$as_me:$LINENO: checking for __builtin_sinf declaration" >&5
-echo $ECHO_N "checking for __builtin_sinf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sinf_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sinf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sinf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sinf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sinf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sinf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sinf_use" >&6
- if test x$glibcxx_cv_func___builtin_sinf_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sinf linkage" >&5
-echo $ECHO_N "checking for __builtin_sinf linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sinf_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sinf_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sinf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sinf_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sinf_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sinf_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sinf_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sinf_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SINF 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_sin declaration" >&5
-echo $ECHO_N "checking for __builtin_sin declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sin_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sin_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sin(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sin_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sin_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sin_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sin_use" >&6
- if test x$glibcxx_cv_func___builtin_sin_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sin linkage" >&5
-echo $ECHO_N "checking for __builtin_sin linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sin_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sin_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sin(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sin_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sin_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sin_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sin_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sin_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SIN 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_sinl declaration" >&5
-echo $ECHO_N "checking for __builtin_sinl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sinl_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sinl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sinl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sinl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sinl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sinl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sinl_use" >&6
- if test x$glibcxx_cv_func___builtin_sinl_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_sinl linkage" >&5
-echo $ECHO_N "checking for __builtin_sinl linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_sinl_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_sinl_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_sinl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_sinl_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_sinl_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_sinl_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_sinl_link" >&6
-
- if test x$glibcxx_cv_func___builtin_sinl_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_SINL 1
_ACEOF
- fi
-
- fi
-
-
-
- echo "$as_me:$LINENO: checking for __builtin_cosf declaration" >&5
-echo $ECHO_N "checking for __builtin_cosf declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cosf_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cosf_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cosf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cosf_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cosf_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cosf_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cosf_use" >&6
- if test x$glibcxx_cv_func___builtin_cosf_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_cosf linkage" >&5
-echo $ECHO_N "checking for __builtin_cosf linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cosf_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cosf_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cosf(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cosf_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cosf_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cosf_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cosf_link" >&6
-
- if test x$glibcxx_cv_func___builtin_cosf_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_COSF 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_cos declaration" >&5
-echo $ECHO_N "checking for __builtin_cos declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cos_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cos_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cos(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cos_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cos_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cos_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cos_use" >&6
- if test x$glibcxx_cv_func___builtin_cos_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_cos linkage" >&5
-echo $ECHO_N "checking for __builtin_cos linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cos_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cos_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cos(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cos_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cos_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cos_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cos_link" >&6
-
- if test x$glibcxx_cv_func___builtin_cos_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_COS 1
_ACEOF
- fi
-
- fi
-
-
- echo "$as_me:$LINENO: checking for __builtin_cosl declaration" >&5
-echo $ECHO_N "checking for __builtin_cosl declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cosl_use+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cosl_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cosl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cosl_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cosl_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cosl_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cosl_use" >&6
- if test x$glibcxx_cv_func___builtin_cosl_use = x"yes"; then
- echo "$as_me:$LINENO: checking for __builtin_cosl linkage" >&5
-echo $ECHO_N "checking for __builtin_cosl linkage... $ECHO_C" >&6
- if test x${glibcxx_cv_func___builtin_cosl_link+set} != xset; then
- if test "${glibcxx_cv_func___builtin_cosl_link+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- __builtin_cosl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func___builtin_cosl_link=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func___builtin_cosl_link=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func___builtin_cosl_link" >&5
-echo "${ECHO_T}$glibcxx_cv_func___builtin_cosl_link" >&6
-
- if test x$glibcxx_cv_func___builtin_cosl_link = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE___BUILTIN_COSL 1
_ACEOF
- fi
-
- fi
-
-
-
-
-echo "$as_me:$LINENO: checking for main in -lm" >&5
-echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6
-if test "${ac_cv_lib_m_main+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-main ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_m_main=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_m_main=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5
-echo "${ECHO_T}$ac_cv_lib_m_main" >&6
-if test $ac_cv_lib_m_main = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
- LIBS="-lm $LIBS"
-
-fi
-
-
-for ac_func in copysignf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
-fi
-done
-
-
-
-for ac_func in __signbit
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
-fi
-done
-
-
-
-for ac_func in __signbitf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
-fi
-done
-
-
- if test x$ac_cv_func_copysignl = x"yes"; then
-
-for ac_func in __signbitl
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
-fi
-done
-
- fi
-
- # Used in libmath/Makefile.am.
- if test -n "$LIBMATHOBJS"; then
- need_libmath=yes
- fi
-
-
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
-
-
- echo "$as_me:$LINENO: checking for strtold declaration" >&5
-echo $ECHO_N "checking for strtold declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_strtold_use+set} != xset; then
- if test "${glibcxx_cv_func_strtold_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- strtold(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_strtold_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_strtold_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_strtold_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_strtold_use" >&6
- if test x$glibcxx_cv_func_strtold_use = x"yes"; then
-
-for ac_func in strtold
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
-
-
-
- echo "$as_me:$LINENO: checking for strtof declaration" >&5
-echo $ECHO_N "checking for strtof declaration... $ECHO_C" >&6
- if test x${glibcxx_cv_func_strtof_use+set} != xset; then
- if test "${glibcxx_cv_func_strtof_use+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- strtof(0, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_func_strtof_use=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_func_strtof_use=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- echo "$as_me:$LINENO: result: $glibcxx_cv_func_strtof_use" >&5
-echo "${ECHO_T}$glibcxx_cv_func_strtof_use" >&6
- if test x$glibcxx_cv_func_strtof_use = x"yes"; then
-
-for ac_func in strtof
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
-
-
-
- CXXFLAGS="$ac_save_CXXFLAGS"
-
-
- echo "$as_me:$LINENO: checking for S_ISREG or S_IFREG" >&5
-echo $ECHO_N "checking for S_ISREG or S_IFREG... $ECHO_C" >&6
- if test "${glibcxx_cv_S_ISREG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat buffer;
- fstat(0, &buffer);
- S_ISREG(buffer.st_mode);
- ;
- return 0;
-}
+ # GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
+ # GLIBCXX_CHECK_STDLIB_SUPPORT
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_COPYSIGN 1
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_S_ISREG=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_S_ISREG=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
- if test "${glibcxx_cv_S_IFREG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
- if test x$gcc_no_link = xyes; then
- { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
-echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
- { (exit 1); exit 1; }; }
-fi
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat buffer;
- fstat(0, &buffer);
- S_IFREG & buffer.st_mode;
- ;
- return 0;
-}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_COPYSIGNF 1
_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- 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'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- glibcxx_cv_S_IFREG=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-glibcxx_cv_S_IFREG=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
- res=no
- if test $glibcxx_cv_S_ISREG = yes; then
-
-cat >>confdefs.h <<\_ACEOF
+ # GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_S_ISREG 1
_ACEOF
- res=S_ISREG
- elif test $glibcxx_cv_S_IFREG = yes; then
-
-cat >>confdefs.h <<\_ACEOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_S_IFREG 1
_ACEOF
- res=S_IFREG
- fi
- echo "$as_me:$LINENO: result: $res" >&5
-echo "${ECHO_T}$res" >&6
-
cat >>confdefs.h <<\_ACEOF
#define HAVE_WRITEV 1
_ACEOF
@@ -75071,7 +54509,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -76089,7 +55527,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -77075,7 +56513,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -98460,7 +77898,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -99307,7 +78745,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -100203,7 +79641,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -101491,7 +80929,7 @@ echo "${ECHO_T}$glibcxx_cv_WRITEV" >&6
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -102229,7 +81667,7 @@ _ACEOF
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -102732,7 +82170,7 @@ done
echo $ECHO_N "checking for ld version... $ECHO_C" >&6
ldver=`$LD --version 2>/dev/null | head -1 | \
- sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
+ sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'`
glibcxx_gnu_ld_version=`echo $ldver | \
$AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
@@ -105177,6 +84615,17 @@ fi
+if test $enable_cheaders = c_global; then
+ GLIBCXX_C_HEADERS_C_GLOBAL_TRUE=
+ GLIBCXX_C_HEADERS_C_GLOBAL_FALSE='#'
+else
+ GLIBCXX_C_HEADERS_C_GLOBAL_TRUE='#'
+ GLIBCXX_C_HEADERS_C_GLOBAL_FALSE=
+fi
+
+
+
+
if test $c_compatibility = yes; then
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE=
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE='#'
@@ -105188,6 +84637,17 @@ fi
+if test $c_extra = yes; then
+ GLIBCXX_C_HEADERS_EXTRA_TRUE=
+ GLIBCXX_C_HEADERS_EXTRA_FALSE='#'
+else
+ GLIBCXX_C_HEADERS_EXTRA_TRUE='#'
+ GLIBCXX_C_HEADERS_EXTRA_FALSE=
+fi
+
+
+
+
if test $enable_libstdcxx_debug = yes; then
GLIBCXX_BUILD_DEBUG_TRUE=
GLIBCXX_BUILD_DEBUG_FALSE='#'
@@ -105598,6 +85058,13 @@ echo "$as_me: error: conditional \"GLIBCXX_C_HEADERS_C_STD\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${GLIBCXX_C_HEADERS_C_GLOBAL_TRUE}" && test -z "${GLIBCXX_C_HEADERS_C_GLOBAL_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_C_HEADERS_C_GLOBAL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GLIBCXX_C_HEADERS_C_GLOBAL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE}" && test -z "${GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_C_HEADERS_COMPATIBILITY\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -105605,6 +85072,13 @@ echo "$as_me: error: conditional \"GLIBCXX_C_HEADERS_COMPATIBILITY\" was never d
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${GLIBCXX_C_HEADERS_EXTRA_TRUE}" && test -z "${GLIBCXX_C_HEADERS_EXTRA_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_C_HEADERS_EXTRA\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GLIBCXX_C_HEADERS_EXTRA\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${GLIBCXX_BUILD_DEBUG_TRUE}" && test -z "${GLIBCXX_BUILD_DEBUG_FALSE}"; then
{ { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_BUILD_DEBUG\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
@@ -106305,8 +85779,12 @@ s,@GLIBCXX_C_HEADERS_C_TRUE@,$GLIBCXX_C_HEADERS_C_TRUE,;t t
s,@GLIBCXX_C_HEADERS_C_FALSE@,$GLIBCXX_C_HEADERS_C_FALSE,;t t
s,@GLIBCXX_C_HEADERS_C_STD_TRUE@,$GLIBCXX_C_HEADERS_C_STD_TRUE,;t t
s,@GLIBCXX_C_HEADERS_C_STD_FALSE@,$GLIBCXX_C_HEADERS_C_STD_FALSE,;t t
+s,@GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@,$GLIBCXX_C_HEADERS_C_GLOBAL_TRUE,;t t
+s,@GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@,$GLIBCXX_C_HEADERS_C_GLOBAL_FALSE,;t t
s,@GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@,$GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE,;t t
s,@GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@,$GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE,;t t
+s,@GLIBCXX_C_HEADERS_EXTRA_TRUE@,$GLIBCXX_C_HEADERS_EXTRA_TRUE,;t t
+s,@GLIBCXX_C_HEADERS_EXTRA_FALSE@,$GLIBCXX_C_HEADERS_EXTRA_FALSE,;t t
s,@DEBUG_FLAGS@,$DEBUG_FLAGS,;t t
s,@GLIBCXX_BUILD_DEBUG_TRUE@,$GLIBCXX_BUILD_DEBUG_TRUE,;t t
s,@GLIBCXX_BUILD_DEBUG_FALSE@,$GLIBCXX_BUILD_DEBUG_FALSE,;t t
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
index ef4d1de4c02..4a0b4dbcbf7 100644
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -64,7 +64,7 @@
# Try to guess a default cpu_include_dir based on the name of the CPU. We
# cannot do this for os_include_dir; there are too many portable operating
# systems out there. :-)
-c_model=c_std
+c_model=c_global
c_compatibility=no
atomic_word_dir=cpu/generic
atomicity_dir="cpu/generic"
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
index ff8db779735..cbfc2d98044 100644
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -50,12 +50,36 @@ case "${host}" in
memory.h stdint.h stdlib.h strings.h string.h unistd.h \
wchar.h wctype.h machine/endian.h sys/ioctl.h sys/param.h \
sys/resource.h sys/stat.h sys/time.h sys/types.h sys/uio.h])
- GLIBCXX_CHECK_LINKER_FEATURES
- GLIBCXX_CHECK_MATH_SUPPORT
- GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
- GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
- GLIBCXX_CHECK_STDLIB_SUPPORT
- GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
+ # GLIBCXX_CHECK_MATH_SUPPORT
+ AC_DEFINE(HAVE_LIBM)
+ AC_DEFINE(HAVE_ISINF)
+ AC_DEFINE(HAVE_ISNAN)
+ AC_DEFINE(HAVE_FINITE)
+ AC_DEFINE(HAVE_COPYSIGN)
+ AC_DEFINE(HAVE_SINCOS)
+ AC_DEFINE(HAVE_HYPOT)
+ # GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
+ AC_DEFINE(HAVE___BUILTIN_ABS)
+ AC_DEFINE(HAVE___BUILTIN_FABSF)
+ AC_DEFINE(HAVE___BUILTIN_FABS)
+ AC_DEFINE(HAVE___BUILTIN_FABSL)
+ AC_DEFINE(HAVE___BUILTIN_LABS)
+ AC_DEFINE(HAVE___BUILTIN_SQRTF)
+ AC_DEFINE(HAVE___BUILTIN_SQRT)
+ AC_DEFINE(HAVE___BUILTIN_SQRTL)
+ AC_DEFINE(HAVE___BUILTIN_SINF)
+ AC_DEFINE(HAVE___BUILTIN_SIN)
+ AC_DEFINE(HAVE___BUILTIN_SINL)
+ AC_DEFINE(HAVE___BUILTIN_COSF)
+ AC_DEFINE(HAVE___BUILTIN_COS)
+ AC_DEFINE(HAVE___BUILTIN_COSL)
+ # GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
+ # GLIBCXX_CHECK_STDLIB_SUPPORT
+ AC_DEFINE(HAVE_COPYSIGN)
+ AC_DEFINE(HAVE_COPYSIGNF)
+ # GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
+ AC_DEFINE(HAVE_S_ISREG)
+ AC_DEFINE(HAVE_S_IFREG)
AC_DEFINE(HAVE_WRITEV)
;;
diff --git a/libstdc++-v3/docs/html/configopts.html b/libstdc++-v3/docs/html/configopts.html
index 0a819f072c3..215a1ab3b81 100644
--- a/libstdc++-v3/docs/html/configopts.html
+++ b/libstdc++-v3/docs/html/configopts.html
@@ -143,9 +143,11 @@ options</a></h1>
</dd>
<dt><code>--enable-cheaders=OPTION </code></dt>
- <dd><p>This allows the user to define what kind of C headers are
- used. Options are c and c_std. These correspond to the source
- directory's include/c and include/c_std. The default is c_std.
+ <dd><p>This allows the user to define the approach taken for C header
+ compatibility with C++. Options are c, c_std, and c_global.
+ These correspond to the source directory's include/c,
+ include/c_std, and include/c_global, and may also include
+ include/c_compatibility. The default is c_global.
</p>
</dd>
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 43c9f8ca3f8..9cc39c16eba 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -29,7 +29,9 @@ std_srcdir = ${glibcxx_srcdir}/include/std
std_builddir = .
std_headers = \
${std_srcdir}/algorithm \
+ ${std_srcdir}/array \
${std_srcdir}/bitset \
+ ${std_srcdir}/c++0x_warning.h \
${std_srcdir}/complex \
${std_srcdir}/deque \
${std_srcdir}/fstream \
@@ -48,12 +50,18 @@ std_headers = \
${std_srcdir}/numeric \
${std_srcdir}/ostream \
${std_srcdir}/queue \
+ ${std_srcdir}/random \
+ ${std_srcdir}/regex \
${std_srcdir}/set \
${std_srcdir}/sstream \
${std_srcdir}/stack \
${std_srcdir}/stdexcept \
${std_srcdir}/streambuf \
${std_srcdir}/string \
+ ${std_srcdir}/tuple \
+ ${std_srcdir}/type_traits \
+ ${std_srcdir}/unordered_map \
+ ${std_srcdir}/unordered_set \
${std_srcdir}/utility \
${std_srcdir}/valarray \
${std_srcdir}/vector
@@ -103,6 +111,7 @@ bits_headers = \
${bits_srcdir}/stl_iterator_base_types.h \
${bits_srcdir}/stl_list.h \
${bits_srcdir}/stl_map.h \
+ ${bits_srcdir}/stl_memory.h \
${bits_srcdir}/stl_multimap.h \
${bits_srcdir}/stl_multiset.h \
${bits_srcdir}/stl_numeric.h \
@@ -164,7 +173,6 @@ backward_headers = \
${backward_srcdir}/strstream \
${backward_srcdir}/backward_warning.h
-
pb_srcdir = ${glibcxx_srcdir}/include/ext/pb_ds
pb_builddir = ./ext/pb_ds
@@ -525,9 +533,8 @@ tr1_srcdir = ${glibcxx_srcdir}/include/tr1
tr1_builddir = ./tr1
tr1_headers = \
${tr1_srcdir}/array \
- ${tr1_srcdir}/bind_repeat.h \
- ${tr1_srcdir}/bind_iterate.h \
${tr1_srcdir}/boost_shared_ptr.h \
+ ${tr1_srcdir}/ccomplex \
${tr1_srcdir}/cctype \
${tr1_srcdir}/cfenv \
${tr1_srcdir}/cfloat \
@@ -536,6 +543,7 @@ tr1_headers = \
${tr1_srcdir}/cmath \
${tr1_srcdir}/common.h \
${tr1_srcdir}/complex \
+ ${tr1_srcdir}/complex.h \
${tr1_srcdir}/cstdarg \
${tr1_srcdir}/cstdbool \
${tr1_srcdir}/cstdint \
@@ -550,19 +558,15 @@ tr1_headers = \
${tr1_srcdir}/float.h \
${tr1_srcdir}/functional \
${tr1_srcdir}/functional_hash.h \
- ${tr1_srcdir}/functional_iterate.h \
${tr1_srcdir}/hashtable \
${tr1_srcdir}/hashtable_policy.h \
${tr1_srcdir}/inttypes.h \
${tr1_srcdir}/limits.h \
${tr1_srcdir}/math.h \
${tr1_srcdir}/memory \
- ${tr1_srcdir}/mu_iterate.h \
${tr1_srcdir}/random \
${tr1_srcdir}/random.tcc \
- ${tr1_srcdir}/ref_fwd.h \
- ${tr1_srcdir}/ref_wrap_iterate.h \
- ${tr1_srcdir}/repeat.h \
+ ${tr1_srcdir}/regex \
${tr1_srcdir}/stdarg.h \
${tr1_srcdir}/stdbool.h \
${tr1_srcdir}/stdint.h \
@@ -570,8 +574,6 @@ tr1_headers = \
${tr1_srcdir}/stdlib.h \
${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \
- ${tr1_srcdir}/tuple_defs.h \
- ${tr1_srcdir}/tuple_iterate.h \
${tr1_srcdir}/type_traits \
${tr1_srcdir}/type_traits_fwd.h \
${tr1_srcdir}/unordered_set \
@@ -581,14 +583,17 @@ tr1_headers = \
${tr1_srcdir}/wctype.h
-# This is the common subset of files that all three "C" header models use.
+# This is the common subset of C++ files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR)
c_base_builddir = .
c_base_headers = \
${c_base_srcdir}/cassert \
+ ${c_base_srcdir}/ccomplex \
${c_base_srcdir}/cctype \
${c_base_srcdir}/cerrno \
+ ${c_base_srcdir}/cfenv \
${c_base_srcdir}/cfloat \
+ ${c_base_srcdir}/cinttypes \
${c_base_srcdir}/ciso646 \
${c_base_srcdir}/climits \
${c_base_srcdir}/clocale \
@@ -596,10 +601,13 @@ c_base_headers = \
${c_base_srcdir}/csetjmp \
${c_base_srcdir}/csignal \
${c_base_srcdir}/cstdarg \
+ ${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
+ ${c_base_srcdir}/cstdint \
${c_base_srcdir}/cstdio \
${c_base_srcdir}/cstdlib \
${c_base_srcdir}/cstring \
+ ${c_base_srcdir}/ctgmath \
${c_base_srcdir}/ctime \
${c_base_srcdir}/cwchar \
${c_base_srcdir}/cwctype
@@ -607,11 +615,26 @@ c_base_headers = \
# "C" compatibility headers.
c_compatibility_srcdir = ${glibcxx_srcdir}/include/c_compatibility
c_compatibility_builddir = .
+
+if GLIBCXX_C_HEADERS_C_STD
+c_compatibility_headers =
+endif
+
+if GLIBCXX_C_HEADERS_C_GLOBAL
+c_compatibility_headers = \
+ ${c_compatibility_srcdir}/complex.h \
+ ${c_compatibility_srcdir}/tgmath.h
+endif
+
+if GLIBCXX_C_HEADERS_C
c_compatibility_headers = \
${c_compatibility_srcdir}/assert.h \
+ ${c_compatibility_srcdir}/complex.h \
${c_compatibility_srcdir}/ctype.h \
${c_compatibility_srcdir}/errno.h \
+ ${c_compatibility_srcdir}/fenv.h \
${c_compatibility_srcdir}/float.h \
+ ${c_compatibility_srcdir}/inttypes.h \
${c_compatibility_srcdir}/iso646.h \
${c_compatibility_srcdir}/limits.h \
${c_compatibility_srcdir}/locale.h \
@@ -619,13 +642,17 @@ c_compatibility_headers = \
${c_compatibility_srcdir}/setjmp.h \
${c_compatibility_srcdir}/signal.h \
${c_compatibility_srcdir}/stdarg.h \
+ ${c_compatibility_srcdir}/stdbool.h \
${c_compatibility_srcdir}/stddef.h \
+ ${c_compatibility_srcdir}/stdint.h \
${c_compatibility_srcdir}/stdio.h \
${c_compatibility_srcdir}/stdlib.h \
${c_compatibility_srcdir}/string.h \
+ ${c_compatibility_srcdir}/tgmath.h \
${c_compatibility_srcdir}/time.h \
${c_compatibility_srcdir}/wchar.h \
${c_compatibility_srcdir}/wctype.h
+endif
# Debug mode headers
debug_srcdir = ${glibcxx_srcdir}/include/debug
@@ -660,7 +687,7 @@ debug_headers = \
# Some of the different "C" header models need extra files.
# Some "C" header schemes require the "C" compatibility headers.
# For --enable-cheaders=c_std
-if GLIBCXX_C_HEADERS_C_STD
+if GLIBCXX_C_HEADERS_EXTRA
c_base_headers_extra = ${c_base_srcdir}/cmath.tcc
else
c_base_headers_extra =
@@ -962,7 +989,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
< ${CONFIG_HEADER} >> $@ ;\
echo "" >> $@ ;\
- echo "#endif // _CXXCONFIG_" >> $@
+ echo "#endif // _GLIBCXX_CXX_CONFIG_H" >> $@
# Host includes for threads
uppercase = [ABCDEFGHIJKLMNOPQRSTUVWXYZ_]
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 17e949b9166..2f8417a0362 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -124,9 +124,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
@@ -259,7 +263,9 @@ std_srcdir = ${glibcxx_srcdir}/include/std
std_builddir = .
std_headers = \
${std_srcdir}/algorithm \
+ ${std_srcdir}/array \
${std_srcdir}/bitset \
+ ${std_srcdir}/c++0x_warning.h \
${std_srcdir}/complex \
${std_srcdir}/deque \
${std_srcdir}/fstream \
@@ -278,12 +284,18 @@ std_headers = \
${std_srcdir}/numeric \
${std_srcdir}/ostream \
${std_srcdir}/queue \
+ ${std_srcdir}/random \
+ ${std_srcdir}/regex \
${std_srcdir}/set \
${std_srcdir}/sstream \
${std_srcdir}/stack \
${std_srcdir}/stdexcept \
${std_srcdir}/streambuf \
${std_srcdir}/string \
+ ${std_srcdir}/tuple \
+ ${std_srcdir}/type_traits \
+ ${std_srcdir}/unordered_map \
+ ${std_srcdir}/unordered_set \
${std_srcdir}/utility \
${std_srcdir}/valarray \
${std_srcdir}/vector
@@ -333,6 +345,7 @@ bits_headers = \
${bits_srcdir}/stl_iterator_base_types.h \
${bits_srcdir}/stl_list.h \
${bits_srcdir}/stl_map.h \
+ ${bits_srcdir}/stl_memory.h \
${bits_srcdir}/stl_multimap.h \
${bits_srcdir}/stl_multiset.h \
${bits_srcdir}/stl_numeric.h \
@@ -750,9 +763,8 @@ tr1_srcdir = ${glibcxx_srcdir}/include/tr1
tr1_builddir = ./tr1
tr1_headers = \
${tr1_srcdir}/array \
- ${tr1_srcdir}/bind_repeat.h \
- ${tr1_srcdir}/bind_iterate.h \
${tr1_srcdir}/boost_shared_ptr.h \
+ ${tr1_srcdir}/ccomplex \
${tr1_srcdir}/cctype \
${tr1_srcdir}/cfenv \
${tr1_srcdir}/cfloat \
@@ -761,6 +773,7 @@ tr1_headers = \
${tr1_srcdir}/cmath \
${tr1_srcdir}/common.h \
${tr1_srcdir}/complex \
+ ${tr1_srcdir}/complex.h \
${tr1_srcdir}/cstdarg \
${tr1_srcdir}/cstdbool \
${tr1_srcdir}/cstdint \
@@ -775,19 +788,15 @@ tr1_headers = \
${tr1_srcdir}/float.h \
${tr1_srcdir}/functional \
${tr1_srcdir}/functional_hash.h \
- ${tr1_srcdir}/functional_iterate.h \
${tr1_srcdir}/hashtable \
${tr1_srcdir}/hashtable_policy.h \
${tr1_srcdir}/inttypes.h \
${tr1_srcdir}/limits.h \
${tr1_srcdir}/math.h \
${tr1_srcdir}/memory \
- ${tr1_srcdir}/mu_iterate.h \
${tr1_srcdir}/random \
${tr1_srcdir}/random.tcc \
- ${tr1_srcdir}/ref_fwd.h \
- ${tr1_srcdir}/ref_wrap_iterate.h \
- ${tr1_srcdir}/repeat.h \
+ ${tr1_srcdir}/regex \
${tr1_srcdir}/stdarg.h \
${tr1_srcdir}/stdbool.h \
${tr1_srcdir}/stdint.h \
@@ -795,8 +804,6 @@ tr1_headers = \
${tr1_srcdir}/stdlib.h \
${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \
- ${tr1_srcdir}/tuple_defs.h \
- ${tr1_srcdir}/tuple_iterate.h \
${tr1_srcdir}/type_traits \
${tr1_srcdir}/type_traits_fwd.h \
${tr1_srcdir}/unordered_set \
@@ -806,14 +813,17 @@ tr1_headers = \
${tr1_srcdir}/wctype.h
-# This is the common subset of files that all three "C" header models use.
+# This is the common subset of C++ files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR)
c_base_builddir = .
c_base_headers = \
${c_base_srcdir}/cassert \
+ ${c_base_srcdir}/ccomplex \
${c_base_srcdir}/cctype \
${c_base_srcdir}/cerrno \
+ ${c_base_srcdir}/cfenv \
${c_base_srcdir}/cfloat \
+ ${c_base_srcdir}/cinttypes \
${c_base_srcdir}/ciso646 \
${c_base_srcdir}/climits \
${c_base_srcdir}/clocale \
@@ -821,10 +831,13 @@ c_base_headers = \
${c_base_srcdir}/csetjmp \
${c_base_srcdir}/csignal \
${c_base_srcdir}/cstdarg \
+ ${c_base_srcdir}/cstdbool \
${c_base_srcdir}/cstddef \
+ ${c_base_srcdir}/cstdint \
${c_base_srcdir}/cstdio \
${c_base_srcdir}/cstdlib \
${c_base_srcdir}/cstring \
+ ${c_base_srcdir}/ctgmath \
${c_base_srcdir}/ctime \
${c_base_srcdir}/cwchar \
${c_base_srcdir}/cwctype
@@ -833,25 +846,36 @@ c_base_headers = \
# "C" compatibility headers.
c_compatibility_srcdir = ${glibcxx_srcdir}/include/c_compatibility
c_compatibility_builddir = .
-c_compatibility_headers = \
- ${c_compatibility_srcdir}/assert.h \
- ${c_compatibility_srcdir}/ctype.h \
- ${c_compatibility_srcdir}/errno.h \
- ${c_compatibility_srcdir}/float.h \
- ${c_compatibility_srcdir}/iso646.h \
- ${c_compatibility_srcdir}/limits.h \
- ${c_compatibility_srcdir}/locale.h \
- ${c_compatibility_srcdir}/math.h \
- ${c_compatibility_srcdir}/setjmp.h \
- ${c_compatibility_srcdir}/signal.h \
- ${c_compatibility_srcdir}/stdarg.h \
- ${c_compatibility_srcdir}/stddef.h \
- ${c_compatibility_srcdir}/stdio.h \
- ${c_compatibility_srcdir}/stdlib.h \
- ${c_compatibility_srcdir}/string.h \
- ${c_compatibility_srcdir}/time.h \
- ${c_compatibility_srcdir}/wchar.h \
- ${c_compatibility_srcdir}/wctype.h
+@GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@c_compatibility_headers = \
+@GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@ ${c_compatibility_srcdir}/complex.h \
+@GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@ ${c_compatibility_srcdir}/tgmath.h
+
+@GLIBCXX_C_HEADERS_C_STD_TRUE@c_compatibility_headers =
+@GLIBCXX_C_HEADERS_C_TRUE@c_compatibility_headers = \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/assert.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/complex.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/ctype.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/errno.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/fenv.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/float.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/inttypes.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/iso646.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/limits.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/locale.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/math.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/setjmp.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/signal.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stdarg.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stdbool.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stddef.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stdint.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stdio.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/stdlib.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/string.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/tgmath.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/time.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/wchar.h \
+@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/wctype.h
# Debug mode headers
@@ -884,12 +908,12 @@ debug_headers = \
${debug_srcdir}/string \
${debug_srcdir}/vector
-@GLIBCXX_C_HEADERS_C_STD_FALSE@c_base_headers_extra =
+@GLIBCXX_C_HEADERS_EXTRA_FALSE@c_base_headers_extra =
# Some of the different "C" header models need extra files.
# Some "C" header schemes require the "C" compatibility headers.
# For --enable-cheaders=c_std
-@GLIBCXX_C_HEADERS_C_STD_TRUE@c_base_headers_extra = ${c_base_srcdir}/cmath.tcc
+@GLIBCXX_C_HEADERS_EXTRA_TRUE@c_base_headers_extra = ${c_base_srcdir}/cmath.tcc
@GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@c_compatibility_headers_extra =
@GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@c_compatibility_headers_extra = ${c_compatibility_headers}
host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR)
@@ -1342,7 +1366,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
< ${CONFIG_HEADER} >> $@ ;\
echo "" >> $@ ;\
- echo "#endif // _CXXCONFIG_" >> $@
+ echo "#endif // _GLIBCXX_CXX_CONFIG_H" >> $@
${host_builddir}/gthr.h: ${toplevel_srcdir}/gcc/gthr.h stamp-${host_alias}
sed -e '/^#pragma/b' \
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 8e6084e9e10..b11d27a1640 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -45,20 +45,36 @@
// The current version of the C++ library in compressed ISO date format.
#define __GLIBCXX__
+// Macro used to indicate that the native "C" includes, when compiled
+// as "C++", have declarations in namespace std and not the global
+// namespace. Note, this is unrelated to possible "C" compatibility
+// includes that inject C90/C99 names into the global namespace.
+// XXX May not be necessary
+#if __cplusplus == 199711L
+# define _GLIBCXX_NAMESPACE_C 1
+#endif
+
// Macros for visibility.
#define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
-#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
+# define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
#else
-#define _GLIBCXX_VISIBILITY(V)
+# define _GLIBCXX_VISIBILITY(V)
#endif
// Macros for controlling various namespace association schemes and modes.
+// _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG
+// _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
+// _GLIBCXX_NAMESPACE_ASSOCIATION_CXX200x
#ifdef _GLIBCXX_DEBUG
# define _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG 1
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# define _GLIBCXX_NAMESPACE_ASSOCIATION_CXX0X 1
+#endif
+
#define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
// Macros for namespace scope.
@@ -91,7 +107,6 @@ namespace std
using namespace _6 __attribute__ ((strong));
}
-// In addition, other supported namespace configurations.
namespace __gnu_cxx
{
namespace _6 { }
@@ -140,7 +155,19 @@ namespace __gnu_cxx
#endif
#endif
-/* Define if compatibility should be provided for -mlong-double-64. */
+// Namespace associations for C++0x, TR1 in std.
+#if _GLIBCXX_NAMESPACE_ASSOCIATION_CXX0X
+namespace std
+{
+ namespace __cxx200x { }
+ using namespace __cxx200x __attribute__ ((strong));
+}
+# define _GLIBCXX_TR1 __cxx200x
+#else
+# define _GLIBCXX_TR1 tr1
+#endif
+
+// Define if compatibility should be provided for -mlong-double-64.
#undef _GLIBCXX_LONG_DOUBLE_COMPAT
// XXX GLIBCXX_ABI Deprecated
diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h
index 58cddf6ec5b..03d744c643a 100644
--- a/libstdc++-v3/include/bits/char_traits.h
+++ b/libstdc++-v3/include/bits/char_traits.h
@@ -1,6 +1,7 @@
// Character Traits for use by standard string and iostream -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,9 +43,11 @@
#pragma GCC system_header
-#include <cstring> // For memmove, memset, memchr
-#include <bits/stl_algobase.h>// For copy, lexicographical_compare, fill_n
-#include <bits/postypes.h> // For streampos
+#include <cstring> // For memmove, memset, memchr
+#include <bits/stl_algobase.h> // For copy, fill_n
+#include <bits/postypes.h> // For streampos
+#include <cstdio> // For EOF
+#include <cwchar> // For WEOF, wmemmove, wmemset, etc.
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index 33dc256a4cf..e0bbfc37425 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -1,6 +1,7 @@
// Iostreams base classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -45,6 +46,7 @@
#include <ext/atomicity.h>
#include <bits/localefwd.h>
#include <bits/locale_classes.h>
+#include <cstdio> // For SEEK_CUR, SEEK_END
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc
index c6a884650dd..a2e564190da 100644
--- a/libstdc++-v3/include/bits/istream.tcc
+++ b/libstdc++-v3/include/bits/istream.tcc
@@ -43,9 +43,6 @@
#pragma GCC system_header
-#include <locale>
-#include <ostream> // For flush()
-
_GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT, typename _Traits>
@@ -1002,6 +999,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
extern template istream& operator>>(istream&, unsigned char*);
extern template istream& operator>>(istream&, signed char*);
+ extern template istream& istream::_M_extract(unsigned short&);
+ extern template istream& istream::_M_extract(unsigned int&);
+ extern template istream& istream::_M_extract(long&);
+ extern template istream& istream::_M_extract(unsigned long&);
+ extern template istream& istream::_M_extract(bool&);
+#ifdef _GLIBCXX_USE_LONG_LONG
+ extern template istream& istream::_M_extract(long long&);
+ extern template istream& istream::_M_extract(unsigned long long&);
+#endif
+ extern template istream& istream::_M_extract(float&);
+ extern template istream& istream::_M_extract(double&);
+ extern template istream& istream::_M_extract(long double&);
+ extern template istream& istream::_M_extract(void*&);
+
extern template class basic_iostream<char>;
#ifdef _GLIBCXX_USE_WCHAR_T
@@ -1010,6 +1021,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
extern template wistream& operator>>(wistream&, wchar_t&);
extern template wistream& operator>>(wistream&, wchar_t*);
+ extern template wistream& wistream::_M_extract(unsigned short&);
+ extern template wistream& wistream::_M_extract(unsigned int&);
+ extern template wistream& wistream::_M_extract(long&);
+ extern template wistream& wistream::_M_extract(unsigned long&);
+ extern template wistream& wistream::_M_extract(bool&);
+#ifdef _GLIBCXX_USE_LONG_LONG
+ extern template wistream& wistream::_M_extract(long long&);
+ extern template wistream& wistream::_M_extract(unsigned long long&);
+#endif
+ extern template wistream& wistream::_M_extract(float&);
+ extern template wistream& wistream::_M_extract(double&);
+ extern template wistream& wistream::_M_extract(long double&);
+ extern template wistream& wistream::_M_extract(void*&);
+
extern template class basic_iostream<wchar_t>;
#endif
#endif
diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h
index e31ae1751cc..7746d1dc7a1 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -1,6 +1,7 @@
// Locale support -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -44,6 +45,7 @@
#include <ctime> // For struct tm
#include <cwctype> // For wctype_t
+#include <cctype>
#include <bits/ctype_base.h>
#include <iosfwd>
#include <bits/ios_base.h> // For ios_base, ios_base::iostate
@@ -1510,7 +1512,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
class ctype_byname : public ctype<_CharT>
{
public:
- typedef _CharT char_type;
+ typedef typename ctype<_CharT>::mask mask;
explicit
ctype_byname(const char* __s, size_t __refs = 0);
@@ -1522,10 +1524,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
/// 22.2.1.4 Class ctype_byname specializations.
template<>
- ctype_byname<char>::ctype_byname(const char*, size_t refs);
+ class ctype_byname<char> : public ctype<char>
+ {
+ public:
+ explicit
+ ctype_byname(const char* __s, size_t __refs = 0);
+ protected:
+ virtual
+ ~ctype_byname();
+ };
+
+#ifdef _GLIBCXX_USE_WCHAR_T
template<>
- ctype_byname<wchar_t>::ctype_byname(const char*, size_t refs);
+ class ctype_byname<wchar_t> : public ctype<wchar_t>
+ {
+ public:
+ explicit
+ ctype_byname(const char* __s, size_t __refs = 0);
+
+ protected:
+ virtual
+ ~ctype_byname();
+ };
+#endif
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index 0a926b94fd5..aff3e23e16d 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -45,6 +45,7 @@
#include <bits/c++config.h>
#include <bits/c++locale.h> // Defines __c_locale, config-specific includes
#include <iosfwd> // For ostreambuf_iterator, istreambuf_iterator
+#include <cctype>
#include <bits/functexcept.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc
index db09d0a99e5..4d549655675 100644
--- a/libstdc++-v3/include/bits/ostream.tcc
+++ b/libstdc++-v3/include/bits/ostream.tcc
@@ -1,6 +1,7 @@
// ostream classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,8 +43,6 @@
#pragma GCC system_header
-#include <locale>
-
_GLIBCXX_BEGIN_NAMESPACE(std)
template<typename _CharT, typename _Traits>
@@ -366,6 +365,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
extern template ostream& operator<<(ostream&, const unsigned char*);
extern template ostream& operator<<(ostream&, const signed char*);
+ extern template ostream& ostream::_M_insert(long);
+ extern template ostream& ostream::_M_insert(unsigned long);
+ extern template ostream& ostream::_M_insert(bool);
+#ifdef _GLIBCXX_USE_LONG_LONG
+ extern template ostream& ostream::_M_insert(long long);
+ extern template ostream& ostream::_M_insert(unsigned long long);
+#endif
+ extern template ostream& ostream::_M_insert(double);
+ extern template ostream& ostream::_M_insert(long double);
+ extern template ostream& ostream::_M_insert(const void*);
+
#ifdef _GLIBCXX_USE_WCHAR_T
extern template class basic_ostream<wchar_t>;
extern template wostream& endl(wostream&);
@@ -375,6 +385,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
extern template wostream& operator<<(wostream&, char);
extern template wostream& operator<<(wostream&, const wchar_t*);
extern template wostream& operator<<(wostream&, const char*);
+
+ extern template wostream& wostream::_M_insert(long);
+ extern template wostream& wostream::_M_insert(unsigned long);
+ extern template wostream& wostream::_M_insert(bool);
+#ifdef _GLIBCXX_USE_LONG_LONG
+ extern template wostream& wostream::_M_insert(long long);
+ extern template wostream& wostream::_M_insert(unsigned long long);
+#endif
+ extern template wostream& wostream::_M_insert(double);
+ extern template wostream& wostream::_M_insert(long double);
+ extern template wostream& wostream::_M_insert(const void*);
#endif
#endif
diff --git a/libstdc++-v3/include/bits/sstream.tcc b/libstdc++-v3/include/bits/sstream.tcc
index 4de1c8124b5..2e642390f5c 100644
--- a/libstdc++-v3/include/bits/sstream.tcc
+++ b/libstdc++-v3/include/bits/sstream.tcc
@@ -1,6 +1,7 @@
// String based streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,8 +43,6 @@
#pragma GCC system_header
-#include <sstream>
-
_GLIBCXX_BEGIN_NAMESPACE(std)
template <class _CharT, class _Traits, class _Alloc>
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index cf3cd71851a..0496ebf3884 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -1,6 +1,6 @@
// Algorithm implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -63,7 +63,8 @@
#define _ALGO_H 1
#include <bits/stl_heap.h>
-#include <bits/stl_tempbuf.h> // for _Temporary_buffer
+#include <bits/stl_tempbuf.h> // for _Temporary_buffer
+#include <cstdlib> // for rand
#include <debug/debug.h>
// See concept_check.h for the __glibcxx_*_requires macros.
@@ -295,17 +296,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
/**
- * @if maint
- * This is an overload of find() for streambuf iterators.
- * @endif
- */
- template<typename _CharT>
- typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
- istreambuf_iterator<_CharT> >::__type
- find(istreambuf_iterator<_CharT>, istreambuf_iterator<_CharT>,
- const _CharT&);
-
- /**
* @brief Find the first occurrence of a value in a sequence.
* @param first An input iterator.
* @param last An input iterator.
@@ -871,40 +861,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
/**
- * @brief Swap the elements of two sequences.
- * @param first1 A forward iterator.
- * @param last1 A forward iterator.
- * @param first2 A forward iterator.
- * @return An iterator equal to @p first2+(last1-first1).
- *
- * Swaps each element in the range @p [first1,last1) with the
- * corresponding element in the range @p [first2,(last1-first1)).
- * The ranges must not overlap.
- */
- template<typename _ForwardIterator1, typename _ForwardIterator2>
- _ForwardIterator2
- swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
- _ForwardIterator2 __first2)
- {
- // concept requirements
- __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
- _ForwardIterator1>)
- __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
- _ForwardIterator2>)
- __glibcxx_function_requires(_ConvertibleConcept<
- typename iterator_traits<_ForwardIterator1>::value_type,
- typename iterator_traits<_ForwardIterator2>::value_type>)
- __glibcxx_function_requires(_ConvertibleConcept<
- typename iterator_traits<_ForwardIterator2>::value_type,
- typename iterator_traits<_ForwardIterator1>::value_type>)
- __glibcxx_requires_valid_range(__first1, __last1);
-
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- std::iter_swap(__first1, __first2);
- return __first2;
- }
-
- /**
* @brief Perform an operation on a sequence.
* @param first An input iterator.
* @param last An input iterator.
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index 35a8a0383d8..480557274c2 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -65,9 +65,8 @@
#include <bits/c++config.h>
#include <cstring>
#include <cwchar>
-#include <cstdlib>
#include <cstddef>
-#include <iosfwd>
+#include <bits/functexcept.h>
#include <bits/stl_pair.h>
#include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
@@ -169,6 +168,40 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
/**
+ * @brief Swap the elements of two sequences.
+ * @param first1 A forward iterator.
+ * @param last1 A forward iterator.
+ * @param first2 A forward iterator.
+ * @return An iterator equal to @p first2+(last1-first1).
+ *
+ * Swaps each element in the range @p [first1,last1) with the
+ * corresponding element in the range @p [first2,(last1-first1)).
+ * The ranges must not overlap.
+ */
+ template<typename _ForwardIterator1, typename _ForwardIterator2>
+ _ForwardIterator2
+ swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+ _ForwardIterator2 __first2)
+ {
+ // concept requirements
+ __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+ _ForwardIterator1>)
+ __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+ _ForwardIterator2>)
+ __glibcxx_function_requires(_ConvertibleConcept<
+ typename iterator_traits<_ForwardIterator1>::value_type,
+ typename iterator_traits<_ForwardIterator2>::value_type>)
+ __glibcxx_function_requires(_ConvertibleConcept<
+ typename iterator_traits<_ForwardIterator2>::value_type,
+ typename iterator_traits<_ForwardIterator1>::value_type>)
+ __glibcxx_requires_valid_range(__first1, __last1);
+
+ for (; __first1 != __last1; ++__first1, ++__first2)
+ std::iter_swap(__first1, __first2);
+ return __first2;
+ }
+
+ /**
* @brief This does what you think it does.
* @param a A thing of arbitrary type.
* @param b Another thing of arbitrary type.
@@ -317,21 +350,33 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
// Helpers for streambuf iterators (either istream or ostream).
+ // NB: avoid including <iosfwd>, relatively large.
+ template<typename _CharT>
+ struct char_traits;
+
+ template<typename _CharT, typename _Traits>
+ class istreambuf_iterator;
+
+ template<typename _CharT, typename _Traits>
+ class ostreambuf_iterator;
+
template<typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
- ostreambuf_iterator<_CharT> >::__type
- __copy_aux(_CharT*, _CharT*, ostreambuf_iterator<_CharT>);
+ ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+ __copy_aux(_CharT*, _CharT*,
+ ostreambuf_iterator<_CharT, char_traits<_CharT> >);
template<typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
- ostreambuf_iterator<_CharT> >::__type
- __copy_aux(const _CharT*, const _CharT*, ostreambuf_iterator<_CharT>);
+ ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+ __copy_aux(const _CharT*, const _CharT*,
+ ostreambuf_iterator<_CharT, char_traits<_CharT> >);
template<typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
_CharT*>::__type
- __copy_aux(istreambuf_iterator<_CharT>, istreambuf_iterator<_CharT>,
- _CharT*);
+ __copy_aux(istreambuf_iterator<_CharT, char_traits<_CharT> >,
+ istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
template<bool, bool>
struct __copy_normal
@@ -403,13 +448,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__result);
}
- // Overload for streambuf iterators.
- template<typename _CharT>
- typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
- ostreambuf_iterator<_CharT> >::__type
- copy(istreambuf_iterator<_CharT>, istreambuf_iterator<_CharT>,
- ostreambuf_iterator<_CharT>);
-
template<bool, typename>
struct __copy_backward
{
diff --git a/libstdc++-v3/include/bits/stl_memory.h b/libstdc++-v3/include/bits/stl_memory.h
new file mode 100644
index 00000000000..1018ae018c4
--- /dev/null
+++ b/libstdc++-v3/include/bits/stl_memory.h
@@ -0,0 +1,367 @@
+// Memory implementation -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file stl_memory.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _STL_MEMORY_H
+#define _STL_MEMORY_H 1
+
+#include <bits/stl_algobase.h>
+#include <bits/allocator.h>
+#include <bits/stl_construct.h>
+#include <bits/stl_uninitialized.h>
+#include <bits/stl_raw_storage_iter.h>
+#include <debug/debug.h>
+#include <limits>
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ /**
+ * @if maint
+ * This is a helper function. The unused second parameter exists to
+ * permit the real get_temporary_buffer to use template parameter deduction.
+ *
+ * XXX This should perhaps use the pool.
+ * @endif
+ */
+ template<typename _Tp>
+ pair<_Tp*, ptrdiff_t>
+ __get_temporary_buffer(ptrdiff_t __len, _Tp*)
+ {
+ const ptrdiff_t __max = numeric_limits<ptrdiff_t>::max() / sizeof(_Tp);
+ if (__len > __max)
+ __len = __max;
+
+ while (__len > 0)
+ {
+ _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
+ nothrow));
+ if (__tmp != 0)
+ return pair<_Tp*, ptrdiff_t>(__tmp, __len);
+ __len /= 2;
+ }
+ return pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
+ }
+
+ /**
+ * @brief Allocates a temporary buffer.
+ * @param len The number of objects of type Tp.
+ * @return See full description.
+ *
+ * Reinventing the wheel, but this time with prettier spokes!
+ *
+ * This function tries to obtain storage for @c len adjacent Tp
+ * objects. The objects themselves are not constructed, of course.
+ * A pair<> is returned containing "the buffer s address and
+ * capacity (in the units of sizeof(Tp)), or a pair of 0 values if
+ * no storage can be obtained." Note that the capacity obtained
+ * may be less than that requested if the memory is unavailable;
+ * you should compare len with the .second return value.
+ *
+ * Provides the nothrow exception guarantee.
+ */
+ template<typename _Tp>
+ inline pair<_Tp*, ptrdiff_t>
+ get_temporary_buffer(ptrdiff_t __len)
+ { return std::__get_temporary_buffer(__len, static_cast<_Tp*>(0)); }
+
+ /**
+ * @brief The companion to get_temporary_buffer().
+ * @param p A buffer previously allocated by get_temporary_buffer.
+ * @return None.
+ *
+ * Frees the memory pointed to by p.
+ */
+ template<typename _Tp>
+ void
+ return_temporary_buffer(_Tp* __p)
+ { ::operator delete(__p, nothrow); }
+
+ /**
+ * A wrapper class to provide auto_ptr with reference semantics.
+ * For example, an auto_ptr can be assigned (or constructed from)
+ * the result of a function which returns an auto_ptr by value.
+ *
+ * All the auto_ptr_ref stuff should happen behind the scenes.
+ */
+ template<typename _Tp1>
+ struct auto_ptr_ref
+ {
+ _Tp1* _M_ptr;
+
+ explicit
+ auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
+ };
+
+
+ /**
+ * @brief A simple smart pointer providing strict ownership semantics.
+ *
+ * The Standard says:
+ * <pre>
+ * An @c auto_ptr owns the object it holds a pointer to. Copying
+ * an @c auto_ptr copies the pointer and transfers ownership to the
+ * destination. If more than one @c auto_ptr owns the same object
+ * at the same time the behavior of the program is undefined.
+ *
+ * The uses of @c auto_ptr include providing temporary
+ * exception-safety for dynamically allocated memory, passing
+ * ownership of dynamically allocated memory to a function, and
+ * returning dynamically allocated memory from a function. @c
+ * auto_ptr does not meet the CopyConstructible and Assignable
+ * requirements for Standard Library <a
+ * href="tables.html#65">container</a> elements and thus
+ * instantiating a Standard Library container with an @c auto_ptr
+ * results in undefined behavior.
+ * </pre>
+ * Quoted from [20.4.5]/3.
+ *
+ * Good examples of what can and cannot be done with auto_ptr can
+ * be found in the libstdc++ testsuite.
+ *
+ * @if maint
+ * _GLIBCXX_RESOLVE_LIB_DEFECTS
+ * 127. auto_ptr<> conversion issues
+ * These resolutions have all been incorporated.
+ * @endif
+ */
+ template<typename _Tp>
+ class auto_ptr
+ {
+ private:
+ _Tp* _M_ptr;
+
+ public:
+ /// The pointed-to type.
+ typedef _Tp element_type;
+
+ /**
+ * @brief An %auto_ptr is usually constructed from a raw pointer.
+ * @param p A pointer (defaults to NULL).
+ *
+ * This object now @e owns the object pointed to by @a p.
+ */
+ explicit
+ auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
+
+ /**
+ * @brief An %auto_ptr can be constructed from another %auto_ptr.
+ * @param a Another %auto_ptr of the same type.
+ *
+ * This object now @e owns the object previously owned by @a a,
+ * which has given up ownsership.
+ */
+ auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
+
+ /**
+ * @brief An %auto_ptr can be constructed from another %auto_ptr.
+ * @param a Another %auto_ptr of a different but related type.
+ *
+ * A pointer-to-Tp1 must be convertible to a
+ * pointer-to-Tp/element_type.
+ *
+ * This object now @e owns the object previously owned by @a a,
+ * which has given up ownsership.
+ */
+ template<typename _Tp1>
+ auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
+
+ /**
+ * @brief %auto_ptr assignment operator.
+ * @param a Another %auto_ptr of the same type.
+ *
+ * This object now @e owns the object previously owned by @a a,
+ * which has given up ownsership. The object that this one @e
+ * used to own and track has been deleted.
+ */
+ auto_ptr&
+ operator=(auto_ptr& __a) throw()
+ {
+ reset(__a.release());
+ return *this;
+ }
+
+ /**
+ * @brief %auto_ptr assignment operator.
+ * @param a Another %auto_ptr of a different but related type.
+ *
+ * A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type.
+ *
+ * This object now @e owns the object previously owned by @a a,
+ * which has given up ownsership. The object that this one @e
+ * used to own and track has been deleted.
+ */
+ template<typename _Tp1>
+ auto_ptr&
+ operator=(auto_ptr<_Tp1>& __a) throw()
+ {
+ reset(__a.release());
+ return *this;
+ }
+
+ /**
+ * When the %auto_ptr goes out of scope, the object it owns is
+ * deleted. If it no longer owns anything (i.e., @c get() is
+ * @c NULL), then this has no effect.
+ *
+ * @if maint
+ * The C++ standard says there is supposed to be an empty throw
+ * specification here, but omitting it is standard conforming. Its
+ * presence can be detected only if _Tp::~_Tp() throws, but this is
+ * prohibited. [17.4.3.6]/2
+ * @endif
+ */
+ ~auto_ptr() { delete _M_ptr; }
+
+ /**
+ * @brief Smart pointer dereferencing.
+ *
+ * If this %auto_ptr no longer owns anything, then this
+ * operation will crash. (For a smart pointer, "no longer owns
+ * anything" is the same as being a null pointer, and you know
+ * what happens when you dereference one of those...)
+ */
+ element_type&
+ operator*() const throw()
+ {
+ _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
+ return *_M_ptr;
+ }
+
+ /**
+ * @brief Smart pointer dereferencing.
+ *
+ * This returns the pointer itself, which the language then will
+ * automatically cause to be dereferenced.
+ */
+ element_type*
+ operator->() const throw()
+ {
+ _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
+ return _M_ptr;
+ }
+
+ /**
+ * @brief Bypassing the smart pointer.
+ * @return The raw pointer being managed.
+ *
+ * You can get a copy of the pointer that this object owns, for
+ * situations such as passing to a function which only accepts
+ * a raw pointer.
+ *
+ * @note This %auto_ptr still owns the memory.
+ */
+ element_type*
+ get() const throw() { return _M_ptr; }
+
+ /**
+ * @brief Bypassing the smart pointer.
+ * @return The raw pointer being managed.
+ *
+ * You can get a copy of the pointer that this object owns, for
+ * situations such as passing to a function which only accepts
+ * a raw pointer.
+ *
+ * @note This %auto_ptr no longer owns the memory. When this object
+ * goes out of scope, nothing will happen.
+ */
+ element_type*
+ release() throw()
+ {
+ element_type* __tmp = _M_ptr;
+ _M_ptr = 0;
+ return __tmp;
+ }
+
+ /**
+ * @brief Forcibly deletes the managed object.
+ * @param p A pointer (defaults to NULL).
+ *
+ * This object now @e owns the object pointed to by @a p. The
+ * previous object has been deleted.
+ */
+ void
+ reset(element_type* __p = 0) throw()
+ {
+ if (__p != _M_ptr)
+ {
+ delete _M_ptr;
+ _M_ptr = __p;
+ }
+ }
+
+ /**
+ * @brief Automatic conversions
+ *
+ * These operations convert an %auto_ptr into and from an auto_ptr_ref
+ * automatically as needed. This allows constructs such as
+ * @code
+ * auto_ptr<Derived> func_returning_auto_ptr(.....);
+ * ...
+ * auto_ptr<Base> ptr = func_returning_auto_ptr(.....);
+ * @endcode
+ */
+ auto_ptr(auto_ptr_ref<element_type> __ref) throw()
+ : _M_ptr(__ref._M_ptr) { }
+
+ auto_ptr&
+ operator=(auto_ptr_ref<element_type> __ref) throw()
+ {
+ if (__ref._M_ptr != this->get())
+ {
+ delete _M_ptr;
+ _M_ptr = __ref._M_ptr;
+ }
+ return *this;
+ }
+
+ template<typename _Tp1>
+ operator auto_ptr_ref<_Tp1>() throw()
+ { return auto_ptr_ref<_Tp1>(this->release()); }
+
+ template<typename _Tp1>
+ operator auto_ptr<_Tp1>() throw()
+ { return auto_ptr<_Tp1>(this->release()); }
+ };
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 541. shared_ptr template assignment and void
+ template<>
+ class auto_ptr<void>
+ {
+ public:
+ typedef void element_type;
+ };
+
+_GLIBCXX_END_NAMESPACE
+
+#endif /* _STL_MEMORY_H */
diff --git a/libstdc++-v3/include/bits/stl_numeric.h b/libstdc++-v3/include/bits/stl_numeric.h
index 82bee216d10..2c44b180840 100644
--- a/libstdc++-v3/include/bits/stl_numeric.h
+++ b/libstdc++-v3/include/bits/stl_numeric.h
@@ -1,6 +1,7 @@
// Numeric functions implementation -*- C++ -*-
-// Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -61,6 +62,7 @@
#ifndef _STL_NUMERIC_H
#define _STL_NUMERIC_H 1
+#include <bits/concept_check.h>
#include <debug/debug.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h
index fbe24e795d7..6c64c3fe56a 100644
--- a/libstdc++-v3/include/bits/stl_tempbuf.h
+++ b/libstdc++-v3/include/bits/stl_tempbuf.h
@@ -1,6 +1,6 @@
// Temporary buffer implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -62,7 +62,7 @@
#ifndef _TEMPBUF_H
#define _TEMPBUF_H 1
-#include <memory>
+#include <bits/stl_memory.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h
index bbfb252143d..0bb65394718 100644
--- a/libstdc++-v3/include/bits/stl_tree.h
+++ b/libstdc++-v3/include/bits/stl_tree.h
@@ -1,6 +1,6 @@
// RB tree implementation -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -66,7 +66,6 @@
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
-#include <bits/stl_construct.h>
#include <bits/stl_function.h>
#include <bits/cpp_type_traits.h>
diff --git a/libstdc++-v3/include/c_compatibility/assert.h b/libstdc++-v3/include/c_compatibility/assert.h
index fc14c0f4bcd..7a0241505cf 100644
--- a/libstdc++-v3/include/c_compatibility/assert.h
+++ b/libstdc++-v3/include/c_compatibility/assert.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,4 +27,8 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
+/** @file assert.h
+ * This is a Standard C++ Library header.
+ */
+
#include <cassert>
diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h
new file mode 100644
index 00000000000..88acb1eebee
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/complex.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file complex.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <ccomplex>
+
+#ifndef _GLIBCXX_COMPLEX_H
+#define _GLIBCXX_COMPLEX_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/ctype.h b/libstdc++-v3/include/c_compatibility/ctype.h
index 1bd379dee4d..696621bec8e 100644
--- a/libstdc++-v3/include/c_compatibility/ctype.h
+++ b/libstdc++-v3/include/c_compatibility/ctype.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_CTYPE_H
-#define _GLIBCXX_CTYPE_H 1
+/** @file ctype.h
+ * This is a Standard C++ Library header.
+ */
#include <cctype>
+#ifndef _GLIBCXX_CTYPE_H
+#define _GLIBCXX_CTYPE_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::isalnum;
using std::isalpha;
using std::iscntrl;
@@ -45,5 +50,6 @@ using std::isupper;
using std::isxdigit;
using std::tolower;
using std::toupper;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/errno.h b/libstdc++-v3/include/c_compatibility/errno.h
index d7cc829452b..6d48a3f2686 100644
--- a/libstdc++-v3/include/c_compatibility/errno.h
+++ b/libstdc++-v3/include/c_compatibility/errno.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,9 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_ERRNO_H
-#define _GLIBCXX_ERRNO_H 1
+/** @file errno.h
+ * This is a Standard C++ Library header.
+ */
#include <cerrno>
+#ifndef _GLIBCXX_ERRNO_H
+#define _GLIBCXX_ERRNO_H 1
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/fenv.h b/libstdc++-v3/include/c_compatibility/fenv.h
new file mode 100644
index 00000000000..c3eb4b4abce
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/fenv.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file fenv.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <cfenv>
+
+#ifndef _GLIBCXX_FENV_H
+#define _GLIBCXX_FENV_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/float.h b/libstdc++-v3/include/c_compatibility/float.h
index adeb73fef83..f2ec19a52fb 100644
--- a/libstdc++-v3/include/c_compatibility/float.h
+++ b/libstdc++-v3/include/c_compatibility/float.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,9 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_FLOAT_H
-#define _GLIBCXX_FLOAT_H 1
+/** @file float.h
+ * This is a Standard C++ Library header.
+ */
#include <cfloat>
+#ifndef _GLIBCXX_FLOAT_H
+#define _GLIBCXX_FLOAT_H 1
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/inttypes.h b/libstdc++-v3/include/c_compatibility/inttypes.h
new file mode 100644
index 00000000000..d6eebdf6606
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/inttypes.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file inttypes.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <cinttypes>
+
+#ifndef _GLIBCXX_INTTYPES_H
+#define _GLIBCXX_INTTYPES_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/iso646.h b/libstdc++-v3/include/c_compatibility/iso646.h
index d5097ca7251..eb379c24329 100644
--- a/libstdc++-v3/include/c_compatibility/iso646.h
+++ b/libstdc++-v3/include/c_compatibility/iso646.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,9 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_ISO646_H
-#define _GLIBCXX_ISO646_H 1
+/** @file iso646.h
+ * This is a Standard C++ Library header.
+ */
#include <ciso646>
+#ifndef _GLIBCXX_ISO646_H
+#define _GLIBCXX_ISO646_H 1
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/limits.h b/libstdc++-v3/include/c_compatibility/limits.h
index e7abd017fbf..6a20e592ebb 100644
--- a/libstdc++-v3/include/c_compatibility/limits.h
+++ b/libstdc++-v3/include/c_compatibility/limits.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,9 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_LIMITS_H
-#define _GLIBCXX_LIMITS_H 1
+/** @file limits.h
+ * This is a Standard C++ Library header.
+ */
#include <climits>
+#ifndef _GLIBCXX_LIMITS_H
+#define _GLIBCXX_LIMITS_H 1
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/locale.h b/libstdc++-v3/include/c_compatibility/locale.h
index 8baf041e20f..e444460a806 100644
--- a/libstdc++-v3/include/c_compatibility/locale.h
+++ b/libstdc++-v3/include/c_compatibility/locale.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,13 +27,19 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_LOCALE_H
-#define _GLIBCXX_LOCALE_H 1
+/** @file locale.h
+ * This is a Standard C++ Library header.
+ */
#include <clocale>
+#ifndef _GLIBCXX_LOCALE_H
+#define _GLIBCXX_LOCALE_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::lconv;
using std::setlocale;
using std::localeconv;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/math.h b/libstdc++-v3/include/c_compatibility/math.h
index 38636e60c1b..69dc82ac514 100644
--- a/libstdc++-v3/include/c_compatibility/math.h
+++ b/libstdc++-v3/include/c_compatibility/math.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_MATH_H
-#define _GLIBCXX_MATH_H 1
+/** @file math.h
+ * This is a Standard C++ Library header.
+ */
#include <cmath>
+#ifndef _GLIBCXX_MATH_H
+#define _GLIBCXX_MATH_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::abs;
using std::acos;
using std::asin;
@@ -71,4 +76,6 @@ using std::islessgreater;
using std::isunordered;
#endif
+#endif // __GXX_EXPERIMENTAL_CXX0X__
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/setjmp.h b/libstdc++-v3/include/c_compatibility/setjmp.h
index f2d481ae17d..c9941325298 100644
--- a/libstdc++-v3/include/c_compatibility/setjmp.h
+++ b/libstdc++-v3/include/c_compatibility/setjmp.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,12 +27,18 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_SETJMP_H
-#define _GLIBCXX_SETJMP_H 1
+/** @file setjmp.h
+ * This is a Standard C++ Library header.
+ */
#include <csetjmp>
+#ifndef _GLIBCXX_SETJMP_H
+#define _GLIBCXX_SETJMP_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::jmp_buf;
using std::longjmp;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/signal.h b/libstdc++-v3/include/c_compatibility/signal.h
index ae1d23d56af..4e081335b4e 100644
--- a/libstdc++-v3/include/c_compatibility/signal.h
+++ b/libstdc++-v3/include/c_compatibility/signal.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,14 +27,19 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_SIGNAL_H
-#define _GLIBCXX_SIGNAL_H 1
+/** @file signal.h
+ * This is a Standard C++ Library header.
+ */
#include <csignal>
-using std::sig_atomic_t;
+#ifndef _GLIBCXX_SIGNAL_H
+#define _GLIBCXX_SIGNAL_H 1
+#ifdef _GLIBCXX_NAMESPACE_C
+using std::sig_atomic_t;
using std::raise;
using std::signal;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdarg.h b/libstdc++-v3/include/c_compatibility/stdarg.h
index 9b92a93f9c2..2a1df4983fc 100644
--- a/libstdc++-v3/include/c_compatibility/stdarg.h
+++ b/libstdc++-v3/include/c_compatibility/stdarg.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,17 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_STDARG_H
-#define _GLIBCXX_STDARG_H 1
+/** @file stdarg.h
+ * This is a Standard C++ Library header.
+ */
#include <cstdarg>
+#ifndef _GLIBCXX_STDARG_H
+#define _GLIBCXX_STDARG_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::va_list;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdbool.h b/libstdc++-v3/include/c_compatibility/stdbool.h
new file mode 100644
index 00000000000..a825d4fd365
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/stdbool.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file stdbool.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <cstdbool>
+
+#ifndef _GLIBCXX_STDBOOL_H
+#define _GLIBCXX_STDBOOL_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/stddef.h b/libstdc++-v3/include/c_compatibility/stddef.h
index 457cd0062d2..a6efd4048cf 100644
--- a/libstdc++-v3/include/c_compatibility/stddef.h
+++ b/libstdc++-v3/include/c_compatibility/stddef.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,12 +27,18 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_STDDEF_H
-#define _GLIBCXX_STDDEF_H 1
+/** @file stddef.h
+ * This is a Standard C++ Library header.
+ */
#include <cstddef>
+#ifndef _GLIBCXX_STDDEF_H
+#define _GLIBCXX_STDDEF_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::size_t;
using std::ptrdiff_t;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdint.h b/libstdc++-v3/include/c_compatibility/stdint.h
new file mode 100644
index 00000000000..359986f8ade
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/stdint.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file stdint.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <cstdint>
+
+#ifndef _GLIBCXX_STDINT_H
+#define _GLIBCXX_STDINT_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdio.h b/libstdc++-v3/include/c_compatibility/stdio.h
index 270852f5329..ac64d62f3b4 100644
--- a/libstdc++-v3/include/c_compatibility/stdio.h
+++ b/libstdc++-v3/include/c_compatibility/stdio.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_STDIO_H
-#define _GLIBCXX_STDIO_H 1
+/** @file stdio.h
+ * This is a Standard C++ Library header.
+ */
#include <cstdio>
+#ifndef _GLIBCXX_STDIO_H
+#define _GLIBCXX_STDIO_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::FILE;
using std::fpos_t;
@@ -81,5 +86,6 @@ using std::clearerr;
using std::feof;
using std::ferror;
using std::perror;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/stdlib.h b/libstdc++-v3/include/c_compatibility/stdlib.h
index dbf99b4a58f..f6eb56ba073 100644
--- a/libstdc++-v3/include/c_compatibility/stdlib.h
+++ b/libstdc++-v3/include/c_compatibility/stdlib.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_STDLIB_H
-#define _GLIBCXX_STDLIB_H 1
+/** @file stdlib.h
+ * This is a Standard C++ Library header.
+ */
#include <cstdlib>
+#ifndef _GLIBCXX_STDLIB_H
+#define _GLIBCXX_STDLIB_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::div_t;
using std::ldiv_t;
@@ -63,5 +68,6 @@ using std::strtoul;
using std::system;
using std::wcstombs;
using std::wctomb;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/string.h b/libstdc++-v3/include/c_compatibility/string.h
index 09e59cfef2c..d60b787e206 100644
--- a/libstdc++-v3/include/c_compatibility/string.h
+++ b/libstdc++-v3/include/c_compatibility/string.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_STRING_H
-#define _GLIBCXX_STRING_H 1
+/** @file string.h
+ * This is a Standard C++ Library header.
+ */
#include <cstring>
+#ifndef _GLIBCXX_STRING_H
+#define _GLIBCXX_STRING_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::memcpy;
using std::memmove;
using std::strcpy;
@@ -54,5 +59,6 @@ using std::strtok;
using std::memset;
using std::strerror;
using std::strlen;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/tgmath.h b/libstdc++-v3/include/c_compatibility/tgmath.h
new file mode 100644
index 00000000000..b2ce8b54328
--- /dev/null
+++ b/libstdc++-v3/include/c_compatibility/tgmath.h
@@ -0,0 +1,39 @@
+// -*- C++ -*- compatibility header.
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file tgmath.h
+ * This is a Standard C++ Library header.
+ */
+
+#include <ctgmath>
+
+#ifndef _GLIBCXX_TGMATH_H
+#define _GLIBCXX_TGMATH_H 1
+
+#endif
diff --git a/libstdc++-v3/include/c_compatibility/time.h b/libstdc++-v3/include/c_compatibility/time.h
index d5684adf2d9..0c08945025f 100644
--- a/libstdc++-v3/include/c_compatibility/time.h
+++ b/libstdc++-v3/include/c_compatibility/time.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_TIME_H
-#define _GLIBCXX_TIME_H 1
+/** @file time.h
+ * This is a Standard C++ Library header.
+ */
#include <ctime>
+#ifndef _GLIBCXX_TIME_H
+#define _GLIBCXX_TIME_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
// Get rid of those macros defined in <time.h> in lieu of real functions.
#undef clock
#undef difftime
@@ -56,5 +61,6 @@ using std::ctime;
using std::gmtime;
using std::localtime;
using std::strftime;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_compatibility/wchar.h b/libstdc++-v3/include/c_compatibility/wchar.h
index 2071ae436de..09460d64e31 100644
--- a/libstdc++-v3/include/c_compatibility/wchar.h
+++ b/libstdc++-v3/include/c_compatibility/wchar.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_WCHAR_H
-#define _GLIBCXX_WCHAR_H 1
+/** @file wchar.h
+ * This is a Standard C++ Library header.
+ */
#include <cwchar>
+#ifndef _GLIBCXX_WCHAR_H
+#define _GLIBCXX_WCHAR_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::mbstate_t;
#if _GLIBCXX_USE_WCHAR_T
@@ -111,4 +116,6 @@ using std::wcstoull;
#endif //_GLIBCXX_USE_WCHAR_T
+#endif
+
#endif
diff --git a/libstdc++-v3/include/c_compatibility/wctype.h b/libstdc++-v3/include/c_compatibility/wctype.h
index c7ddc903ab9..d50f6ece658 100644
--- a/libstdc++-v3/include/c_compatibility/wctype.h
+++ b/libstdc++-v3/include/c_compatibility/wctype.h
@@ -1,6 +1,6 @@
// -*- C++ -*- compatibility header.
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -27,11 +27,16 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-#ifndef _GLIBCXX_CWCTYPE_H
-#define _GLIBCXX_CWCTYPE_H 1
+/** @file wctype.h
+ * This is a Standard C++ Library header.
+ */
#include <cwctype>
+#ifndef _GLIBCXX_CWCTYPE_H
+#define _GLIBCXX_CWCTYPE_H 1
+
+#ifdef _GLIBCXX_NAMESPACE_C
using std::wctype_t;
using std::wctrans_t;
using std::iswalpha;
@@ -51,5 +56,6 @@ using std::towlower;
using std::towupper;
using std::wctrans;
using std::wctype;
+#endif
#endif
diff --git a/libstdc++-v3/include/c_global/cassert b/libstdc++-v3/include/c_global/cassert
new file mode 100644
index 00000000000..6322b4fb360
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cassert
@@ -0,0 +1,49 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file cassert
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c assert.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 19.2 Assertions
+//
+
+// No include guards on this header...
+
+#pragma GCC system_header
+
+#include_next <assert.h>
diff --git a/libstdc++-v3/include/tr1/ref_wrap_iterate.h b/libstdc++-v3/include/c_global/ccomplex
index 7c63d2cf18a..1d080388f43 100644
--- a/libstdc++-v3/include/tr1/ref_wrap_iterate.h
+++ b/libstdc++-v3/include/c_global/ccomplex
@@ -1,7 +1,6 @@
-// TR1 reference_wrapper -*- C++ -*-
+// <ccomplex> -*- C++ -*-
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
+// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,17 +27,20 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-/** @file tr1/ref_wrap_iterate.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
+/** @file include/ccomplex
+ * This is a Standard C++ Library header.
*/
-#if _GLIBCXX_NUM_ARGS > 0
-template<_GLIBCXX_TEMPLATE_PARAMS>
- typename result_of<_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type
- operator()(_GLIBCXX_REF_PARAMS) const;
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CCOMPLEX
+#define _GLIBCXX_CCOMPLEX 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/ccomplex>
#else
-typename result_of<_M_func_type()>::type
-operator()() const
-{ return get()(); }
+# include <c++0x_warning.h>
#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/cctype b/libstdc++-v3/include/c_global/cctype
new file mode 100644
index 00000000000..05436e4c1d9
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cctype
@@ -0,0 +1,90 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cctype
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c ctype.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: <ccytpe>
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <ctype.h>
+
+#ifndef _GLIBCXX_CCTYPE
+#define _GLIBCXX_CCTYPE 1
+
+// Get rid of those macros defined in <ctype.h> in lieu of real functions.
+#undef isalnum
+#undef isalpha
+#undef iscntrl
+#undef isdigit
+#undef isgraph
+#undef islower
+#undef isprint
+#undef ispunct
+#undef isspace
+#undef isupper
+#undef isxdigit
+#undef tolower
+#undef toupper
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::isalnum;
+ using ::isalpha;
+ using ::iscntrl;
+ using ::isdigit;
+ using ::isgraph;
+ using ::islower;
+ using ::isprint;
+ using ::ispunct;
+ using ::isspace;
+ using ::isupper;
+ using ::isxdigit;
+ using ::tolower;
+ using ::toupper;
+
+_GLIBCXX_END_NAMESPACE
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cctype>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cerrno b/libstdc++-v3/include/c_global/cerrno
new file mode 100644
index 00000000000..b7673668aaf
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cerrno
@@ -0,0 +1,57 @@
+// The -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file cerrno
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c errno.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 19.3 Error numbers
+//
+
+#pragma GCC system_header
+
+#include_next <errno.h>
+
+#ifndef _GLIBCXX_CERRNO
+#define _GLIBCXX_CERRNO 1
+
+// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
+#ifndef errno
+#define errno errno
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cfenv b/libstdc++-v3/include/c_global/cfenv
new file mode 100644
index 00000000000..f11c531b2d7
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cfenv
@@ -0,0 +1,46 @@
+// <cfenv> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cfenv
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CFENV
+#define _GLIBCXX_CFENV 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cfenv>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/cfloat b/libstdc++-v3/include/c_global/cfloat
new file mode 100644
index 00000000000..9d8c039587a
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cfloat
@@ -0,0 +1,56 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cfloat
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c float.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 18.2.2 Implementation properties: C library
+//
+
+#pragma GCC system_header
+
+#include_next <float.h>
+
+#ifndef _GLIBCXX_CFLOAT
+#define _GLIBCXX_CFLOAT 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cfloat>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cinttypes b/libstdc++-v3/include/c_global/cinttypes
new file mode 100644
index 00000000000..d42c7a3f9e4
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cinttypes
@@ -0,0 +1,46 @@
+// <cinttypes> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cinttypes
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CINTTYPES
+#define _GLIBCXX_CINTTYPES 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cinttypes>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/ciso646 b/libstdc++-v3/include/c_global/ciso646
new file mode 100644
index 00000000000..414a706abbe
--- /dev/null
+++ b/libstdc++-v3/include/c_global/ciso646
@@ -0,0 +1,38 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file ciso646
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c iso646.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
diff --git a/libstdc++-v3/include/c_global/climits b/libstdc++-v3/include/c_global/climits
new file mode 100644
index 00000000000..396bbcbd49b
--- /dev/null
+++ b/libstdc++-v3/include/c_global/climits
@@ -0,0 +1,56 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/climits
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c limits.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 18.2.2 Implementation properties: C library
+//
+
+#pragma GCC system_header
+
+#include_next <limits.h>
+
+#ifndef _GLIBCXX_CLIMITS
+#define _GLIBCXX_CLIMITS 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/climits>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/clocale b/libstdc++-v3/include/c_global/clocale
new file mode 100644
index 00000000000..7feac30975e
--- /dev/null
+++ b/libstdc++-v3/include/c_global/clocale
@@ -0,0 +1,65 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file clocale
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c locale.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 18.2.2 Implementation properties: C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <locale.h>
+
+#ifndef _GLIBCXX_CLOCALE
+#define _GLIBCXX_CLOCALE 1
+
+// Get rid of those macros defined in <locale.h> in lieu of real functions.
+#undef setlocale
+#undef localeconv
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::lconv;
+ using ::setlocale;
+ using ::localeconv;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
new file mode 100644
index 00000000000..ab21c9acc06
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cmath
@@ -0,0 +1,603 @@
+// -*- C++ -*- C forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cmath
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c math.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 26.5 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include <bits/cpp_type_traits.h>
+#include <ext/type_traits.h>
+#include_next <math.h>
+
+#ifndef _GLIBCXX_CMATH
+#define _GLIBCXX_CMATH 1
+
+// Get rid of those macros defined in <math.h> in lieu of real functions.
+#undef abs
+#undef div
+#undef acos
+#undef asin
+#undef atan
+#undef atan2
+#undef ceil
+#undef cos
+#undef cosh
+#undef exp
+#undef fabs
+#undef floor
+#undef fmod
+#undef frexp
+#undef ldexp
+#undef log
+#undef log10
+#undef modf
+#undef pow
+#undef sin
+#undef sinh
+#undef sqrt
+#undef tan
+#undef tanh
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ // Forward declaration of a helper function. This really should be
+ // an `exported' forward declaration.
+ template<typename _Tp> _Tp __cmath_power(_Tp, unsigned int);
+
+ inline double
+ abs(double __x)
+ { return __builtin_fabs(__x); }
+
+ inline float
+ abs(float __x)
+ { return __builtin_fabsf(__x); }
+
+ inline long double
+ abs(long double __x)
+ { return __builtin_fabsl(__x); }
+
+ using ::acos;
+
+ inline float
+ acos(float __x)
+ { return __builtin_acosf(__x); }
+
+ inline long double
+ acos(long double __x)
+ { return __builtin_acosl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ acos(_Tp __x)
+ { return __builtin_acos(__x); }
+
+ using ::asin;
+
+ inline float
+ asin(float __x)
+ { return __builtin_asinf(__x); }
+
+ inline long double
+ asin(long double __x)
+ { return __builtin_asinl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ asin(_Tp __x)
+ { return __builtin_asin(__x); }
+
+ using ::atan;
+
+ inline float
+ atan(float __x)
+ { return __builtin_atanf(__x); }
+
+ inline long double
+ atan(long double __x)
+ { return __builtin_atanl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ atan(_Tp __x)
+ { return __builtin_atan(__x); }
+
+ using ::atan2;
+
+ inline float
+ atan2(float __y, float __x)
+ { return __builtin_atan2f(__y, __x); }
+
+ inline long double
+ atan2(long double __y, long double __x)
+ { return __builtin_atan2l(__y, __x); }
+
+ template<typename _Tp, typename _Up>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value
+ && __is_integer<_Up>::__value,
+ double>::__type
+ atan2(_Tp __y, _Up __x)
+ { return __builtin_atan2(__y, __x); }
+
+ using ::ceil;
+
+ inline float
+ ceil(float __x)
+ { return __builtin_ceilf(__x); }
+
+ inline long double
+ ceil(long double __x)
+ { return __builtin_ceill(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ ceil(_Tp __x)
+ { return __builtin_ceil(__x); }
+
+ using ::cos;
+
+ inline float
+ cos(float __x)
+ { return __builtin_cosf(__x); }
+
+ inline long double
+ cos(long double __x)
+ { return __builtin_cosl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ cos(_Tp __x)
+ { return __builtin_cos(__x); }
+
+ using ::cosh;
+
+ inline float
+ cosh(float __x)
+ { return __builtin_coshf(__x); }
+
+ inline long double
+ cosh(long double __x)
+ { return __builtin_coshl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ cosh(_Tp __x)
+ { return __builtin_cosh(__x); }
+
+ using ::exp;
+
+ inline float
+ exp(float __x)
+ { return __builtin_expf(__x); }
+
+ inline long double
+ exp(long double __x)
+ { return __builtin_expl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ exp(_Tp __x)
+ { return __builtin_exp(__x); }
+
+ using ::fabs;
+
+ inline float
+ fabs(float __x)
+ { return __builtin_fabsf(__x); }
+
+ inline long double
+ fabs(long double __x)
+ { return __builtin_fabsl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ fabs(_Tp __x)
+ { return __builtin_fabs(__x); }
+
+ using ::floor;
+
+ inline float
+ floor(float __x)
+ { return __builtin_floorf(__x); }
+
+ inline long double
+ floor(long double __x)
+ { return __builtin_floorl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ floor(_Tp __x)
+ { return __builtin_floor(__x); }
+
+ using ::fmod;
+
+ inline float
+ fmod(float __x, float __y)
+ { return __builtin_fmodf(__x, __y); }
+
+ inline long double
+ fmod(long double __x, long double __y)
+ { return __builtin_fmodl(__x, __y); }
+
+ using ::frexp;
+
+ inline float
+ frexp(float __x, int* __exp)
+ { return __builtin_frexpf(__x, __exp); }
+
+ inline long double
+ frexp(long double __x, int* __exp)
+ { return __builtin_frexpl(__x, __exp); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ frexp(_Tp __x, int* __exp)
+ { return __builtin_frexp(__x, __exp); }
+
+ using ::ldexp;
+
+ inline float
+ ldexp(float __x, int __exp)
+ { return __builtin_ldexpf(__x, __exp); }
+
+ inline long double
+ ldexp(long double __x, int __exp)
+ { return __builtin_ldexpl(__x, __exp); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ ldexp(_Tp __x, int __exp)
+ { return __builtin_ldexp(__x, __exp); }
+
+ using ::log;
+
+ inline float
+ log(float __x)
+ { return __builtin_logf(__x); }
+
+ inline long double
+ log(long double __x)
+ { return __builtin_logl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ log(_Tp __x)
+ { return __builtin_log(__x); }
+
+ using ::log10;
+
+ inline float
+ log10(float __x)
+ { return __builtin_log10f(__x); }
+
+ inline long double
+ log10(long double __x)
+ { return __builtin_log10l(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ log10(_Tp __x)
+ { return __builtin_log10(__x); }
+
+ using ::modf;
+
+ inline float
+ modf(float __x, float* __iptr)
+ { return __builtin_modff(__x, __iptr); }
+
+ inline long double
+ modf(long double __x, long double* __iptr)
+ { return __builtin_modfl(__x, __iptr); }
+
+ template<typename _Tp>
+ inline _Tp
+ __pow_helper(_Tp __x, int __n)
+ {
+ return __n < 0
+ ? _Tp(1)/__cmath_power(__x, -__n)
+ : __cmath_power(__x, __n);
+ }
+
+ using ::pow;
+
+ inline float
+ pow(float __x, float __y)
+ { return __builtin_powf(__x, __y); }
+
+ inline long double
+ pow(long double __x, long double __y)
+ { return __builtin_powl(__x, __y); }
+
+ inline double
+ pow(double __x, int __i)
+ { return __builtin_powi(__x, __i); }
+
+ inline float
+ pow(float __x, int __n)
+ { return __builtin_powif(__x, __n); }
+
+ inline long double
+ pow(long double __x, int __n)
+ { return __builtin_powil(__x, __n); }
+
+ using ::sin;
+
+ inline float
+ sin(float __x)
+ { return __builtin_sinf(__x); }
+
+ inline long double
+ sin(long double __x)
+ { return __builtin_sinl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ sin(_Tp __x)
+ { return __builtin_sin(__x); }
+
+ using ::sinh;
+
+ inline float
+ sinh(float __x)
+ { return __builtin_sinhf(__x); }
+
+ inline long double
+ sinh(long double __x)
+ { return __builtin_sinhl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ sinh(_Tp __x)
+ { return __builtin_sinh(__x); }
+
+ using ::sqrt;
+
+ inline float
+ sqrt(float __x)
+ { return __builtin_sqrtf(__x); }
+
+ inline long double
+ sqrt(long double __x)
+ { return __builtin_sqrtl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ sqrt(_Tp __x)
+ { return __builtin_sqrt(__x); }
+
+ using ::tan;
+
+ inline float
+ tan(float __x)
+ { return __builtin_tanf(__x); }
+
+ inline long double
+ tan(long double __x)
+ { return __builtin_tanl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ tan(_Tp __x)
+ { return __builtin_tan(__x); }
+
+ using ::tanh;
+
+ inline float
+ tanh(float __x)
+ { return __builtin_tanhf(__x); }
+
+ inline long double
+ tanh(long double __x)
+ { return __builtin_tanhl(__x); }
+
+ template<typename _Tp>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+ double>::__type
+ tanh(_Tp __x)
+ { return __builtin_tanh(__x); }
+
+_GLIBCXX_END_NAMESPACE
+
+#if _GLIBCXX_USE_C99_MATH
+#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+// These are possible macros imported from C99-land. For strict
+// conformance, remove possible C99-injected names from the global
+// namespace, and sequester them in the __gnu_cxx extension namespace.
+
+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+ template<typename _Tp>
+ inline int
+ __capture_fpclassify(_Tp __f) { return fpclassify(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isfinite(_Tp __f) { return isfinite(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isinf(_Tp __f) { return isinf(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isnan(_Tp __f) { return isnan(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isnormal(_Tp __f) { return isnormal(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_signbit(_Tp __f) { return signbit(__f); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isgreater(_Tp __f1, _Tp __f2)
+ { return isgreater(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isgreaterequal(_Tp __f1, _Tp __f2)
+ { return isgreaterequal(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isless(_Tp __f1, _Tp __f2) { return isless(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ __capture_islessequal(_Tp __f1, _Tp __f2)
+ { return islessequal(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ __capture_islessgreater(_Tp __f1, _Tp __f2)
+ { return islessgreater(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ __capture_isunordered(_Tp __f1, _Tp __f2)
+ { return isunordered(__f1, __f2); }
+
+_GLIBCXX_END_NAMESPACE
+
+// Only undefine the C99 FP macros, if actually captured for namespace movement
+#undef fpclassify
+#undef isfinite
+#undef isinf
+#undef isnan
+#undef isnormal
+#undef signbit
+#undef isgreater
+#undef isgreaterequal
+#undef isless
+#undef islessequal
+#undef islessgreater
+#undef isunordered
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ template<typename _Tp>
+ inline int
+ fpclassify(_Tp __f) { return ::__gnu_cxx::__capture_fpclassify(__f); }
+
+ template<typename _Tp>
+ inline int
+ isfinite(_Tp __f) { return ::__gnu_cxx::__capture_isfinite(__f); }
+
+ template<typename _Tp>
+ inline int
+ isinf(_Tp __f) { return ::__gnu_cxx::__capture_isinf(__f); }
+
+ template<typename _Tp>
+ inline int
+ isnan(_Tp __f) { return ::__gnu_cxx::__capture_isnan(__f); }
+
+ template<typename _Tp>
+ inline int
+ isnormal(_Tp __f) { return ::__gnu_cxx::__capture_isnormal(__f); }
+
+ template<typename _Tp>
+ inline int
+ signbit(_Tp __f) { return ::__gnu_cxx::__capture_signbit(__f); }
+
+ template<typename _Tp>
+ inline int
+ isgreater(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_isgreater(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ isgreaterequal(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_isgreaterequal(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ isless(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_isless(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ islessequal(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_islessequal(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ islessgreater(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_islessgreater(__f1, __f2); }
+
+ template<typename _Tp>
+ inline int
+ isunordered(_Tp __f1, _Tp __f2)
+ { return ::__gnu_cxx::__capture_isunordered(__f1, __f2); }
+
+_GLIBCXX_END_NAMESPACE
+
+#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */
+#endif
+
+#ifndef _GLIBCXX_EXPORT_TEMPLATE
+# include <bits/cmath.tcc>
+#endif
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cmath>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cmath.tcc b/libstdc++-v3/include/c_global/cmath.tcc
new file mode 100644
index 00000000000..ff875640caf
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cmath.tcc
@@ -0,0 +1,59 @@
+// -*- C++ -*- C math library.
+
+// Copyright (C) 2000, 2003, 2004, 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+// This file was written by Gabriel Dos Reis <gdr@codesourcery.com>
+
+/** @file cmath.tcc
+ * This is a Standard C++ Library file.
+ */
+
+#ifndef _GLIBCXX_CMATH_TCC
+#define _GLIBCXX_CMATH_TCC 1
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ template<typename _Tp>
+ inline _Tp
+ __cmath_power(_Tp __x, unsigned int __n)
+ {
+ _Tp __y = __n % 2 ? __x : 1;
+
+ while (__n >>= 1)
+ {
+ __x = __x * __x;
+ if (__n % 2)
+ __y = __y * __x;
+ }
+
+ return __y;
+ }
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/csetjmp b/libstdc++-v3/include/c_global/csetjmp
new file mode 100644
index 00000000000..3c2863475cb
--- /dev/null
+++ b/libstdc++-v3/include/c_global/csetjmp
@@ -0,0 +1,68 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file csetjmp
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c setjmp.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.4.6 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <setjmp.h>
+
+#ifndef _GLIBCXX_CSETJMP
+#define _GLIBCXX_CSETJMP 1
+
+// Get rid of those macros defined in <setjmp.h> in lieu of real functions.
+#undef longjmp
+
+// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
+#ifndef setjmp
+#define setjmp(env) setjmp (env)
+#endif
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::jmp_buf;
+ using ::longjmp;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/csignal b/libstdc++-v3/include/c_global/csignal
new file mode 100644
index 00000000000..cf89c5abfaa
--- /dev/null
+++ b/libstdc++-v3/include/c_global/csignal
@@ -0,0 +1,64 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file csignal
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c signal.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.4.6 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <signal.h>
+
+#ifndef _GLIBCXX_CSIGNAL
+#define _GLIBCXX_CSIGNAL 1
+
+// Get rid of those macros defined in <signal.h> in lieu of real functions.
+#undef raise
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::sig_atomic_t;
+ using ::signal;
+ using ::raise;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cstdarg b/libstdc++-v3/include/c_global/cstdarg
new file mode 100644
index 00000000000..9acd24e0578
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdarg
@@ -0,0 +1,68 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cstdarg
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c stdarg.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.4.6 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <stdarg.h>
+
+#ifndef _GLIBCXX_CSTDARG
+#define _GLIBCXX_CSTDARG 1
+
+// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
+#ifndef va_end
+#define va_end(ap) va_end (ap)
+#endif
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::va_list;
+
+_GLIBCXX_END_NAMESPACE
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cstdarg>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cstdbool b/libstdc++-v3/include/c_global/cstdbool
new file mode 100644
index 00000000000..ac18c74a6c9
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdbool
@@ -0,0 +1,46 @@
+// <cstdbool> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cstdbool
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CSTDBOOL
+#define _GLIBCXX_CSTDBOOL 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cstdbool>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/cstddef b/libstdc++-v3/include/c_global/cstddef
new file mode 100644
index 00000000000..5196aeb9e81
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstddef
@@ -0,0 +1,60 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file cstddef
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c stddef.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 18.1 Types
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include_next <stddef.h>
+
+#ifndef _GLIBCXX_CSTDDEF
+#define _GLIBCXX_CSTDDEF 1
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::ptrdiff_t;
+ using ::size_t;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cstdint b/libstdc++-v3/include/c_global/cstdint
new file mode 100644
index 00000000000..ece67a3b784
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdint
@@ -0,0 +1,46 @@
+// <cstdint> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cstdint
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CSTDINT
+#define _GLIBCXX_CSTDINT 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cstdint>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/cstdio b/libstdc++-v3/include/c_global/cstdio
new file mode 100644
index 00000000000..ec25b994cc2
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdio
@@ -0,0 +1,194 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cstdio
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c stdio.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 27.8.2 C Library files
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include <cstddef>
+#include_next <stdio.h>
+
+#ifndef _GLIBCXX_CSTDIO
+#define _GLIBCXX_CSTDIO 1
+
+// Get rid of those macros defined in <stdio.h> in lieu of real functions.
+#undef clearerr
+#undef fclose
+#undef feof
+#undef ferror
+#undef fflush
+#undef fgetc
+#undef fgetpos
+#undef fgets
+#undef fopen
+#undef fprintf
+#undef fputc
+#undef fputs
+#undef fread
+#undef freopen
+#undef fscanf
+#undef fseek
+#undef fsetpos
+#undef ftell
+#undef fwrite
+#undef getc
+#undef getchar
+#undef gets
+#undef perror
+#undef printf
+#undef putc
+#undef putchar
+#undef puts
+#undef remove
+#undef rename
+#undef rewind
+#undef scanf
+#undef setbuf
+#undef setvbuf
+#undef sprintf
+#undef sscanf
+#undef tmpfile
+#undef tmpnam
+#undef ungetc
+#undef vfprintf
+#undef vprintf
+#undef vsprintf
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::FILE;
+ using ::fpos_t;
+
+ using ::clearerr;
+ using ::fclose;
+ using ::feof;
+ using ::ferror;
+ using ::fflush;
+ using ::fgetc;
+ using ::fgetpos;
+ using ::fgets;
+ using ::fopen;
+ using ::fprintf;
+ using ::fputc;
+ using ::fputs;
+ using ::fread;
+ using ::freopen;
+ using ::fscanf;
+ using ::fseek;
+ using ::fsetpos;
+ using ::ftell;
+ using ::fwrite;
+ using ::getc;
+ using ::getchar;
+ using ::gets;
+ using ::perror;
+ using ::printf;
+ using ::putc;
+ using ::putchar;
+ using ::puts;
+ using ::remove;
+ using ::rename;
+ using ::rewind;
+ using ::scanf;
+ using ::setbuf;
+ using ::setvbuf;
+ using ::sprintf;
+ using ::sscanf;
+ using ::tmpfile;
+ using ::tmpnam;
+ using ::ungetc;
+ using ::vfprintf;
+ using ::vprintf;
+ using ::vsprintf;
+
+_GLIBCXX_END_NAMESPACE
+
+#if _GLIBCXX_USE_C99
+
+#undef snprintf
+#undef vfscanf
+#undef vscanf
+#undef vsnprintf
+#undef vsscanf
+
+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
+ extern "C" int
+ (snprintf)(char * restrict, size_t, const char * restrict, ...);
+ extern "C" int
+ (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list);
+ extern "C" int (vscanf)(const char * restrict, __gnuc_va_list);
+ extern "C" int
+ (vsnprintf)(char * restrict, size_t, const char * restrict, __gnuc_va_list);
+ extern "C" int
+ (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list);
+#endif
+
+#if !_GLIBCXX_USE_C99_DYNAMIC
+ using ::snprintf;
+ using ::vfscanf;
+ using ::vscanf;
+ using ::vsnprintf;
+ using ::vsscanf;
+#endif
+
+_GLIBCXX_END_NAMESPACE
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::__gnu_cxx::snprintf;
+ using ::__gnu_cxx::vfscanf;
+ using ::__gnu_cxx::vscanf;
+ using ::__gnu_cxx::vsnprintf;
+ using ::__gnu_cxx::vsscanf;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif // _GLIBCXX_USE_C99
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cstdio>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
new file mode 100644
index 00000000000..e4ab8f9911d
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -0,0 +1,231 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cstdlib
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c stdlib.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.4.6 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include <cstddef>
+
+#ifndef _GLIBCXX_CSTDLIB
+#define _GLIBCXX_CSTDLIB 1
+
+#if !_GLIBCXX_HOSTED
+// The C standard does not require a freestanding implementation to
+// provide <stdlib.h>. However, the C++ standard does still require
+// <cstdlib> -- but only the functionality mentioned in
+// [lib.support.start.term].
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ extern "C" void abort(void);
+ extern "C" int atexit(void (*)());
+ extern "C" void exit(int);
+
+_GLIBCXX_END_NAMESPACE
+
+#else
+
+#include_next <stdlib.h>
+
+// Get rid of those macros defined in <stdlib.h> in lieu of real functions.
+#undef abort
+#undef abs
+#undef atexit
+#undef atof
+#undef atoi
+#undef atol
+#undef bsearch
+#undef calloc
+#undef div
+#undef exit
+#undef free
+#undef getenv
+#undef labs
+#undef ldiv
+#undef malloc
+#undef mblen
+#undef mbstowcs
+#undef mbtowc
+#undef qsort
+#undef rand
+#undef realloc
+#undef srand
+#undef strtod
+#undef strtol
+#undef strtoul
+#undef system
+#undef wcstombs
+#undef wctomb
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::div_t;
+ using ::ldiv_t;
+
+ using ::abort;
+ using ::abs;
+ using ::atexit;
+ using ::atof;
+ using ::atoi;
+ using ::atol;
+ using ::bsearch;
+ using ::calloc;
+ using ::div;
+ using ::exit;
+ using ::free;
+ using ::getenv;
+ using ::labs;
+ using ::ldiv;
+ using ::malloc;
+#ifdef _GLIBCXX_HAVE_MBSTATE_T
+ using ::mblen;
+ using ::mbstowcs;
+ using ::mbtowc;
+#endif // _GLIBCXX_HAVE_MBSTATE_T
+ using ::qsort;
+ using ::rand;
+ using ::realloc;
+ using ::srand;
+ using ::strtod;
+ using ::strtol;
+ using ::strtoul;
+ using ::system;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ using ::wcstombs;
+ using ::wctomb;
+#endif // _GLIBCXX_USE_WCHAR_T
+
+ inline long
+ abs(long __i) { return labs(__i); }
+
+ inline ldiv_t
+ div(long __i, long __j) { return ldiv(__i, __j); }
+
+_GLIBCXX_END_NAMESPACE
+
+#if _GLIBCXX_USE_C99
+
+#undef _Exit
+#undef llabs
+#undef lldiv
+#undef atoll
+#undef strtoll
+#undef strtoull
+#undef strtof
+#undef strtold
+
+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::lldiv_t;
+#endif
+#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
+ extern "C" void (_Exit)(int);
+#endif
+#if !_GLIBCXX_USE_C99_DYNAMIC
+ using ::_Exit;
+#endif
+
+ inline long long
+ abs(long long __x) { return __x >= 0 ? __x : -__x; }
+
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::llabs;
+
+ inline lldiv_t
+ div(long long __n, long long __d)
+ { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
+
+ using ::lldiv;
+#endif
+
+#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ extern "C" long long int (atoll)(const char *);
+ extern "C" long long int
+ (strtoll)(const char * restrict, char ** restrict, int);
+ extern "C" unsigned long long int
+ (strtoull)(const char * restrict, char ** restrict, int);
+#endif
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::atoll;
+ using ::strtoll;
+ using ::strtoull;
+#endif
+ using ::strtof;
+ using ::strtold;
+
+_GLIBCXX_END_NAMESPACE
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::__gnu_cxx::lldiv_t;
+#endif
+ using ::__gnu_cxx::_Exit;
+ using ::__gnu_cxx::abs;
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::__gnu_cxx::llabs;
+ using ::__gnu_cxx::div;
+ using ::__gnu_cxx::lldiv;
+#endif
+ using ::__gnu_cxx::atoll;
+ using ::__gnu_cxx::strtof;
+ using ::__gnu_cxx::strtoll;
+ using ::__gnu_cxx::strtoull;
+ using ::__gnu_cxx::strtold;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif // _GLIBCXX_USE_C99
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cstdlib>
+#endif
+
+#endif // !_GLIBCXX_HOSTED
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cstring b/libstdc++-v3/include/c_global/cstring
new file mode 100644
index 00000000000..c797aca16b4
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cstring
@@ -0,0 +1,130 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file cstring
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c string.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.4.6 C library
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include <cstddef>
+#include_next <string.h>
+
+#ifndef _GLIBCXX_CSTRING
+#define _GLIBCXX_CSTRING 1
+
+// Get rid of those macros defined in <string.h> in lieu of real functions.
+#undef memcpy
+#undef memmove
+#undef strcpy
+#undef strncpy
+#undef strcat
+#undef strncat
+#undef memcmp
+#undef strcmp
+#undef strcoll
+#undef strncmp
+#undef strxfrm
+#undef memchr
+#undef strchr
+#undef strcspn
+#undef strpbrk
+#undef strrchr
+#undef strspn
+#undef strstr
+#undef strtok
+#undef memset
+#undef strerror
+#undef strlen
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::memcpy;
+ using ::memmove;
+ using ::strcpy;
+ using ::strncpy;
+ using ::strcat;
+ using ::strncat;
+ using ::memcmp;
+ using ::strcmp;
+ using ::strcoll;
+ using ::strncmp;
+ using ::strxfrm;
+ using ::strcspn;
+ using ::strspn;
+ using ::strtok;
+ using ::memset;
+ using ::strerror;
+ using ::strlen;
+
+ using ::memchr;
+
+ inline void*
+ memchr(void* __p, int __c, size_t __n)
+ { return memchr(const_cast<const void*>(__p), __c, __n); }
+
+ using ::strchr;
+
+ inline char*
+ strchr(char* __s1, int __n)
+ { return __builtin_strchr(const_cast<const char*>(__s1), __n); }
+
+ using ::strpbrk;
+
+ inline char*
+ strpbrk(char* __s1, const char* __s2)
+ { return __builtin_strpbrk(const_cast<const char*>(__s1), __s2); }
+
+ using ::strrchr;
+
+ inline char*
+ strrchr(char* __s1, int __n)
+ { return __builtin_strrchr(const_cast<const char*>(__s1), __n); }
+
+ using ::strstr;
+
+ inline char*
+ strstr(char* __s1, const char* __s2)
+ { return __builtin_strstr(const_cast<const char*>(__s1), __s2); }
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
diff --git a/libstdc++-v3/include/c_global/ctgmath b/libstdc++-v3/include/c_global/ctgmath
new file mode 100644
index 00000000000..623ed9be592
--- /dev/null
+++ b/libstdc++-v3/include/c_global/ctgmath
@@ -0,0 +1,46 @@
+// <ctgmath> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/ctgmath
+ * This is a Standard C++ Library header.
+ */
+
+#pragma GCC system_header
+
+#ifndef _GLIBCXX_CTGMATH
+#define _GLIBCXX_CTGMATH 1
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/ctgmath>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/c_global/ctime b/libstdc++-v3/include/c_global/ctime
new file mode 100644
index 00000000000..8b563ba1bf4
--- /dev/null
+++ b/libstdc++-v3/include/c_global/ctime
@@ -0,0 +1,86 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/ctime
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c time.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 20.5 Date and time
+//
+
+#pragma GCC system_header
+
+#include <cstddef>
+#include_next <time.h>
+
+#ifndef _GLIBCXX_CTIME
+#define _GLIBCXX_CTIME 1
+
+// Get rid of those macros defined in <time.h> in lieu of real functions.
+#undef clock
+#undef difftime
+#undef mktime
+#undef time
+#undef asctime
+#undef ctime
+#undef gmtime
+#undef localtime
+#undef strftime
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::clock_t;
+ using ::time_t;
+ using ::tm;
+
+ using ::clock;
+ using ::difftime;
+ using ::mktime;
+ using ::time;
+ using ::asctime;
+ using ::ctime;
+ using ::gmtime;
+ using ::localtime;
+ using ::strftime;
+
+_GLIBCXX_END_NAMESPACE
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/ctime>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cwchar b/libstdc++-v3/include/c_global/cwchar
new file mode 100644
index 00000000000..6e867342478
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cwchar
@@ -0,0 +1,284 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cwchar
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c wchar.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: 21.4
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+#include <cstddef>
+#include <ctime>
+
+#if _GLIBCXX_HAVE_WCHAR_H
+#include_next <wchar.h>
+#endif
+
+#ifndef _GLIBCXX_CWCHAR
+#define _GLIBCXX_CWCHAR 1
+
+// Need to do a bit of trickery here with mbstate_t as char_traits
+// assumes it is in wchar.h, regardless of wchar_t specializations.
+#ifndef _GLIBCXX_HAVE_MBSTATE_T
+extern "C"
+{
+ typedef struct
+ {
+ int __fill[6];
+ } mbstate_t;
+}
+#endif
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::mbstate_t;
+
+_GLIBCXX_END_NAMESPACE
+
+// Get rid of those macros defined in <wchar.h> in lieu of real functions.
+#undef btowc
+#undef fgetwc
+#undef fgetws
+#undef fputwc
+#undef fputws
+#undef fwide
+#undef fwprintf
+#undef fwscanf
+#undef getwc
+#undef getwchar
+#undef mbrlen
+#undef mbrtowc
+#undef mbsinit
+#undef mbsrtowcs
+#undef putwc
+#undef putwchar
+#undef swprintf
+#undef swscanf
+#undef ungetwc
+#undef vfwprintf
+#if _GLIBCXX_HAVE_VFWSCANF
+# undef vfwscanf
+#endif
+#undef vswprintf
+#if _GLIBCXX_HAVE_VSWSCANF
+# undef vswscanf
+#endif
+#undef vwprintf
+#if _GLIBCXX_HAVE_VWSCANF
+# undef vwscanf
+#endif
+#undef wcrtomb
+#undef wcscat
+#undef wcschr
+#undef wcscmp
+#undef wcscoll
+#undef wcscpy
+#undef wcscspn
+#undef wcsftime
+#undef wcslen
+#undef wcsncat
+#undef wcsncmp
+#undef wcsncpy
+#undef wcspbrk
+#undef wcsrchr
+#undef wcsrtombs
+#undef wcsspn
+#undef wcsstr
+#undef wcstod
+#if _GLIBCXX_HAVE_WCSTOF
+# undef wcstof
+#endif
+#undef wcstok
+#undef wcstol
+#undef wcstoul
+#undef wcsxfrm
+#undef wctob
+#undef wmemchr
+#undef wmemcmp
+#undef wmemcpy
+#undef wmemmove
+#undef wmemset
+#undef wprintf
+#undef wscanf
+
+#if _GLIBCXX_USE_WCHAR_T
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::wint_t;
+
+ using ::btowc;
+ using ::fgetwc;
+ using ::fgetws;
+ using ::fputwc;
+ using ::fputws;
+ using ::fwide;
+ using ::fwprintf;
+ using ::fwscanf;
+ using ::getwc;
+ using ::getwchar;
+ using ::mbrlen;
+ using ::mbrtowc;
+ using ::mbsinit;
+ using ::mbsrtowcs;
+ using ::putwc;
+ using ::putwchar;
+ using ::swprintf;
+ using ::swscanf;
+ using ::ungetwc;
+ using ::vfwprintf;
+#if _GLIBCXX_HAVE_VFWSCANF
+ using ::vfwscanf;
+#endif
+ using ::vswprintf;
+#if _GLIBCXX_HAVE_VSWSCANF
+ using ::vswscanf;
+#endif
+ using ::vwprintf;
+#if _GLIBCXX_HAVE_VWSCANF
+ using ::vwscanf;
+#endif
+ using ::wcrtomb;
+ using ::wcscat;
+ using ::wcscmp;
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
+ using ::wcsftime;
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
+ using ::wcsncpy;
+ using ::wcsrtombs;
+ using ::wcsspn;
+ using ::wcstod;
+#if _GLIBCXX_HAVE_WCSTOF
+ using ::wcstof;
+#endif
+ using ::wcstok;
+ using ::wcstol;
+ using ::wcstoul;
+ using ::wcsxfrm;
+ using ::wctob;
+ using ::wmemcmp;
+ using ::wmemcpy;
+ using ::wmemmove;
+ using ::wmemset;
+ using ::wprintf;
+ using ::wscanf;
+
+ using ::wcschr;
+
+ inline wchar_t*
+ wcschr(wchar_t* __p, wchar_t __c)
+ { return wcschr(const_cast<const wchar_t*>(__p), __c); }
+
+ using ::wcspbrk;
+
+ inline wchar_t*
+ wcspbrk(wchar_t* __s1, const wchar_t* __s2)
+ { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
+
+ using ::wcsrchr;
+
+ inline wchar_t*
+ wcsrchr(wchar_t* __p, wchar_t __c)
+ { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
+
+ using ::wcsstr;
+
+ inline wchar_t*
+ wcsstr(wchar_t* __s1, const wchar_t* __s2)
+ { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
+
+ using ::wmemchr;
+
+ inline wchar_t*
+ wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
+ { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
+
+_GLIBCXX_END_NAMESPACE
+
+#if _GLIBCXX_USE_C99
+
+#undef wcstold
+#undef wcstoll
+#undef wcstoull
+
+_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
+ extern "C" long double
+ (wcstold)(const wchar_t * restrict, wchar_t ** restrict);
+#endif
+#if !_GLIBCXX_USE_C99_DYNAMIC
+ using ::wcstold;
+#endif
+#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ extern "C" long long int
+ (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int);
+ extern "C" unsigned long long int
+ (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int);
+#endif
+#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
+ using ::wcstoll;
+ using ::wcstoull;
+#endif
+
+_GLIBCXX_END_NAMESPACE
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::__gnu_cxx::wcstold;
+ using ::__gnu_cxx::wcstoll;
+ using ::__gnu_cxx::wcstoull;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif
+
+#endif //_GLIBCXX_USE_WCHAR_T
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cwchar>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/c_global/cwctype b/libstdc++-v3/include/c_global/cwctype
new file mode 100644
index 00000000000..ab97b8dc9b5
--- /dev/null
+++ b/libstdc++-v3/include/c_global/cwctype
@@ -0,0 +1,116 @@
+// -*- C++ -*- forwarding header.
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/cwctype
+ * This is a Standard C++ Library file. You should @c #include this file
+ * in your programs, rather than any of the "*.h" implementation files.
+ *
+ * This is the C++ version of the Standard C Library header @c wctype.h,
+ * and its contents are (mostly) the same as that header, but are all
+ * contained in the namespace @c std (except for names which are defined
+ * as macros in C).
+ */
+
+//
+// ISO C++ 14882: <cwctype>
+//
+
+#pragma GCC system_header
+
+#include <bits/c++config.h>
+
+#if _GLIBCXX_HAVE_WCTYPE_H
+#include_next <wctype.h>
+#endif
+
+#ifndef _GLIBCXX_CWCTYPE
+#define _GLIBCXX_CWCTYPE 1
+
+// Get rid of those macros defined in <wctype.h> in lieu of real functions.
+#undef iswalnum
+#undef iswalpha
+#if _GLIBCXX_HAVE_ISWBLANK
+# undef iswblank
+#endif
+#undef iswcntrl
+#undef iswctype
+#undef iswdigit
+#undef iswgraph
+#undef iswlower
+#undef iswprint
+#undef iswpunct
+#undef iswspace
+#undef iswupper
+#undef iswxdigit
+#undef towctrans
+#undef towlower
+#undef towupper
+#undef wctrans
+#undef wctype
+
+#if _GLIBCXX_USE_WCHAR_T
+
+_GLIBCXX_BEGIN_NAMESPACE(std)
+
+ using ::wint_t; // cwchar
+
+ using ::wctype_t;
+ using ::wctrans_t;
+
+ using ::iswalnum;
+ using ::iswalpha;
+#if _GLIBCXX_HAVE_ISWBLANK
+ using ::iswblank;
+#endif
+ using ::iswcntrl;
+ using ::iswctype;
+ using ::iswdigit;
+ using ::iswgraph;
+ using ::iswlower;
+ using ::iswprint;
+ using ::iswpunct;
+ using ::iswspace;
+ using ::iswupper;
+ using ::iswxdigit;
+ using ::towctrans;
+ using ::towlower;
+ using ::towupper;
+ using ::wctrans;
+ using ::wctype;
+
+_GLIBCXX_END_NAMESPACE
+
+#endif //_GLIBCXX_USE_WCHAR_T
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/cwctype>
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h
index a61c0b9f4ee..ee7037fad06 100644
--- a/libstdc++-v3/include/debug/functions.h
+++ b/libstdc++-v3/include/debug/functions.h
@@ -36,7 +36,7 @@
#define _GLIBCXX_DEBUG_FUNCTIONS_H 1
#include <bits/c++config.h>
-#include <stddef.h> // for ptrdiff_t
+#include <cstddef> // for ptrdiff_t
#include <bits/stl_iterator_base_types.h> // for iterator_traits, categories
#include <bits/cpp_type_traits.h> // for __is_integer
diff --git a/libstdc++-v3/include/ext/functional b/libstdc++-v3/include/ext/functional
index f159e11d639..bc4ea5beb9e 100644
--- a/libstdc++-v3/include/ext/functional
+++ b/libstdc++-v3/include/ext/functional
@@ -1,6 +1,7 @@
// Functional extensions -*- C++ -*-
-// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -64,6 +65,7 @@
#pragma GCC system_header
#include <functional>
+#include <cstddef>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp
index d31a0c2699c..95c164ace00 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/map_debug_base.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -51,6 +51,7 @@
#include <list>
#include <utility>
+#include <cstdlib>
#include <ext/throw_allocator.h>
#include <debug/debug.h>
@@ -157,7 +158,7 @@ namespace pb_ds
if (find(r_key) != m_key_set.end())
{
std::cerr << "insert_new " << r_key << std::endl;
- abort();
+ std::abort();
}
try
@@ -167,7 +168,7 @@ namespace pb_ds
catch(...)
{
std::cerr << "insert_new 1" << r_key << std::endl;
- abort();
+ std::abort();
}
alloc.set_throw_prob(orig_throw_prob);
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -183,7 +184,7 @@ namespace pb_ds
if (it == m_key_set.end())
{
std::cerr << "erase_existing " << r_key << std::endl;
- abort();
+ std::abort();
}
m_key_set.erase(it);
_GLIBCXX_DEBUG_ONLY(assert_valid();)
@@ -208,7 +209,7 @@ namespace pb_ds
if (find(r_key) == m_key_set.end())
{
std::cerr << "check_key_exists " << r_key << std::endl;
- abort();
+ std::abort();
}
_GLIBCXX_DEBUG_ONLY(assert_valid();)
}
@@ -222,7 +223,7 @@ namespace pb_ds
if (find(r_key) != m_key_set.end())
{
std::cerr << "check_key_does_not_exist " << r_key << std::endl;
- abort();
+ std::abort();
}
}
@@ -237,7 +238,7 @@ namespace pb_ds
{
std::cerr << "check_size " << size
<< " " << key_set_size << std::endl;
- abort();
+ std::abort();
}
_GLIBCXX_DEBUG_ONLY(assert_valid();)
}
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
index 1bae0192577..aa29e07e154 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
@@ -280,7 +280,7 @@ PB_DS_CLASS_T_DEC
void
PB_DS_CLASS_C_DEC::
do_resize(size_type)
-{ abort(); }
+{ std::abort(); }
#ifdef _GLIBCXX_DEBUG
PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/ext/pb_ds/exception.hpp b/libstdc++-v3/include/ext/pb_ds/exception.hpp
index 896ff391810..379623d2d54 100644
--- a/libstdc++-v3/include/ext/pb_ds/exception.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/exception.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -48,6 +48,7 @@
#define PB_DS_EXCEPTION_HPP
#include <stdexcept>
+#include <cstdlib>
namespace pb_ds
{
diff --git a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
index cfe2a2c375e..876ea3e2f38 100644
--- a/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,6 +47,7 @@
#ifndef PB_DS_LU_POLICY_HPP
#define PB_DS_LU_POLICY_HPP
+#include <cstdlib>
#include <ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp>
namespace pb_ds
diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope
index 389fd0958d8..0bc371cd116 100644
--- a/libstdc++-v3/include/ext/rope
+++ b/libstdc++-v3/include/ext/rope
@@ -1,6 +1,6 @@
// SGI's rope class -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -57,11 +57,12 @@
#include <bits/stl_numeric.h>
#include <bits/allocator.h>
#include <ext/hash_fun.h>
+#include <iosfwd>
+#include <bits/gthr.h>
# ifdef __GC
# define __GC_CONST const
# else
-# include <bits/gthr.h>
# define __GC_CONST // constant except for deallocation
# endif
diff --git a/libstdc++-v3/include/ext/stdio_sync_filebuf.h b/libstdc++-v3/include/ext/stdio_sync_filebuf.h
index f0ec12c3a69..a1d2b385daa 100644
--- a/libstdc++-v3/include/ext/stdio_sync_filebuf.h
+++ b/libstdc++-v3/include/ext/stdio_sync_filebuf.h
@@ -1,6 +1,6 @@
// Iostreams wrapper for stdio FILE* -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -39,6 +39,7 @@
#include <streambuf>
#include <unistd.h>
#include <cstdio>
+#include <bits/c++io.h> // For __c_file
#ifdef _GLIBCXX_USE_WCHAR_T
#include <cwchar>
diff --git a/libstdc++-v3/include/ext/type_traits.h b/libstdc++-v3/include/ext/type_traits.h
index 1d931ff7d9d..a4ea1ce48cf 100644
--- a/libstdc++-v3/include/ext/type_traits.h
+++ b/libstdc++-v3/include/ext/type_traits.h
@@ -37,10 +37,7 @@
#pragma GCC system_header
-#include <cstddef>
-#include <utility>
#include <limits>
-#include <iosfwd> // std::streamsize
#include <bits/cpp_type_traits.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
@@ -182,12 +179,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
struct __numeric_traits_floating
{
// Only floating point types. See N1822.
- static const std::streamsize __max_digits10 =
+ static const int __max_digits10 =
2 + std::numeric_limits<_Value>::digits * 3010/10000;
};
template<typename _Value>
- const std::streamsize __numeric_traits_floating<_Value>::__max_digits10;
+ const int __numeric_traits_floating<_Value>::__max_digits10;
template<typename _Value>
struct __numeric_traits
diff --git a/libstdc++-v3/include/std/algorithm b/libstdc++-v3/include/std/algorithm
index 7ffbf97369e..8f88cc0378c 100644
--- a/libstdc++-v3/include/std/algorithm
+++ b/libstdc++-v3/include/std/algorithm
@@ -1,6 +1,7 @@
// <algorithm> -*- C++ -*-
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -63,8 +64,6 @@
#pragma GCC system_header
#include <bits/stl_algobase.h>
-#include <bits/stl_construct.h>
-#include <bits/stl_uninitialized.h>
#include <bits/stl_algo.h>
#endif /* _GLIBCXX_ALGORITHM */
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
new file mode 100644
index 00000000000..5ca2604655d
--- /dev/null
+++ b/libstdc++-v3/include/std/array
@@ -0,0 +1,46 @@
+// <array> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/array
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_ARRAY
+#define _GLIBCXX_ARRAY 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/array>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/bitset b/libstdc++-v3/include/std/bitset
index 860e775cc6b..3a7d40b209e 100644
--- a/libstdc++-v3/include/std/bitset
+++ b/libstdc++-v3/include/std/bitset
@@ -1,6 +1,6 @@
// <bitset> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -52,14 +52,12 @@
#include <cstddef> // For size_t
#include <cstring> // For memset
-#include <limits> // For numeric_limits
#include <string>
#include <bits/functexcept.h> // For invalid_argument, out_of_range,
// overflow_error
-#include <ostream> // For ostream (operator<<)
-#include <istream> // For istream (operator>>)
+#include <iosfwd>
-#define _GLIBCXX_BITSET_BITS_PER_WORD numeric_limits<unsigned long>::digits
+#define _GLIBCXX_BITSET_BITS_PER_WORD (__CHAR_BIT__ * sizeof(unsigned long))
#define _GLIBCXX_BITSET_WORDS(__n) \
((__n) < 1 ? 0 : ((__n) + _GLIBCXX_BITSET_BITS_PER_WORD - 1) \
/ _GLIBCXX_BITSET_BITS_PER_WORD)
@@ -1229,12 +1227,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
std::basic_istream<_CharT, _Traits>&
operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x)
{
- typedef typename _Traits::char_type char_type;
+ typedef typename _Traits::char_type char_type;
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
std::basic_string<_CharT, _Traits> __tmp;
__tmp.reserve(_Nb);
- std::ios_base::iostate __state = std::ios_base::goodbit;
- typename std::basic_istream<_CharT, _Traits>::sentry __sentry(__is);
+ typename __ios_base::iostate __state = __ios_base::goodbit;
+ typename __istream_type::sentry __sentry(__is);
if (__sentry)
{
try
@@ -1251,7 +1252,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
typename _Traits::int_type __c1 = __buf->sbumpc();
if (_Traits::eq_int_type(__c1, __eof))
{
- __state |= std::ios_base::eofbit;
+ __state |= __ios_base::eofbit;
break;
}
else
@@ -1264,18 +1265,18 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
else if (_Traits::eq_int_type(__buf->sputbackc(__c2),
__eof))
{
- __state |= std::ios_base::failbit;
+ __state |= __ios_base::failbit;
break;
}
}
}
}
catch(...)
- { __is._M_setstate(std::ios_base::badbit); }
+ { __is._M_setstate(__ios_base::badbit); }
}
if (__tmp.empty() && _Nb)
- __state |= std::ios_base::failbit;
+ __state |= __ios_base::failbit;
else
__x._M_copy_from_string(__tmp, static_cast<size_t>(0), _Nb);
if (__state)
diff --git a/libstdc++-v3/include/std/c++0x_warning.h b/libstdc++-v3/include/std/c++0x_warning.h
new file mode 100644
index 00000000000..642e542b360
--- /dev/null
+++ b/libstdc++-v3/include/std/c++0x_warning.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/c++0x_warning.h
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _CXX0X_WARNING_H
+#define _CXX0X_WARNING_H 1
+
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+#error This file requires compiler and library support for the upcoming \
+ISO C++ standard, C++0x. This support is currently experimental, and must be \
+enabled with the -std=c++0x or -std=gnu++0x compiler options.
+#endif
+
+#endif
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index 26f31f6150f..b91732b0c85 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -1,6 +1,6 @@
// The template and inlines for the -*- C++ -*- complex number classes.
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -1486,4 +1486,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/complex>
+#endif
+
#endif /* _GLIBCXX_COMPLEX */
diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque
index 57c6e4347ad..1891b34dcb3 100644
--- a/libstdc++-v3/include/std/deque
+++ b/libstdc++-v3/include/std/deque
@@ -1,6 +1,7 @@
// <deque> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -62,7 +63,6 @@
#pragma GCC system_header
-#include <bits/functexcept.h>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_construct.h>
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index f664f2de9f4..0687905e262 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -1,6 +1,7 @@
// File based streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -44,9 +45,8 @@
#include <istream>
#include <ostream>
#include <locale> // For codecvt
-#include <cstdio> // For SEEK_SET, SEEK_CUR, SEEK_END, BUFSIZ
-#include <bits/basic_file.h>
-#include <bits/gthr.h>
+#include <cstdio> // For BUFSIZ
+#include <bits/basic_file.h> // For __basic_file, __c_lock
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index feadaa2252a..33bab643b1f 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1,6 +1,7 @@
// <functional> -*- C++ -*-
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -51,7 +52,10 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <cstddef>
#include <bits/stl_function.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/functional>
+#endif
+
#endif /* _GLIBCXX_FUNCTIONAL */
diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip
index 13b21d579bd..53c013c2be8 100644
--- a/libstdc++-v3/include/std/iomanip
+++ b/libstdc++-v3/include/std/iomanip
@@ -1,6 +1,7 @@
// Standard stream manipulators -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -42,8 +43,8 @@
#pragma GCC system_header
#include <bits/c++config.h>
-#include <istream>
-#include <functional>
+#include <iosfwd>
+#include <bits/ios_base.h>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -68,16 +69,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Resetiosflags __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f)
{
__is.setf(ios_base::fmtflags(0), __f._M_mask);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Resetiosflags __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f)
{
__os.setf(ios_base::fmtflags(0), __f._M_mask);
return __os;
@@ -102,16 +103,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Setiosflags __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f)
{
__is.setf(__f._M_mask);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Setiosflags __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f)
{
__os.setf(__f._M_mask);
return __os;
@@ -137,19 +138,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Setbase __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f)
{
__is.setf(__f._M_base == 8 ? ios_base::oct :
- __f._M_base == 10 ? ios_base::dec :
- __f._M_base == 16 ? ios_base::hex :
- ios_base::fmtflags(0), ios_base::basefield);
+ __f._M_base == 10 ? ios_base::dec :
+ __f._M_base == 16 ? ios_base::hex :
+ ios_base::fmtflags(0), ios_base::basefield);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Setbase __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f)
{
__os.setf(__f._M_base == 8 ? ios_base::oct :
__f._M_base == 10 ? ios_base::dec :
@@ -179,16 +180,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Setfill<_CharT> __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f)
{
__is.fill(__f._M_c);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Setfill<_CharT> __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f)
{
__os.fill(__f._M_c);
return __os;
@@ -213,16 +214,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Setprecision __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f)
{
__is.precision(__f._M_n);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Setprecision __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f)
{
__os.precision(__f._M_n);
return __os;
@@ -247,16 +248,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}
template<typename _CharT, typename _Traits>
- inline basic_istream<_CharT,_Traits>&
- operator>>(basic_istream<_CharT,_Traits>& __is, _Setw __f)
+ inline basic_istream<_CharT, _Traits>&
+ operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f)
{
__is.width(__f._M_n);
return __is;
}
template<typename _CharT, typename _Traits>
- inline basic_ostream<_CharT,_Traits>&
- operator<<(basic_ostream<_CharT,_Traits>& __os, _Setw __f)
+ inline basic_ostream<_CharT, _Traits>&
+ operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)
{
__os.width(__f._M_n);
return __os;
diff --git a/libstdc++-v3/include/std/ios b/libstdc++-v3/include/std/ios
index f081115e9b7..e545b89aacd 100644
--- a/libstdc++-v3/include/std/ios
+++ b/libstdc++-v3/include/std/ios
@@ -1,6 +1,7 @@
// Iostreams base classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+// 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -43,7 +44,6 @@
#include <iosfwd>
#include <exception> // For ios_base::failure
#include <bits/char_traits.h> // For char_traits, streamoff, streamsize, fpos
-#include <cstdio> // For SEEK_SET, SEEK_CUR, SEEK_END
#include <bits/localefwd.h> // For class locale
#include <bits/ios_base.h> // For ios_base declarations.
#include <streambuf>
diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
index a4d0c3fdf19..bf23f18f68c 100644
--- a/libstdc++-v3/include/std/iosfwd
+++ b/libstdc++-v3/include/std/iosfwd
@@ -1,6 +1,7 @@
// Forwarding declarations -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -43,8 +44,6 @@
#include <bits/c++config.h>
#include <bits/c++locale.h>
-#include <bits/c++io.h>
-#include <cctype> // For isspace, etc.
#include <bits/stringfwd.h> // For string forward declarations.
#include <bits/postypes.h>
#include <bits/functexcept.h>
diff --git a/libstdc++-v3/include/std/iostream b/libstdc++-v3/include/std/iostream
index 0ff0da2177f..a4bdf86377a 100644
--- a/libstdc++-v3/include/std/iostream
+++ b/libstdc++-v3/include/std/iostream
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index e81c9cd9252..0a4e5c73755 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -1,6 +1,7 @@
// Input streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -42,6 +43,8 @@
#pragma GCC system_header
#include <ios>
+#include <locale>
+#include <ostream>
#include <limits> // For numeric_limits
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/std/iterator b/libstdc++-v3/include/std/iterator
index f0317b44a7c..5533590f15c 100644
--- a/libstdc++-v3/include/std/iterator
+++ b/libstdc++-v3/include/std/iterator
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits
index fffa875d91f..621a6fc347f 100644
--- a/libstdc++-v3/include/std/limits
+++ b/libstdc++-v3/include/std/limits
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/list b/libstdc++-v3/include/std/list
index b46f65417ec..8e58586f51d 100644
--- a/libstdc++-v3/include/std/list
+++ b/libstdc++-v3/include/std/list
@@ -1,6 +1,7 @@
// <list> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -62,11 +63,8 @@
#pragma GCC system_header
-#include <bits/functexcept.h>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
-#include <bits/stl_construct.h>
-#include <bits/stl_uninitialized.h>
#include <bits/stl_list.h>
#ifndef _GLIBCXX_EXPORT_TEMPLATE
diff --git a/libstdc++-v3/include/std/locale b/libstdc++-v3/include/std/locale
index 5223f90c878..328332a86b3 100644
--- a/libstdc++-v3/include/std/locale
+++ b/libstdc++-v3/include/std/locale
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/map b/libstdc++-v3/include/std/map
index a7e8f9c2107..29a5f6e015c 100644
--- a/libstdc++-v3/include/std/map
+++ b/libstdc++-v3/include/std/map
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index c47d49c034d..33bc2169f73 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -1,6 +1,6 @@
// <memory> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -51,334 +51,11 @@
#pragma GCC system_header
-#include <bits/stl_algobase.h>
-#include <bits/allocator.h>
-#include <bits/stl_construct.h>
-#include <bits/stl_iterator_base_types.h> //for iterator_traits
-#include <bits/stl_uninitialized.h>
-#include <bits/stl_raw_storage_iter.h>
-#include <debug/debug.h>
-#include <limits>
+#include <bits/c++config.h>
+#include <bits/stl_memory.h>
-_GLIBCXX_BEGIN_NAMESPACE(std)
-
- /**
- * @if maint
- * This is a helper function. The unused second parameter exists to
- * permit the real get_temporary_buffer to use template parameter deduction.
- *
- * XXX This should perhaps use the pool.
- * @endif
- */
- template<typename _Tp>
- pair<_Tp*, ptrdiff_t>
- __get_temporary_buffer(ptrdiff_t __len, _Tp*)
- {
- const ptrdiff_t __max = numeric_limits<ptrdiff_t>::max() / sizeof(_Tp);
- if (__len > __max)
- __len = __max;
-
- while (__len > 0)
- {
- _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
- nothrow));
- if (__tmp != 0)
- return pair<_Tp*, ptrdiff_t>(__tmp, __len);
- __len /= 2;
- }
- return pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
- }
-
- /**
- * @brief Allocates a temporary buffer.
- * @param len The number of objects of type Tp.
- * @return See full description.
- *
- * Reinventing the wheel, but this time with prettier spokes!
- *
- * This function tries to obtain storage for @c len adjacent Tp
- * objects. The objects themselves are not constructed, of course.
- * A pair<> is returned containing "the buffer s address and
- * capacity (in the units of sizeof(Tp)), or a pair of 0 values if
- * no storage can be obtained." Note that the capacity obtained
- * may be less than that requested if the memory is unavailable;
- * you should compare len with the .second return value.
- *
- * Provides the nothrow exception guarantee.
- */
- template<typename _Tp>
- inline pair<_Tp*, ptrdiff_t>
- get_temporary_buffer(ptrdiff_t __len)
- { return std::__get_temporary_buffer(__len, static_cast<_Tp*>(0)); }
-
- /**
- * @brief The companion to get_temporary_buffer().
- * @param p A buffer previously allocated by get_temporary_buffer.
- * @return None.
- *
- * Frees the memory pointed to by p.
- */
- template<typename _Tp>
- void
- return_temporary_buffer(_Tp* __p)
- { ::operator delete(__p, nothrow); }
-
- /**
- * A wrapper class to provide auto_ptr with reference semantics.
- * For example, an auto_ptr can be assigned (or constructed from)
- * the result of a function which returns an auto_ptr by value.
- *
- * All the auto_ptr_ref stuff should happen behind the scenes.
- */
- template<typename _Tp1>
- struct auto_ptr_ref
- {
- _Tp1* _M_ptr;
-
- explicit
- auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
- };
-
-
- /**
- * @brief A simple smart pointer providing strict ownership semantics.
- *
- * The Standard says:
- * <pre>
- * An @c auto_ptr owns the object it holds a pointer to. Copying
- * an @c auto_ptr copies the pointer and transfers ownership to the
- * destination. If more than one @c auto_ptr owns the same object
- * at the same time the behavior of the program is undefined.
- *
- * The uses of @c auto_ptr include providing temporary
- * exception-safety for dynamically allocated memory, passing
- * ownership of dynamically allocated memory to a function, and
- * returning dynamically allocated memory from a function. @c
- * auto_ptr does not meet the CopyConstructible and Assignable
- * requirements for Standard Library <a
- * href="tables.html#65">container</a> elements and thus
- * instantiating a Standard Library container with an @c auto_ptr
- * results in undefined behavior.
- * </pre>
- * Quoted from [20.4.5]/3.
- *
- * Good examples of what can and cannot be done with auto_ptr can
- * be found in the libstdc++ testsuite.
- *
- * @if maint
- * _GLIBCXX_RESOLVE_LIB_DEFECTS
- * 127. auto_ptr<> conversion issues
- * These resolutions have all been incorporated.
- * @endif
- */
- template<typename _Tp>
- class auto_ptr
- {
- private:
- _Tp* _M_ptr;
-
- public:
- /// The pointed-to type.
- typedef _Tp element_type;
-
- /**
- * @brief An %auto_ptr is usually constructed from a raw pointer.
- * @param p A pointer (defaults to NULL).
- *
- * This object now @e owns the object pointed to by @a p.
- */
- explicit
- auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
-
- /**
- * @brief An %auto_ptr can be constructed from another %auto_ptr.
- * @param a Another %auto_ptr of the same type.
- *
- * This object now @e owns the object previously owned by @a a,
- * which has given up ownsership.
- */
- auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
-
- /**
- * @brief An %auto_ptr can be constructed from another %auto_ptr.
- * @param a Another %auto_ptr of a different but related type.
- *
- * A pointer-to-Tp1 must be convertible to a
- * pointer-to-Tp/element_type.
- *
- * This object now @e owns the object previously owned by @a a,
- * which has given up ownsership.
- */
- template<typename _Tp1>
- auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
-
- /**
- * @brief %auto_ptr assignment operator.
- * @param a Another %auto_ptr of the same type.
- *
- * This object now @e owns the object previously owned by @a a,
- * which has given up ownsership. The object that this one @e
- * used to own and track has been deleted.
- */
- auto_ptr&
- operator=(auto_ptr& __a) throw()
- {
- reset(__a.release());
- return *this;
- }
-
- /**
- * @brief %auto_ptr assignment operator.
- * @param a Another %auto_ptr of a different but related type.
- *
- * A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type.
- *
- * This object now @e owns the object previously owned by @a a,
- * which has given up ownsership. The object that this one @e
- * used to own and track has been deleted.
- */
- template<typename _Tp1>
- auto_ptr&
- operator=(auto_ptr<_Tp1>& __a) throw()
- {
- reset(__a.release());
- return *this;
- }
-
- /**
- * When the %auto_ptr goes out of scope, the object it owns is
- * deleted. If it no longer owns anything (i.e., @c get() is
- * @c NULL), then this has no effect.
- *
- * @if maint
- * The C++ standard says there is supposed to be an empty throw
- * specification here, but omitting it is standard conforming. Its
- * presence can be detected only if _Tp::~_Tp() throws, but this is
- * prohibited. [17.4.3.6]/2
- * @endif
- */
- ~auto_ptr() { delete _M_ptr; }
-
- /**
- * @brief Smart pointer dereferencing.
- *
- * If this %auto_ptr no longer owns anything, then this
- * operation will crash. (For a smart pointer, "no longer owns
- * anything" is the same as being a null pointer, and you know
- * what happens when you dereference one of those...)
- */
- element_type&
- operator*() const throw()
- {
- _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
- return *_M_ptr;
- }
-
- /**
- * @brief Smart pointer dereferencing.
- *
- * This returns the pointer itself, which the language then will
- * automatically cause to be dereferenced.
- */
- element_type*
- operator->() const throw()
- {
- _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0);
- return _M_ptr;
- }
-
- /**
- * @brief Bypassing the smart pointer.
- * @return The raw pointer being managed.
- *
- * You can get a copy of the pointer that this object owns, for
- * situations such as passing to a function which only accepts
- * a raw pointer.
- *
- * @note This %auto_ptr still owns the memory.
- */
- element_type*
- get() const throw() { return _M_ptr; }
-
- /**
- * @brief Bypassing the smart pointer.
- * @return The raw pointer being managed.
- *
- * You can get a copy of the pointer that this object owns, for
- * situations such as passing to a function which only accepts
- * a raw pointer.
- *
- * @note This %auto_ptr no longer owns the memory. When this object
- * goes out of scope, nothing will happen.
- */
- element_type*
- release() throw()
- {
- element_type* __tmp = _M_ptr;
- _M_ptr = 0;
- return __tmp;
- }
-
- /**
- * @brief Forcibly deletes the managed object.
- * @param p A pointer (defaults to NULL).
- *
- * This object now @e owns the object pointed to by @a p. The
- * previous object has been deleted.
- */
- void
- reset(element_type* __p = 0) throw()
- {
- if (__p != _M_ptr)
- {
- delete _M_ptr;
- _M_ptr = __p;
- }
- }
-
- /**
- * @brief Automatic conversions
- *
- * These operations convert an %auto_ptr into and from an auto_ptr_ref
- * automatically as needed. This allows constructs such as
- * @code
- * auto_ptr<Derived> func_returning_auto_ptr(.....);
- * ...
- * auto_ptr<Base> ptr = func_returning_auto_ptr(.....);
- * @endcode
- */
- auto_ptr(auto_ptr_ref<element_type> __ref) throw()
- : _M_ptr(__ref._M_ptr) { }
-
- auto_ptr&
- operator=(auto_ptr_ref<element_type> __ref) throw()
- {
- if (__ref._M_ptr != this->get())
- {
- delete _M_ptr;
- _M_ptr = __ref._M_ptr;
- }
- return *this;
- }
-
- template<typename _Tp1>
- operator auto_ptr_ref<_Tp1>() throw()
- { return auto_ptr_ref<_Tp1>(this->release()); }
-
- template<typename _Tp1>
- operator auto_ptr<_Tp1>() throw()
- { return auto_ptr<_Tp1>(this->release()); }
- };
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 541. shared_ptr template assignment and void
- template<>
- class auto_ptr<void>
- {
- public:
- typedef void element_type;
- };
-
-_GLIBCXX_END_NAMESPACE
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/memory>
+#endif
#endif /* _GLIBCXX_MEMORY */
diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric
index 03f82dd6ab0..7f21b3d9e8e 100644
--- a/libstdc++-v3/include/std/numeric
+++ b/libstdc++-v3/include/std/numeric
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -64,8 +64,7 @@
#include <bits/c++config.h>
#include <cstddef>
-#include <iterator>
-#include <bits/stl_function.h>
+#include <bits/stl_iterator_base_types.h>
#include <bits/stl_numeric.h>
#endif /* _GLIBCXX_NUMERIC */
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index e97b7a4b410..942a5a4a609 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -1,6 +1,7 @@
// Output streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -42,6 +43,7 @@
#pragma GCC system_header
#include <ios>
+#include <locale>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/include/std/queue b/libstdc++-v3/include/std/queue
index 1242a06160b..42cc43217ae 100644
--- a/libstdc++-v3/include/std/queue
+++ b/libstdc++-v3/include/std/queue
@@ -1,6 +1,7 @@
// <queue> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -62,16 +63,10 @@
#pragma GCC system_header
-#include <bits/c++config.h>
-#include <bits/functexcept.h>
-#include <bits/stl_algobase.h>
-#include <bits/allocator.h>
-#include <bits/stl_construct.h>
-#include <bits/stl_uninitialized.h>
-#include <bits/stl_heap.h>
-#include <bits/stl_function.h>
#include <deque>
#include <vector>
+#include <bits/stl_heap.h>
+#include <bits/stl_function.h>
#include <bits/stl_queue.h>
#endif /* _GLIBCXX_QUEUE */
diff --git a/libstdc++-v3/include/std/random b/libstdc++-v3/include/std/random
new file mode 100644
index 00000000000..6faf5f56506
--- /dev/null
+++ b/libstdc++-v3/include/std/random
@@ -0,0 +1,46 @@
+// <random> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/random
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_RANDOM
+#define _GLIBCXX_RANDOM 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/random>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex
new file mode 100644
index 00000000000..4b4e4827c29
--- /dev/null
+++ b/libstdc++-v3/include/std/regex
@@ -0,0 +1,46 @@
+// <regex> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/regex
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_REGEX
+#define _GLIBCXX_REGEX 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/regex>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/set b/libstdc++-v3/include/std/set
index 65ebe8a10cc..801a8b1ef26 100644
--- a/libstdc++-v3/include/std/set
+++ b/libstdc++-v3/include/std/set
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/sstream b/libstdc++-v3/include/std/sstream
index a09815c1945..66159c844f1 100644
--- a/libstdc++-v3/include/std/sstream
+++ b/libstdc++-v3/include/std/sstream
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/stack b/libstdc++-v3/include/std/stack
index 396f62e6100..318d4b9533b 100644
--- a/libstdc++-v3/include/std/stack
+++ b/libstdc++-v3/include/std/stack
@@ -1,6 +1,7 @@
// <stack> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -62,10 +63,6 @@
#pragma GCC system_header
-#include <bits/stl_algobase.h>
-#include <bits/allocator.h>
-#include <bits/stl_construct.h>
-#include <bits/stl_uninitialized.h>
#include <deque>
#include <bits/stl_stack.h>
diff --git a/libstdc++-v3/include/std/stdexcept b/libstdc++-v3/include/std/stdexcept
index 2d56b3817d4..d246428f4de 100644
--- a/libstdc++-v3/include/std/stdexcept
+++ b/libstdc++-v3/include/std/stdexcept
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/streambuf b/libstdc++-v3/include/std/streambuf
index 9de7907120f..5e710377ab4 100644
--- a/libstdc++-v3/include/std/streambuf
+++ b/libstdc++-v3/include/std/streambuf
@@ -14,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string
index 0899cfe5a10..781901587cb 100644
--- a/libstdc++-v3/include/std/string
+++ b/libstdc++-v3/include/std/string
@@ -15,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
new file mode 100644
index 00000000000..7ea9aff4c5d
--- /dev/null
+++ b/libstdc++-v3/include/std/tuple
@@ -0,0 +1,46 @@
+// <tuple> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/tuple
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TUPLE
+#define _GLIBCXX_TUPLE 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/tuple>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
new file mode 100644
index 00000000000..1d83dabd861
--- /dev/null
+++ b/libstdc++-v3/include/std/type_traits
@@ -0,0 +1,46 @@
+// <type_traits> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/type_traits
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_TYPE_TRAITS
+#define _GLIBCXX_TYPE_TRAITS 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/type_traits>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/unordered_map b/libstdc++-v3/include/std/unordered_map
new file mode 100644
index 00000000000..9eee766dd0a
--- /dev/null
+++ b/libstdc++-v3/include/std/unordered_map
@@ -0,0 +1,46 @@
+// <unordered_map> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/unordered_map
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_UNORDERED_MAP
+#define _GLIBCXX_UNORDERED_MAP 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/unordered_map>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/unordered_set b/libstdc++-v3/include/std/unordered_set
new file mode 100644
index 00000000000..d83cfa3663d
--- /dev/null
+++ b/libstdc++-v3/include/std/unordered_set
@@ -0,0 +1,46 @@
+// <unordered_set> -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/** @file include/unordered_set
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_UNORDERED_SET
+#define _GLIBCXX_UNORDERED_SET 1
+
+#pragma GCC system_header
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/unordered_set>
+#else
+# include <c++0x_warning.h>
+#endif
+
+#endif
+
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility
index 84c9131d82b..c17b355bcdf 100644
--- a/libstdc++-v3/include/std/utility
+++ b/libstdc++-v3/include/std/utility
@@ -1,6 +1,6 @@
// <utility> -*- C++ -*-
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +13,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -66,4 +66,8 @@
#include <bits/stl_relops.h>
#include <bits/stl_pair.h>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <tr1/utility>
+#endif
+
#endif /* _GLIBCXX_UTILITY */
diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray
index 50528bfa7fd..4898c152e83 100644
--- a/libstdc++-v3/include/std/valarray
+++ b/libstdc++-v3/include/std/valarray
@@ -1,6 +1,7 @@
// The template and inlines for the -*- C++ -*- valarray class.
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -14,10 +15,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -42,8 +43,6 @@
#include <bits/c++config.h>
#include <cstddef>
#include <cmath>
-#include <cstdlib>
-#include <numeric>
#include <algorithm>
#include <debug/debug.h>
diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector
index a4a527eea03..83a08ff4a1b 100644
--- a/libstdc++-v3/include/std/vector
+++ b/libstdc++-v3/include/std/vector
@@ -1,6 +1,7 @@
// <vector> -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -13,10 +14,10 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
@@ -62,7 +63,6 @@
#pragma GCC system_header
-#include <bits/functexcept.h>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_construct.h>
diff --git a/libstdc++-v3/include/tr1/array b/libstdc++-v3/include/tr1/array
index 23808b33462..34508dfce61 100644
--- a/libstdc++-v3/include/tr1/array
+++ b/libstdc++-v3/include/tr1/array
@@ -1,6 +1,6 @@
// class template array -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,17 +34,12 @@
#ifndef _TR1_ARRAY
#define _TR1_ARRAY 1
-#include <new>
-#include <iterator>
-#include <algorithm>
-#include <cstddef>
-#include <bits/functexcept.h>
-#include <ext/type_traits.h>
+#include <bits/stl_algobase.h>
//namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/// @brief struct array [6.2.2].
/// NB: Requires complete type _Tp.
diff --git a/libstdc++-v3/include/tr1/bind_iterate.h b/libstdc++-v3/include/tr1/bind_iterate.h
deleted file mode 100644
index 3de49a77b6c..00000000000
--- a/libstdc++-v3/include/tr1/bind_iterate.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// TR1 functional -*- C++ -*-
-
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/bind_iterate.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-#if _GLIBCXX_BIND_NUM_ARGS > 0
-template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
-#endif
-#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
-result_type
-#else
-typename result_of<_Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS())>::type
-#endif
-operator()(_GLIBCXX_BIND_PARAMS)
-{ return _M_f(_GLIBCXX_BIND_V_ARGS); }
-
-#if _GLIBCXX_BIND_NUM_ARGS > 0
-template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
-#endif
-#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
-result_type
-#else
-typename result_of<const _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const))>::type
-#endif
-operator()(_GLIBCXX_BIND_PARAMS) const
-{ return _M_f(_GLIBCXX_BIND_V_ARGS); }
-
-#if _GLIBCXX_BIND_NUM_ARGS > 0
-template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
-#endif
-#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
-result_type
-#else
-typename result_of<volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(volatile))>::type
-#endif
-operator()(_GLIBCXX_BIND_PARAMS) volatile
-{ return _M_f(_GLIBCXX_BIND_V_ARGS); }
-
-#if _GLIBCXX_BIND_NUM_ARGS > 0
-template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
-#endif
-#ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
-result_type
-#else
-typename result_of<const volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const volatile))>::type
-#endif
-operator()(_GLIBCXX_BIND_PARAMS) const volatile
-{ return _M_f(_GLIBCXX_BIND_V_ARGS); }
diff --git a/libstdc++-v3/include/tr1/bind_repeat.h b/libstdc++-v3/include/tr1/bind_repeat.h
deleted file mode 100644
index 8ec29a2283f..00000000000
--- a/libstdc++-v3/include/tr1/bind_repeat.h
+++ /dev/null
@@ -1,192 +0,0 @@
-// TR1 code repetition for bind -*- C++ -*-
-
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/bind_repeat.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef _GLIBCXX_BIND_REPEAT_HEADER
-# error Internal error: _GLIBCXX_BIND_REPEAT_HEADER must be set
-#endif /* _GLIBCXX_BIND_REPEAT_HEADER */
-
-#define _GLIBCXX_BIND_NUM_ARGS 0
-#define _GLIBCXX_BIND_COMMA
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS
-#define _GLIBCXX_BIND_TEMPLATE_ARGS
-#define _GLIBCXX_BIND_PARAMS
-#define _GLIBCXX_BIND_ARGS
-# include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 1
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1
-#define _GLIBCXX_BIND_PARAMS _U1& __u1
-#define _GLIBCXX_BIND_ARGS __u1
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-#define _GLIBCXX_BIND_NUM_ARGS 2
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2
-#define _GLIBCXX_BIND_ARGS __u1, __u2
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 3
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 4
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 5
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 6
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 7
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 8
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 9
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
-#define _GLIBCXX_BIND_NUM_ARGS 10
-#define _GLIBCXX_BIND_COMMA ,
-#define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10
-#define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10
-#define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10
-#define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10
-#include _GLIBCXX_BIND_REPEAT_HEADER
-#undef _GLIBCXX_BIND_ARGS
-#undef _GLIBCXX_BIND_PARAMS
-#undef _GLIBCXX_BIND_TEMPLATE_ARGS
-#undef _GLIBCXX_BIND_TEMPLATE_PARAMS
-#undef _GLIBCXX_BIND_COMMA
-#undef _GLIBCXX_BIND_NUM_ARGS
-
diff --git a/libstdc++-v3/include/tr1/boost_shared_ptr.h b/libstdc++-v3/include/tr1/boost_shared_ptr.h
index fc79cfc70c2..524a98ccc04 100644
--- a/libstdc++-v3/include/tr1/boost_shared_ptr.h
+++ b/libstdc++-v3/include/tr1/boost_shared_ptr.h
@@ -56,7 +56,7 @@
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
class bad_weak_ptr : public std::exception
{
diff --git a/libstdc++-v3/include/tr1/ref_fwd.h b/libstdc++-v3/include/tr1/ccomplex
index 6c0efbc60e1..a9196458fd1 100644
--- a/libstdc++-v3/include/tr1/ref_fwd.h
+++ b/libstdc++-v3/include/tr1/ccomplex
@@ -1,8 +1,6 @@
+// TR1 ccomplex -*- C++ -*-
-
-// class template reference_wrapper forwarding header -*- C++ -*-
-
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,31 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-/** @file tr1/ref_fwd.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
+/** @file tr1/ccomplex
+ * This is a TR1 C++ Library header.
*/
-// Douglas Gregor <doug.gregor -at- gmail.com>
-#ifndef _TR1_REF_FWD
-#define _TR1_REF_FWD
-
-namespace std
-{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
-
-template<typename _Tp>
- class reference_wrapper;
-
-template<typename _Tp>
- reference_wrapper<_Tp>
- ref(_Tp& __t);
+#ifndef _TR1_CCOMPLEX
+#define _TR1_CCOMPLEX 1
- // Denotes a const reference should be taken to a variable.
-template<typename _Tp>
- reference_wrapper<const _Tp>
- cref(const _Tp& __t);
+#include <tr1/complex>
-_GLIBCXX_END_NAMESPACE
-}
#endif
diff --git a/libstdc++-v3/include/tr1/cctype b/libstdc++-v3/include/tr1/cctype
index 8ddfa89002e..7d428f9430b 100644
--- a/libstdc++-v3/include/tr1/cctype
+++ b/libstdc++-v3/include/tr1/cctype
@@ -44,7 +44,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
using ::isblank;
diff --git a/libstdc++-v3/include/tr1/cfenv b/libstdc++-v3/include/tr1/cfenv
index ddcce74c591..a468526ab9c 100644
--- a/libstdc++-v3/include/tr1/cfenv
+++ b/libstdc++-v3/include/tr1/cfenv
@@ -55,7 +55,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// types
using ::fenv_t;
diff --git a/libstdc++-v3/include/tr1/cinttypes b/libstdc++-v3/include/tr1/cinttypes
index 03bdd30c615..398ab1d2e18 100644
--- a/libstdc++-v3/include/tr1/cinttypes
+++ b/libstdc++-v3/include/tr1/cinttypes
@@ -46,7 +46,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// types
using ::imaxdiv_t;
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath
index f08e86f73de..65115e67350 100644
--- a/libstdc++-v3/include/tr1/cmath
+++ b/libstdc++-v3/include/tr1/cmath
@@ -151,7 +151,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99_MATH_TR1
@@ -375,10 +375,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
__gnu_cxx::__enable_if<std::__is_floating<_Tp>::__value
|| std::__is_floating<_Up>::__value,
typename
- std::tr1::__promote_2<_Tp, _Up>::__type>::__type
+ std::_GLIBCXX_TR1::__promote_2<_Tp, _Up>::__type>::__type
atan2(_Tp __y, _Up __x)
{
- typedef typename std::tr1::__promote_2<_Tp, _Up>::__type __type;
+ typedef typename std::_GLIBCXX_TR1::__promote_2<_Tp, _Up>::__type __type;
return std::atan2(__type(__y), __type(__x));
}
} // namespace __detail
diff --git a/libstdc++-v3/include/tr1/common.h b/libstdc++-v3/include/tr1/common.h
index 7d098f863dd..fb13cdea320 100644
--- a/libstdc++-v3/include/tr1/common.h
+++ b/libstdc++-v3/include/tr1/common.h
@@ -39,7 +39,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
template<typename _Tp, bool = is_integral<_Tp>::value>
struct __promote
diff --git a/libstdc++-v3/include/tr1/complex b/libstdc++-v3/include/tr1/complex
index 0817ef761e3..666cae9e81d 100644
--- a/libstdc++-v3/include/tr1/complex
+++ b/libstdc++-v3/include/tr1/complex
@@ -1,6 +1,6 @@
// TR1 complex -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -34,13 +34,13 @@
#ifndef _TR1_COMPLEX
#define _TR1_COMPLEX 1
-#include "../complex"
+#include <complex>
#include <tr1/common.h>
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// Forward declarations.
template<typename _Tp> std::complex<_Tp> acos(const std::complex<_Tp>&);
@@ -59,7 +59,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
inline std::complex<_Tp>
__complex_acos(const std::complex<_Tp>& __z)
{
- const std::complex<_Tp> __t = std::tr1::asin(__z);
+ const std::complex<_Tp> __t = std::_GLIBCXX_TR1::asin(__z);
const _Tp __pi_2 = 1.5707963267948966192313216916397514L;
return std::complex<_Tp>(__pi_2 - __t.real(), -__t.imag());
}
@@ -96,7 +96,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
__complex_asin(const std::complex<_Tp>& __z)
{
std::complex<_Tp> __t(-__z.imag(), __z.real());
- __t = std::tr1::asinh(__t);
+ __t = std::_GLIBCXX_TR1::asinh(__t);
return std::complex<_Tp>(__t.imag(), -__t.real());
}
diff --git a/libstdc++-v3/include/tr1/mu_iterate.h b/libstdc++-v3/include/tr1/complex.h
index abdc724a7d4..12fadec33ff 100644
--- a/libstdc++-v3/include/tr1/mu_iterate.h
+++ b/libstdc++-v3/include/tr1/complex.h
@@ -1,7 +1,6 @@
-// TR1 functional -*- C++ -*-
+// TR1 complex.h -*- C++ -*-
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
+// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,25 +27,13 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-/** @file tr1/mu_iterate.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
+/** @file tr1/complex.h
+ * This is a TR1 C++ Library header.
*/
-// Determine the result type when we pass the arguments along. This
-// involves passing along the cv-qualifiers placed on _Mu and
-// unwrapping the argument bundle.
-// @namespace std::tr1
-// @class std::tr1::_Mu::result
-template<typename _CVMu, typename _CVArg
- _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class result<_CVMu(_CVArg, tuple<_GLIBCXX_TEMPLATE_ARGS>)>
- : public result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)> { };
-
-template<typename _CVArg _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-typename result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)>::type
-operator()(_CVArg& __arg, const tuple<_GLIBCXX_TEMPLATE_ARGS>& __tuple)
- const volatile
-{
- return __arg(_GLIBCXX_MU_GET_TUPLE_ARGS);
-}
+#ifndef _TR1_COMPLEX_H
+#define _TR1_COMPLEX_H 1
+
+#include <tr1/ccomplex>
+
+#endif
diff --git a/libstdc++-v3/include/tr1/cstdint b/libstdc++-v3/include/tr1/cstdint
index af5a90f288c..a8dce52245f 100644
--- a/libstdc++-v3/include/tr1/cstdint
+++ b/libstdc++-v3/include/tr1/cstdint
@@ -46,7 +46,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
using ::int8_t;
using ::int16_t;
diff --git a/libstdc++-v3/include/tr1/cstdio b/libstdc++-v3/include/tr1/cstdio
index 1cf41b5018a..b016a1527df 100644
--- a/libstdc++-v3/include/tr1/cstdio
+++ b/libstdc++-v3/include/tr1/cstdio
@@ -40,7 +40,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99
using std::snprintf;
diff --git a/libstdc++-v3/include/tr1/cstdlib b/libstdc++-v3/include/tr1/cstdlib
index f7f8d7d9c44..5096fa8ca53 100644
--- a/libstdc++-v3/include/tr1/cstdlib
+++ b/libstdc++-v3/include/tr1/cstdlib
@@ -43,7 +43,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99
diff --git a/libstdc++-v3/include/tr1/cwchar b/libstdc++-v3/include/tr1/cwchar
index b918b37dd9f..abc88bb4fdc 100644
--- a/libstdc++-v3/include/tr1/cwchar
+++ b/libstdc++-v3/include/tr1/cwchar
@@ -43,7 +43,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_HAVE_WCSTOF
using std::wcstof;
diff --git a/libstdc++-v3/include/tr1/cwctype b/libstdc++-v3/include/tr1/cwctype
index 7cc7a36c68b..f6e99be4981 100644
--- a/libstdc++-v3/include/tr1/cwctype
+++ b/libstdc++-v3/include/tr1/cwctype
@@ -43,7 +43,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_HAVE_ISWBLANK
using std::iswblank;
diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional
index f3cc78de751..897d48751ff 100644
--- a/libstdc++-v3/include/tr1/functional
+++ b/libstdc++-v3/include/tr1/functional
@@ -36,16 +36,18 @@
#pragma GCC system_header
-#include "../functional"
+#include <cstdlib> // for std::abort
+#include <cmath> // for std::frexp
+#include <string> // for std::tr1::hash
+#include <functional>
#include <typeinfo>
+#include <tr1/tuple>
#include <tr1/type_traits>
#include <ext/type_traits.h>
-#include <cstdlib> // for std::abort
-#include <tr1/tuple>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
template<typename _MemberPointer>
class _Mem_fn;
@@ -109,6 +111,83 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
};
/**
+ * @if maint
+ * Retrieve the result type for a function type.
+ * @endif
+ */
+ template<typename _Res, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res(_ArgTypes...)>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve the result type for a function reference.
+ * @endif
+ */
+ template<typename _Res, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res(&)(_ArgTypes...)>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve the result type for a function pointer.
+ * @endif
+ */
+ template<typename _Res, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res(*)(_ArgTypes...)>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve result type for a member function pointer.
+ * @endif maint
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res (_Class::*)(_ArgTypes...)>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve result type for a const member function pointer.
+ * @endif maint
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res (_Class::*)(_ArgTypes...) const>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve result type for a volatile member function pointer.
+ * @endif maint
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res (_Class::*)(_ArgTypes...) volatile>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
+ * @if maint
+ * Retrieve result type for a const volatile member function pointer.
+ * @endif maint
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ struct _Weak_result_type_impl<_Res (_Class::*)(_ArgTypes...)const volatile>
+ {
+ typedef _Res result_type;
+ };
+
+ /**
* @if maint
* Strip top-level cv-qualifiers from the function object and let
* _Weak_result_type_impl perform the real work.
@@ -143,6 +222,56 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
};
/**
+ * @if maint
+ * Determine whether we can determine a result type from @c Functor
+ * alone.
+ * @endif
+ */
+ template<typename _Functor, typename... _ArgTypes>
+ class result_of<_Functor(_ArgTypes...)>
+ : public _Result_of_impl<
+ _Has_result_type<_Weak_result_type<_Functor> >::value,
+ _Functor(_ArgTypes...)>
+ {
+ };
+
+ /**
+ * @if maint
+ * We already know the result type for @c Functor; use it.
+ * @endif
+ */
+ template<typename _Functor, typename... _ArgTypes>
+ struct _Result_of_impl<true, _Functor(_ArgTypes...)>
+ {
+ typedef typename _Weak_result_type<_Functor>::result_type type;
+ };
+
+ /**
+ * @if maint
+ * We need to compute the result type for this invocation the hard
+ * way.
+ * @endif
+ */
+ template<typename _Functor, typename... _ArgTypes>
+ struct _Result_of_impl<false, _Functor(_ArgTypes...)>
+ {
+ typedef typename _Functor
+ ::template result<_Functor(_ArgTypes...)>::type type;
+ };
+
+ /**
+ * @if maint
+ * It is unsafe to access ::result when there are zero arguments, so we
+ * return @c void instead.
+ * @endif
+ */
+ template<typename _Functor>
+ struct _Result_of_impl<false, _Functor()>
+ {
+ typedef void type;
+ };
+
+ /**
* @if maint
* Determines if the type _Tp derives from unary_function.
* @endif
@@ -200,6 +329,51 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
};
/**
+ * @if maint
+ * Invoke a function object, which may be either a member pointer or a
+ * function object. The first parameter will tell which.
+ * @endif
+ */
+ template<typename _Functor, typename... _Args>
+ inline
+ typename __gnu_cxx::__enable_if<
+ (!is_member_pointer<_Functor>::value
+ && !is_function<_Functor>::value
+ && !is_function<typename remove_pointer<_Functor>::type>::value),
+ typename result_of<_Functor(_Args...)>::type
+ >::__type
+ __invoke(_Functor& __f, _Args&... __args)
+ {
+ return __f(__args...);
+ }
+
+ template<typename _Functor, typename... _Args>
+ inline
+ typename __gnu_cxx::__enable_if<
+ (is_member_pointer<_Functor>::value
+ && !is_function<_Functor>::value
+ && !is_function<typename remove_pointer<_Functor>::type>::value),
+ typename result_of<_Functor(_Args...)>::type
+ >::__type
+ __invoke(_Functor& __f, _Args&... __args)
+ {
+ return mem_fn(__f)(__args...);
+ }
+
+ // To pick up function references (that will become function pointers)
+ template<typename _Functor, typename... _Args>
+ inline
+ typename __gnu_cxx::__enable_if<
+ (is_pointer<_Functor>::value
+ && is_function<typename remove_pointer<_Functor>::type>::value),
+ typename result_of<_Functor(_Args...)>::type
+ >::__type
+ __invoke(_Functor __f, _Args&... __args)
+ {
+ return __f(__args...);
+ }
+
+ /**
* @if maint
* Knowing which of unary_function and binary_function _Tp derives
* from, derives from the same and ensures that reference_wrapper
@@ -364,9 +538,12 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
get() const
{ return *_M_data; }
-#define _GLIBCXX_REPEAT_HEADER <tr1/ref_wrap_iterate.h>
-#include <tr1/repeat.h>
-#undef _GLIBCXX_REPEAT_HEADER
+ template<typename... _Args>
+ typename result_of<_M_func_type(_Args...)>::type
+ operator()(_Args&... __args) const
+ {
+ return __invoke(get(), __args...);
+ }
};
@@ -404,6 +581,216 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typedef _Tp& type;
};
+ /**
+ * @if maint
+ * Derives from @c unary_function or @c binary_function, or perhaps
+ * nothing, depending on the number of arguments provided. The
+ * primary template is the basis case, which derives nothing.
+ * @endif maint
+ */
+ template<typename _Res, typename... _ArgTypes>
+ struct _Maybe_unary_or_binary_function { };
+
+ /**
+ * @if maint
+ * Derives from @c unary_function, as appropriate.
+ * @endif
+ */
+ template<typename _Res, typename _T1>
+ struct _Maybe_unary_or_binary_function<_Res, _T1>
+ : std::unary_function<_T1, _Res> { };
+
+ /**
+ * @if maint
+ * Derives from @c binary_function, as appropriate.
+ * @endif
+ */
+ template<typename _Res, typename _T1, typename _T2>
+ struct _Maybe_unary_or_binary_function<_Res, _T1, _T2>
+ : std::binary_function<_T1, _T2, _Res> { };
+
+ /**
+ * @if maint
+ * Implementation of @c mem_fn for member function pointers.
+ * @endif
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ class _Mem_fn<_Res (_Class::*)(_ArgTypes...)>
+ : public _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>
+ {
+ typedef _Res (_Class::*_Functor)(_ArgTypes...);
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __object, const volatile _Class *,
+ _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __ptr, const volatile void *, _ArgTypes... __args) const
+ { return ((*__ptr).*__pmf)(__args...); }
+
+ public:
+ typedef _Res result_type;
+
+ explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
+
+ // Handle objects
+ _Res operator()(_Class& __object, _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ // Handle pointers
+ _Res operator()(_Class* __object, _ArgTypes... __args) const
+ { return (__object->*__pmf)(__args...); }
+
+ // Handle smart pointers, references and pointers to derived
+ template<typename _Tp>
+ _Res operator()(_Tp& __object, _ArgTypes... __args) const
+ { return _M_call(__object, &__object, __args...); }
+
+ private:
+ _Functor __pmf;
+ };
+
+ /**
+ * @if maint
+ * Implementation of @c mem_fn for const member function pointers.
+ * @endif
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ class _Mem_fn<_Res (_Class::*)(_ArgTypes...) const>
+ : public _Maybe_unary_or_binary_function<_Res, const _Class*,
+ _ArgTypes...>
+ {
+ typedef _Res (_Class::*_Functor)(_ArgTypes...) const;
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __object, const volatile _Class *,
+ _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __ptr, const volatile void *, _ArgTypes... __args) const
+ { return ((*__ptr).*__pmf)(__args...); }
+
+ public:
+ typedef _Res result_type;
+
+ explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
+
+ // Handle objects
+ _Res operator()(const _Class& __object, _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ // Handle pointers
+ _Res operator()(const _Class* __object, _ArgTypes... __args) const
+ { return (__object->*__pmf)(__args...); }
+
+ // Handle smart pointers, references and pointers to derived
+ template<typename _Tp>
+ _Res operator()(_Tp& __object, _ArgTypes... __args) const
+ { return _M_call(__object, &__object, __args...); }
+
+ private:
+ _Functor __pmf;
+ };
+
+ /**
+ * @if maint
+ * Implementation of @c mem_fn for volatile member function pointers.
+ * @endif
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ class _Mem_fn<_Res (_Class::*)(_ArgTypes...) volatile>
+ : public _Maybe_unary_or_binary_function<_Res, volatile _Class*,
+ _ArgTypes...>
+ {
+ typedef _Res (_Class::*_Functor)(_ArgTypes...) volatile;
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __object, const volatile _Class *,
+ _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __ptr, const volatile void *, _ArgTypes... __args) const
+ { return ((*__ptr).*__pmf)(__args...); }
+
+ public:
+ typedef _Res result_type;
+
+ explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
+
+ // Handle objects
+ _Res operator()(volatile _Class& __object, _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ // Handle pointers
+ _Res operator()(volatile _Class* __object, _ArgTypes... __args) const
+ { return (__object->*__pmf)(__args...); }
+
+ // Handle smart pointers, references and pointers to derived
+ template<typename _Tp>
+ _Res operator()(_Tp& __object, _ArgTypes... __args) const
+ { return _M_call(__object, &__object, __args...); }
+
+ private:
+ _Functor __pmf;
+ };
+
+ /**
+ * @if maint
+ * Implementation of @c mem_fn for const volatile member function pointers.
+ * @endif
+ */
+ template<typename _Res, typename _Class, typename... _ArgTypes>
+ class _Mem_fn<_Res (_Class::*)(_ArgTypes...) const volatile>
+ : public _Maybe_unary_or_binary_function<_Res, const volatile _Class*,
+ _ArgTypes...>
+ {
+ typedef _Res (_Class::*_Functor)(_ArgTypes...) const volatile;
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __object, const volatile _Class *,
+ _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ template<typename _Tp>
+ _Res
+ _M_call(_Tp& __ptr, const volatile void *, _ArgTypes... __args) const
+ { return ((*__ptr).*__pmf)(__args...); }
+
+ public:
+ typedef _Res result_type;
+
+ explicit _Mem_fn(_Functor __pmf) : __pmf(__pmf) { }
+
+ // Handle objects
+ _Res
+ operator()(const volatile _Class& __object, _ArgTypes... __args) const
+ { return (__object.*__pmf)(__args...); }
+
+ // Handle pointers
+ _Res
+ operator()(const volatile _Class* __object, _ArgTypes... __args) const
+ { return (__object->*__pmf)(__args...); }
+
+ // Handle smart pointers, references and pointers to derived
+ template<typename _Tp>
+ _Res operator()(_Tp& __object, _ArgTypes... __args) const
+ { return _M_call(__object, &__object, __args...); }
+
+ private:
+ _Functor __pmf;
+ };
+
+
template<typename _Res, typename _Class>
class _Mem_fn<_Res _Class::*>
{
@@ -535,6 +922,41 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
*/
template<int _Num> struct _Placeholder { };
+ // Define a large number of placeholders. There is no way to
+ // simplify this with variadic templates, because we're introducing
+ // unique names for each.
+ namespace placeholders { namespace {
+ _Placeholder<1> _1;
+ _Placeholder<2> _2;
+ _Placeholder<3> _3;
+ _Placeholder<4> _4;
+ _Placeholder<5> _5;
+ _Placeholder<6> _6;
+ _Placeholder<7> _7;
+ _Placeholder<8> _8;
+ _Placeholder<9> _9;
+ _Placeholder<10> _10;
+ _Placeholder<11> _11;
+ _Placeholder<12> _12;
+ _Placeholder<13> _13;
+ _Placeholder<14> _14;
+ _Placeholder<15> _15;
+ _Placeholder<16> _16;
+ _Placeholder<17> _17;
+ _Placeholder<18> _18;
+ _Placeholder<19> _19;
+ _Placeholder<20> _20;
+ _Placeholder<21> _21;
+ _Placeholder<22> _22;
+ _Placeholder<23> _23;
+ _Placeholder<24> _24;
+ _Placeholder<25> _25;
+ _Placeholder<26> _26;
+ _Placeholder<27> _27;
+ _Placeholder<28> _28;
+ _Placeholder<29> _29;
+ } }
+
/**
* @if maint
* Partial specialization of is_placeholder that provides the placeholder
@@ -549,6 +971,79 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const int is_placeholder<_Placeholder<_Num> >::value;
/**
+ * @if maint
+ * Stores a tuple of indices. Used by bind() to extract the elements
+ * in a tuple.
+ * @endif
+ */
+ template<int... Indexes>
+ struct _Index_tuple { };
+
+ /**
+ * @if maint
+ * Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
+ * @endif
+ */
+ template<std::size_t _Num, typename _Tuple = _Index_tuple<> >
+ struct _Build_index_tuple;
+
+ template<std::size_t _Num, int... _Indexes>
+ struct _Build_index_tuple<_Num, _Index_tuple<_Indexes...> >
+ : _Build_index_tuple<_Num - 1,
+ _Index_tuple<_Indexes..., sizeof...(_Indexes)> >
+ {
+ };
+
+ template<int... _Indexes>
+ struct _Build_index_tuple<0, _Index_tuple<_Indexes...> >
+ {
+ typedef _Index_tuple<_Indexes...> __type;
+ };
+
+ /**
+ * @if maint
+ * Used by _Safe_tuple_element to indicate that there is no tuple
+ * element at this position.
+ * @endif
+ */
+ struct _No_tuple_element;
+
+ /**
+ * @if maint
+ * Implementation helper for _Safe_tuple_element. This primary
+ * template handles the case where it is safe to use @c
+ * tuple_element.
+ * @endif
+ */
+ template<int __i, typename _Tuple, bool _IsSafe>
+ struct _Safe_tuple_element_impl
+ : tuple_element<__i, _Tuple> { };
+
+ /**
+ * @if maint
+ * Implementation helper for _Safe_tuple_element. This partial
+ * specialization handles the case where it is not safe to use @c
+ * tuple_element. We just return @c _No_tuple_element.
+ * @endif
+ */
+ template<int __i, typename _Tuple>
+ struct _Safe_tuple_element_impl<__i, _Tuple, false>
+ {
+ typedef _No_tuple_element type;
+ };
+
+ /**
+ * Like tuple_element, but returns @c _No_tuple_element when
+ * tuple_element would return an error.
+ */
+ template<int __i, typename _Tuple>
+ struct _Safe_tuple_element
+ : _Safe_tuple_element_impl<__i, _Tuple,
+ (__i >= 0 && __i < tuple_size<_Tuple>::value)>
+ {
+ };
+
+ /**
* @if maint
* Maps an argument to bind() into an actual argument to the bound
* function object [TR1 3.6.3/5]. Only the first parameter should
@@ -601,9 +1096,33 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
public:
template<typename _Signature> class result;
-#define _GLIBCXX_REPEAT_HEADER <tr1/mu_iterate.h>
-# include <tr1/repeat.h>
-#undef _GLIBCXX_REPEAT_HEADER
+ // Determine the result type when we pass the arguments along. This
+ // involves passing along the cv-qualifiers placed on _Mu and
+ // unwrapping the argument bundle.
+ template<typename _CVMu, typename _CVArg, typename... _Args>
+ class result<_CVMu(_CVArg, tuple<_Args...>)>
+ : public result_of<_CVArg(_Args...)> { };
+
+ template<typename _CVArg, typename... _Args>
+ typename result_of<_CVArg(_Args...)>::type
+ operator()(_CVArg& __arg, const tuple<_Args...>& __tuple)
+ const volatile
+ {
+ // Construct an index tuple and forward to __call
+ typedef typename _Build_index_tuple<sizeof...(_Args)>::__type _Indexes;
+ return this->__call(__arg, __tuple, _Indexes());
+ }
+
+ private:
+ // Invokes the underlying function object __arg by unpacking all
+ // of the arguments in the tuple.
+ template<typename _CVArg, typename... _Args, int... _Indexes>
+ typename result_of<_CVArg(_Args...)>::type
+ __call(_CVArg& __arg, const tuple<_Args...>& __tuple,
+ const _Index_tuple<_Indexes...>&) const volatile
+ {
+ return __arg(_GLIBCXX_TR1::get<_Indexes>(__tuple)...);
+ }
};
/**
@@ -625,8 +1144,8 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// Add a reference, if it hasn't already been done for us.
// This allows us to be a little bit sloppy in constructing
// the tuple that we pass to result_of<...>.
- typedef typename tuple_element<(is_placeholder<_Arg>::value - 1),
- _Tuple>::type __base_type;
+ typedef typename _Safe_tuple_element<(is_placeholder<_Arg>::value - 1),
+ _Tuple>::type __base_type;
public:
typedef typename add_reference<__base_type>::type type;
@@ -636,7 +1155,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typename result<_Mu(_Arg, _Tuple)>::type
operator()(const volatile _Arg&, const _Tuple& __tuple) const volatile
{
- return ::std::tr1::get<(is_placeholder<_Arg>::value - 1)>(__tuple);
+ return ::std::_GLIBCXX_TR1::get<(is_placeholder<_Arg>::value - 1)>(__tuple);
}
};
@@ -698,23 +1217,226 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
* Type of the function object returned from bind().
* @endif
*/
- template<typename _Signature>
- struct _Bind;
+ template<typename _Signature>
+ struct _Bind;
+
+ template<typename _Functor, typename... _Bound_args>
+ class _Bind<_Functor(_Bound_args...)>
+ : public _Weak_result_type<_Functor>
+ {
+ typedef _Bind __self_type;
+ typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
+ _Bound_indexes;
+
+ _Functor _M_f;
+ tuple<_Bound_args...> _M_bound_args;
+
+ // Call unqualified
+ template<typename... _Args, int... _Indexes>
+ typename result_of<
+ _Functor(typename result_of<_Mu<_Bound_args>
+ (_Bound_args, tuple<_Args...>)>::type...)
+ >::type
+ __call(const tuple<_Args...>& __args, _Index_tuple<_Indexes...>)
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as const
+ template<typename... _Args, int... _Indexes>
+ typename result_of<
+ const _Functor(typename result_of<_Mu<_Bound_args>
+ (const _Bound_args, tuple<_Args...>)
+ >::type...)>::type
+ __call(const tuple<_Args...>& __args, _Index_tuple<_Indexes...>) const
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as volatile
+ template<typename... _Args, int... _Indexes>
+ typename result_of<
+ volatile _Functor(typename result_of<_Mu<_Bound_args>
+ (volatile _Bound_args, tuple<_Args...>)
+ >::type...)>::type
+ __call(const tuple<_Args...>& __args,
+ _Index_tuple<_Indexes...>) volatile
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as const volatile
+ template<typename... _Args, int... _Indexes>
+ typename result_of<
+ const volatile _Functor(typename result_of<_Mu<_Bound_args>
+ (const volatile _Bound_args,
+ tuple<_Args...>)
+ >::type...)>::type
+ __call(const tuple<_Args...>& __args,
+ _Index_tuple<_Indexes...>) const volatile
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ public:
+ explicit _Bind(_Functor __f, _Bound_args... __bound_args)
+ : _M_f(__f), _M_bound_args(__bound_args...) { }
+
+ // Call unqualified
+ template<typename... _Args>
+ typename result_of<
+ _Functor(typename result_of<_Mu<_Bound_args>
+ (_Bound_args, tuple<_Args...>)>::type...)
+ >::type
+ operator()(_Args&... __args)
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+ // Call as const
+ template<typename... _Args>
+ typename result_of<
+ const _Functor(typename result_of<_Mu<_Bound_args>
+ (const _Bound_args, tuple<_Args...>)>::type...)
+ >::type
+ operator()(_Args&... __args) const
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+
+ // Call as volatile
+ template<typename... _Args>
+ typename result_of<
+ volatile _Functor(typename result_of<_Mu<_Bound_args>
+ (volatile _Bound_args, tuple<_Args...>)>::type...)
+ >::type
+ operator()(_Args&... __args) volatile
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+
+ // Call as const volatile
+ template<typename... _Args>
+ typename result_of<
+ const volatile _Functor(typename result_of<_Mu<_Bound_args>
+ (const volatile _Bound_args,
+ tuple<_Args...>)>::type...)
+ >::type
+ operator()(_Args&... __args) const volatile
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+ };
/**
* @if maint
* Type of the function object returned from bind<R>().
* @endif
*/
- template<typename _Result, typename _Signature>
- struct _Bind_result;
+ template<typename _Result, typename _Signature>
+ struct _Bind_result;
+
+ template<typename _Result, typename _Functor, typename... _Bound_args>
+ class _Bind_result<_Result, _Functor(_Bound_args...)>
+ {
+ typedef _Bind_result __self_type;
+ typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
+ _Bound_indexes;
+
+ _Functor _M_f;
+ tuple<_Bound_args...> _M_bound_args;
+
+ // Call unqualified
+ template<typename... _Args, int... _Indexes>
+ _Result
+ __call(const tuple<_Args...>& __args, _Index_tuple<_Indexes...>)
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as const
+ template<typename... _Args, int... _Indexes>
+ _Result
+ __call(const tuple<_Args...>& __args, _Index_tuple<_Indexes...>) const
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as volatile
+ template<typename... _Args, int... _Indexes>
+ _Result
+ __call(const tuple<_Args...>& __args,
+ _Index_tuple<_Indexes...>) volatile
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ // Call as const volatile
+ template<typename... _Args, int... _Indexes>
+ _Result
+ __call(const tuple<_Args...>& __args,
+ _Index_tuple<_Indexes...>) const volatile
+ {
+ return _M_f(_Mu<_Bound_args>()
+ (_GLIBCXX_TR1::get<_Indexes>(_M_bound_args), __args)...);
+ }
+
+ public:
+ typedef _Result result_type;
+
+ explicit _Bind_result(_Functor __f, _Bound_args... __bound_args)
+ : _M_f(__f), _M_bound_args(__bound_args...) { }
+
+ // Call unqualified
+ template<typename... _Args>
+ result_type
+ operator()(_Args&... __args)
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+ // Call as const
+ template<typename... _Args>
+ result_type
+ operator()(_Args&... __args) const
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+
+ // Call as volatile
+ template<typename... _Args>
+ result_type
+ operator()(_Args&... __args) volatile
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+
+
+ // Call as const volatile
+ template<typename... _Args>
+ result_type
+ operator()(_Args&... __args) const volatile
+ {
+ return this->__call(_GLIBCXX_TR1::tie(__args...), _Bound_indexes());
+ }
+ };
/**
* @if maint
* Class template _Bind is always a bind expression.
* @endif
*/
- template<typename _Signature>
+ template<typename _Signature>
struct is_bind_expression<_Bind<_Signature> >
{ static const bool value = true; };
@@ -726,9 +1448,36 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
* Class template _Bind_result is always a bind expression.
* @endif
*/
- template<typename _Result, typename _Signature>
- struct is_bind_expression<_Bind_result<_Result, _Signature> >
- { static const bool value = true; };
+ template<typename _Result, typename _Signature>
+ struct is_bind_expression<_Bind_result<_Result, _Signature> >
+ {
+ static const bool value = true;
+ };
+
+ template<typename _Functor, typename... _ArgTypes>
+ inline
+ _Bind<typename _Maybe_wrap_member_pointer<_Functor>::type(_ArgTypes...)>
+ bind(_Functor __f, _ArgTypes... __args)
+ {
+ typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type;
+ typedef typename __maybe_type::type __functor_type;
+ typedef _Bind<__functor_type(_ArgTypes...)> __result_type;
+ return __result_type(__maybe_type::__do_wrap(__f), __args...);
+ }
+
+ template<typename _Result, typename _Functor, typename... _ArgTypes>
+ inline
+ _Bind_result<_Result,
+ typename _Maybe_wrap_member_pointer<_Functor>::type
+ (_ArgTypes...)>
+ bind(_Functor __f, _ArgTypes... __args)
+ {
+ typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type;
+ typedef typename __maybe_type::type __functor_type;
+ typedef _Bind_result<_Result, __functor_type(_ArgTypes...)>
+ __result_type;
+ return __result_type(__maybe_type::__do_wrap(__f), __args...);
+ }
template<typename _Result, typename _Signature>
const bool is_bind_expression<_Bind_result<_Result, _Signature> >::value;
@@ -827,13 +1576,9 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
__callable_functor(_Member _Class::* const &__p)
{ return mem_fn(__p); }
- template<typename _Signature, typename _Functor>
- class _Function_handler;
-
template<typename _Signature>
class function;
-
/**
* @if maint
* Base class of all polymorphic function object wrappers.
@@ -1024,6 +1769,434 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
_Manager_type _M_manager;
};
+ template<typename _Signature, typename _Functor>
+ class _Function_handler;
+
+ template<typename _Res, typename _Functor, typename... _ArgTypes>
+ class _Function_handler<_Res(_ArgTypes...), _Functor>
+ : public _Function_base::_Base_manager<_Functor>
+ {
+ typedef _Function_base::_Base_manager<_Functor> _Base;
+
+ public:
+ static _Res _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ return (*_Base::_M_get_pointer(__functor))(__args...);
+ }
+ };
+
+ template<typename _Functor, typename... _ArgTypes>
+ class _Function_handler<void(_ArgTypes...), _Functor>
+ : public _Function_base::_Base_manager<_Functor>
+ {
+ typedef _Function_base::_Base_manager<_Functor> _Base;
+
+ public:
+ static void _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ (*_Base::_M_get_pointer(__functor))(__args...);
+ }
+ };
+
+ template<typename _Res, typename _Functor, typename... _ArgTypes>
+ class _Function_handler<_Res(_ArgTypes...), reference_wrapper<_Functor> >
+ : public _Function_base::_Ref_manager<_Functor>
+ {
+ typedef _Function_base::_Ref_manager<_Functor> _Base;
+
+ public:
+ static _Res _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ return
+ __callable_functor(**_Base::_M_get_pointer(__functor))(__args...);
+ }
+ };
+
+ template<typename _Functor, typename... _ArgTypes>
+ class _Function_handler<void(_ArgTypes...), reference_wrapper<_Functor> >
+ : public _Function_base::_Ref_manager<_Functor>
+ {
+ typedef _Function_base::_Ref_manager<_Functor> _Base;
+
+ public:
+ static void _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ __callable_functor(**_Base::_M_get_pointer(__functor))(__args...);
+ }
+ };
+
+ template<typename _Class, typename _Member, typename _Res,
+ typename... _ArgTypes>
+ class _Function_handler<_Res(_ArgTypes...), _Member _Class::*>
+ : public _Function_handler<void(_ArgTypes...), _Member _Class::*>
+ {
+ typedef _Function_handler<void(_ArgTypes...), _Member _Class::*>
+ _Base;
+
+ public:
+ static _Res _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ return _GLIBCXX_TR1::mem_fn(_Base::_M_get_pointer(__functor)->__value)(__args...);
+ }
+ };
+
+ template<typename _Class, typename _Member, typename... _ArgTypes>
+ class _Function_handler<void(_ArgTypes...), _Member _Class::*>
+ : public _Function_base::_Base_manager<
+ _Simple_type_wrapper< _Member _Class::* > >
+ {
+ typedef _Member _Class::* _Functor;
+ typedef _Simple_type_wrapper< _Functor > _Wrapper;
+ typedef _Function_base::_Base_manager<_Wrapper> _Base;
+
+ public:
+ static bool
+ _M_manager(_Any_data& __dest, const _Any_data& __source,
+ _Manager_operation __op)
+ {
+ switch (__op) {
+ case __get_type_info:
+ __dest._M_access<const type_info*>() = &typeid(_Functor);
+ break;
+
+ case __get_functor_ptr:
+ __dest._M_access<_Functor*>() =
+ &_Base::_M_get_pointer(__source)->__value;
+ break;
+
+ default:
+ _Base::_M_manager(__dest, __source, __op);
+ }
+ return false;
+ }
+
+ static void _M_invoke(const _Any_data& __functor, _ArgTypes... __args)
+ {
+ _GLIBCXX_TR1::mem_fn(_Base::_M_get_pointer(__functor)->__value)(__args...);
+ }
+ };
+
+ template<typename _Res, typename... _ArgTypes>
+ class function<_Res(_ArgTypes...)>
+ : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
+ private _Function_base
+ {
+ /**
+ * @if maint
+ * This class is used to implement the safe_bool idiom.
+ * @endif
+ */
+ struct _Hidden_type
+ {
+ _Hidden_type* _M_bool;
+ };
+
+ /**
+ * @if maint
+ * This typedef is used to implement the safe_bool idiom.
+ * @endif
+ */
+ typedef _Hidden_type* _Hidden_type::* _Safe_bool;
+
+ typedef _Res _Signature_type(_ArgTypes...);
+
+ struct _Useless {};
+
+ public:
+ typedef _Res result_type;
+
+ // [3.7.2.1] construct/copy/destroy
+
+ /**
+ * @brief Default construct creates an empty function call wrapper.
+ * @post @c !(bool)*this
+ */
+ function() : _Function_base() { }
+
+ /**
+ * @brief Default construct creates an empty function call wrapper.
+ * @post @c !(bool)*this
+ */
+ function(_M_clear_type*) : _Function_base() { }
+
+ /**
+ * @brief %Function copy constructor.
+ * @param x A %function object with identical call signature.
+ * @pre @c (bool)*this == (bool)x
+ *
+ * The newly-created %function contains a copy of the target of @a
+ * x (if it has one).
+ */
+ function(const function& __x);
+
+ /**
+ * @brief Builds a %function that targets a copy of the incoming
+ * function object.
+ * @param f A %function object that is callable with parameters of
+ * type @c T1, @c T2, ..., @c TN and returns a value convertible
+ * to @c Res.
+ *
+ * The newly-created %function object will target a copy of @a
+ * f. If @a f is @c reference_wrapper<F>, then this function
+ * object will contain a reference to the function object @c
+ * f.get(). If @a f is a NULL function pointer or NULL
+ * pointer-to-member, the newly-created object will be empty.
+ *
+ * If @a f is a non-NULL function pointer or an object of type @c
+ * reference_wrapper<F>, this function will not throw.
+ */
+ template<typename _Functor>
+ function(_Functor __f,
+ typename __gnu_cxx::__enable_if<
+ !is_integral<_Functor>::value, _Useless>::__type
+ = _Useless());
+
+ /**
+ * @brief %Function assignment operator.
+ * @param x A %function with identical call signature.
+ * @post @c (bool)*this == (bool)x
+ * @returns @c *this
+ *
+ * The target of @a x is copied to @c *this. If @a x has no
+ * target, then @c *this will be empty.
+ *
+ * If @a x targets a function pointer or a reference to a function
+ * object, then this operation will not throw an exception.
+ */
+ function& operator=(const function& __x)
+ {
+ function(__x).swap(*this);
+ return *this;
+ }
+
+ /**
+ * @brief %Function assignment to zero.
+ * @post @c !(bool)*this
+ * @returns @c *this
+ *
+ * The target of @a *this is deallocated, leaving it empty.
+ */
+ function& operator=(_M_clear_type*)
+ {
+ if (_M_manager) {
+ _M_manager(_M_functor, _M_functor, __destroy_functor);
+ _M_manager = 0;
+ _M_invoker = 0;
+ }
+ return *this;
+ }
+
+ /**
+ * @brief %Function assignment to a new target.
+ * @param f A %function object that is callable with parameters of
+ * type @c T1, @c T2, ..., @c TN and returns a value convertible
+ * to @c Res.
+ * @return @c *this
+ *
+ * This %function object wrapper will target a copy of @a
+ * f. If @a f is @c reference_wrapper<F>, then this function
+ * object will contain a reference to the function object @c
+ * f.get(). If @a f is a NULL function pointer or NULL
+ * pointer-to-member, @c this object will be empty.
+ *
+ * If @a f is a non-NULL function pointer or an object of type @c
+ * reference_wrapper<F>, this function will not throw.
+ */
+ template<typename _Functor>
+ typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value,
+ function&>::__type
+ operator=(_Functor __f)
+ {
+ function(__f).swap(*this);
+ return *this;
+ }
+
+ // [3.7.2.2] function modifiers
+
+ /**
+ * @brief Swap the targets of two %function objects.
+ * @param f A %function with identical call signature.
+ *
+ * Swap the targets of @c this function object and @a f. This
+ * function will not throw an exception.
+ */
+ void swap(function& __x)
+ {
+ _Any_data __old_functor = _M_functor;
+ _M_functor = __x._M_functor;
+ __x._M_functor = __old_functor;
+ _Manager_type __old_manager = _M_manager;
+ _M_manager = __x._M_manager;
+ __x._M_manager = __old_manager;
+ _Invoker_type __old_invoker = _M_invoker;
+ _M_invoker = __x._M_invoker;
+ __x._M_invoker = __old_invoker;
+ }
+
+ // [3.7.2.3] function capacity
+
+ /**
+ * @brief Determine if the %function wrapper has a target.
+ *
+ * @return @c true when this %function object contains a target,
+ * or @c false when it is empty.
+ *
+ * This function will not throw an exception.
+ */
+ operator _Safe_bool() const
+ {
+ if (_M_empty())
+ {
+ return 0;
+ }
+ else
+ {
+ return &_Hidden_type::_M_bool;
+ }
+ }
+
+ // [3.7.2.4] function invocation
+
+ /**
+ * @brief Invokes the function targeted by @c *this.
+ * @returns the result of the target.
+ * @throws bad_function_call when @c !(bool)*this
+ *
+ * The function call operator invokes the target function object
+ * stored by @c this.
+ */
+ _Res operator()(_ArgTypes... __args) const;
+
+ // [3.7.2.5] function target access
+ /**
+ * @brief Determine the type of the target of this function object
+ * wrapper.
+ *
+ * @returns the type identifier of the target function object, or
+ * @c typeid(void) if @c !(bool)*this.
+ *
+ * This function will not throw an exception.
+ */
+ const type_info& target_type() const;
+
+ /**
+ * @brief Access the stored target function object.
+ *
+ * @return Returns a pointer to the stored target function object,
+ * if @c typeid(Functor).equals(target_type()); otherwise, a NULL
+ * pointer.
+ *
+ * This function will not throw an exception.
+ */
+ template<typename _Functor> _Functor* target();
+
+ /**
+ * @overload
+ */
+ template<typename _Functor> const _Functor* target() const;
+
+ private:
+ // [3.7.2.6] undefined operators
+ template<typename _Function>
+ void operator==(const function<_Function>&) const;
+ template<typename _Function>
+ void operator!=(const function<_Function>&) const;
+
+ typedef _Res (*_Invoker_type)(const _Any_data&, _ArgTypes...);
+ _Invoker_type _M_invoker;
+ };
+
+ template<typename _Res, typename... _ArgTypes>
+ function<_Res(_ArgTypes...)>::function(const function& __x)
+ : _Function_base()
+ {
+ if (__x) {
+ _M_invoker = __x._M_invoker;
+ _M_manager = __x._M_manager;
+ __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
+ }
+ }
+
+ template<typename _Res, typename... _ArgTypes>
+ template<typename _Functor>
+ function<_Res(_ArgTypes...)>
+ ::function(_Functor __f,
+ typename __gnu_cxx::__enable_if<
+ !is_integral<_Functor>::value, _Useless>::__type)
+ : _Function_base()
+ {
+ typedef _Function_handler<_Signature_type, _Functor> _My_handler;
+ if (_My_handler::_M_not_empty_function(__f)) {
+ _M_invoker = &_My_handler::_M_invoke;
+ _M_manager = &_My_handler::_M_manager;
+ _My_handler::_M_init_functor(_M_functor, __f);
+ }
+ }
+
+ template<typename _Res, typename... _ArgTypes>
+ _Res function<_Res(_ArgTypes...)>::operator()(_ArgTypes... __args) const
+ {
+ if (_M_empty())
+ {
+#if __EXCEPTIONS
+ throw bad_function_call();
+#else
+ std::abort();
+#endif
+ }
+ return _M_invoker(_M_functor, __args...);
+ }
+
+ template<typename _Res, typename... _ArgTypes>
+ const type_info& function<_Res(_ArgTypes...)>::target_type() const
+ {
+ if (_M_manager)
+ {
+ _Any_data __typeinfo_result;
+ _M_manager(__typeinfo_result, _M_functor, __get_type_info);
+ return *__typeinfo_result._M_access<const type_info*>();
+ }
+ else
+ {
+ return typeid(void);
+ }
+ }
+
+ template<typename _Res, typename... _ArgTypes>
+ template<typename _Functor>
+ _Functor* function<_Res(_ArgTypes...)>::target()
+ {
+ if (typeid(_Functor) == target_type() && _M_manager)
+ {
+ _Any_data __ptr;
+ if (_M_manager(__ptr, _M_functor, __get_functor_ptr)
+ && !is_const<_Functor>::value)
+ return 0;
+ else
+ return __ptr._M_access<_Functor*>();
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ template<typename _Res, typename... _ArgTypes>
+ template<typename _Functor>
+ const _Functor* function<_Res(_ArgTypes...)>::target() const
+ {
+ if (typeid(_Functor) == target_type() && _M_manager)
+ {
+ _Any_data __ptr;
+ _M_manager(__ptr, _M_functor, __get_functor_ptr);
+ return __ptr._M_access<const _Functor*>();
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
// [3.7.2.7] null pointer comparisons
/**
@@ -1091,16 +2264,6 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
_GLIBCXX_END_NAMESPACE
}
-#define _GLIBCXX_JOIN(X,Y) _GLIBCXX_JOIN2( X , Y )
-#define _GLIBCXX_JOIN2(X,Y) _GLIBCXX_JOIN3(X,Y)
-#define _GLIBCXX_JOIN3(X,Y) X##Y
-#define _GLIBCXX_REPEAT_HEADER <tr1/functional_iterate.h>
-#include <tr1/repeat.h>
-#undef _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_JOIN3
-#undef _GLIBCXX_JOIN2
-#undef _GLIBCXX_JOIN
-
#include <tr1/functional_hash.h>
#endif
diff --git a/libstdc++-v3/include/tr1/functional_hash.h b/libstdc++-v3/include/tr1/functional_hash.h
index 3e592b45ab7..9c6f69a3f51 100644
--- a/libstdc++-v3/include/tr1/functional_hash.h
+++ b/libstdc++-v3/include/tr1/functional_hash.h
@@ -40,7 +40,7 @@
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// Definition of default hash function std::tr1::hash<>. The types for
// which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR.
diff --git a/libstdc++-v3/include/tr1/functional_iterate.h b/libstdc++-v3/include/tr1/functional_iterate.h
deleted file mode 100644
index c9c1e833461..00000000000
--- a/libstdc++-v3/include/tr1/functional_iterate.h
+++ /dev/null
@@ -1,922 +0,0 @@
-// TR1 functional -*- C++ -*-
-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/functional_iterate.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-namespace std
-{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- struct _Weak_result_type_impl<_Res(_GLIBCXX_TEMPLATE_ARGS)>
- {
- typedef _Res result_type;
- };
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- struct _Weak_result_type_impl<_Res (&)(_GLIBCXX_TEMPLATE_ARGS)>
- {
- typedef _Res result_type;
- };
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- struct _Weak_result_type_impl<_Res (*)(_GLIBCXX_TEMPLATE_ARGS)>
- {
- typedef _Res result_type;
- };
-
-#if _GLIBCXX_NUM_ARGS > 0
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- struct _Weak_result_type_impl<
- _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)>
- {
- typedef _Res result_type;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- struct _Weak_result_type_impl<
- _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const>
- {
- typedef _Res result_type;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- struct _Weak_result_type_impl<
- _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile>
- {
- typedef _Res result_type;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- struct _Weak_result_type_impl<
- _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile>
- {
- typedef _Res result_type;
- };
-#endif
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- class result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>
- : public _Result_of_impl<
- _Has_result_type<_Weak_result_type<_Functor> >::value,
- _Functor(_GLIBCXX_TEMPLATE_ARGS)>
- { };
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- struct _Result_of_impl<true, _Functor(_GLIBCXX_TEMPLATE_ARGS)>
- {
- typedef typename _Weak_result_type<_Functor>::result_type type;
- };
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- struct _Result_of_impl<false, _Functor(_GLIBCXX_TEMPLATE_ARGS)>
- {
-#if _GLIBCXX_NUM_ARGS > 0
- typedef typename _Functor
- ::template result<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type type;
-#else
- typedef void type;
-#endif
- };
-
-/**
- * @if maint
- * Invoke a function object, which may be either a member pointer or a
- * function object. The first parameter will tell which.
- * @endif
- */
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- inline
- typename __gnu_cxx::__enable_if<(!is_member_pointer<_Functor>::value
- && !is_function<_Functor>::value
- && !is_function<typename remove_pointer<_Functor>::type>::value),
- typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type>::__type
- __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS)
- {
- return __f(_GLIBCXX_ARGS);
- }
-
-#if _GLIBCXX_NUM_ARGS > 0
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- inline
- typename __gnu_cxx::__enable_if<(is_member_pointer<_Functor>::value
- && !is_function<_Functor>::value
- && !is_function<typename remove_pointer<_Functor>::type>::value),
- typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type
- >::__type
- __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS)
- {
- return mem_fn(__f)(_GLIBCXX_ARGS);
- }
-#endif
-
-// To pick up function references (that will become function pointers)
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- inline
- typename __gnu_cxx::__enable_if<(is_pointer<_Functor>::value
- && is_function<typename remove_pointer<_Functor>::type>::value),
- typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type
- >::__type
- __invoke(_Functor __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS)
- {
- return __f(_GLIBCXX_ARGS);
- }
-
-/**
- * @if maint
- * Implementation of reference_wrapper::operator()
- * @endif
-*/
-#if _GLIBCXX_NUM_ARGS > 0
-template<typename _Tp>
-template<_GLIBCXX_TEMPLATE_PARAMS>
- typename result_of<
- typename reference_wrapper<_Tp>::_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type
- reference_wrapper<_Tp>::operator()(_GLIBCXX_REF_PARAMS) const
- {
- return __invoke(get(), _GLIBCXX_ARGS);
- }
-#endif
-
-#if _GLIBCXX_NUM_ARGS > 0
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)>
-#if _GLIBCXX_NUM_ARGS == 1
- : public unary_function<_Class*, _Res>
-#elif _GLIBCXX_NUM_ARGS == 2
- : public binary_function<_Class*, _T1, _Res>
-#endif
- {
- typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED);
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- public:
- typedef _Res result_type;
-
- explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
-
- // Handle objects
- _Res
- operator()(_Class& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle pointers
- _Res
- operator()(_Class* __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle smart pointers, references and pointers to derived
- template<typename _Tp>
- _Res
- operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- {
- return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_ARGS_SHIFTED);
- }
-
- private:
- _Functor __pmf;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const>
-#if _GLIBCXX_NUM_ARGS == 1
- : public unary_function<const _Class*, _Res>
-#elif _GLIBCXX_NUM_ARGS == 2
- : public binary_function<const _Class*, _T1, _Res>
-#endif
- {
- typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const;
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- public:
- typedef _Res result_type;
-
- explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
-
- // Handle objects
- _Res
- operator()(const _Class& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle pointers
- _Res
- operator()(const _Class* __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle smart pointers, references and pointers to derived
- template<typename _Tp>
- _Res
- operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- {
- return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_ARGS_SHIFTED);
- }
-
- private:
- _Functor __pmf;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile>
-#if _GLIBCXX_NUM_ARGS == 1
- : public unary_function<volatile _Class*, _Res>
-#elif _GLIBCXX_NUM_ARGS == 2
- : public binary_function<volatile _Class*, _T1, _Res>
-#endif
- {
- typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile;
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- public:
- typedef _Res result_type;
-
- explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
-
- // Handle objects
- _Res
- operator()(volatile _Class& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle pointers
- _Res
- operator()(volatile _Class* __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle smart pointers, references and pointers to derived
- template<typename _Tp>
- _Res
- operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- {
- return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_ARGS_SHIFTED);
- }
- private:
- _Functor __pmf;
- };
-
-template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_TEMPLATE_PARAMS_SHIFTED>
- class _Mem_fn<_Res(_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile>
-#if _GLIBCXX_NUM_ARGS == 1
- : public unary_function<const volatile _Class*, _Res>
-#elif _GLIBCXX_NUM_ARGS == 2
- : public binary_function<const volatile _Class*, _T1, _Res>
-#endif
- {
- typedef _Res (_Class::*_Functor)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)
- const volatile;
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __object, const volatile _Class * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- template<typename _Tp>
- _Res
- _M_call(_Tp& __ptr, const volatile void * _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return ((*__ptr).*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- public:
- typedef _Res result_type;
-
- explicit _Mem_fn(_Functor __pf) : __pmf(__pf) { }
-
- // Handle objects
- _Res
- operator()(const volatile _Class& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object.*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle pointers
- _Res
- operator()(const volatile _Class* __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- { return (__object->*__pmf)(_GLIBCXX_ARGS_SHIFTED); }
-
- // Handle smart pointers, references and pointers to derived
- template<typename _Tp>
- _Res
- operator()(_Tp& __object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_PARAMS_SHIFTED) const
- {
- return _M_call(__object, &__object _GLIBCXX_COMMA_SHIFTED
- _GLIBCXX_ARGS_SHIFTED);
- }
-
- private:
- _Functor __pmf;
- };
-#endif
-
-#if _GLIBCXX_NUM_ARGS > 0
-namespace placeholders
-{
-namespace
-{
- _Placeholder<_GLIBCXX_NUM_ARGS> _GLIBCXX_JOIN(_,_GLIBCXX_NUM_ARGS);
-} // anonymous namespace
-}
-#endif
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Bind<_Functor(_GLIBCXX_TEMPLATE_ARGS)>
- : public _Weak_result_type<_Functor>
-{
- typedef _Bind __self_type;
-
- _Functor _M_f;
- _GLIBCXX_BIND_MEMBERS
-
- public:
-#if _GLIBCXX_NUM_ARGS == 0
- explicit
-#endif
- _Bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { }
-
-#define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h>
-#include <tr1/bind_repeat.h>
-#undef _GLIBCXX_BIND_REPEAT_HEADER
-};
-
-template<typename _Result, typename _Functor
- _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Bind_result<_Result, _Functor(_GLIBCXX_TEMPLATE_ARGS)>
-{
- _Functor _M_f;
- _GLIBCXX_BIND_MEMBERS
-
- public:
- typedef _Result result_type;
-
-#if _GLIBCXX_NUM_ARGS == 0
- explicit
-#endif
- _Bind_result(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { }
-
-#define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h>
-#define _GLIBCXX_BIND_HAS_RESULT_TYPE
-#include <tr1/bind_repeat.h>
-#undef _GLIBCXX_BIND_HAS_RESULT_TYPE
-#undef _GLIBCXX_BIND_REPEAT_HEADER
-};
-
-// Handle arbitrary function objects
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-inline
-_Bind<typename _Maybe_wrap_member_pointer<_Functor>::type
- (_GLIBCXX_TEMPLATE_ARGS)>
-bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
-{
- typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type;
- typedef typename __maybe_type::type __functor_type;
- typedef _Bind<__functor_type(_GLIBCXX_TEMPLATE_ARGS)> __result_type;
- return __result_type(__maybe_type::__do_wrap(__f)
- _GLIBCXX_COMMA _GLIBCXX_ARGS);
-}
-
-template<typename _Result, typename _Functor
- _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-inline
-_Bind_result<_Result,
- typename _Maybe_wrap_member_pointer<_Functor>::type
- (_GLIBCXX_TEMPLATE_ARGS)>
-bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
-{
- typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type;
- typedef typename __maybe_type::type __functor_type;
- typedef _Bind_result<_Result, __functor_type(_GLIBCXX_TEMPLATE_ARGS)>
- __result_type;
- return __result_type(__maybe_type::__do_wrap(__f)
- _GLIBCXX_COMMA _GLIBCXX_ARGS);
-}
-
-template<typename _Res, typename _Functor _GLIBCXX_COMMA
- _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Functor>
- : public _Function_base::_Base_manager<_Functor>
-{
- typedef _Function_base::_Base_manager<_Functor> _Base;
-
- public:
- static _Res
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- return (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Functor>
- : public _Function_base::_Base_manager<_Functor>
-{
- typedef _Function_base::_Base_manager<_Functor> _Base;
-
- public:
- static void
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Res, typename _Functor _GLIBCXX_COMMA
- _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS),
- reference_wrapper<_Functor> >
- : public _Function_base::_Ref_manager<_Functor>
-{
- typedef _Function_base::_Ref_manager<_Functor> _Base;
-
- public:
- static _Res
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- return __callable_functor(**_Base::_M_get_pointer(__functor))
- (_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS),
- reference_wrapper<_Functor> >
- : public _Function_base::_Ref_manager<_Functor>
-{
- typedef _Function_base::_Ref_manager<_Functor> _Base;
-
- public:
- static void
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- __callable_functor(**_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Class, typename _Member, typename _Res
- _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>
- : public _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>
-{
- typedef _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>
- _Base;
-
- public:
- static _Res
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- return std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value)
- (_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Class, typename _Member
- _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>
- : public _Function_base::_Base_manager<
- _Simple_type_wrapper< _Member _Class::* > >
-{
- typedef _Member _Class::* _Functor;
- typedef _Simple_type_wrapper< _Functor > _Wrapper;
- typedef _Function_base::_Base_manager<_Wrapper> _Base;
-
- public:
- static bool
- _M_manager(_Any_data& __dest, const _Any_data& __source,
- _Manager_operation __op)
- {
- switch (__op) {
- case __get_type_info:
- __dest._M_access<const type_info*>() = &typeid(_Functor);
- break;
-
- case __get_functor_ptr:
- __dest._M_access<_Functor*>() =
- &_Base::_M_get_pointer(__source)->__value;
- break;
-
- default:
- _Base::_M_manager(__dest, __source, __op);
- }
- return false;
- }
-
- static void
- _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)
- {
- std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value)
- (_GLIBCXX_ARGS);
- }
-};
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-class function<_Res(_GLIBCXX_TEMPLATE_ARGS)>
-#if _GLIBCXX_NUM_ARGS == 1
- : public unary_function<_T1, _Res>, private _Function_base
-#elif _GLIBCXX_NUM_ARGS == 2
- : public binary_function<_T1, _T2, _Res>, private _Function_base
-#else
- : private _Function_base
-#endif
-{
- /**
- * @if maint
- * This class is used to implement the safe_bool idiom.
- * @endif
- */
- struct _Hidden_type
- {
- _Hidden_type* _M_bool;
- };
-
- /**
- * @if maint
- * This typedef is used to implement the safe_bool idiom.
- * @endif
- */
- typedef _Hidden_type* _Hidden_type::* _Safe_bool;
-
- typedef _Res _Signature_type(_GLIBCXX_TEMPLATE_ARGS);
-
- struct _Useless {};
-
- public:
- typedef _Res result_type;
-
- // [3.7.2.1] construct/copy/destroy
-
- /**
- * @brief Default construct creates an empty function call wrapper.
- * @post @c !(bool)*this
- */
- function() : _Function_base() { }
-
- /**
- * @brief Default construct creates an empty function call wrapper.
- * @post @c !(bool)*this
- */
- function(_M_clear_type*) : _Function_base() { }
-
- /**
- * @brief %Function copy constructor.
- * @param x A %function object with identical call signature.
- * @pre @c (bool)*this == (bool)x
- *
- * The newly-created %function contains a copy of the target of @a
- * x (if it has one).
- */
- function(const function& __x);
-
- /**
- * @brief Builds a %function that targets a copy of the incoming
- * function object.
- * @param f A %function object that is callable with parameters of
- * type @c T1, @c T2, ..., @c TN and returns a value convertible
- * to @c Res.
- *
- * The newly-created %function object will target a copy of @a
- * f. If @a f is @c reference_wrapper<F>, then this function
- * object will contain a reference to the function object @c
- * f.get(). If @a f is a NULL function pointer or NULL
- * pointer-to-member, the newly-created object will be empty.
- *
- * If @a f is a non-NULL function pointer or an object of type @c
- * reference_wrapper<F>, this function will not throw.
- */
- template<typename _Functor>
- function(_Functor __f,
- typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, _Useless>::__type = _Useless());
-
- /**
- * @brief %Function assignment operator.
- * @param x A %function with identical call signature.
- * @post @c (bool)*this == (bool)x
- * @returns @c *this
- *
- * The target of @a x is copied to @c *this. If @a x has no
- * target, then @c *this will be empty.
- *
- * If @a x targets a function pointer or a reference to a function
- * object, then this operation will not throw an exception.
- */
- function& operator=(const function& __x)
- {
- function(__x).swap(*this);
- return *this;
- }
-
- /**
- * @brief %Function assignment to zero.
- * @post @c !(bool)*this
- * @returns @c *this
- *
- * The target of @a *this is deallocated, leaving it empty.
- */
- function& operator=(_M_clear_type*)
- {
- if (_M_manager) {
- _M_manager(_M_functor, _M_functor, __destroy_functor);
- _M_manager = 0;
- _M_invoker = 0;
- }
- return *this;
- }
-
- /**
- * @brief %Function assignment to a new target.
- * @param f A %function object that is callable with parameters of
- * type @c T1, @c T2, ..., @c TN and returns a value convertible
- * to @c Res.
- * @return @c *this
- *
- * This %function object wrapper will target a copy of @a
- * f. If @a f is @c reference_wrapper<F>, then this function
- * object will contain a reference to the function object @c
- * f.get(). If @a f is a NULL function pointer or NULL
- * pointer-to-member, @c this object will be empty.
- *
- * If @a f is a non-NULL function pointer or an object of type @c
- * reference_wrapper<F>, this function will not throw.
- */
- template<typename _Functor>
- typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, function&>::__type
- operator=(_Functor __f)
- {
- function(__f).swap(*this);
- return *this;
- }
-
- // [3.7.2.2] function modifiers
-
- /**
- * @brief Swap the targets of two %function objects.
- * @param f A %function with identical call signature.
- *
- * Swap the targets of @c this function object and @a f. This
- * function will not throw an exception.
- */
- void swap(function& __x)
- {
- _Any_data __old_functor = _M_functor;
- _M_functor = __x._M_functor;
- __x._M_functor = __old_functor;
- _Manager_type __old_manager = _M_manager;
- _M_manager = __x._M_manager;
- __x._M_manager = __old_manager;
- _Invoker_type __old_invoker = _M_invoker;
- _M_invoker = __x._M_invoker;
- __x._M_invoker = __old_invoker;
- }
-
- // [3.7.2.3] function capacity
-
- /**
- * @brief Determine if the %function wrapper has a target.
- *
- * @return @c true when this %function object contains a target,
- * or @c false when it is empty.
- *
- * This function will not throw an exception.
- */
- operator _Safe_bool() const
- {
- if (_M_empty())
- {
- return 0;
- }
- else
- {
- return &_Hidden_type::_M_bool;
- }
- }
-
- // [3.7.2.4] function invocation
-
- /**
- * @brief Invokes the function targeted by @c *this.
- * @returns the result of the target.
- * @throws bad_function_call when @c !(bool)*this
- *
- * The function call operator invokes the target function object
- * stored by @c this.
- */
- _Res operator()(_GLIBCXX_PARAMS) const;
-
- // [3.7.2.5] function target access
- /**
- * @brief Determine the type of the target of this function object
- * wrapper.
- *
- * @returns the type identifier of the target function object, or
- * @c typeid(void) if @c !(bool)*this.
- *
- * This function will not throw an exception.
- */
- const type_info& target_type() const;
-
- /**
- * @brief Access the stored target function object.
- *
- * @return Returns a pointer to the stored target function object,
- * if @c typeid(Functor).equals(target_type()); otherwise, a NULL
- * pointer.
- *
- * This function will not throw an exception.
- */
- template<typename _Functor> _Functor* target();
-
- /**
- * @overload
- */
- template<typename _Functor> const _Functor* target() const;
-
- private:
- // [3.7.2.6] undefined operators
- template<typename _Function>
- void operator==(const function<_Function>&) const;
- template<typename _Function>
- void operator!=(const function<_Function>&) const;
-
- typedef _Res (*_Invoker_type)(const _Any_data& _GLIBCXX_COMMA
- _GLIBCXX_PARAMS);
- _Invoker_type _M_invoker;
-};
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::function(const function& __x)
- : _Function_base()
- {
- if (__x) {
- _M_invoker = __x._M_invoker;
- _M_manager = __x._M_manager;
- __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
- }
- }
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-template<typename _Functor>
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>
- ::function(_Functor __f,
- typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value, _Useless>::__type)
- : _Function_base()
-{
- typedef _Function_handler<_Signature_type, _Functor> _My_handler;
- if (_My_handler::_M_not_empty_function(__f)) {
- _M_invoker = &_My_handler::_M_invoke;
- _M_manager = &_My_handler::_M_manager;
- _My_handler::_M_init_functor(_M_functor, __f);
- }
-}
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- _Res
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::operator()(_GLIBCXX_PARAMS) const
- {
- if (_M_empty())
- {
-#if __EXCEPTIONS
- throw bad_function_call();
-#else
- std::abort();
-#endif
- }
- return _M_invoker(_M_functor _GLIBCXX_COMMA _GLIBCXX_ARGS);
- }
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
- const type_info&
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target_type() const
- {
- if (_M_manager)
- {
- _Any_data __typeinfo_result;
- _M_manager(__typeinfo_result, _M_functor, __get_type_info);
- return *__typeinfo_result._M_access<const type_info*>();
- }
- else
- {
- return typeid(void);
- }
- }
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-template<typename _Functor>
- _Functor*
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target()
- {
- if (typeid(_Functor) == target_type() && _M_manager)
- {
- _Any_data __ptr;
- if (_M_manager(__ptr, _M_functor, __get_functor_ptr)
- && !is_const<_Functor>::value)
- return 0;
- else
- return __ptr._M_access<_Functor*>();
- }
- else
- {
- return 0;
- }
- }
-
-template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
-template<typename _Functor>
- const _Functor*
- function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target() const
- {
- if (typeid(_Functor) == target_type() && _M_manager)
- {
- _Any_data __ptr;
- _M_manager(__ptr, _M_functor, __get_functor_ptr);
- return __ptr._M_access<const _Functor*>();
- }
- else
- {
- return 0;
- }
- }
-
-_GLIBCXX_END_NAMESPACE
-}
diff --git a/libstdc++-v3/include/tr1/hashtable b/libstdc++-v3/include/tr1/hashtable
index 0d760eed1d5..7fa9ea11789 100644
--- a/libstdc++-v3/include/tr1/hashtable
+++ b/libstdc++-v3/include/tr1/hashtable
@@ -1,6 +1,6 @@
// Internal header for TR1 unordered_set and unordered_map -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -53,18 +53,17 @@
#define _TR1_HASHTABLE 1
#include <utility> // For std::pair
-#include <memory>
#include <iterator>
#include <cstddef>
-#include <cstdlib>
#include <cmath>
+#include <bits/allocator.h>
#include <bits/functexcept.h>
#include <tr1/type_traits> // For true_type and false_type
#include <tr1/hashtable_policy.h>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// Class template _Hashtable, class definition.
@@ -382,10 +381,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typename _Hashtable::_Hash_code_type);
std::pair<iterator, bool>
- _M_insert(const value_type&, std::tr1::true_type);
+ _M_insert(const value_type&, std::_GLIBCXX_TR1::true_type);
iterator
- _M_insert(const value_type&, std::tr1::false_type);
+ _M_insert(const value_type&, std::_GLIBCXX_TR1::false_type);
void
_M_erase_node(_Node*, _Node**);
@@ -394,7 +393,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// Insert and erase
_Insert_Return_Type
insert(const value_type& __v)
- { return _M_insert(__v, std::tr1::integral_constant<bool,
+ { return _M_insert(__v, std::_GLIBCXX_TR1::integral_constant<bool,
__unique_keys>()); }
iterator
@@ -908,7 +907,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
__chc, __cit, __uk>::iterator, bool>
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_insert(const value_type& __v, std::tr1::true_type)
+ _M_insert(const value_type& __v, std::_GLIBCXX_TR1::true_type)
{
const key_type& __k = this->_M_extract(__v);
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
@@ -929,7 +928,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
__chc, __cit, __uk>::iterator
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- _M_insert(const value_type& __v, std::tr1::false_type)
+ _M_insert(const value_type& __v, std::_GLIBCXX_TR1::false_type)
{
std::pair<bool, std::size_t> __do_rehash
= _M_rehash_policy._M_need_rehash(_M_bucket_count,
@@ -1063,10 +1062,31 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
while (*__slot && !this->_M_compare(__k, __code, *__slot))
__slot = &((*__slot)->_M_next);
+ _Node** __saved_slot = 0;
while (*__slot && this->_M_compare(__k, __code, *__slot))
{
- _Node* __p = *__slot;
- *__slot = __p->_M_next;
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 526. Is it undefined if a function in the standard changes
+ // in parameters?
+ if (&this->_M_extract((*__slot)->_M_v) != &__k)
+ {
+ _Node* __p = *__slot;
+ *__slot = __p->_M_next;
+ _M_deallocate_node(__p);
+ --_M_element_count;
+ ++__result;
+ }
+ else
+ {
+ __saved_slot = __slot;
+ __slot = &((*__slot)->_M_next);
+ }
+ }
+
+ if (__saved_slot)
+ {
+ _Node* __p = *__saved_slot;
+ *__saved_slot = __p->_M_next;
_M_deallocate_node(__p);
--_M_element_count;
++__result;
diff --git a/libstdc++-v3/include/tr1/hashtable_policy.h b/libstdc++-v3/include/tr1/hashtable_policy.h
index 568d2ff02bd..270380c8dfc 100644
--- a/libstdc++-v3/include/tr1/hashtable_policy.h
+++ b/libstdc++-v3/include/tr1/hashtable_policy.h
@@ -34,14 +34,14 @@
#ifndef _TR1_HASHTABLE_POLICY_H
#define _TR1_HASHTABLE_POLICY_H 1
-#include <functional> // _Identity, _Select1st
#include <algorithm> // lower_bound
+#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <tr1/utility>
#include <ext/type_traits.h>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
namespace __detail
{
// Helper function: return distance(first, last) for forward
diff --git a/libstdc++-v3/include/tr1/math.h b/libstdc++-v3/include/tr1/math.h
index 36fb2fdae50..dcf75376326 100644
--- a/libstdc++-v3/include/tr1/math.h
+++ b/libstdc++-v3/include/tr1/math.h
@@ -1,6 +1,6 @@
// TR1 math.h -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -38,61 +38,61 @@
#if _GLIBCXX_USE_C99_MATH_TR1
-using std::tr1::acos;
-using std::tr1::acosh;
-using std::tr1::asin;
-using std::tr1::asinh;
-using std::tr1::atan;
-using std::tr1::atan2;
-using std::tr1::atanh;
-using std::tr1::cbrt;
-using std::tr1::ceil;
-using std::tr1::copysign;
-using std::tr1::cos;
-using std::tr1::cosh;
-using std::tr1::erf;
-using std::tr1::erfc;
-using std::tr1::exp;
-using std::tr1::exp2;
-using std::tr1::expm1;
-using std::tr1::fabs;
-using std::tr1::fdim;
-using std::tr1::floor;
-using std::tr1::fma;
-using std::tr1::fmax;
-using std::tr1::fmin;
-using std::tr1::fmod;
-using std::tr1::frexp;
-using std::tr1::hypot;
-using std::tr1::ilogb;
-using std::tr1::ldexp;
-using std::tr1::lgamma;
-using std::tr1::llrint;
-using std::tr1::llround;
-using std::tr1::log;
-using std::tr1::log10;
-using std::tr1::log1p;
-using std::tr1::log2;
-using std::tr1::logb;
-using std::tr1::lrint;
-using std::tr1::lround;
-using std::tr1::nearbyint;
-using std::tr1::nextafter;
-using std::tr1::nexttoward;
-using std::tr1::pow;
-using std::tr1::remainder;
-using std::tr1::remquo;
-using std::tr1::rint;
-using std::tr1::round;
-using std::tr1::scalbln;
-using std::tr1::scalbn;
-using std::tr1::sin;
-using std::tr1::sinh;
-using std::tr1::sqrt;
-using std::tr1::tan;
-using std::tr1::tanh;
-using std::tr1::tgamma;
-using std::tr1::trunc;
+using std::_GLIBCXX_TR1::acos;
+using std::_GLIBCXX_TR1::acosh;
+using std::_GLIBCXX_TR1::asin;
+using std::_GLIBCXX_TR1::asinh;
+using std::_GLIBCXX_TR1::atan;
+using std::_GLIBCXX_TR1::atan2;
+using std::_GLIBCXX_TR1::atanh;
+using std::_GLIBCXX_TR1::cbrt;
+using std::_GLIBCXX_TR1::ceil;
+using std::_GLIBCXX_TR1::copysign;
+using std::_GLIBCXX_TR1::cos;
+using std::_GLIBCXX_TR1::cosh;
+using std::_GLIBCXX_TR1::erf;
+using std::_GLIBCXX_TR1::erfc;
+using std::_GLIBCXX_TR1::exp;
+using std::_GLIBCXX_TR1::exp2;
+using std::_GLIBCXX_TR1::expm1;
+using std::_GLIBCXX_TR1::fabs;
+using std::_GLIBCXX_TR1::fdim;
+using std::_GLIBCXX_TR1::floor;
+using std::_GLIBCXX_TR1::fma;
+using std::_GLIBCXX_TR1::fmax;
+using std::_GLIBCXX_TR1::fmin;
+using std::_GLIBCXX_TR1::fmod;
+using std::_GLIBCXX_TR1::frexp;
+using std::_GLIBCXX_TR1::hypot;
+using std::_GLIBCXX_TR1::ilogb;
+using std::_GLIBCXX_TR1::ldexp;
+using std::_GLIBCXX_TR1::lgamma;
+using std::_GLIBCXX_TR1::llrint;
+using std::_GLIBCXX_TR1::llround;
+using std::_GLIBCXX_TR1::log;
+using std::_GLIBCXX_TR1::log10;
+using std::_GLIBCXX_TR1::log1p;
+using std::_GLIBCXX_TR1::log2;
+using std::_GLIBCXX_TR1::logb;
+using std::_GLIBCXX_TR1::lrint;
+using std::_GLIBCXX_TR1::lround;
+using std::_GLIBCXX_TR1::nearbyint;
+using std::_GLIBCXX_TR1::nextafter;
+using std::_GLIBCXX_TR1::nexttoward;
+using std::_GLIBCXX_TR1::pow;
+using std::_GLIBCXX_TR1::remainder;
+using std::_GLIBCXX_TR1::remquo;
+using std::_GLIBCXX_TR1::rint;
+using std::_GLIBCXX_TR1::round;
+using std::_GLIBCXX_TR1::scalbln;
+using std::_GLIBCXX_TR1::scalbn;
+using std::_GLIBCXX_TR1::sin;
+using std::_GLIBCXX_TR1::sinh;
+using std::_GLIBCXX_TR1::sqrt;
+using std::_GLIBCXX_TR1::tan;
+using std::_GLIBCXX_TR1::tanh;
+using std::_GLIBCXX_TR1::tgamma;
+using std::_GLIBCXX_TR1::trunc;
#endif
diff --git a/libstdc++-v3/include/tr1/memory b/libstdc++-v3/include/tr1/memory
index 0df7b9d7370..7413410bc27 100644
--- a/libstdc++-v3/include/tr1/memory
+++ b/libstdc++-v3/include/tr1/memory
@@ -35,22 +35,22 @@
#ifndef _TR1_MEMORY
#define _TR1_MEMORY 1
-#include "../memory"
-#include <functional> // std::less
-#include <exception> // std::exception
-#include <new> // std::bad_alloc
-#include <typeinfo> // std::type_info in get_deleter
-#include <cstddef> // std::size_t
+#include <cstddef> // std::size_t
+#include <cstdlib> // std::abort
+#include <exception> // std::exception
+#include <new> // std::bad_alloc
+#include <typeinfo> // std::type_info in get_deleter
#include <bits/stl_algobase.h> // std::swap
-#include <iosfwd> // std::basic_ostream
-#include <cstdlib> // std::abort
+#include <iosfwd> // std::basic_ostream
+#include <memory>
#include <ext/atomicity.h>
#include <ext/concurrence.h>
#include <bits/functexcept.h>
+#include <bits/stl_function.h> // std::less
#include <debug/debug.h>
-#include <tr1/type_traits> // tr1::add_reference
+#include <tr1/type_traits> // tr1::add_reference
#include <tr1/boost_shared_ptr.h>
#endif
diff --git a/libstdc++-v3/include/tr1/random b/libstdc++-v3/include/tr1/random
index 02a7ae7bc85..907a1000fd3 100644
--- a/libstdc++-v3/include/tr1/random
+++ b/libstdc++-v3/include/tr1/random
@@ -35,21 +35,21 @@
#ifndef _TR1_RANDOM
#define _TR1_RANDOM 1
-#include <bits/stl_algobase.h>
-#include <bits/concept_check.h>
#include <cmath>
-#include <debug/debug.h>
-#include <iterator>
+#include <cstdio>
+#include <cstdlib>
+#include <string>
#include <iosfwd>
#include <limits>
#include <tr1/type_traits>
#include <tr1/cmath>
-#include <fstream>
#include <ext/type_traits.h>
+#include <bits/concept_check.h>
+#include <debug/debug.h>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// [5.1] Random number generation
@@ -1421,14 +1421,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
random_device(const std::string& __token = "/dev/urandom")
{
if ((__token != "/dev/urandom" && __token != "/dev/random")
- || !_M_filebuf.open(__token.c_str(),
- std::ios_base::in | std::ios_base::binary))
+ || !(_M_file = std::fopen(__token.c_str(), "rb")))
std::__throw_runtime_error(__N("random_device::"
"random_device(const std::string&)"));
}
~random_device()
- { _M_filebuf.close(); }
+ { std::fclose(_M_file); }
#else
@@ -1474,7 +1473,8 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
{
#ifdef _GLIBCXX_USE_RANDOM_TR1
result_type __ret;
- _M_filebuf.sgetn(reinterpret_cast<char*>(&__ret), sizeof(result_type));
+ std::fread(reinterpret_cast<void*>(&__ret), sizeof(result_type),
+ 1, _M_file);
return __ret;
#else
return _M_mt();
@@ -1486,7 +1486,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
void operator=(const random_device&);
#ifdef _GLIBCXX_USE_RANDOM_TR1
- std::filebuf _M_filebuf;
+ FILE* _M_file;
#else
mt19937 _M_mt;
#endif
diff --git a/libstdc++-v3/include/tr1/random.tcc b/libstdc++-v3/include/tr1/random.tcc
index c66a4d8f17b..c5ae93355fa 100644
--- a/libstdc++-v3/include/tr1/random.tcc
+++ b/libstdc++-v3/include/tr1/random.tcc
@@ -1,6 +1,6 @@
// random number generation (out of line) -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -33,7 +33,7 @@
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/*
* (Further) implementation-space details.
@@ -143,10 +143,12 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const linear_congruential<_UIntType, __a, __c, __m>& __lcr)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__os.widen(' '));
__os << __lcr._M_x;
@@ -162,8 +164,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
linear_congruential<_UIntType, __a, __c, __m>& __lcr)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec);
__is >> __lcr._M_x;
@@ -268,11 +273,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const mersenne_twister<_UIntType, __w, __n, __m,
__r, __a, __u, __s, __b, __t, __c, __l>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space);
for (int __i = 0; __i < __n - 1; ++__i)
@@ -293,8 +300,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
mersenne_twister<_UIntType, __w, __n, __m,
__r, __a, __u, __s, __b, __t, __c, __l>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
for (int __i = 0; __i < __n; ++__i)
__is >> __x._M_x[__i];
@@ -312,7 +322,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
if (__value == 0)
__value = 19780503;
- std::tr1::linear_congruential<unsigned long, 40014, 0, 2147483563>
+ std::_GLIBCXX_TR1::linear_congruential<unsigned long, 40014, 0, 2147483563>
__lcg(__value);
for (int __i = 0; __i < long_lag; ++__i)
@@ -385,11 +395,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const subtract_with_carry<_IntType, __m, __s, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space);
for (int __i = 0; __i < __r; ++__i)
@@ -407,8 +419,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
subtract_with_carry<_IntType, __m, __s, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_ostream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
for (int __i = 0; __i < __r; ++__i)
__is >> __x._M_x[__i];
@@ -426,7 +441,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
{
for (int __j = 0; __j < __n; ++__j)
#if _GLIBCXX_USE_C99_MATH_TR1
- _M_npows[__j] = std::tr1::ldexp(_RealType(1), -__w + __j * 32);
+ _M_npows[__j] = std::_GLIBCXX_TR1::ldexp(_RealType(1), -__w + __j * 32);
#else
_M_npows[__j] = std::pow(_RealType(2), -__w + __j * 32);
#endif
@@ -442,7 +457,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 512. Seeding subtract_with_carry_01 from a single unsigned long.
- std::tr1::linear_congruential<unsigned long, 40014, 0, 2147483563>
+ std::_GLIBCXX_TR1::linear_congruential<unsigned long, 40014, 0, 2147483563>
__lcg(__value);
this->seed(__lcg);
@@ -524,11 +539,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const subtract_with_carry_01<_RealType, __w, __s, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space);
for (int __i = 0; __i < __r; ++__i)
@@ -547,8 +564,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
subtract_with_carry_01<_RealType, __w, __s, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
for (int __i = 0; __i < __r; ++__i)
for (int __j = 0; __j < __x.__n; ++__j)
@@ -586,11 +606,14 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const discard_block<_UniformRandomNumberGenerator,
__p, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed
+ | __ios_base::left);
__os.fill(__space);
__os << __x._M_b << __space << __x._M_n;
@@ -606,8 +629,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
discard_block<_UniformRandomNumberGenerator, __p, __r>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
__is >> __x._M_b >> __x._M_n;
@@ -686,11 +712,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const xor_combine<_UniformRandomNumberGenerator1, __s1,
_UniformRandomNumberGenerator2, __s2>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::dec | std::ios_base::fixed
- | std::ios_base::left);
+ __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space);
__os << __x.base1() << __space << __x.base2();
@@ -708,8 +736,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
xor_combine<_UniformRandomNumberGenerator1, __s1,
_UniformRandomNumberGenerator2, __s2>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::skipws);
__is >> __x._M_b1 >> __x._M_b2;
@@ -723,10 +754,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const uniform_int<_IntType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__space);
__os << __x.min() << __space << __x.max();
@@ -741,8 +775,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
uniform_int<_IntType>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
__is >> __x._M_min >> __x._M_max;
@@ -756,10 +793,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const bernoulli_distribution& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__os.widen(' '));
__os.precision(__gnu_cxx::__numeric_traits<double>::__max_digits10);
@@ -800,10 +840,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const geometric_distribution<_IntType, _RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__os.widen(' '));
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -826,13 +869,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
{
const _RealType __m = std::floor(_M_mean);
_M_lm_thr = std::log(_M_mean);
- _M_lfm = std::tr1::lgamma(__m + 1);
+ _M_lfm = std::_GLIBCXX_TR1::lgamma(__m + 1);
_M_sm = std::sqrt(__m);
const _RealType __pi_4 = 0.7853981633974483096156608458198757L;
const _RealType __dx = std::sqrt(2 * __m * std::log(32 * __m
/ __pi_4));
- _M_d = std::tr1::round(std::max(_RealType(6),
+ _M_d = std::_GLIBCXX_TR1::round(std::max(_RealType(6),
std::min(__m, __dx)));
const _RealType __cx = 2 * __m + _M_d;
_M_scx = std::sqrt(__cx / 2);
@@ -929,7 +972,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
}
__reject = (__w - __e - __x * _M_lm_thr
- > _M_lfm - std::tr1::lgamma(__x + __m + 1));
+ > _M_lfm - std::_GLIBCXX_TR1::lgamma(__x + __m + 1));
__reject |= __x + __m >= __thr;
@@ -960,11 +1003,14 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const poisson_distribution<_IntType, _RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__space);
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -982,8 +1028,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
poisson_distribution<_IntType, _RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::skipws);
__is >> __x._M_mean >> __x._M_nd;
__x._M_initialize();
@@ -1014,11 +1063,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const _RealType __d1x =
std::sqrt(__np * __1p * std::log(32 * __np
/ (81 * __pi_4 * __1p)));
- _M_d1 = std::tr1::round(std::max(_RealType(1), __d1x));
+ _M_d1 = std::_GLIBCXX_TR1::round(std::max(_RealType(1), __d1x));
const _RealType __d2x =
std::sqrt(__np * __1p * std::log(32 * _M_t * __1p
/ (__pi_4 * __pa)));
- _M_d2 = std::tr1::round(std::max(_RealType(1), __d2x));
+ _M_d2 = std::_GLIBCXX_TR1::round(std::max(_RealType(1), __d2x));
// sqrt(pi / 2)
const _RealType __spi_2 = 1.2533141373155002512078826424055226L;
@@ -1034,8 +1083,8 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
const _RealType __s2s = _M_s2 * _M_s2;
_M_s = (_M_a123 + 2 * __s2s / _M_d2
* std::exp(-_M_d2 * _M_d2 / (2 * __s2s)));
- _M_lf = (std::tr1::lgamma(__np + 1)
- + std::tr1::lgamma(_M_t - __np + 1));
+ _M_lf = (std::_GLIBCXX_TR1::lgamma(__np + 1)
+ + std::_GLIBCXX_TR1::lgamma(_M_t - __np + 1));
_M_lp1p = std::log(__pa / __1p);
_M_q = -std::log(1 - (__p12 - __pa) / __1p);
@@ -1163,8 +1212,8 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
if (!__reject)
{
const _RealType __lfx =
- std::tr1::lgamma(__np + __x + 1)
- + std::tr1::lgamma(_M_t - (__np + __x) + 1);
+ std::_GLIBCXX_TR1::lgamma(__np + __x + 1)
+ + std::_GLIBCXX_TR1::lgamma(_M_t - (__np + __x) + 1);
__reject = __v > _M_lf - __lfx + __x * _M_lp1p;
}
@@ -1192,11 +1241,14 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const binomial_distribution<_IntType, _RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__space);
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -1215,8 +1267,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
binomial_distribution<_IntType, _RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
__is >> __x._M_t >> __x._M_p >> __x._M_nd;
__x._M_initialize();
@@ -1231,11 +1286,14 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const uniform_real<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__space);
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -1252,8 +1310,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
uniform_real<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::skipws);
__is >> __x._M_min >> __x._M_max;
@@ -1267,10 +1328,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const exponential_distribution<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__os.widen(' '));
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -1328,11 +1392,14 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const normal_distribution<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
const _CharT __space = __os.widen(' ');
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__space);
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
@@ -1353,8 +1420,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator>>(std::basic_istream<_CharT, _Traits>& __is,
normal_distribution<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __is.flags();
- __is.flags(std::ios_base::dec | std::ios_base::skipws);
+ typedef std::basic_istream<_CharT, _Traits> __istream_type;
+ typedef typename __istream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __is.flags();
+ __is.flags(__ios_base::dec | __ios_base::skipws);
__is >> __x._M_saved_available >> __x._M_mean
>> __x._M_sigma;
@@ -1455,10 +1525,13 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
operator<<(std::basic_ostream<_CharT, _Traits>& __os,
const gamma_distribution<_RealType>& __x)
{
- const std::ios_base::fmtflags __flags = __os.flags();
+ typedef std::basic_ostream<_CharT, _Traits> __ostream_type;
+ typedef typename __ostream_type::ios_base __ios_base;
+
+ const typename __ios_base::fmtflags __flags = __os.flags();
const _CharT __fill = __os.fill();
const std::streamsize __precision = __os.precision();
- __os.flags(std::ios_base::scientific | std::ios_base::left);
+ __os.flags(__ios_base::scientific | __ios_base::left);
__os.fill(__os.widen(' '));
__os.precision(__gnu_cxx::__numeric_traits<_RealType>::__max_digits10);
diff --git a/libstdc++-v3/include/tr1/regex b/libstdc++-v3/include/tr1/regex
new file mode 100644
index 00000000000..3b8f03feb41
--- /dev/null
+++ b/libstdc++-v3/include/tr1/regex
@@ -0,0 +1,2429 @@
+// class template regex -*- C++ -*-
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+/**
+ * @file tr1/regex
+ * @author Stephen M. Webb <stephen.webb@bregmasoft.ca>
+ * This is a TR1 C++ Library header.
+ */
+
+#ifndef _TR1_REGEX
+#define _TR1_REGEX 1
+
+#include <bits/c++config.h>
+#include <algorithm>
+#include <bitset>
+#include <iterator>
+#include <locale>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace std
+{
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
+
+/**
+ * @addtogroup tr1_regex Regular Expressions
+ * A facility for performing regular expression pattern matching.
+ * @{
+ */
+
+namespace regex_constants
+{
+ // [7.5.1] Bitmask Type syntax_option_type
+ enum __syntax_option
+ {
+ _S_icase,
+ _S_nosubs,
+ _S_optimize,
+ _S_collate,
+ _S_ECMAScript,
+ _S_basic,
+ _S_extended,
+ _S_awk,
+ _S_grep,
+ _S_egrep,
+ _S_syntax_last
+ };
+
+ /**
+ * @brief This is a bitmask type indicating how to interpret the regex.
+ *
+ * The @c syntax_option_type is implementation defined but it is valid to
+ * perform bitwise operations on these values and expect the right thing to
+ * happen.
+ *
+ * A valid value of type syntax_option_type shall have exactly one of the
+ * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
+ * set.
+ */
+ typedef unsigned int syntax_option_type;
+
+ /// Specifies that the matching of regular expressions against a character
+ /// sequence shall be performed without regard to case.
+ static const syntax_option_type icase = 1 << _S_icase;
+
+ /// Specifies that when a regular expression is matched against a character
+ /// container sequence, no sub-expression matches are to be stored in the
+ /// supplied match_results structure.
+ static const syntax_option_type nosubs = 1 << _S_nosubs;
+
+ /// Specifies that the regular expression engine should pay more attention to
+ /// the speed with which regular expressions are matched, and less to the
+ /// speed with which regular expression objects are constructed. Otherwise
+ /// it has no detectable effect on the program output.
+ static const syntax_option_type optimize = 1 << _S_optimize;
+
+ /// Specifies that character ranges of the form [a-b] should be locale
+ /// sensitive.
+ static const syntax_option_type collate = 1 << _S_collate;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
+ /// Language Specification, Standard Ecma-262, third edition, 1999], as
+ /// modified in tr1 section [7.13]. This grammar is similar to that defined
+ /// in the PERL scripting language but extended with elements found in the
+ /// POSIX regular expression grammar.
+ static const syntax_option_type ECMAScript = 1 << _S_ECMAScript;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
+ /// Portable Operating System Interface (POSIX), Base Definitions and
+ /// Headers, Section 9, Regular Expressions [IEEE, Information Technology --
+ /// Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+ static const syntax_option_type basic = 1 << _S_basic;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
+ /// Portable Operating System Interface (POSIX), Base Definitions and Headers,
+ /// Section 9, Regular Expressions.
+ static const syntax_option_type extended = 1 << _S_extended;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by POSIX utility awk in IEEE Std 1003.1-2001. This option is
+ /// identical to syntax_option_type extended, except that C-style escape
+ /// sequences are supported. These sequences are, explicitly, '\\', '\a',
+ /// '\b', '\f', '\n', '\r', '\t' , '\v', '\"', '\\', and '\ddd' (where ddd is
+ /// one, two, or three octal digits).
+ static const syntax_option_type awk = 1 << _S_awk;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by POSIX utility grep in IEEE Std 1003.1-2001. This option is
+ /// identical to syntax_option_type basic, except that newlines are treated
+ /// as whitespace.
+ static const syntax_option_type grep = 1 << _S_grep;
+
+ /// Specifies that the grammar recognized by the regular expression engine is
+ /// that used by POSIX utility grep when given the -E option in
+ /// IEEE Std 1003.1-2001. This option is identical to syntax_option_type
+ /// extended, except that newlines are treated as whitespace.
+ static const syntax_option_type egrep = 1 << _S_egrep;
+
+
+ // [7.5.2] Bitmask Type match_flag_type
+ enum __match_flag
+ {
+ _S_not_bol,
+ _S_not_eol,
+ _S_not_bow,
+ _S_not_eow,
+ _S_any,
+ _S_not_null,
+ _S_continuous,
+ _S_prev_avail,
+ _S_sed,
+ _S_no_copy,
+ _S_first_only,
+ _S_match_flag_last
+ };
+
+ /**
+ * @brief This is a bitmask type indicating regex matching rules.
+ *
+ * Matching a regular expression against a sequence of characters [first,
+ * last) proceeds according to the rules of the grammar specified for the
+ * regular expression object, modified according to the effects listed
+ * below for any bitmask elements set.
+ *
+ * The @c match_flag_type is implementation defined but it is valid to
+ * perform bitwise operations on these values and expect the right thing to
+ * happen.
+ */
+ typedef std::bitset<_S_match_flag_last> match_flag_type;
+
+ static const match_flag_type match_default = 0;
+
+ /// The first character in the sequence [first, last) is treated as though it
+ /// is not at the beginning of a line, so the character "^" in the regular
+ /// expression shall not match [first, first).
+ static const match_flag_type match_not_bol = 1 << _S_not_bol;
+
+ /// The last character in the sequence [first, last) is treated as though it
+ /// is not at the end of a line, so the character "$" in the regular
+ /// expression shall not match [last, last).
+ static const match_flag_type match_not_eol = 1 << _S_not_eol;
+
+ /// The expression "\b" is not matched against the sub-sequence
+ /// [first,first).
+ static const match_flag_type match_not_bow = 1 << _S_not_bow;
+
+ /// The expression "\b" should not be matched against the sub-sequence
+ /// [last,last).
+ static const match_flag_type match_not_eow = 1 << _S_not_eow;
+
+ /// If more than one match is possible then any match is an acceptable
+ /// result.
+ static const match_flag_type match_any = 1 << _S_any;
+
+ /// The expression does not match an empty sequence.
+ static const match_flag_type match_not_null = 1 << _S_not_null;
+
+ /// The expression only matchs a sub-sequence that begins at first .
+ static const match_flag_type match_continuous = 1 << _S_continuous;
+
+ /// --first is a valid iterator position. When this flag is set then the
+ /// flags match_not_bol and match_not_bow are ignored by the regular
+ /// expression algorithms 7.11 and iterators 7.12.
+ static const match_flag_type match_prev_avail = 1 << _S_prev_avail;
+
+ /// When a regular expression match is to be replaced by a new string, the
+ /// new string is constructed using the rules used by the ECMAScript replace
+ /// function in ECMA- 262 [Ecma International, ECMAScript Language
+ /// Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
+ /// String.prototype.replace. In addition, during search and replace
+ /// operations all non-overlapping occurrences of the regular expression
+ /// are located and replaced, and sections of the input that did not match
+ /// the expression are copied unchanged to the output string.
+ ///
+ /// Format strings (from ECMA-262 [15.5.4.11]):
+ /// $$ $
+ /// $& The matched substring.
+ /// $` The portion of <em>string</em> that preceeds the matched substring.
+ /// $' The portion of <em>string</em> that follows the matched substring.
+ /// $n The nth capture, where n is in [1,9] and $n is not followed by a
+ /// decimal digit. If n <= m and the nth capture is undefined, use the
+ /// empty string
+ /// instead. If n > m, the result is implementation-defined.
+ /// $nn The nnth capture, where nn is a two-digit decimal number on [01, 99].
+ /// If nn <= m and the nth capture is undefined, use the empty string
+ /// instead. If nn > m, the result is implementation-defined.
+ ///
+ static const match_flag_type format_default = 0;
+
+ /// When a regular expression match is to be replaced by a new string, the
+ /// new string is constructed using the rules used by the POSIX sed utility
+ /// in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
+ /// Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+ static const match_flag_type format_sed = 1 << _S_sed;
+
+ /// During a search and replace operation, sections of the character
+ /// container sequence being searched that do not match the regular
+ /// expression shall not be copied to the output string.
+ static const match_flag_type format_no_copy = 1 << _S_no_copy;
+
+ /// When specified during a search and replace operation, only the first
+ /// occurrence of the regular expression shall be replaced.
+ static const match_flag_type format_first_only = 1 << _S_first_only;
+
+
+ // [7.5.3] implementation-defined error type
+ enum error_type
+ {
+ _S_error_collate,
+ _S_error_ctype,
+ _S_error_escape,
+ _S_error_backref,
+ _S_error_brack,
+ _S_error_paren,
+ _S_error_brace,
+ _S_error_badbrace,
+ _S_error_range,
+ _S_error_space,
+ _S_error_badrepeat,
+ _S_error_complexity,
+ _S_error_stack,
+ _S_error_last
+ };
+
+ /// The expression contained an invalid collating element name.
+ static const error_type error_collate(_S_error_collate);
+
+ /// The expression contained an invalid character class name.
+ static const error_type error_ctype(_S_error_ctype);
+
+ /// The expression contained an invalid escaped character, or a trailing
+ /// escape.
+ static const error_type error_escape(_S_error_escape);
+
+ /// The expression contained an invalid back reference.
+ static const error_type error_backref(_S_error_backref);
+
+ /// The expression contained mismatched [ and ].
+ static const error_type error_brack(_S_error_brack);
+
+ /// The expression contained mismatched ( and ).
+ static const error_type error_paren(_S_error_paren);
+
+ /// The expression contained mismatched { and }
+ static const error_type error_brace(_S_error_brace);
+
+ /// The expression contained an invalid range in a {} expression.
+ static const error_type error_badbrace(_S_error_badbrace);
+
+ /// The expression contained an invalid character range,
+ /// such as [b-a] in most encodings.
+ static const error_type error_range(_S_error_range);
+
+ /// There was insufficient memory to convert the expression into a
+ /// finite state machine.
+ static const error_type error_space(_S_error_space);
+
+ /// One of *?+{ was not preceded by a valid regular expression.
+ static const error_type error_badrepeat(_S_error_badrepeat);
+
+ /// The complexity of an attempted match against a regular expression
+ /// exceeded a pre-set level.
+ static const error_type error_complexity(_S_error_complexity);
+
+ /// There was insufficient memory to determine whether the
+ /// regular expression could match the specified character sequence.
+ static const error_type error_stack(_S_error_stack);
+}
+
+
+ // [7.8] Class regex_error
+ /**
+ * Defines the type of objects thrown as exceptions to report errors from the
+ * regular expression library.
+ */
+ class regex_error
+ : public std::runtime_error
+ {
+ public:
+ /**
+ * @brief constructs a regex_error object.
+ *
+ * @param ecode the regex error code.
+ */
+ explicit
+ regex_error(regex_constants::error_type __ecode)
+ : std::runtime_error("regex_error"), _M_code(__ecode)
+ { }
+
+ /**
+ * @brief gets the regex error code.
+ *
+ * @returns the regex error code.
+ */
+ regex_constants::error_type
+ code() const
+ { return _M_code; }
+
+ protected:
+ regex_constants::error_type _M_code;
+ };
+
+
+ // [7.7] Class regex_traits
+ /**
+ * A regular expression traits class that satisfies the requirements of tr1
+ * section [7.2].
+ *
+ * The class %regex is parameterized around a set of related types and
+ * functions used to complete the definition of its semantics. This class
+ * satisfies the requirements of such a traits class.
+ */
+ template<typename _Ch_type>
+ struct regex_traits
+ {
+ public:
+ typedef _Ch_type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::locale locale_type;
+ typedef std::ctype_base::mask char_class_type;
+
+ public:
+ /**
+ * @brief Constructs a default traits object.
+ */
+ regex_traits()
+ { }
+
+ /**
+ * @brief Gives the length of a C-style string starting at @p __p.
+ *
+ * @param __p a pointer to the start of a character sequence.
+ *
+ * @returns the number of characters between @p *__p and the first
+ * default-initialized value of type @p char_type. In other words, uses
+ * the C-string algorithm for determiining the length of a sequence of
+ * characters.
+ */
+ static std::size_t
+ length(const char_type* __p)
+ { return string_type::traits_type::length(__p); }
+
+ /**
+ * @brief Performs the identity translation.
+ *
+ * @param c A character to the locale-specific character set.
+ *
+ * @returns c.
+ */
+ char_type
+ translate(char_type __c) const
+ { return __c; }
+
+ /**
+ * @brief Translates a character into a case-insensitive equivalent.
+ *
+ * @param c A character to the locale-specific character set.
+ *
+ * @returns the locale-specific lower-case equivalent of c.
+ * @throws std::bad_cast if the imbued locale does not support the ctype
+ * facet.
+ */
+ char_type
+ translate_nocase(char_type __c) const
+ {
+ using std::ctype;
+ using std::use_facet;
+ return use_facet<ctype<char_type> >(_M_locale).tolower(__c);
+ }
+
+ /**
+ * @brief Gets a sort key for a character sequence.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ *
+ * Returns a sort key for the character sequence designated by the
+ * iterator range [F1, F2) such that if the character sequence [G1, G2)
+ * sorts before the character sequence [H1, H2) then
+ * v.transform(G1, G2) < v.transform(H1, H2).
+ *
+ * What this really does is provide a more efficient way to compare a
+ * string to multiple other strings in locales with fancy collation
+ * rules and equivalence classes.
+ *
+ * @returns a locale-specific sort key equivalent to the input range.
+ *
+ * @throws std::bad_cast if the current locale does not have a collate
+ * facet.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ transform(_Fwd_iter __first, _Fwd_iter __last) const
+ {
+ using std::collate;
+ using std::use_facet;
+ const collate<_Ch_type>& __c(use_facet<
+ collate<_Ch_type> >(_M_locale));
+ string_type __s(__first, __last);
+ return __c.transform(__s.data(), __s.data() + __s.size());
+ }
+
+ /**
+ * @brief Dunno.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ *
+ * Effects: if typeid(use_facet<collate<_Ch_type> >) ==
+ * typeid(collate_byname<_Ch_type>) and the form of the sort key
+ * returned by collate_byname<_Ch_type>::transform(first, last) is known
+ * and can be converted into a primary sort key then returns that key,
+ * otherwise returns an empty string. WTF??
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ transform_primary(_Fwd_iter __first, _Fwd_iter __last) const
+ { return string_type(); }
+
+ /**
+ * @breief Gets a collation element by name.
+ *
+ * @param first beginning of the collation element name.
+ * @param last one-past-the-end of the collation element name.
+ *
+ * @returns a sequence of one or more characters that represents the
+ * collating element consisting of the character sequence designated by
+ * the iterator range [first, last). Returns an empty string if the
+ * character sequence is not a valid collating element.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ string_type
+ lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
+ { return string_type(); }
+
+ /**
+ * @brief Maps one or mire characters to a named character
+ * classification.
+ *
+ * @param first beginning of the character sequence.
+ * @param last one-past-the-end of the character sequence.
+ *
+ * @returns an unspecified value that represents the character
+ * classification named by the character sequence designated by the
+ * iterator range [first, last). The value returned shall be independent
+ * of the case of the characters in the character sequence. If the name
+ * is not recognized then returns a value that compares equal to 0.
+ *
+ * At least the following names (or their wide-character equivalent) are
+ * supported.
+ * - d
+ * - w
+ * - s
+ * - alnum
+ * - alpha
+ * - blank
+ * - cntrl
+ * - digit
+ * - graph
+ * - lower
+ * - print
+ * - punct
+ * - space
+ * - upper
+ * - xdigit
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Fwd_iter>
+ char_class_type
+ lookup_classname(_Fwd_iter __first, _Fwd_iter __last) const
+ { return 0; }
+
+ /**
+ * @brief Determines if @p c is a member of an identified class.
+ *
+ * @param c a character.
+ * @param f a class type (as returned from lookup_classname).
+ *
+ * @returns true if the character @p c is a member of the classification
+ * represented by @p f, false otherwise.
+ *
+ * @throws std::bad_cast if the current locale does not have a ctype
+ * facet.
+ */
+ bool
+ isctype(_Ch_type __c, char_class_type __f) const
+ {
+ using std::ctype;
+ using std::use_facet;
+ const ctype<_Ch_type>& __ctype(use_facet<
+ ctype<_Ch_type> >(_M_locale));
+
+ if (__ctype.is(__c, __f))
+ return true;
+
+ // special case of underscore in [[:w:]]
+ if (__c == __ctype.widen('_'))
+ {
+ const char* const __wb[] = "w";
+ char_class_type __wt = this->lookup_classname(__wb,
+ __wb + sizeof(__wb));
+ if (__f | __wt)
+ return true;
+ }
+
+ // special case of [[:space:]] in [[:blank:]]
+ if (__c == __ctype.isspace(__c))
+ {
+ const char* const __bb[] = "blank";
+ char_class_type __bt = this->lookup_classname(__bb,
+ __bb + sizeof(__bb));
+ if (__f | __bt)
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @brief Converts a digit to an int.
+ *
+ * @param ch a character representing a digit.
+ * @param radix the radix if the numeric conversion (limited to 8, 10,
+ * or 16).
+ *
+ * @returns the value represented by the digit ch in base radix if the
+ * character ch is a valid digit in base radix; otherwise returns -1.
+ *
+ * @todo Implement this function.
+ */
+ int
+ value(_Ch_type __ch, int __radix) const;
+
+ /**
+ * @brief Imbues the regex_traits object with a copy of a new locale.
+ *
+ * @param loc A locale.
+ *
+ * @returns a copy of the previous locale in use by the regex_traits
+ * object.
+ *
+ * @note Calling imbue with a different locale than the one currently in
+ * use invalidates all cached data held by *this.
+ */
+ locale_type
+ imbue(locale_type __loc)
+ {
+ std::swap(_M_locale, __loc);
+ return __loc;
+ }
+
+ /**
+ * @brief Gets a copy of the current locale in use by the regex_traits
+ * object.
+ */
+ locale_type
+ getloc() const
+ { return _M_locale; }
+
+ protected:
+ locale_type _M_locale;
+ };
+
+
+ // [7.8] Class basic_regex
+ /**
+ * Objects of specializations of this class represent regular expressions
+ * constructed from sequences of character type @p _Ch_type.
+ *
+ * Storage for the regular expression is allocated and deallocated as
+ * necessary by the member functions of this class.
+ */
+ template<typename _Ch_type, typename _Rx_traits = regex_traits<_Ch_type> >
+ class basic_regex
+ {
+ public:
+ // types:
+ typedef _Ch_type value_type;
+ typedef regex_constants::syntax_option_type flag_type;
+ typedef typename _Rx_traits::locale_type locale_type;
+ typedef typename _Rx_traits::string_type string_type;
+
+ // [7.8.1] constants
+ static const regex_constants::syntax_option_type icase
+ = regex_constants::icase;
+ static const regex_constants::syntax_option_type nosubs
+ = regex_constants::nosubs;
+ static const regex_constants::syntax_option_type optimize
+ = regex_constants::optimize;
+ static const regex_constants::syntax_option_type collate
+ = regex_constants::collate;
+ static const regex_constants::syntax_option_type ECMAScript
+ = regex_constants::ECMAScript;
+ static const regex_constants::syntax_option_type basic
+ = regex_constants::basic;
+ static const regex_constants::syntax_option_type extended
+ = regex_constants::extended;
+ static const regex_constants::syntax_option_type awk
+ = regex_constants::awk;
+ static const regex_constants::syntax_option_type grep
+ = regex_constants::grep;
+ static const regex_constants::syntax_option_type egrep
+ = regex_constants::egrep;
+
+ // [7.8.2] construct/copy/destroy
+ /**
+ * Constructs a basic regular expression that does not match any
+ * character sequence.
+ */
+ basic_regex()
+ : _M_flags(regex_constants::ECMAScript), _M_pattern(), _M_mark_count(0)
+ { _M_compile(); }
+
+ /**
+ * @brief Constructs a basic regular expression from the sequence
+ * [p, p + char_traits<_Ch_type>::length(p)) interpreted according to the
+ * flags in @p f.
+ *
+ * @param p A pointer to the start of a C-style null-terminated string
+ * containing a regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ explicit
+ basic_regex(const _Ch_type* __p,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f), _M_pattern(__p), _M_mark_count(0)
+ { _M_compile(); }
+
+ /**
+ * @brief Constructs a basic regular expression from the sequence
+ * [p, p + len) interpreted according to the flags in @p f.
+ *
+ * @param p A pointer to the start of a string containing a regular
+ * expression.
+ * @param len The length of the string containing the regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ basic_regex(const _Ch_type* __p, std::size_t __len, flag_type __f)
+ : _M_flags(__f) , _M_pattern(__p, __len), _M_mark_count(0)
+ { _M_compile(); }
+
+ /**
+ * @brief Copy-contructs a basic regular expression.
+ *
+ * @param rhs A @p regex object.
+ */
+ basic_regex(const basic_regex& __rhs)
+ : _M_flags(__rhs._M_flags), _M_pattern(__rhs._M_pattern),
+ _M_mark_count(__rhs._M_mark_count)
+ { _M_compile(); }
+
+ /**
+ * @brief Constructs a basic regular expression from the string
+ * @p interpreted according to the flags in @p f.
+ *
+ * @param p A string containing a regular expression.
+ * @param f Flags indicating the syntax rules and options.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc>
+ explicit
+ basic_regex(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f), _M_pattern(__s), _M_mark_count(0)
+ { _M_compile(); }
+
+ /**
+ * @brief Constructs a basic regular expression from the range
+ * [first, last) interpreted according to the flags in @p f.
+ *
+ * @param first The start of arange containing a valid regular
+ * expression.
+ * @param last The end of a range containing a valid regular
+ * expression.
+ * @param f The format flags of the regular expression.
+ *
+ * @throws regex_error if @p p is not a valid regular expression.
+ */
+ template<typename _InputIterator>
+ basic_regex(_InputIterator __first, _InputIterator __last,
+ flag_type __f = regex_constants::ECMAScript)
+ : _M_flags(__f), _M_pattern(__first, __last), _M_mark_count(0)
+ { _M_compile(); }
+
+ /**
+ * @brief Destroys a basic regular expression.
+ */
+ ~basic_regex()
+ { }
+
+ /**
+ * @brief Assigns one regular expression to another.
+ */
+ basic_regex&
+ operator=(const basic_regex& __rhs)
+ { return this->assign(__rhs); }
+
+ /**
+ * @brief Replaces a regular expression with a new one constructed from
+ * a C-style null-terminated string.
+ *
+ * @param A pointer to the start of a null-terminated C-style string
+ * containing a regular expression.
+ */
+ basic_regex&
+ operator=(const _Ch_type* __p)
+ { return this->assign(__p, flags()); }
+
+ /**
+ * @brief Replaces a regular expression with a new one constructed from
+ * a string.
+ *
+ * @param A pointer to a string containing a regular expression.
+ */
+ template<typename _Ch_typeraits, typename _Allocator>
+ basic_regex&
+ operator=(const basic_string<_Ch_type, _Ch_typeraits, _Allocator>& __s)
+ { return this->assign(__s, flags()); }
+
+ // [7.8.3] assign
+ /**
+ * @brief the real assignment operator.
+ *
+ * @param that Another regular expression object.
+ */
+ basic_regex&
+ assign(const basic_regex& __that)
+ {
+ basic_regex __tmp(__that);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * C-style null-terminated string containing a regular expression
+ * pattern.
+ *
+ * @param p A pointer to a C-style null-terminated string containing
+ * a regular expression pattern.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ basic_regex&
+ assign(const _Ch_type* __p,
+ flag_type __flags = regex_constants::ECMAScript)
+ { return this->assign(string_type(__p), __flags); }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * C-style string containing a regular expression pattern.
+ *
+ * @param p A pointer to a C-style string containing a
+ * regular expression pattern.
+ * @param len The length of the regular expression pattern string.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ basic_regex&
+ assign(const _Ch_type* __p, std::size_t __len, flag_type __flags)
+ { return this->assign(string_type(__p, __len), __flags); }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object from a
+ * string containing a regular expression pattern.
+ *
+ * @param s A string containing a regular expression pattern.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ template<typename _Ch_typeraits, typename _Allocator>
+ basic_regex&
+ assign(const basic_string<_Ch_type, _Ch_typeraits, _Allocator>& __s,
+ flag_type __f = regex_constants::ECMAScript)
+ {
+ basic_regex __tmp(__s, __f);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ /**
+ * @brief Assigns a new regular expression to a regex object.
+ *
+ * @param first The start of a range containing a valid regular
+ * expression.
+ * @param last The end of a range containing a valid regular
+ * expression.
+ * @param flags Syntax option flags.
+ *
+ * @throws regex_error if p does not contain a valid regular expression
+ * pattern interpreted according to @p flags. If regex_error is thrown,
+ * *this remains unchanged.
+ */
+ template<typename _InputIterator>
+ basic_regex&
+ assign(_InputIterator __first, _InputIterator __last,
+ flag_type __flags = regex_constants::ECMAScript)
+ { return this->assign(string_type(__first, __last), __flags); }
+
+ // [7.8.4] const operations
+ /**
+ * @brief Gets the number of marked subexpressions within the regular
+ * expresison.
+ */
+ unsigned int
+ mark_count() const
+ { return _M_mark_count; }
+
+ /**
+ * @brief Gets the flags used to construct the regular expression
+ * or in the last call to assign().
+ */
+ flag_type
+ flags() const
+ { return _M_flags; }
+
+ // [7.8.5] locale
+ /**
+ * @brief Imbues the regular expression object with the given locale.
+ *
+ * @param loc A locale.
+ */
+ locale_type
+ imbue(locale_type __loc)
+ { return _M_traits.imbue(__loc); }
+
+ /**
+ * @brief Gets the locale currently imbued in the regular expression
+ * object.
+ */
+ locale_type
+ getloc() const
+ { return _M_traits.getloc(); }
+
+ // [7.8.6] swap
+ /**
+ * @brief Swaps the contents of two regular expression obects.
+ *
+ * @param rhs Another regular expression object.
+ */
+ void
+ swap(basic_regex& __rhs)
+ {
+ std::swap(_M_flags, __rhs._M_flags);
+ std::swap(_M_pattern, __rhs._M_pattern);
+ std::swap(_M_mark_count, __rhs._M_mark_count);
+ std::swap(_M_traits, __rhs._M_traits);
+ }
+
+ private:
+ /**
+ * @brief Compiles a regular expression pattern into a NFA.
+ * @todo Implement this function.
+ */
+ void _M_compile()
+ { }
+
+ protected:
+ flag_type _M_flags;
+ string_type _M_pattern;
+ unsigned int _M_mark_count;
+ _Rx_traits _M_traits;
+ };
+
+ typedef basic_regex<char> regex;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef basic_regex<wchar_t> wregex;
+#endif
+
+
+ // [7.8.6] basic_regex swap
+ /**
+ * @brief Swaps the contents of two regular expression objects.
+ * @param lhs First regular expression.
+ * @param rhs Second regular expression.
+ */
+ template<typename _Ch_type, typename _Rx_traits>
+ inline void
+ swap(basic_regex<_Ch_type, _Rx_traits>& __lhs,
+ basic_regex<_Ch_type, _Rx_traits>& __rhs)
+ { return __lhs.swap(__rhs); }
+
+
+ // [7.9] Class template sub_match
+ /**
+ * A sequence of characters matched by a particular marked sub-expression.
+ *
+ * An object of this class is essentially a pair of iterators marking a
+ * matched subexpression within a regular expression pattern match. Such
+ * objects can be converted to and compared with std::basic_string objects
+ * of a similar base character type as the pattern matched by the regular
+ * expression.
+ *
+ * The iterators that make up the pair are the usual half-open interval
+ * referencing the actual original pattern matched.
+ */
+ template<typename _BiIter>
+ class sub_match : public std::pair<_BiIter, _BiIter>
+ {
+ public:
+ typedef typename iterator_traits<_BiIter>::value_type value_type;
+ typedef typename iterator_traits<_BiIter>::difference_type
+ difference_type;
+ typedef _BiIter iterator;
+
+ public:
+ bool matched;
+
+ /**
+ * Gets the length of the matching sequence.
+ */
+ difference_type
+ length() const
+ { return this->matched ? std::distance(this->first, this->second) : 0; }
+
+ /**
+ * @brief Gets the matching sequence as a string.
+ *
+ * @returns the matching sequence as a string.
+ *
+ * This is the implicit conversion operator. It is identical to the
+ * str() member function except that it will want to pop up in
+ * unexpected places and cause a great deal of confusion and cursing
+ * from the unwary.
+ */
+ operator basic_string<value_type>() const
+ {
+ return this->matched
+ ? std::basic_string<value_type>(this->first, this->second)
+ : std::basic_string<value_type>();
+ }
+
+ /**
+ * @brief Gets the matching sequence as a string.
+ *
+ * @returns the matching sequence as a string.
+ */
+ basic_string<value_type>
+ str() const
+ {
+ return this->matched
+ ? std::basic_string<value_type>(this->first, this->second)
+ : std::basic_string<value_type>();
+ }
+
+ /**
+ * @brief Compares this and another matched sequence.
+ *
+ * @param s Another matched sequence to compare to this one.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const sub_match& __s) const
+ { return this->str().compare(__s.str()); }
+
+ /**
+ * @brief Compares this sub_match to a string.
+ *
+ * @param s A string to compare to this sub_match.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const basic_string<value_type>& __s) const
+ { return this->str().compare(__s); }
+
+ /**
+ * @brief Compares this sub_match to a C-style string.
+ *
+ * @param s A C-style string to compare to this sub_match.
+ *
+ * @retval <0 this matched sequence will collate before @p s.
+ * @retval =0 this matched sequence is equivalent to @p s.
+ * @retval <0 this matched sequence will collate after @p s.
+ */
+ int
+ compare(const value_type* __s) const
+ { return this->str().compare(__s); }
+ };
+
+
+ typedef sub_match<const char*> csub_match;
+ typedef sub_match<string::const_iterator> ssub_match;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef sub_match<const wchar_t*> wcsub_match;
+ typedef sub_match<wstring::const_iterator> wssub_match;
+#endif
+
+ // [7.9.2] sub_match non-member operators
+
+ /**
+ * @brief Tests the equivalence of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator==(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) == 0; }
+
+ /**
+ * @brief Tests the inequivalence of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator!=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) != 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator<(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) < 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator<=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) <= 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator>=(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) >= 0; }
+
+ /**
+ * @brief Tests the ordering of two regular expression submatches.
+ * @param lhs First regular expression submatch.
+ * @param rhs Second regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _BiIter>
+ inline bool
+ operator>(const sub_match<_BiIter>& __lhs,
+ const sub_match<_BiIter>& __rhs)
+ { return __lhs.compare(__rhs) > 0; }
+
+ /**
+ * @brief Tests the equivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator==(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator!=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator<(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator>(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator>=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator<=(const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter, class _Ch_traits, class _Ch_alloc>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ const basic_string<
+ typename iterator_traits<_Bi_iter>::value_type,
+ _Ch_traits, _Ch_alloc>& __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Tests the equivalence of a C string and a regular expression
+ * submatch.
+ * @param lhs A C string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of an iterator value and a regular
+ * expression submatch.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A pointer to a string?
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A pointer to a string.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not precede @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A string.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Tests the equivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs == __rhs.str(); }
+
+ /**
+ * @brief Tests the inequivalence of a string and a regular expression
+ * submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs != __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs precedes @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs < __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs > __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs >= __rhs.str(); }
+
+ /**
+ * @brief Tests the ordering of a string and a regular expression submatch.
+ * @param lhs A string.
+ * @param rhs A regular expression submatch.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+ const sub_match<_Bi_iter>& __rhs)
+ { return __lhs <= __rhs.str(); }
+
+ /**
+ * @brief Tests the equivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs is equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator==(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() == __rhs; }
+
+ /**
+ * @brief Tests the inequivalence of a regular expression submatch and a
+ * string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs is not equivalent to @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator!=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() != __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs preceeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() < __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs succeeds @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() > __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs does not preceed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator>=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() >= __rhs; }
+
+ /**
+ * @brief Tests the ordering of a regular expression submatch and a string.
+ * @param lhs A regular expression submatch.
+ * @param rhs A const string reference.
+ * @returns true if @a lhs does not succeed @a rhs, false otherwise.
+ */
+ template<typename _Bi_iter>
+ inline bool
+ operator<=(const sub_match<_Bi_iter>& __lhs,
+ typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+ { return __lhs.str() <= __rhs; }
+
+ /**
+ * @brief Inserts a matched string into an output stream.
+ *
+ * @param os The output stream.
+ * @param m A submatch string.
+ *
+ * @returns the output stream with the submatch string inserted.
+ */
+ template<typename _Ch_type, typename _Ch_traits, typename _Bi_iter>
+ inline
+ basic_ostream<_Ch_type, _Ch_traits>&
+ operator<<(basic_ostream<_Ch_type, _Ch_traits>& __os,
+ const sub_match<_Bi_iter>& __m)
+ { return __os << __m.str(); }
+
+ // [7.10] Class template match_results
+ /**
+ * A collection of character sequences representing the result of a regular
+ * expression match. Storage for the collection is allocated and freed as
+ * necessary by the member functions of class template match_results.
+ *
+ * This class satisfies the Sequence requirements, with the exception that
+ * only the operations defined for a const-qualified Sequence are supported.
+ *
+ * The sub_match object stored at index 0 represents sub-expression 0, i.e.
+ * the whole match. In this case the sub_match member matched is always true.
+ * The sub_match object stored at index n denotes what matched the marked
+ * sub-expression n within the matched expression. If the sub-expression n
+ * participated in a regular expression match then the sub_match member
+ * matched evaluates to true, and members first and second denote the range
+ * of characters [first, second) which formed that match. Otherwise matched
+ * is false, and members first and second point to the end of the sequence
+ * that was searched.
+ */
+ template<typename _Bi_iter,
+ typename _Allocator = allocator<sub_match<_Bi_iter> > >
+ class match_results
+ : private std::vector<std::_GLIBCXX_TR1::sub_match<_Bi_iter>, _Allocator>
+ {
+ private:
+ typedef std::vector<std::_GLIBCXX_TR1::sub_match<_Bi_iter>, _Allocator>
+ _Base_type;
+
+ public:
+ typedef sub_match<_Bi_iter> value_type;
+ typedef typename _Allocator::const_reference const_reference;
+ typedef const_reference reference;
+ typedef typename _Base_type::const_iterator const_iterator;
+ typedef const_iterator iterator;
+ typedef typename iterator_traits<_Bi_iter>::difference_type
+ difference_type;
+ typedef typename _Allocator::size_type size_type;
+ typedef _Allocator allocator_type;
+ typedef typename iterator_traits<_Bi_iter>::value_type char_type;
+ typedef basic_string<char_type> string_type;
+
+ public:
+ // [7.10.1] construct/copy/destroy
+ /**
+ * @brief Constructs a default match_results container.
+ */
+ explicit
+ match_results(const _Allocator& __a = _Allocator())
+ : _Base_type(__a), _M_matched(false)
+ { }
+
+ /**
+ * @brief Copy constructs a match_result.
+ */
+ match_results(const match_results& __rhs)
+ : _Base_type(__rhs), _M_matched(__rhs._M_matched),
+ _M_prefix(__rhs._M_prefix), _M_suffix(__rhs._M_suffix)
+ { }
+
+ /**
+ * @brief Assigns rhs to *this.
+ */
+ match_results&
+ operator=(const match_results& __rhs)
+ {
+ match_results __tmp(__rhs);
+ this->swap(__tmp);
+ }
+
+ /**
+ * @todo Implement this function.
+ */
+ ~match_results()
+ { }
+
+ // [7.10.2] size
+ /**
+ * @todo Document this function.
+ */
+ size_type
+ size() const
+ { return _M_matched ? _Base_type::size() + 1 : 0; }
+
+ /**
+ * @todo Implement this function.
+ */
+ //size_type
+ //max_size() const;
+ using _Base_type::max_size;
+
+ /**
+ * @todo Document this function.
+ */
+ bool
+ empty() const
+ { return size() == 0; }
+
+ // [7.10.3] element access
+ /**
+ * @brief Gets the length of the indicated submatch.
+ * @param sub indicates the submatch.
+ */
+ difference_type
+ length(size_type __sub = 0) const
+ { return _M_matched ? this->str(__sub).length() : 0; }
+
+ /**
+ * @todo Document this function.
+ */
+ difference_type
+ position(size_type __sub = 0) const
+ {
+ return _M_matched ? std::distance(this->prefix().first,
+ (*this)[__sub].first) : 0;
+ }
+
+ /**
+ * @todo Document this function.
+ */
+ string_type
+ str(size_type __sub = 0) const
+ { return _M_matched ? (*this)[__sub].str() : string_type(); }
+
+ /**
+ * @todo Document this function.
+ */
+ const_reference
+ operator[](size_type __n) const
+ { return _Base_type::operator[](__n); }
+
+ /**
+ * @todo Document this function.
+ */
+ const_reference
+ prefix() const
+ { return _M_prefix; }
+
+ /**
+ * @todo Document this function.
+ */
+ const_reference
+ suffix() const
+ { return _M_suffix; }
+
+ /**
+ * @todo Document this function.
+ */
+ const_iterator
+ begin() const
+ { return _Base_type::begin(); }
+
+ /**
+ * @todo Document this function.
+ */
+ const_iterator
+ end() const
+ { return _Base_type::end(); }
+
+ // [7.10.4] format
+ /**
+ * @todo Implement this function.
+ */
+ template<typename _Out_iter>
+ _Out_iter
+ format(_Out_iter __out, const string_type& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::format_default) const
+ { return __out; }
+
+ /**
+ * @todo Implement this function.
+ */
+ string_type
+ format(const string_type& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::format_default) const;
+
+ // [7.10.5] allocator
+ /**
+ * @todo Document this function.
+ */
+ //allocator_type
+ //get_allocator() const;
+ using _Base_type::get_allocator;
+
+ // [7.10.6] swap
+ /**
+ * @todo Document this function.
+ */
+ void
+ swap(match_results& __that)
+ {
+ _Base_type::swap(__that);
+ std::swap(_M_matched, __that._M_matched);
+ std::swap(_M_prefix, __that._M_prefix);
+ std::swap(_M_suffix, __that._M_suffix);
+ }
+
+ private:
+ bool _M_matched;
+ value_type _M_prefix;
+ value_type _M_suffix;
+ };
+
+ typedef match_results<const char*> cmatch;
+ typedef match_results<string::const_iterator> smatch;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef match_results<const wchar_t*> wcmatch;
+ typedef match_results<wstring::const_iterator> wsmatch;
+#endif
+
+ // match_results comparisons
+ /**
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator>
+ inline bool
+ operator==(const match_results<_Bi_iter, _Allocator>& __m1,
+ const match_results<_Bi_iter, _Allocator>& __m2);
+
+ /**
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, class _Allocator>
+ inline bool
+ operator!=(const match_results<_Bi_iter, _Allocator>& __m1,
+ const match_results<_Bi_iter, _Allocator>& __m2);
+
+ // [7.10.6] match_results swap
+ /**
+ * @brief Swaps two match results.
+ * @param lhs A match result.
+ * @param rhs A match result.
+ *
+ * The contents of the two match_results objects are swapped.
+ */
+ template<typename _Bi_iter, typename _Allocator>
+ inline void
+ swap(match_results<_Bi_iter, _Allocator>& __lhs,
+ match_results<_Bi_iter, _Allocator>& __rhs)
+ { return __lhs.swap(__rhs); }
+
+ // [7.11.2] Function template regex_match
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and all of the character sequence [first, last).
+ *
+ * @param first Beginning of the character sequence to match.
+ * @param last One-past-the-end of the character sequence to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ *
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator,
+ typename _Ch_type, typename _Rx_traits>
+ bool
+ regex_match(_Bi_iter __first, _Bi_iter __last,
+ match_results<_Bi_iter, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return false; }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and all of the character sequence [first, last).
+ *
+ * @param first Beginning of the character sequence to match.
+ * @param last One-past-the-end of the character sequence to match.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ */
+ template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+ bool
+ regex_match(_Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ match_results<_Bi_iter> __what;
+ return regex_match(__first, __last, __what, __re, __flags);
+ }
+
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and a C-style null-terminated string.
+ *
+ * @param s The C-style null-terminated string to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param f Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ */
+ template<typename _Ch_type, typename _Allocator, typename _Rx_traits>
+ inline bool
+ regex_match(const _Ch_type* __s,
+ match_results<const _Ch_type*, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_match(__s, __s + _Rx_traits::length(__s), __m, __re, __f); }
+
+ /**
+ * @brief Determines if there is a match between the regular expression @p e
+ * and a string.
+ *
+ * @param s The string to match.
+ * @param m The match results.
+ * @param re The regular expression.
+ * @param flags Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc,
+ typename _Allocator, typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+ match_results<typename basic_string<_Ch_type,
+ _Ch_traits, _Ch_alloc>::const_iterator, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_match(__s.begin(), __s.end(), __m, __re, __flags); }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and a C-style null-terminated string.
+ *
+ * @param s The C-style null-terminated string to match.
+ * @param re The regular expression.
+ * @param f Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ */
+ template<typename _Ch_type, class _Rx_traits>
+ inline bool
+ regex_match(const _Ch_type* __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_match(__s, __s + _Rx_traits::length(__s), __re, __f); }
+
+ /**
+ * @brief Indicates if there is a match between the regular expression @p e
+ * and a string.
+ *
+ * @param s [IN] The string to match.
+ * @param re [IN] The regular expression.
+ * @param flags [IN] Controls how the regular expression is matched.
+ *
+ * @retval true A match exists.
+ * @retval false Otherwise.
+ */
+ template<typename _Ch_traits, typename _Str_allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_match(const basic_string<_Ch_type, _Ch_traits, _Str_allocator>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_match(__s.begin(), __s.end(), __re, __flags); }
+
+ // [7.11.3] Function template regex_search
+ /**
+ * Searches for a regular expression within a range.
+ * @param first [IN] The start of the string to search.
+ * @param last [IN] One-past-the-end of the string to search.
+ * @param m [OUT] The match results.
+ * @param re [IN] The regular expression to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ * @todo Implement this function.
+ */
+ template<typename _Bi_iter, typename _Allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(_Bi_iter __first, _Bi_iter __last,
+ match_results<_Bi_iter, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return false; }
+
+ /**
+ * Searches for a regular expression within a range.
+ * @param first [IN] The start of the string to search.
+ * @param last [IN] One-past-the-end of the string to search.
+ * @param re [IN] The regular expression to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @todo Document me.
+ */
+ template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(_Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __re,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ match_results<_Bi_iter> __what;
+ return regex_search(__first, __last, __what, __re, __flags);
+ }
+
+ /**
+ * @brief Searches for a regular expression within a C-string.
+ * @param s [IN] A C-string to search for the regex.
+ * @param m [OUT] The set of regex mnatches.
+ * @param e [IN] The regex to search for in @p s.
+ * @param f [IN] The search flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ * @todo Document me.
+ */
+ template<typename _Ch_type, class _Allocator, class _Rx_traits>
+ inline bool
+ regex_search(const _Ch_type* __s,
+ match_results<const _Ch_type*, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
+
+ /**
+ * @brief Searches for a regular expression within a C-string.
+ * @param s [IN] The C-string to search.
+ * @param e [IN] The regular expressioon to search for.
+ * @param f [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @todo Document me.
+ */
+ template<typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(const _Ch_type* __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s, __s + _Rx_traits::length(__s), __e, __f); }
+
+ /**
+ * @brief Searches for a regular expression within a string.
+ * @param s [IN] The string to search.
+ * @param e [IN] The regular expressioon to search for.
+ * @param flags [IN] Search policy flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string.
+ * @todo Document me.
+ */
+ template<typename _Ch_traits, typename _String_allocator,
+ typename _Ch_type, typename _Rx_traits>
+ inline bool
+ regex_search(const basic_string<_Ch_type, _Ch_traits,
+ _String_allocator>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return regex_search(__s.begin(), __s.end(), __e, __flags); }
+
+ /**
+ * @brief Searches for a regular expression within a string.
+ * @param s [IN] A C++ string to search for the regex.
+ * @param m [OUT] The set of regex mnatches.
+ * @param e [IN] The regex to search for in @p s.
+ * @param f [IN] The search flags.
+ * @retval true A match was found within the string.
+ * @retval false No match was found within the string, the content of %m is
+ * undefined.
+ */
+ template<typename _Ch_traits, typename _Ch_alloc,
+ typename _Allocator, typename _Ch_type,
+ typename _Rx_traits>
+ inline bool
+ regex_search(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+ match_results<typename basic_string<_Ch_type,
+ _Ch_traits, _Ch_alloc>::const_iterator, _Allocator>& __m,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ regex_constants::match_flag_type __f
+ = regex_constants::match_default)
+ { return regex_search(__s.begin(), __s.end(), __m, __e, __f); }
+
+ // [7.11.4] Function template regex_replace
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ template<typename _Out_iter, typename _Bi_iter,
+ typename _Rx_traits, typename _Ch_type>
+ inline _Out_iter
+ regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ const basic_string<_Ch_type>& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ { return __out; }
+
+ /**
+ * @todo Document me.
+ */
+ template<typename _Rx_traits, typename _Ch_type>
+ inline basic_string<_Ch_type>
+ regex_replace(const basic_string<_Ch_type>& __s,
+ const basic_regex<_Ch_type, _Rx_traits>& __e,
+ const basic_string<_Ch_type>& __fmt,
+ regex_constants::match_flag_type __flags
+ = regex_constants::match_default)
+ {
+ std::string __result;
+ regex_replace(std::back_inserter(__result),
+ __s.begin(), __s.end(), __e, __fmt, __flags);
+ return __result;
+ }
+
+ // [7.12.1] Class template regex_iterator
+ /**
+ * An iterator adaptor that will provide repeated calls of regex_search over
+ * a range until no more matches remain.
+ */
+ template<typename _Bi_iter,
+ typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+ typename _Rx_traits = regex_traits<_Ch_type> >
+ class regex_iterator
+ {
+ public:
+ typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
+ typedef match_results<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ public:
+ /**
+ * @brief Provides a singular iterator, useful for indicating
+ * one-past-the-end of a range.
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator();
+
+ /**
+ * Constructs a %regex_iterator...
+ * @param a [IN] The start of a text range to search.
+ * @param b [IN] One-past-the-end of the text range to search.
+ * @param re [IN] The regular expression to match.
+ * @param m [IN] Policy flags for match rules.
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Copy constructs a %regex_iterator.
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator&
+ operator=(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ bool
+ operator==(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ bool
+ operator!=(const regex_iterator& __rhs);
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ const value_type&
+ operator*();
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ const value_type*
+ operator->();
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator&
+ operator++();
+
+ /**
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_iterator
+ operator++(int);
+
+ private:
+ // these members are shown for exposition only:
+ _Bi_iter begin;
+ _Bi_iter end;
+ const regex_type* pregex;
+ regex_constants::match_flag_type flags;
+ match_results<_Bi_iter> match;
+ };
+
+ typedef regex_iterator<const char*> cregex_iterator;
+ typedef regex_iterator<string::const_iterator> sregex_iterator;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef regex_iterator<const wchar_t*> wcregex_iterator;
+ typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
+#endif
+
+ // [7.12.2] Class template regex_token_iterator
+ /**
+ * Iterates over submatches in a range (or "splits" a text string).
+ *
+ * The purpose of this iterator is to enumerate all, or all specified,
+ * matches of a regular expression within a text range. The dereferenced
+ * value of an iterator of this class is a std::tr1::sub_match object.
+ */
+ template<typename _Bi_iter,
+ typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+ typename _Rx_traits = regex_traits<_Ch_type> >
+ class regex_token_iterator
+ {
+ public:
+ typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
+ typedef sub_match<_Bi_iter> value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ public:
+ /**
+ * @brief Default constructs a %regex_token_iterator.
+ * @todo Implement this function.
+ *
+ * A default-constructed %regex_token_iterator is a singular iterator
+ * that will compare equal to the one-past-the-end value for any
+ * iterator of the same type.
+ */
+ regex_token_iterator();
+
+ /**
+ * Constrcts a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-eend of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatch [IN] Which submatch to return. There are some
+ * special values for thsi parameter:
+ * - -1 each enumerated subexpression does NOT
+ * match the regular expression (aka field
+ * splitting)
+ * - 0 the entire string matching the
+ * subexpression is returned for each match
+ * within the text.
+ * - >0 enumerates only the indicated
+ * subexpression from a match within the text.
+ * @param m [IN] Policy flags for match rules.
+ *
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+ int __submatch = 0,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Constrcts a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-eend of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatches [IN] A list of subexpressions to return for each
+ * regular expression match within the text.
+ * @param m [IN] Policy flags for match rules.
+ *
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+ const regex_type& __re,
+ const std::vector<int>& __submatches,
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * Constrcts a %regex_token_iterator...
+ * @param a [IN] The start of the text to search.
+ * @param b [IN] One-past-the-eend of the text to search.
+ * @param re [IN] The regular expression to search for.
+ * @param submatches [IN] A list of subexpressions to return for each
+ * regular expression match within the text.
+ * @param m [IN] Policy flags for match rules.
+
+ * @todo Implement this function.
+ * @todo Document this function.
+ */
+ template<std::size_t _Nm>
+ regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+ const regex_type& __re,
+ const int (&__submatches)[_Nm],
+ regex_constants::match_flag_type __m
+ = regex_constants::match_default);
+
+ /**
+ * @brief Copy constructs a %regex_token_iterator.
+ * @param rhs [IN] A %regex_token_iterator to copy.
+ * @todo Implement this function.
+ */
+ regex_token_iterator(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Assigns a %regex_token_iterator to another.
+ * @param rhs [IN] A %regex_token_iterator to copy.
+ * @todo Implement this function.
+ */
+ regex_token_iterator&
+ operator=(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Compares a %regex_token_iterator to another for equality.
+ * @todo Implement this function.
+ */
+ bool
+ operator==(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Compares a %regex_token_iterator to another for inequality.
+ * @todo Implement this function.
+ */
+ bool
+ operator!=(const regex_token_iterator& __rhs);
+
+ /**
+ * @brief Dereferences a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ const value_type&
+ operator*();
+
+ /**
+ * @brief Selects a %regex_token_iterator member.
+ * @todo Implement this function.
+ */
+ const value_type*
+ operator->();
+
+ /**
+ * @brief Increments a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ regex_token_iterator&
+ operator++();
+
+ /**
+ * @brief Postincrements a %regex_token_iterator.
+ * @todo Implement this function.
+ */
+ regex_token_iterator
+ operator++(int);
+
+ private: // data members for exposition only:
+ typedef regex_iterator<_Bi_iter, _Ch_type, _Rx_traits> position_iterator;
+
+ position_iterator __position;
+ const value_type* __result;
+ value_type __suffix;
+ std::size_t __n;
+ std::vector<int> __subs;
+ };
+
+ typedef regex_token_iterator<const char*> cregex_token_iterator;
+ typedef regex_token_iterator<string::const_iterator> sregex_token_iterator;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
+ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
+#endif
+
+ /** @} */ // group tr1_regex
+
+_GLIBCXX_END_NAMESPACE
+}
+
+#endif // _TR1_REGEX
diff --git a/libstdc++-v3/include/tr1/repeat.h b/libstdc++-v3/include/tr1/repeat.h
deleted file mode 100644
index 3f09dd56207..00000000000
--- a/libstdc++-v3/include/tr1/repeat.h
+++ /dev/null
@@ -1,677 +0,0 @@
-// TR1 code repetition -*- C++ -*-
-
-// Copyright (C) 2005 Free Software Foundation, Inc.
-// Written by Douglas Gregor <doug.gregor -at- gmail.com>
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/repeat.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef _GLIBCXX_REPEAT_HEADER
-# error Internal error: _GLIBCXX_REPEAT_HEADER must be set
-#endif /* _GLIBCXX_REPEAT_HEADER */
-
-#ifndef _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS
-# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10
-# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED typename, typename, typename, typename, typename, typename, typename, typename, typename, typename
-# define _GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10
-#endif
-
-#define _GLIBCXX_NUM_ARGS 0
-#define _GLIBCXX_COMMA
-#define _GLIBCXX_TEMPLATE_PARAMS
-#define _GLIBCXX_TEMPLATE_ARGS
-#define _GLIBCXX_PARAMS
-#define _GLIBCXX_REF_PARAMS
-#define _GLIBCXX_ARGS
-#define _GLIBCXX_COMMA_SHIFTED
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#define _GLIBCXX_PARAMS_SHIFTED
-#define _GLIBCXX_ARGS_SHIFTED
-#define _GLIBCXX_BIND_MEMBERS_INIT
-#define _GLIBCXX_BIND_MEMBERS
-#define _GLIBCXX_MU_GET_TUPLE_ARGS
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV)
-#define _GLIBCXX_BIND_V_ARGS
-#define _GLIBCXX_TUPLE_ADD_CREF
-#define _GLIBCXX_TUPLE_COPY_INIT
-#define _GLIBCXX_TUPLE_ASSIGN
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#define _GLIBCXX_TEMPLATE_PARAMS_U
-#define _GLIBCXX_TEMPLATE_ARGS_U
-#define _GLIBCXX_REF_WRAP_PARAMS
-#define _GLIBCXX_REF_TEMPLATE_ARGS
-#define _GLIBCXX_NUM_ARGS_PLUS_1 1
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T1
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-
-#define _GLIBCXX_NUM_ARGS 1
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1
-#define _GLIBCXX_TEMPLATE_ARGS _T1
-#define _GLIBCXX_PARAMS _T1 __a1
-#define _GLIBCXX_REF_PARAMS _T1& __a1
-#define _GLIBCXX_ARGS __a1
-#define _GLIBCXX_COMMA_SHIFTED
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#define _GLIBCXX_PARAMS_SHIFTED
-#define _GLIBCXX_ARGS_SHIFTED
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 2
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T2
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-
-#define _GLIBCXX_NUM_ARGS 2
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2
-#define _GLIBCXX_ARGS __a1, __a2
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1
-#define _GLIBCXX_ARGS_SHIFTED __a1
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 3
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T3
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 3
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3
-#define _GLIBCXX_ARGS __a1, __a2, __a3
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 4
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T4
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 4
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 5
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T5
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 5
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 6
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T6
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 6
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 7
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T7
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 7
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 8
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T8
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 8
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 9
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T9
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_NUM_ARGS 9
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8, typename __add_c_ref<_T9>::type __a9
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8), _M_arg9(__in._M_arg9)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8; _M_arg9 = __in._M_arg9;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass, typename _T9 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type, typename __strip_reference_wrapper<_T9>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8), ref(__a9)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 10
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T10
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#define _GLIBCXX_LAST_INCLUDE
-#define _GLIBCXX_NUM_ARGS 10
-#define _GLIBCXX_COMMA ,
-#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10
-#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10
-#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10
-#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9, _T10& __a10
-#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10
-#define _GLIBCXX_COMMA_SHIFTED ,
-#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9
-#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9
-#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9
-#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9
-#define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10;
-#define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10)
-#define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple)
-#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
-#define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
-#define _GLIBCXX_TUPLE_ADD_CREF typename __add_c_ref<_T1>::type __a1, typename __add_c_ref<_T2>::type __a2, typename __add_c_ref<_T3>::type __a3, typename __add_c_ref<_T4>::type __a4, typename __add_c_ref<_T5>::type __a5, typename __add_c_ref<_T6>::type __a6, typename __add_c_ref<_T7>::type __a7, typename __add_c_ref<_T8>::type __a8, typename __add_c_ref<_T9>::type __a9, typename __add_c_ref<_T10>::type __a10
-#define _GLIBCXX_TUPLE_COPY_INIT _M_arg1(__in._M_arg1), _M_arg2(__in._M_arg2), _M_arg3(__in._M_arg3), _M_arg4(__in._M_arg4), _M_arg5(__in._M_arg5), _M_arg6(__in._M_arg6), _M_arg7(__in._M_arg7), _M_arg8(__in._M_arg8), _M_arg9(__in._M_arg9), _M_arg10(__in._M_arg10)
-#define _GLIBCXX_TUPLE_ASSIGN _M_arg1 = __in._M_arg1; _M_arg2 = __in._M_arg2; _M_arg3 = __in._M_arg3; _M_arg4 = __in._M_arg4; _M_arg5 = __in._M_arg5; _M_arg6 = __in._M_arg6; _M_arg7 = __in._M_arg7; _M_arg8 = __in._M_arg8; _M_arg9 = __in._M_arg9; _M_arg10 = __in._M_arg10;
-#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS typename _T1 = _NullClass, typename _T2 = _NullClass, typename _T3 = _NullClass, typename _T4 = _NullClass, typename _T5 = _NullClass, typename _T6 = _NullClass, typename _T7 = _NullClass, typename _T8 = _NullClass, typename _T9 = _NullClass, typename _T10 = _NullClass
-#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED typename __strip_reference_wrapper<_T1>::__type, typename __strip_reference_wrapper<_T2>::__type, typename __strip_reference_wrapper<_T3>::__type, typename __strip_reference_wrapper<_T4>::__type, typename __strip_reference_wrapper<_T5>::__type, typename __strip_reference_wrapper<_T6>::__type, typename __strip_reference_wrapper<_T7>::__type, typename __strip_reference_wrapper<_T8>::__type, typename __strip_reference_wrapper<_T9>::__type, typename __strip_reference_wrapper<_T10>::__type
-#define _GLIBCXX_TEMPLATE_PARAMS_U typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10
-#define _GLIBCXX_TEMPLATE_ARGS_U _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10
-#define _GLIBCXX_REF_WRAP_PARAMS ref(__a1), ref(__a2), ref(__a3), ref(__a4), ref(__a5), ref(__a6), ref(__a7), ref(__a8), ref(__a9), ref(__a10)
-#define _GLIBCXX_REF_TEMPLATE_ARGS _T1&, _T2&, _T3&, _T4&, _T5&, _T6&, _T7&, _T8&, _T9&, _T10&
-#define _GLIBCXX_NUM_ARGS_PLUS_1 11
-#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T11
-#include _GLIBCXX_REPEAT_HEADER
-#undef _GLIBCXX_T_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_NUM_ARGS_PLUS_1
-#undef _GLIBCXX_REF_TEMPLATE_ARGS
-#undef _GLIBCXX_REF_WRAP_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS_U
-#undef _GLIBCXX_TEMPLATE_PARAMS_U
-#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED
-#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS
-#undef _GLIBCXX_TUPLE_ASSIGN
-#undef _GLIBCXX_TUPLE_COPY_INIT
-#undef _GLIBCXX_TUPLE_ADD_CREF
-#undef _GLIBCXX_BIND_V_ARGS
-#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
-#undef _GLIBCXX_MU_GET_TUPLE_ARGS
-#undef _GLIBCXX_BIND_MEMBERS_INIT
-#undef _GLIBCXX_BIND_MEMBERS
-#undef _GLIBCXX_ARGS_SHIFTED
-#undef _GLIBCXX_PARAMS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
-#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
-#undef _GLIBCXX_COMMA_SHIFTED
-#undef _GLIBCXX_ARGS
-#undef _GLIBCXX_REF_PARAMS
-#undef _GLIBCXX_PARAMS
-#undef _GLIBCXX_TEMPLATE_ARGS
-#undef _GLIBCXX_TEMPLATE_PARAMS
-#undef _GLIBCXX_COMMA
-#undef _GLIBCXX_NUM_ARGS
-#undef _GLIBCXX_LAST_INCLUDE
-
diff --git a/libstdc++-v3/include/tr1/stdlib.h b/libstdc++-v3/include/tr1/stdlib.h
index 92bc4687c6f..0075cc7bd55 100644
--- a/libstdc++-v3/include/tr1/stdlib.h
+++ b/libstdc++-v3/include/tr1/stdlib.h
@@ -1,6 +1,6 @@
// TR1 stdlib.h -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -40,13 +40,13 @@
#if _GLIBCXX_USE_C99
-using std::tr1::atoll;
-using std::tr1::strtoll;
-using std::tr1::strtoull;
+using std::_GLIBCXX_TR1::atoll;
+using std::_GLIBCXX_TR1::strtoll;
+using std::_GLIBCXX_TR1::strtoull;
-using std::tr1::abs;
+using std::_GLIBCXX_TR1::abs;
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
-using std::tr1::div;
+using std::_GLIBCXX_TR1::div;
#endif
#endif
diff --git a/libstdc++-v3/include/tr1/tuple b/libstdc++-v3/include/tr1/tuple
index 379631d42f2..4e1a2d42f58 100644
--- a/libstdc++-v3/include/tr1/tuple
+++ b/libstdc++-v3/include/tr1/tuple
@@ -1,6 +1,6 @@
// class template tuple -*- C++ -*-
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -32,130 +32,389 @@
*/
// Chris Jefferson <chris@bubblescope.net>
+// Variadic Templates support by Douglas Gregor <doug.gregor@gmail.com>
#ifndef _TR1_TUPLE
#define _TR1_TUPLE 1
-#include <tr1/utility>
-#include <tr1/ref_fwd.h>
+#pragma GCC system_header
+
+#include <utility>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
-
- // An implementation specific class which is used in the tuple class
- // when the tuple is not maximum possible size.
- struct _NullClass { };
-
- /// Gives the type of the ith element of a given tuple type.
- template<int __i, typename _Tp>
- struct tuple_element;
-
- /// Finds the size of a given tuple type.
- template<typename _Tp>
- struct tuple_size;
-
- // Adds a const reference to a non-reference type.
- template<typename _Tp>
- struct __add_c_ref
- { typedef const _Tp& type; };
-
- template<typename _Tp>
- struct __add_c_ref<_Tp&>
- { typedef _Tp& type; };
-
- // Adds a reference to a non-reference type.
- template<typename _Tp>
- struct __add_ref
- { typedef _Tp& type; };
-
- template<typename _Tp>
- struct __add_ref<_Tp&>
- { typedef _Tp& type; };
-
- // Class used in the implementation of get
- template<int __i, typename _Tp>
- struct __get_helper;
-
- // Returns a const reference to the ith element of a tuple.
- // Any const or non-const ref elements are returned with their original type.
-
- // This class helps construct the various comparison operations on tuples
- template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up>
- struct __tuple_compare;
-
- // Helper which adds a reference to a type when given a reference_wrapper
- template<typename _Tp>
- struct __strip_reference_wrapper
- {
- typedef _Tp __type;
- };
-
- template<typename _Tp>
- struct __strip_reference_wrapper<reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
-
- template<typename _Tp>
- struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
-
- #include "tuple_defs.h"
-
- template<int __i, int __j, typename _Tp, typename _Up>
- struct __tuple_compare<0, __i, __j, _Tp, _Up>
- {
- static bool __eq(const _Tp& __t, const _Up& __u)
- {
- return get<__i>(__t) == get<__i>(__u) &&
- __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u);
- }
- static bool __less(const _Tp& __t, const _Up& __u)
- {
- return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) &&
- __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u);
- }
- };
-
- template<int __i, typename _Tp, typename _Up>
- struct __tuple_compare<0, __i, __i, _Tp, _Up>
- {
- static bool __eq(const _Tp&, const _Up&)
- { return true; }
- static bool __less(const _Tp&, const _Up&)
- { return false; }
- };
-
- // A class (and instance) which can be used in 'tie' when an element
- // of a tuple is not required
- struct swallow_assign
- {
- template<class T>
- swallow_assign&
- operator=(const T&)
- { return *this; }
- };
-
- // TODO: Put this in some kind of shared file.
- namespace
- {
- swallow_assign ignore;
- }; // anonymous namespace
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
-_GLIBCXX_END_NAMESPACE
-}
+ template<typename _Tp>
+ class reference_wrapper;
+
+ // Adds a const reference to a non-reference type.
+ template<typename _Tp>
+ struct __add_c_ref
+ { typedef const _Tp& type; };
+
+ template<typename _Tp>
+ struct __add_c_ref<_Tp&>
+ { typedef _Tp& type; };
+
+ // Adds a reference to a non-reference type.
+ template<typename _Tp>
+ struct __add_ref
+ { typedef _Tp& type; };
+
+ template<typename _Tp>
+ struct __add_ref<_Tp&>
+ { typedef _Tp& type; };
+
+ /**
+ * @if maint
+ * Contains the actual implementation of the @c tuple template, stored
+ * as a recursive inheritance hierarchy from the first element (most
+ * derived class) to the last (least derived class). The @c Idx
+ * parameter gives the 0-based index of the element stored at this
+ * point in the hierarchy; we use it to implement a constant-time
+ * get() operation.
+ * @endif
+ */
+ template<int _Idx, typename... _Elements>
+ struct _Tuple_impl;
+
+ /**
+ * @if maint
+ * Zero-element tuple implementation. This is the basis case for the
+ * inheritance recursion.
+ * @endif maint
+ */
+ template<int _Idx>
+ struct _Tuple_impl<_Idx> { };
+
+ /**
+ * @if maint
+ * Recursive tuple implementation. Here we store the @c Head element
+ * and derive from a @c Tuple_impl containing the remaining elements
+ * (which contains the @c Tail).
+ * @endif
+ */
+ template<int _Idx, typename _Head, typename... _Tail>
+ struct _Tuple_impl<_Idx, _Head, _Tail...>
+ : public _Tuple_impl<_Idx + 1, _Tail...>
+ {
+ typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
+
+ _Head _M_head;
+
+ _Inherited& _M_tail() { return *this; }
+ const _Inherited& _M_tail() const { return *this; }
+
+ _Tuple_impl() : _Inherited(), _M_head() { }
+
+ explicit
+ _Tuple_impl(typename __add_c_ref<_Head>::type __head,
+ typename __add_c_ref<_Tail>::type... __tail)
+ : _Inherited(__tail...), _M_head(__head) { }
+
+ template<typename... _UElements>
+ _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
+ : _Inherited(__in._M_tail()), _M_head(__in._M_head) { }
+
+ _Tuple_impl(const _Tuple_impl& __in)
+ : _Inherited(__in._M_tail()), _M_head(__in._M_head) { }
+
+ template<typename... _UElements>
+ _Tuple_impl&
+ operator=(const _Tuple_impl<_Idx, _UElements...>& __in)
+ {
+ _M_head = __in._M_head;
+ _M_tail() = __in._M_tail();
+ return *this;
+ }
+
+ _Tuple_impl&
+ operator=(const _Tuple_impl& __in)
+ {
+ _M_head = __in._M_head;
+ _M_tail() = __in._M_tail();
+ return *this;
+ }
+ };
+
+ template<typename... _Elements>
+ class tuple : public _Tuple_impl<0, _Elements...>
+ {
+ typedef _Tuple_impl<0, _Elements...> _Inherited;
+
+ public:
+ tuple() : _Inherited() { }
+
+ explicit
+ tuple(typename __add_c_ref<_Elements>::type... __elements)
+ : _Inherited(__elements...) { }
+
+ template<typename... _UElements>
+ tuple(const tuple<_UElements...>& __in)
+ : _Inherited(__in) { }
+
+ tuple(const tuple& __in)
+ : _Inherited(__in) { }
+
+ template<typename... _UElements>
+ tuple&
+ operator=(const tuple<_UElements...>& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
+
+ tuple&
+ operator=(const tuple& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
+ };
+
+ template<> class tuple<> { };
+
+ // 2-element tuple, with construction and assignment from a pair.
+ template<typename _T1, typename _T2>
+ class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
+ {
+ typedef _Tuple_impl<0, _T1, _T2> _Inherited;
+
+ public:
+ tuple() : _Inherited() { }
+
+ explicit
+ tuple(typename __add_c_ref<_T1>::type __a1,
+ typename __add_c_ref<_T2>::type __a2)
+ : _Inherited(__a1, __a2) { }
+
+ template<typename _U1, typename _U2>
+ tuple(const tuple<_U1, _U2>& __in)
+ : _Inherited(__in) { }
+
+ tuple(const tuple& __in)
+ : _Inherited(__in) { }
+
+ template<typename _U1, typename _U2>
+ tuple(const pair<_U1, _U2>& __in)
+ : _Inherited(_Tuple_impl<0,
+ typename __add_c_ref<_U1>::type,
+ typename __add_c_ref<_U2>::type>(__in.first,
+ __in.second))
+ { }
+
+ template<typename _U1, typename _U2>
+ tuple&
+ operator=(const tuple<_U1, _U2>& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
-#define _GLIBCXX_CAT(x,y) _GLIBCXX_CAT2(x,y)
-#define _GLIBCXX_CAT2(x,y) x##y
-#define _SHORT_REPEAT
-#define _GLIBCXX_REPEAT_HEADER <tr1/tuple_iterate.h>
-#include <tr1/repeat.h>
-#undef _GLIBCXX_REPEAT_HEADER
-#undef _SHORT_REPEAT
+ tuple&
+ operator=(const tuple& __in)
+ {
+ static_cast<_Inherited&>(*this) = __in;
+ return *this;
+ }
-#include <tr1/functional>
+ template<typename _U1, typename _U2>
+ tuple&
+ operator=(const pair<_U1, _U2>& __in)
+ {
+ this->_M_head = __in.first;
+ this->_M_tail()._M_head = __in.second;
+ return *this;
+ }
+ };
+
+
+ /// Gives the type of the ith element of a given tuple type.
+ template<int __i, typename _Tp>
+ struct tuple_element;
+
+ /**
+ * @if maint
+ * Recursive case for tuple_element: strip off the first element in
+ * the tuple and retrieve the (i-1)th element of the remaining tuple.
+ * @endif
+ */
+ template<int __i, typename _Head, typename... _Tail>
+ struct tuple_element<__i, tuple<_Head, _Tail...> >
+ : tuple_element<__i - 1, tuple<_Tail...> > { };
+
+ /**
+ * @if maint
+ * Basis case for tuple_element: The first element is the one we're seeking.
+ * @endif
+ */
+ template<typename _Head, typename... _Tail>
+ struct tuple_element<0, tuple<_Head, _Tail...> >
+ {
+ typedef _Head type;
+ };
+
+ /// Finds the size of a given tuple type.
+ template<typename _Tp>
+ struct tuple_size;
+
+ /// @brief class tuple_size
+ template<typename... _Elements>
+ struct tuple_size<tuple<_Elements...> >
+ {
+ static const int value = sizeof...(_Elements);
+ };
+
+ template<typename... _Elements>
+ const int tuple_size<tuple<_Elements...> >::value;
+
+ // Returns a const reference to the ith element of a tuple.
+ // Any const or non-const ref elements are returned with their original type.
+ template<int __i, typename _Head, typename... _Tail>
+ inline typename __add_ref<_Head>::type
+ get(_Tuple_impl<__i, _Head, _Tail...>& __t)
+ {
+ return __t._M_head;
+ }
+
+ template<int __i, typename _Head, typename... _Tail>
+ inline typename __add_c_ref<_Head>::type
+ get(const _Tuple_impl<__i, _Head, _Tail...>& __t)
+ {
+ return __t._M_head;
+ }
+
+ // This class helps construct the various comparison operations on tuples
+ template<int __check_equal_size, int __i, int __j,
+ typename _Tp, typename _Up>
+ struct __tuple_compare;
+
+ template<int __i, int __j, typename _Tp, typename _Up>
+ struct __tuple_compare<0, __i, __j, _Tp, _Up>
+ {
+ static bool __eq(const _Tp& __t, const _Up& __u)
+ {
+ return (get<__i>(__t) == get<__i>(__u) &&
+ __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u));
+ }
+
+ static bool __less(const _Tp& __t, const _Up& __u)
+ {
+ return ((get<__i>(__t) < get<__i>(__u))
+ || !(get<__i>(__u) < get<__i>(__t)) &&
+ __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u));
+ }
+ };
+
+ template<int __i, typename _Tp, typename _Up>
+ struct __tuple_compare<0, __i, __i, _Tp, _Up>
+ {
+ static bool __eq(const _Tp&, const _Up&)
+ { return true; }
+
+ static bool __less(const _Tp&, const _Up&)
+ { return false; }
+ };
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator==(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ {
+ typedef tuple<_TElements...> _Tp;
+ typedef tuple<_UElements...> _Up;
+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
+ 0, tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u));
+ }
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator<(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ {
+ typedef tuple<_TElements...> _Tp;
+ typedef tuple<_UElements...> _Up;
+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
+ 0, tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u));
+ }
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator!=(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ { return !(__t == __u); }
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator>(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ { return __u < __t; }
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator<=(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ { return !(__u < __t); }
+
+ template<typename... _TElements, typename... _UElements>
+ bool
+ operator>=(const tuple<_TElements...>& __t,
+ const tuple<_UElements...>& __u)
+ { return !(__t < __u); }
+
+ // Helper which adds a reference to a type when given a reference_wrapper
+ template<typename _Tp>
+ struct __strip_reference_wrapper
+ {
+ typedef _Tp __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename _Tp>
+ struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
+ {
+ typedef _Tp& __type;
+ };
+
+ template<typename... _Elements>
+ inline tuple<typename __strip_reference_wrapper<_Elements>::__type...>
+ make_tuple(_Elements... __args)
+ {
+ typedef tuple<typename __strip_reference_wrapper<_Elements>::__type...>
+ __result_type;
+ return __result_type(__args...);
+ }
+
+ template<typename... _Elements>
+ inline tuple<_Elements&...>
+ tie(_Elements&... __args)
+ {
+ return tuple<_Elements&...>(__args...);
+ }
+
+ // A class (and instance) which can be used in 'tie' when an element
+ // of a tuple is not required
+ struct _Swallow_assign
+ {
+ template<class _Tp>
+ _Swallow_assign&
+ operator=(const _Tp&)
+ { return *this; }
+ };
+
+ // TODO: Put this in some kind of shared file.
+ namespace
+ {
+ _Swallow_assign ignore;
+ }; // anonymous namespace
+
+_GLIBCXX_END_NAMESPACE
+}
#endif
diff --git a/libstdc++-v3/include/tr1/tuple_defs.h b/libstdc++-v3/include/tr1/tuple_defs.h
deleted file mode 100644
index dba6ccc4357..00000000000
--- a/libstdc++-v3/include/tr1/tuple_defs.h
+++ /dev/null
@@ -1,114 +0,0 @@
-// class template tuple -*- C++ -*-
-
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/tuple_defs.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef _GLIBCXX_REPEAT_HEADER
-# define _GLIBCXX_REPEAT_HEADER "tuple_defs.h"
-# include "repeat.h"
-# undef _GLIBCXX_REPEAT_HEADER
-#endif
-
-#ifdef _GLIBCXX_LAST_INCLUDE
-// Chris Jefferson <chris@bubblescope.net>
- template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS> class tuple;
-
- // Returns a const reference to the ith element of a tuple.
- // Any const or non-const ref elements are returned with their original type.
- template<int __i, _GLIBCXX_TEMPLATE_PARAMS>
- typename __add_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type
- get(tuple<_GLIBCXX_TEMPLATE_ARGS>& __t)
- {
- return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t);
- }
-
- template<int __i, _GLIBCXX_TEMPLATE_PARAMS>
- typename __add_c_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type
- get(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t)
- {
- return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t);
- }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator==(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- {
- typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp;
- typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up;
- return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0,
- tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u);
- }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator<(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- {
- typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp;
- typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up;
- return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0,
- tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u);
- }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator!=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- { return !(__t == __u); }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator>(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- { return __u < __t; }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator<=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- { return !(__u < __t); }
-
- template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U>
- bool
- operator>=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t,
- const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u)
- { return !(__t < __u); }
-
- template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS>
- struct __stripped_tuple_type
- {
- typedef tuple<_GLIBCXX_TEMPLATE_ARGS_STRIPPED> __type;
- };
-
-#endif
-
diff --git a/libstdc++-v3/include/tr1/tuple_iterate.h b/libstdc++-v3/include/tr1/tuple_iterate.h
deleted file mode 100644
index 42ddf54b78a..00000000000
--- a/libstdc++-v3/include/tr1/tuple_iterate.h
+++ /dev/null
@@ -1,172 +0,0 @@
-// class template tuple -*- C++ -*-
-
-// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file 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 General Public License.
-
-/** @file tr1/tuple_iterate.h
- * This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
- */
-
-// Chris Jefferson <chris@bubblescope.net>
-
-namespace std
-{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
-
-/// @brief class tuple_size
-template<_GLIBCXX_TEMPLATE_PARAMS>
- struct tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >
- { static const int value = _GLIBCXX_NUM_ARGS; };
-
-#if _GLIBCXX_NUM_ARGS > 0
-template<_GLIBCXX_TEMPLATE_PARAMS>
- const int tuple_size<tuple<_GLIBCXX_TEMPLATE_ARGS> >::value;
-#endif
-
-template<_GLIBCXX_TEMPLATE_PARAMS>
-#ifdef _GLIBCXX_LAST_INCLUDE
- class tuple
-#else
- class tuple<_GLIBCXX_TEMPLATE_ARGS>
-#endif
- {
- _GLIBCXX_BIND_MEMBERS
-
- public:
- tuple()
- { }
-
-#if _GLIBCXX_NUM_ARGS == 2
- template<typename _U1, typename _U2>
- tuple(const std::pair<_U1, _U2>& __u) :
- _M_arg1(__u.first), _M_arg2(__u.second)
- { }
-
- template<typename _U1, typename _U2>
- tuple&
- operator=(const std::pair<_U1, _U2>& __u)
- {
- _M_arg1 = __u.first;
- _M_arg2 = __u.second;
- return *this;
- }
-#endif
-
-#if _GLIBCXX_NUM_ARGS > 0
- explicit tuple(_GLIBCXX_TUPLE_ADD_CREF) :
- _GLIBCXX_BIND_MEMBERS_INIT
- { }
-
- template<_GLIBCXX_TEMPLATE_PARAMS_U>
- tuple(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in) :
- _GLIBCXX_TUPLE_COPY_INIT
- { }
-
-
- template<_GLIBCXX_TEMPLATE_PARAMS_U>
- tuple&
- operator=(const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __in)
- {
- _GLIBCXX_TUPLE_ASSIGN
- return *this;
- }
-
- tuple(const tuple& __in) :
- _GLIBCXX_TUPLE_COPY_INIT
- { }
-
-#else
-
- tuple(const tuple&)
- { }
-
-#endif
-
- tuple&
- operator=(const tuple& __in __attribute__((__unused__)) )
- {
- _GLIBCXX_TUPLE_ASSIGN
- return *this;
- }
-
- template<int __i, typename __Type>
- friend class __get_helper;
-
- template<_GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED>
- friend class tuple;
- };
-
-#ifndef _GLIBCXX_LAST_INCLUDE
-
-template<typename _Tp>
- struct __get_helper<_GLIBCXX_NUM_ARGS, _Tp>
- {
- static typename __add_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
- _Tp>::type>::type
- get_value(_Tp& __in)
- { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
-
- static typename __add_c_ref<typename tuple_element<_GLIBCXX_NUM_ARGS,
- _Tp>::type>::type
- get_value(const _Tp& __in)
- { return __in._GLIBCXX_CAT(_M_arg,_GLIBCXX_NUM_ARGS_PLUS_1); }
- };
-
-/// @brief class tuple_element
-template<_GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS>
- struct tuple_element<_GLIBCXX_NUM_ARGS, tuple<_GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS> >
- { typedef _GLIBCXX_T_NUM_ARGS_PLUS_1 type; };
-
-#endif
-#if _GLIBCXX_NUM_ARGS == 0
-
-tuple<>
-inline make_tuple()
-{ return tuple<>(); }
-
-tuple<>
-inline tie()
-{ return tuple<>(); }
-#else
-
-template<_GLIBCXX_TEMPLATE_PARAMS>
- typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::__type
- inline make_tuple(_GLIBCXX_PARAMS)
- {
- return typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::
- __type(_GLIBCXX_ARGS);
- }
-
-template<_GLIBCXX_TEMPLATE_PARAMS>
- tuple<_GLIBCXX_REF_TEMPLATE_ARGS>
- inline tie(_GLIBCXX_REF_PARAMS)
- { return make_tuple(_GLIBCXX_REF_WRAP_PARAMS); }
-#endif
-
-_GLIBCXX_END_NAMESPACE
-}
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index 048180150df..996ecf6fd93 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -40,7 +40,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// For use in __in_array and elsewhere.
struct __sfinae_types
diff --git a/libstdc++-v3/include/tr1/type_traits_fwd.h b/libstdc++-v3/include/tr1/type_traits_fwd.h
index 819bb914817..6f8e71a0c32 100644
--- a/libstdc++-v3/include/tr1/type_traits_fwd.h
+++ b/libstdc++-v3/include/tr1/type_traits_fwd.h
@@ -40,7 +40,7 @@
// namespace std::tr1
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/// @brief helper classes [4.3].
template<typename _Tp, _Tp __v>
diff --git a/libstdc++-v3/include/tr1/unordered_map b/libstdc++-v3/include/tr1/unordered_map
index d613d156ef1..3aca9f5ef9b 100644
--- a/libstdc++-v3/include/tr1/unordered_map
+++ b/libstdc++-v3/include/tr1/unordered_map
@@ -39,7 +39,7 @@
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// XXX When we get typedef templates these class definitions
// will be unnecessary.
@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
bool __cache_hash_code = false>
- class unordered_map
+ class __unordered_map
: public _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
_Hash, __detail::_Mod_range_hashing,
@@ -71,21 +71,21 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typedef typename _Base::allocator_type allocator_type;
explicit
- unordered_map(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_map(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
template<typename _InputIterator>
- unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_map(_InputIterator __f, _InputIterator __l,
+ size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
@@ -97,7 +97,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
bool __cache_hash_code = false>
- class unordered_multimap
+ class __unordered_multimap
: public _Hashtable<_Key, std::pair<const _Key, _Tp>,
_Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
@@ -122,10 +122,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typedef typename _Base::allocator_type allocator_type;
explicit
- unordered_multimap(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_multimap(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
@@ -133,11 +133,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<typename _InputIterator>
- unordered_multimap(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_multimap(_InputIterator __f, _InputIterator __l,
+ typename _Base::size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
@@ -147,21 +147,89 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
- swap(unordered_map<_Key, _Tp, _Hash, _Pred,
+ swap(__unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
- unordered_map<_Key, _Tp, _Hash, _Pred,
+ __unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
- swap(unordered_multimap<_Key, _Tp, _Hash, _Pred,
+ swap(__unordered_multimap<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
- unordered_multimap<_Key, _Tp, _Hash, _Pred,
+ __unordered_multimap<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
+
+ template<class _Key, class _Tp,
+ class _Hash = hash<_Key>,
+ class _Pred = std::equal_to<_Key>,
+ class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+ class unordered_map
+ : public __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>
+ {
+ typedef __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc> _Base;
+
+ public:
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::hasher hasher;
+ typedef typename _Base::key_equal key_equal;
+ typedef typename _Base::allocator_type allocator_type;
+
+ explicit
+ unordered_map(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __hf, __eql, __a)
+ { }
+
+ template<typename _InputIterator>
+ unordered_map(_InputIterator __f, _InputIterator __l,
+ size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__f, __l, __n, __hf, __eql, __a)
+ { }
+ };
+
+ template<class _Key, class _Tp,
+ class _Hash = hash<_Key>,
+ class _Pred = std::equal_to<_Key>,
+ class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+ class unordered_multimap
+ : public __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>
+ {
+ typedef __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc> _Base;
+
+ public:
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::hasher hasher;
+ typedef typename _Base::key_equal key_equal;
+ typedef typename _Base::allocator_type allocator_type;
+
+ explicit
+ unordered_multimap(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __hf, __eql, __a)
+ { }
+
+
+ template<typename _InputIterator>
+ unordered_multimap(_InputIterator __f, _InputIterator __l,
+ typename _Base::size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__f, __l, __n, __hf, __eql, __a)
+ { }
+ };
+
_GLIBCXX_END_NAMESPACE
}
diff --git a/libstdc++-v3/include/tr1/unordered_set b/libstdc++-v3/include/tr1/unordered_set
index a01b89b3af8..bd56ead804d 100644
--- a/libstdc++-v3/include/tr1/unordered_set
+++ b/libstdc++-v3/include/tr1/unordered_set
@@ -39,7 +39,7 @@
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// XXX When we get typedef templates these class definitions
// will be unnecessary.
@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value>,
bool __cache_hash_code = false>
- class unordered_set
+ class __unordered_set
: public _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
@@ -71,21 +71,21 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typedef typename _Base::allocator_type allocator_type;
explicit
- unordered_set(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_set(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
{ }
template<typename _InputIterator>
- unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_set(_InputIterator __f, _InputIterator __l,
+ size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
@@ -97,7 +97,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value>,
bool __cache_hash_code = false>
- class unordered_multiset
+ class __unordered_multiset
: public _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
@@ -120,10 +120,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
typedef typename _Base::allocator_type allocator_type;
explicit
- unordered_multiset(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_multiset(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
@@ -131,11 +131,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<typename _InputIterator>
- unordered_multiset(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ __unordered_multiset(_InputIterator __f, _InputIterator __l,
+ typename _Base::size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
@@ -145,21 +145,89 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<class _Value, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
- swap (unordered_set<_Value, _Hash, _Pred,
+ swap (__unordered_set<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
- unordered_set<_Value, _Hash, _Pred,
+ __unordered_set<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Value, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
- swap(unordered_multiset<_Value, _Hash, _Pred,
+ swap(__unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
- unordered_multiset<_Value, _Hash, _Pred,
+ __unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
+
+ template<class _Value,
+ class _Hash = hash<_Value>,
+ class _Pred = std::equal_to<_Value>,
+ class _Alloc = std::allocator<_Value> >
+ class unordered_set
+ : public __unordered_set<_Value, _Hash, _Pred, _Alloc>
+ {
+ typedef __unordered_set<_Value, _Hash, _Pred, _Alloc> _Base;
+
+ public:
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::hasher hasher;
+ typedef typename _Base::key_equal key_equal;
+ typedef typename _Base::allocator_type allocator_type;
+
+ explicit
+ unordered_set(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __hf, __eql, __a)
+ { }
+
+ template<typename _InputIterator>
+ unordered_set(_InputIterator __f, _InputIterator __l,
+ size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__f, __l, __n, __hf, __eql, __a)
+ { }
+ };
+
+ template<class _Value,
+ class _Hash = hash<_Value>,
+ class _Pred = std::equal_to<_Value>,
+ class _Alloc = std::allocator<_Value> >
+ class unordered_multiset
+ : public __unordered_multiset<_Value, _Hash, _Pred, _Alloc>
+ {
+ typedef __unordered_multiset<_Value, _Hash, _Pred, _Alloc> _Base;
+
+ public:
+ typedef typename _Base::size_type size_type;
+ typedef typename _Base::hasher hasher;
+ typedef typename _Base::key_equal key_equal;
+ typedef typename _Base::allocator_type allocator_type;
+
+ explicit
+ unordered_multiset(size_type __n = 10,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__n, __hf, __eql, __a)
+ { }
+
+
+ template<typename _InputIterator>
+ unordered_multiset(_InputIterator __f, _InputIterator __l,
+ typename _Base::size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__f, __l, __n, __hf, __eql, __a)
+ { }
+ };
+
_GLIBCXX_END_NAMESPACE
}
diff --git a/libstdc++-v3/include/tr1/utility b/libstdc++-v3/include/tr1/utility
index 93e00eb3c94..efe25031d5b 100644
--- a/libstdc++-v3/include/tr1/utility
+++ b/libstdc++-v3/include/tr1/utility
@@ -34,11 +34,11 @@
#ifndef _TR1_UTILITY
#define _TR1_UTILITY 1
-#include "../utility"
+#include <utility>
namespace std
{
-_GLIBCXX_BEGIN_NAMESPACE(tr1)
+_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
template<class _Tp> class tuple_size;
template<int _Int, class _Tp> class tuple_element;
diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in
index a6ec5fd456e..7852233c237 100644
--- a/libstdc++-v3/libmath/Makefile.in
+++ b/libstdc++-v3/libmath/Makefile.in
@@ -139,9 +139,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index 4c9f181d6eb..d562d497cd1 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -180,9 +180,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index e606aca7c0f..32c21b47559 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -124,9 +124,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 7946506148c..538f2f571aa 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -174,9 +174,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
diff --git a/libstdc++-v3/src/ctype.cc b/libstdc++-v3/src/ctype.cc
index 634c135b2f9..4a2e896f7bb 100644
--- a/libstdc++-v3/src/ctype.cc
+++ b/libstdc++-v3/src/ctype.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -27,6 +28,7 @@
// the GNU General Public License.
#include <locale>
+#include <cstdlib>
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -73,7 +75,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// XXX At some point, just rename this file to ctype_configure_char.cc
// and compile it as a separate file instead of including it here.
// Platform-specific initialization code for ctype tables.
- #include <bits/ctype_noninline.h>
+#include <bits/ctype_noninline.h>
const size_t ctype<char>::table_size;
@@ -98,17 +100,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ctype<wchar_t>::~ctype()
{ _S_destroy_c_locale(_M_c_locale_ctype); }
- template<>
- ctype_byname<wchar_t>::ctype_byname(const char* __s, size_t __refs)
- : ctype<wchar_t>(__refs)
- {
- if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
- {
- this->_S_destroy_c_locale(this->_M_c_locale_ctype);
- this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
- this->_M_initialize_ctype();
- }
- }
+ ctype_byname<wchar_t>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<wchar_t>(__refs)
+ {
+ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
+ {
+ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
+ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
+ this->_M_initialize_ctype();
+ }
+ }
+
+ ctype_byname<wchar_t>::~ctype_byname()
+ { }
+
#endif
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/src/debug.cc b/libstdc++-v3/src/debug.cc
index be5ba01b7ea..4129f686667 100644
--- a/libstdc++-v3/src/debug.cc
+++ b/libstdc++-v3/src/debug.cc
@@ -1,6 +1,6 @@
// Debugging mode support code -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006
+// Copyright (C) 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -35,6 +35,7 @@
#include <cassert>
#include <cstring>
#include <cctype>
+#include <cstdio>
using namespace std;
diff --git a/libstdc++-v3/src/iostream-inst.cc b/libstdc++-v3/src/iostream-inst.cc
index 7e1df3d605e..5eef130a429 100644
--- a/libstdc++-v3/src/iostream-inst.cc
+++ b/libstdc++-v3/src/iostream-inst.cc
@@ -1,6 +1,7 @@
// Explicit instantiation file.
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -33,6 +34,7 @@
//
#include <iomanip>
+#include <istream>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index ff8c369ce11..5394d9a99c6 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -28,6 +29,7 @@
#include <clocale>
#include <cstring>
+#include <cstdlib>
#include <locale>
_GLIBCXX_BEGIN_NAMESPACE(std)
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++200x/all.cc b/libstdc++-v3/testsuite/17_intro/headers/c++200x/all.cc
new file mode 100644
index 00000000000..709b0dca0ec
--- /dev/null
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++200x/all.cc
@@ -0,0 +1,115 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 17.4.1.2 Headers
+
+// "C" headers
+#include <cassert>
+#include <ccomplex>
+#include <cctype>
+#include <cerrno>
+#include <cfenv>
+#include <cfloat>
+#include <cinttypes>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstdbool>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctgmath>
+#include <ctime>
+#include <cwchar>
+#include <cwctype>
+
+// "C" compatibility headers
+#include <assert.h>
+#include <complex.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <inttypes.h>
+#include <iso646.h>
+#include <limits.h>
+#include <locale.h>
+#include <math.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tgmath.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+// "C++" headers
+#include <algorithm>
+#include <array>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <iostream>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <random>
+#include <regex>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <tuple>
+#include <typeinfo>
+#include <type_traits>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <valarray>
+#include <vector>
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++200x/all_multiple_inclusion.cc b/libstdc++-v3/testsuite/17_intro/headers/c++200x/all_multiple_inclusion.cc
new file mode 100644
index 00000000000..abb3a08668e
--- /dev/null
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++200x/all_multiple_inclusion.cc
@@ -0,0 +1,209 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 17.4.1.2 Headers
+
+// "C" headers
+#include <cassert>
+#include <ccomplex>
+#include <cctype>
+#include <cerrno>
+#include <cfenv>
+#include <cfloat>
+#include <cinttypes>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstdbool>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctgmath>
+#include <ctime>
+#include <cwchar>
+#include <cwctype>
+
+// "C" compatibility headers
+#include <assert.h>
+#include <complex.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <inttypes.h>
+#include <iso646.h>
+#include <limits.h>
+#include <locale.h>
+#include <math.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tgmath.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+// "C++" headers
+#include <algorithm>
+#include <array>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <iostream>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <random>
+#include <regex>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <tuple>
+#include <typeinfo>
+#include <type_traits>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <valarray>
+#include <vector>
+
+
+// "C" headers
+#include <cassert>
+#include <ccomplex>
+#include <cctype>
+#include <cerrno>
+#include <cfenv>
+#include <cfloat>
+#include <cinttypes>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstdbool>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctgmath>
+#include <ctime>
+#include <cwchar>
+#include <cwctype>
+
+// "C" compatibility headers
+#include <assert.h>
+#include <complex.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <inttypes.h>
+#include <iso646.h>
+#include <limits.h>
+#include <locale.h>
+#include <math.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tgmath.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+// "C++" headers
+#include <algorithm>
+#include <array>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <iostream>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <random>
+#include <regex>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <tuple>
+#include <typeinfo>
+#include <type_traits>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <valarray>
+#include <vector>
diff --git a/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc b/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc
new file mode 100644
index 00000000000..4d5cdfc47b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc
@@ -0,0 +1,67 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <algorithm>
+#include <array>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <iostream>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <random>
+#include <regex>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <tuple>
+#include <typeinfo>
+#include <type_traits>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <valarray>
+#include <vector>
+
+namespace gnu
+{
+ using namespace std::tr1; // { dg-error "is not a namespace-name" }
+}
+
+// { dg-error "expected namespace-name before" "" { target *-*-* } 64 }
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
new file mode 100644
index 00000000000..219346c1546
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cstdbool> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
new file mode 100644
index 00000000000..49442856f59
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cstdint> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc b/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc
new file mode 100644
index 00000000000..cf1684ac4e1
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc
@@ -0,0 +1,58 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <cstdint>
+
+void test01()
+{
+#if _GLIBCXX_USE_C99_STDINT_TR1
+
+ typedef std::int8_t my_int8_t;
+ typedef std::int16_t my_int16_t;
+ typedef std::int32_t my_int32_t;
+ typedef std::int64_t my_int64_t;
+ typedef std::int_fast8_t my_int_fast8_t;
+ typedef std::int_fast16_t my_int_fast16_t;
+ typedef std::int_fast32_t my_int_fast32_t;
+ typedef std::int_fast64_t my_int_fast64_t;
+ typedef std::int_least8_t my_int_least8_t;
+ typedef std::int_least16_t my_int_least16_t;
+ typedef std::int_least32_t my_int_least32_t;
+ typedef std::int_least64_t my_int_least64_t;
+ typedef std::intmax_t my_intmax_t;
+ typedef std::intptr_t my_intptr_t;
+ typedef std::uint8_t my_uint8_t;
+ typedef std::uint16_t my_uint16_t;
+ typedef std::uint32_t my_uint32_t;
+ typedef std::uint64_t my_uint64_t;
+ typedef std::uint_fast8_t my_uint_fast8_t;
+ typedef std::uint_fast16_t my_uint_fast16_t;
+ typedef std::uint_fast32_t my_uint_fast32_t;
+ typedef std::uint_fast64_t my_uint_fast64_t;
+ typedef std::uint_least8_t my_uint_least8_t;
+ typedef std::uint_least16_t my_uint_least16_t;
+ typedef std::uint_least32_t my_uint_least32_t;
+ typedef std::uint_least64_t my_uint_least64_t;
+ typedef std::uintmax_t my_uintmax_t;
+ typedef std::uintptr_t my_uintptr_t;
+
+#endif
+}
diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc
index 419ee7451e4..bd9b4ba56b7 100644
--- a/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc
+++ b/libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc
@@ -19,7 +19,7 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
-#include <cstddef>
+#include <cstdlib>
namespace gnu
{
diff --git a/libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc b/libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
index 468d4a18c32..98fd0f1323f 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
@@ -18,7 +18,7 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
-#include <cassert>
+#include <cerrno>
namespace gnu
{
diff --git a/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
index 4ae7acfd5c4..5ce62eeac3b 100644
--- a/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -46,5 +46,5 @@ main()
test01();
return 0;
}
-// { dg-error "candidates" "" { target *-*-* } 224 }
-// { dg-error "::auto_ptr" "" { target *-*-* } 354 }
+// { dg-error "candidates" "" { target *-*-* } 207 }
+// { dg-error "::auto_ptr" "" { target *-*-* } 337 }
diff --git a/libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..04aba8d26cb
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <memory>
+
+template class std::enable_shared_from_this<int>;
diff --git a/libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc b/libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc
new file mode 100644
index 00000000000..56e9b83253a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <functional>
+
+namespace gnu
+{
+ using std::bad_function_call;
+}
diff --git a/libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc b/libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc
new file mode 100644
index 00000000000..e5d73e548d7
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <functional>
+
+namespace gnu
+{
+ using namespace std::placeholders;
+}
diff --git a/libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc b/libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
new file mode 100644
index 00000000000..ac2c4b93a78
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <memory>
+
+namespace gnu
+{
+ using std::bad_weak_ptr;
+}
diff --git a/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
new file mode 100644
index 00000000000..4bee92dc417
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc b/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
new file mode 100644
index 00000000000..451db9c20a6
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <type_traits>
+
+namespace gnu
+{
+ using std::true_type;
+ using std::false_type;
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..ea520c852cb
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <memory>
+
+template class std::shared_ptr<int>;
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..ce8a4377a41
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <memory>
+
+template class std::weak_ptr<int>;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
index 3ea346996c3..70b25ed8624 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
@@ -184,11 +184,11 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string< A<B> >::size_type
+ const std::basic_string< A<B> >::size_type
std::basic_string< A<B> >::_Rep::_S_max_size;
template
- A<B>
+ const A<B>
std::basic_string< A<B> >::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc
index 9c6d69440f1..8b20b5a83fb 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,9 +18,12 @@
// 21.3.7.9 inserters and extractors
+// { dg-require-fileio "" }
+
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc
index a400cd9bb9e..ddb8387de1e 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,9 +18,12 @@
// 21.3.7.9 inserters and extractors
+// { dg-require-fileio "" }
+
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
index 544fa7a8724..726cbe1fb18 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
@@ -24,6 +24,8 @@
// working, not to mention other major details like char_traits, and
// all of the string class.
+// { dg-require-fileio "" }
+
#include <string>
#include <fstream>
#include <iostream>
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
index 1abd09f9aa3..1e5d4fe79bd 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
@@ -76,11 +76,11 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
index efa44775daa..83d320a9d0d 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
@@ -76,11 +76,11 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc
index c2c4e619f5e..4a7fa50ff9b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc
index 391cece916e..e3b5c173404 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc b/libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc
index a26eab1a70f..47a5653a06d 100644
--- a/libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc
+++ b/libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc
@@ -1,5 +1,4 @@
-// { dg-do compile { xfail *-*-* } }
-// { dg-excess-errors "" }
+// { dg-do compile }
// Copyright (C) 2007 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
index 2f90053fbb9..6d69ed2dc02 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
@@ -23,6 +23,7 @@
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
#include <cwchar> // for mbstate_t
+#include <cstdlib>
#include <locale>
#include <stdexcept>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
index b08b3466c08..85610958894 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
@@ -2,7 +2,8 @@
// 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,6 +24,7 @@
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
#include <cwchar> // for mbstate_t
+#include <cstdlib>
#include <locale>
#include <stdexcept>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
index 4680c7aecfa..6496c0c8957 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
@@ -18,6 +18,8 @@
// 22.2.5.3.1 time_put members
+// { dg-require-time "" }
+
#include <locale>
#include <sstream>
#include <ctime>
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
index 4408565350e..95866c0bf2c 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
@@ -18,6 +18,8 @@
// 22.2.5.3.1 time_put members
+// { dg-require-time "" }
+
#include <locale>
#include <sstream>
#include <ctime>
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..82b1d4cef76
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+#include <array>
+
+template class std::array<int, 5>;
diff --git a/libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc b/libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc
index df6c846064d..a9b0a4baee0 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc
@@ -1,6 +1,6 @@
// 2005-12-12 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
// 23.2.1.1 deque constructors, copy, and assignment
#include <deque>
+#include <cstdlib>
#include <testsuite_hooks.h>
void test01()
diff --git a/libstdc++-v3/testsuite/23_containers/hash/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/hash/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..dcb804256fe
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/hash/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <functional>
+
+template class std::hash<bool>;
diff --git a/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
new file mode 100644
index 00000000000..99dd2d6539b
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <array> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
new file mode 100644
index 00000000000..e3f81050dfa
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <tuple> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc b/libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc
new file mode 100644
index 00000000000..b9ce77490de
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <tuple>
+
+namespace gnu
+{
+ using std::ignore;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
new file mode 100644
index 00000000000..4bb4f90a68c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <unordered_map> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
new file mode 100644
index 00000000000..052d860b0d3
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <unordered_set> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
index 54e741425de..7d66059b1fd 100644
--- a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,5 +42,5 @@ void test01()
test &= itr == mapByName.end(); // { dg-error "no" }
}
-// { dg-error "candidates are" "" { target *-*-* } 211 }
-// { dg-error "candidates are" "" { target *-*-* } 215 }
+// { dg-error "candidates are" "" { target *-*-* } 210 }
+// { dg-error "candidates are" "" { target *-*-* } 214 }
diff --git a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
index 48f6ae68f69..a999e5b9697 100644
--- a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -40,5 +40,5 @@ void test01()
test &= itr == setByName.end(); // { dg-error "no" }
}
-// { dg-error "candidates are" "" { target *-*-* } 286 }
-// { dg-error "candidates are" "" { target *-*-* } 290 }
+// { dg-error "candidates are" "" { target *-*-* } 285 }
+// { dg-error "candidates are" "" { target *-*-* } 289 }
diff --git a/libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..67aabce3899
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/tuple/requirements/explicit_instantiation.cc
@@ -0,0 +1,33 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file 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 General Public License.
+
+#include <tr1/tuple>
+
+template class std::tuple<short, int, double>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..ab5b41cb4ca
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <unordered_map>
+
+template class std::unordered_map<int, float>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..e0f2f12eeee
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <unordered_map>
+
+template class std::unordered_multimap<int, float>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..d51c8095f2d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <unordered_set>
+
+template class std::unordered_multiset<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation.cc
new file mode 100644
index 00000000000..262c4266f07
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation.cc
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <unordered_set>
+
+template class std::unordered_set<int>;
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
new file mode 100644
index 00000000000..6ba6ab22591
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <ccomplex> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
new file mode 100644
index 00000000000..62f3649ef13
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cfenv> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc
new file mode 100644
index 00000000000..1f483ebc2e8
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <cfenv>
+
+void test01()
+{
+#if _GLIBCXX_USE_C99_FENV_TR1
+
+ typedef std::fenv_t my_fenv_t;
+ typedef std::fexcept_t my_fexcept_t;
+
+#endif
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
index a9cd0584a33..f7b714fbcfa 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
@@ -27,8 +27,8 @@
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
-// { dg-do compile { xfail { { *-*-linux* *-*-darwin* } || uclibc } } }
-// { dg-excess-errors "" { target { { *-*-linux* *-*-darwin* } || uclibc } } }
+// { dg-do compile { xfail { { *-*-linux* *-*-darwin* } || { uclibc || newlib } } } }
+// { dg-excess-errors "" { target { { *-*-linux* *-*-darwin* } || { uclibc || newlib } } } }
#include <math.h>
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc
new file mode 100644
index 00000000000..cbe001c6cc5
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc
@@ -0,0 +1,32 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cmath>
+
+void test01()
+{
+#if _GLIBCXX_USE_C99_MATH_TR1
+
+ typedef std::double_t my_double_t;
+ typedef std::float_t my_float_t;
+
+#endif
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc
new file mode 100644
index 00000000000..520b1993150
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc
@@ -0,0 +1,35 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cstdlib>
+
+#if _GLIBCXX_HOSTED
+
+void test01()
+{
+#if _GLIBCXX_USE_C99
+
+ typedef std::lldiv_t my_lldiv_t;
+
+#endif
+}
+
+#endif
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
new file mode 100644
index 00000000000..170bdc571f4
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <ctgmath> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
new file mode 100644
index 00000000000..e3f81050dfa
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <tuple> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc b/libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc
new file mode 100644
index 00000000000..bc422dac80b
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc
@@ -0,0 +1,28 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <random>
+
+namespace gnu
+{
+ using std::random_device;
+ using std::bernoulli_distribution;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
index 93f5b113f4d..7454eb66b60 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.3 filebuf member functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
index 65b28c9eb5b..cca8a573437 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
@@ -23,6 +23,8 @@
// various tests for filebuf::open() and filebuf::close() including
// the non-portable functionality in the libstdc++-v3 IO library
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc
index ea7a3d06292..47a38c747b1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.3 filebuf member functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc
index d54139967c3..95a8f4944e7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
// 27.8.1.3 filebuf member functions
#include <locale>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
index b3e8c729ed5..d9144a9ecd3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
// 27.8.1.3 filebuf member functions
#include <locale>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc
index 2e07d882e9a..2fd80bab124 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
// 27.8.1.3 filebuf member functions
#include <locale>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
index f96e041ecbb..f517d93442f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
// 27.8.1.3 filebuf member functions
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
index 678a75a377e..7c6e5b74213 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
// 27.8.1.3 filebuf member functions
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
index e976c370f8d..b726fff1dd7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
@@ -1,7 +1,7 @@
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -29,6 +29,7 @@
#include <fstream>
#include <iostream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
index 1b9c3ff90ec..53f70fab910 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
@@ -1,7 +1,7 @@
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -28,6 +28,7 @@
// the non-portable functionality in the libstdc++-v3 IO library
#include <fstream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
index f1649580fec..ff71a17b883 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
@@ -2,7 +2,7 @@
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
-// Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,6 +24,7 @@
#include <fstream>
#include <locale>
+#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
index 111f819f6e6..ef0a1561df3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
@@ -4,7 +4,7 @@
// 2004-01-11 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
#include <fstream>
#include <locale>
+#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
index 385888a3cdb..61d6cae4a73 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
@@ -4,7 +4,7 @@
// 2004-01-11 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
#include <fstream>
#include <locale>
+#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
index 14cfde77fbd..1b3da5ad557 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
@@ -4,7 +4,7 @@
// 2004-04-16 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,6 +24,7 @@
#include <fstream>
#include <locale>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc
index 3af1d8bd5e4..393580947a9 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc
index d923032f4aa..bb1e8387c25 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc
@@ -18,6 +18,8 @@
// 27.5.2.2.3 Get area
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc
index 1f974c0bcd0..01364fd6eac 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc
@@ -23,6 +23,8 @@
// various tests for filebuf::open() and filebuf::close() including
// the non-portable functionality in the libstdc++-v3 IO library
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
index ac532dd13a2..0ee1ef7f2d8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.3 filebuf member functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
index 450e7293327..1522b518299 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
@@ -23,6 +23,8 @@
// various tests for filebuf::open() and filebuf::close() including
// the non-portable functionality in the libstdc++-v3 IO library
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
index bc5eb9be63a..aabce7b39f8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
@@ -23,6 +23,8 @@
// various tests for filebuf::open() and filebuf::close() including
// the non-portable functionality in the libstdc++-v3 IO library
+// { dg-require-fileio "" }
+
#include <fstream>
#include <unistd.h>
#include <signal.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
index 07e584a49a3..ef7a6715c01 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
@@ -23,6 +23,8 @@
// various tests for filebuf::open() and filebuf::close() including
// the non-portable functionality in the libstdc++-v3 IO library
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
index 4cec2267d76..209890dfaad 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc
index e278ce0a3a4..536e4da8de3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc
index 03709c12695..45db964a419 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <locale>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc
index add450d3b0d..efedbf738f3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <locale>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc
index 87951db6f7e..8ac38cfa190 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc
index f37ff707fda..d00241c2ac5 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc
index 13bf0ed53e8..d1f0b991dd3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc
index 20f89db25c8..e0ec49c5fe5 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc
index 40c9d3aacc5..6b13409310e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc
index 0ca3b677543..e5606920ba0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc
index cfaa16ccbee..732ac849bef 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
index 3bb00013d59..ecbeeb7f1c0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
index d64a83350a2..f27a839953a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
index 67df965ce82..6ee2b33850a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
index f3e435b5f7e..30ae7ae9912 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
index b55aee5490c..dc753e83c45 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
index 13d29eb8eca..f175fceb477 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
index 149adfda4b8..3a60b4bf8d7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc
index 18c79d6ddeb..e66a1e1c847 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc
@@ -19,6 +19,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <locale>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc
index 03d4b3a0c33..e494c7d6d8c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc
index 459e12f87c8..bcd32eb5c62 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc
index f74a6eec9f4..1b2ff50fa8b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc
index 141c97090e0..8e7fbb46182 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
index ab47d5b4d77..9c3fd2a980c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
index 76bafa713c9..4c5eaaca00a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
index bba9412a730..1616992517a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc
index 9cc973315a5..9963b052bd1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc
@@ -3,7 +3,7 @@
// 2006-03-22 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@
#include <testsuite_hooks.h>
#include <fstream>
#include <sstream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc
index 92e8d1d962f..22e5da81812 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
index 20342f42edf..38f25bedaff 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc
index 79524c6cb79..f8d2531f625 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
index 14381f9d590..7b0260941fd 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
index bd3a55054c2..128b668d9dc 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
index 461944a31a0..7f0892512db 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc
index bac71052f5f..7708045ab3a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc
index 562868e790d..39bcfc57426 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc
index 7cd6a382b52..604924becc2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc
index dab22e49e78..27d5c16c510 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc
index 22bd9896d7c..8fcfa8d72f3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc
index a491e8cd098..b8afee46bb7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <locale>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc
index d6de74099c7..0a7b8b85e66 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc
index 04317577784..b7dc3ae54b2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc
index fcdad6217c2..8bbcd6737d3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc
index 9b131720e31..e0097ae9e91 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
index df8805513a8..5758f6271bd 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc
index d6d9ea8e4aa..e1adb064682 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc
@@ -20,6 +20,8 @@
// 27.7.1.3 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
index eb028f5c2f9..4a755b29a19 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc
index ecd845ed763..dcad84767e4 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <cstdio>
#include <cstring>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
index 22205381f3f..87e1d5cbbcd 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
@@ -18,6 +18,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <cstdio>
#include <cstring>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc
index 33e673338b3..f69d24c9446 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc
index 61dfd115c3f..1bb1a7aa70c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc
index e89f2548596..1e09e3bafd1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc
index 19403762934..4a5fcd7c5ed 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc
index 53442a46afb..6769cafd033 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
index 536b0489afa..bc1375b279a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
index 1f9fe52e616..3d125621513 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
index ace01a8c69f..64db9758472 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
@@ -24,6 +24,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
index 79f0a66b9c6..74ebfd2a031 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
@@ -24,6 +24,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
index 6bc69612221..0e62e439e34 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
@@ -24,6 +24,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
index d9b2728bac6..89c11882ffe 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
@@ -24,6 +24,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
index aec6bda7d70..c33d14c6d3b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
index d9b91088654..106ecda8bba 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
@@ -1,7 +1,7 @@
// { dg-require-fork "" }
// { dg-require-mkfifo "" }
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
// libstdc++/9533
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc
index 6c05b4d6532..0db502ad881 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc
index 86fc89caf5b..cce68f0f244 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc
index 7064f55ad7e..204962ed421 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc
index 2abd714bcfb..a5cd61e019e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc
index eb6d64e167c..5574e2f53b3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
index 5725c93d87d..2447da6746d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc
index 8724f62d3d2..d517cfb5375 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
index 3b0f8193a34..245fcf3498f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc
index 1f4c311cd4e..eb602b84267 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc
index cf35c744c8a..c203f3c4fc1 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc
index 25e3f6ed0f2..e2d28b9499d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc
index e912c85260f..2aa91a7c314 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc
index 8781c50af1c..9711d21162a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc
index 4a0a8a8cede..871f4b54309 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc
index 0dfe0ed285f..5fba10fb798 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc
index 375585270e7..3816499d3ef 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc
index e4bdbdf7f4c..45598afc97c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc
index 75ec18c9ff9..c668aaca941 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
index 9d4382a39c6..04bb4c34f56 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc
index ed54713312b..c853fe707f0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
index a44d10ffba0..cf1d7a3bb8f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
#include <testsuite_io.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc
index a603ca2867f..330b7481573 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <locale>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
index 047cdce2ca1..5eb06e620f7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <string>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
index ffc36a3fc07..83b2f2b8629 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
@@ -3,7 +3,7 @@
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -25,6 +25,7 @@
// 27.8.1.4 Overridden virtual functions
#include <fstream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
index c104943632d..66d76c06a5d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
@@ -20,6 +20,8 @@
// 27.8.1.4 Overridden virtual functions
+// { dg-require-fileio "" }
+
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
index c925a9802aa..5a928c1e785 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
@@ -20,6 +20,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
index d2870151791..ba4798a5c77 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
@@ -20,6 +20,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc
index d55d6ad46c7..39f69e5217a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc
@@ -160,11 +160,11 @@ void test02()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<unsigned short>::size_type
+ const std::basic_string<unsigned short>::size_type
std::basic_string<unsigned short>::_Rep::_S_max_size;
template
- unsigned short
+ const unsigned short
std::basic_string<unsigned short>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
index 0fa42e21c3c..370b18ccfdd 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
@@ -1,6 +1,7 @@
// 1999-04-12 bkoz
-// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,6 +24,7 @@
#include <istream>
#include <sstream>
#include <locale>
+#include <cstdlib>
#include <testsuite_hooks.h>
// In the presence of no fmtflags, the input operator should behave
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
index f02acb04650..6c3f4f8b307 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
@@ -62,11 +62,11 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc
index 9a1a71b8587..95f22894cb5 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc
@@ -1,6 +1,6 @@
// 2005-07-22 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2005 Free Software Foundation
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -20,9 +20,12 @@
// 27.6.1.2.3 basic_istream::operator>>
+// { dg-require-fileio "" }
+
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
index 6ea523553eb..7a979be7d38 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
@@ -66,11 +66,11 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc
index d4e0069163b..924f6d2dd1a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc
@@ -1,6 +1,6 @@
// 2005-07-22 Paolo Carlini <pcarlini@suse.de>
-// Copyright (C) 2005 Free Software Foundation
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,6 +23,7 @@
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
index eac90fe1fe1..245bf95564b 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
@@ -22,6 +22,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
index eaeeb4322c9..b39f51730af 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
@@ -61,11 +61,11 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
index ff3ff13fb55..3ada723de49 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
@@ -22,6 +22,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc b/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
index dccaa9f938b..272bc403103 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,9 +18,12 @@
// 27.6.1.3 unformatted input functions
+// { dg-require-fileio "" }
+
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc b/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
index 19cd94ff4a4..12cf727001f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <istream>
#include <string>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
index 1ed3a8435e3..b51149be058 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -18,10 +18,13 @@
// 27.6.1.3 unformatted input functions
+// { dg-require-fileio "" }
+
#include <istream>
#include <string>
#include <fstream>
#include <limits>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
index bcd4a4db546..e8fd0f52ae8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
@@ -22,6 +22,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <fstream>
#include <limits>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
index 0107f87dcef..5f4309bcde2 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
#include <string>
#include <fstream>
#include <limits>
+#include <cstdlib>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
index 2f90578d663..6cc5f0381db 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
@@ -26,6 +26,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
index d2c6eaea513..b3c92230fba 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
index bde01c3c96a..30a848c89ef 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
index 15b7e8b8f35..21c51d12ec8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
@@ -158,11 +158,11 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
index d92d8acdad0..c087352f491 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
index 2f64fcf1050..7f14c7359ab 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
index f27cfd2c6b8..dc2860b86ba 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <istream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
index 6ce60ac8467..106639c16de 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
@@ -20,6 +20,8 @@
// @require@ %-*.tst
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <ostream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
index 978c633b07d..9deecd09b3d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
@@ -20,6 +20,8 @@
// @require@ %-*.tst
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <ostream>
#include <fstream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc
new file mode 100644
index 00000000000..90919e57dad
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc
@@ -0,0 +1,52 @@
+// { dg-do compile }
+
+// 2007-03-03 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <sstream>
+
+class MyClass
+{
+ double x;
+
+public:
+ MyClass(double X) : x(X) {}
+ friend bool operator&&(int i, const MyClass& Z);
+};
+
+inline bool
+operator&&(int i, const MyClass& Z)
+{ return int(Z.x) == i; }
+
+// libstdc++/31031
+void test01()
+{
+ int k =3;
+ MyClass X(3.1);
+ std::ostringstream oss;
+
+ oss << (k && X);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc
new file mode 100644
index 00000000000..c6e43ec9b64
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc
@@ -0,0 +1,52 @@
+// { dg-do compile }
+
+// 2007-03-03 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING. If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <sstream>
+
+class MyClass
+{
+ double x;
+
+public:
+ MyClass(double X) : x(X) {}
+ friend bool operator&&(int i, const MyClass& Z);
+};
+
+inline bool
+operator&&(int i, const MyClass& Z)
+{ return int(Z.x) == i; }
+
+// libstdc++/31031
+void test01()
+{
+ int k =3;
+ MyClass X(3.1);
+ std::wostringstream oss;
+
+ oss << (k && X);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
index f15e3a12a2d..95c1e31e4ad 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
@@ -23,6 +23,8 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <ostream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
index 7f4cd4c2799..b70848f61ae 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
@@ -1,6 +1,7 @@
// 2000-06-29 bkoz
-// Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,9 +23,12 @@
// @require@ %-*.tst %-*.txt
// @diff@ %-*.tst %-*.txt
+// { dg-require-fileio "" }
+
#include <ostream>
#include <istream>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
index 2a698d3d3bb..1b80e4e01ed 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005 Free Software Foundation
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -23,6 +23,7 @@
#include <ostream>
#include <istream>
#include <fstream>
+#include <cstdlib>
#include <testsuite_hooks.h>
const wchar_t* s = L" lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
index 7cad09fa695..b3f4a7e8aa7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
@@ -114,11 +114,11 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_ushort>::size_type
+ const std::basic_string<__gnu_test::pod_ushort>::size_type
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_ushort
+ const __gnu_test::pod_ushort
std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
index d6f7be727ec..0fc99ebced0 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
@@ -20,6 +20,8 @@
// 27.6.2.4 basic_ostream seek members
+// { dg-require-fileio "" }
+
#include <ostream>
#include <sstream>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
new file mode 100644
index 00000000000..a81cc0c38ed
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cinttypes> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc b/libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc
new file mode 100644
index 00000000000..de427a848cd
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc
@@ -0,0 +1,31 @@
+// { dg-options "-std=c++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <cinttypes>
+
+void test01()
+{
+#if _GLIBCXX_USE_C99_INTTYPES_TR1
+
+ typedef std::imaxdiv_t my_imaxdiv_t;
+
+#endif
+}
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
index e7a794fd228..04bd27575ce 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,5 +42,5 @@ void test01()
}
// { dg-error "synthesized" "" { target *-*-* } 41 }
// { dg-error "within this context" "" { target *-*-* } 34 }
-// { dg-error "is private" "" { target *-*-* } 782 }
+// { dg-error "is private" "" { target *-*-* } 784 }
// { dg-error "operator=" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
index 80c33151855..6d7ae39fbde 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
@@ -1,6 +1,6 @@
// { dg-do compile }
-// Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -42,5 +42,5 @@ void test02()
}
// { dg-error "within this context" "" { target *-*-* } 35 }
// { dg-error "synthesized" "" { target *-*-* } 41 }
-// { dg-error "is private" "" { target *-*-* } 779 }
+// { dg-error "is private" "" { target *-*-* } 781 }
// { dg-error "copy constructor" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc b/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
index dc78bb0e75e..d4aaa5b3ea2 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
@@ -25,6 +25,12 @@
// @require@ %-*.tst
// @diff@ %-*.tst %-*.txt
+// This test fails on platforms using a wrapper, because this test
+// redirects stdout to a file and so the exit status printed by the
+// wrapper is not visibile to DejaGNU. DejaGNU then assumes that the
+// test exited with a non-zero exit status.
+// { dg-do run { xfail { ! unwrapped } } }
+
#include <cstdio>
#include <sstream>
#include <iostream>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/10.cc b/libstdc++-v3/testsuite/27_io/objects/char/10.cc
index 0c02ccf6727..8b43e2280fc 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/10.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/10.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <iostream>
#include <cstdio>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
index 70799b24a87..6e18e580b32 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
@@ -19,6 +19,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <iostream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
index 9bc75112b47..c97d3e7f930 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <iostream>
#include <cstdio>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
index 2232c1802ff..75b4eaa5f17 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <iostream>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
index d19d02728bf..66a8a3b3268 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <iostream>
#include <cstdio>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc b/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
index 3a230931825..2184aa23b09 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
@@ -23,6 +23,8 @@
// equivalent and interchangable. Currently however, cin.rdbuf()->sungetc()
// only returns characters that were read with cin.rdbuf()->sbumpc()
+// { dg-require-fileio "" }
+
// { dg-do run { xfail *-*-* } }
#include <iostream>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/7.cc b/libstdc++-v3/testsuite/27_io/objects/char/7.cc
index a90fa03a5b5..53162256be2 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/7.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/7.cc
@@ -3,7 +3,7 @@
// 2003-04-26 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -25,6 +25,7 @@
#include <fstream>
#include <iostream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc b/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
index 47232826503..3bba3d84d44 100644
--- a/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
@@ -3,7 +3,7 @@
// 2003-04-30 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
#include <testsuite_hooks.h>
#include <cstdio>
+#include <cstdlib>
#include <iostream>
#include <unistd.h>
#include <signal.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
index 1e962d7eda4..7240e8352d6 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
@@ -3,7 +3,7 @@
// 2003-05-01 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -25,6 +25,7 @@
#include <fstream>
#include <iostream>
+#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
index beee4046a21..21218975b72 100644
--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
@@ -3,7 +3,7 @@
// 2003-04-30 Petur Runolfsson <peturr02@ru.is>
-// Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
#include <testsuite_hooks.h>
#include <cstdio>
+#include <cstdlib>
#include <iostream>
#include <unistd.h>
#include <signal.h>
diff --git a/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
new file mode 100644
index 00000000000..0f5687077cf
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
@@ -0,0 +1,26 @@
+// { dg-do compile }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+#include <regex> // { dg-excess-errors "In file included from" }
+
+// { dg-error "upcoming ISO" "" { target *-*-* } 36 }
+
+
+
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index c71e43d22e2..71a6bd8fb32 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -128,9 +128,13 @@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@
GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@
GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@
GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_FALSE = @GLIBCXX_C_HEADERS_C_GLOBAL_FALSE@
+GLIBCXX_C_HEADERS_C_GLOBAL_TRUE = @GLIBCXX_C_HEADERS_C_GLOBAL_TRUE@
GLIBCXX_C_HEADERS_C_STD_FALSE = @GLIBCXX_C_HEADERS_C_STD_FALSE@
GLIBCXX_C_HEADERS_C_STD_TRUE = @GLIBCXX_C_HEADERS_C_STD_TRUE@
GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@
+GLIBCXX_C_HEADERS_EXTRA_FALSE = @GLIBCXX_C_HEADERS_EXTRA_FALSE@
+GLIBCXX_C_HEADERS_EXTRA_TRUE = @GLIBCXX_C_HEADERS_EXTRA_TRUE@
GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
diff --git a/libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc b/libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
index 170737db3f4..387e715704a 100644
--- a/libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
+++ b/libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <string>
#include <stdexcept>
+#include <cstdlib>
#include <ext/new_allocator.h>
static size_t count;
@@ -39,8 +40,8 @@ static count_check check;
void* operator new(size_t size) throw(std::bad_alloc)
{
- printf("operator new is called \n");
- void* p = malloc(size);
+ std::printf("operator new is called \n");
+ void* p = std::malloc(size);
if (p == NULL)
throw std::bad_alloc();
count++;
@@ -49,7 +50,7 @@ void* operator new(size_t size) throw(std::bad_alloc)
void operator delete(void* p) throw()
{
- printf("operator delete is called \n");
+ std::printf("operator delete is called \n");
if (p == NULL)
return;
count--;
diff --git a/libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc b/libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
index 6512f2e8ed1..572c34421fb 100644
--- a/libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
+++ b/libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <string>
#include <stdexcept>
+#include <cstdlib>
#include <ext/new_allocator.h>
static size_t count;
@@ -39,8 +40,8 @@ static count_check check;
void* operator new(size_t size) throw(std::bad_alloc)
{
- printf("operator new is called \n");
- void* p = malloc(size);
+ std::printf("operator new is called \n");
+ void* p = std::malloc(size);
if (p == NULL)
throw std::bad_alloc();
count++;
@@ -49,7 +50,7 @@ void* operator new(size_t size) throw(std::bad_alloc)
void operator delete(void* p) throw()
{
- printf("operator delete is called \n");
+ std::printf("operator delete is called \n");
if (p == NULL)
return;
count--;
diff --git a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
index c1f23d524c4..63afba382ba 100644
--- a/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
+++ b/libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -52,6 +52,7 @@
#include <cassert>
#include <iostream>
+#include <cstdlib>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>
@@ -102,7 +103,7 @@ public:
case 'T':
return 3;
default:
- abort();
+ std::abort();
};
}
};
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
index 82539a794d9..1c448311047 100644
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
@@ -16,6 +16,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <cstdio>
#include <fstream>
#include <ext/stdio_filebuf.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
index 290efda0054..b1fafec0ba0 100644
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
@@ -20,6 +20,8 @@
// causes "sbumpc" to return an incorrect value.
// { dg-do run { xfail arm*-*-elf arm*-*-eabi } }
+// { dg-require-fileio "" }
+
#include <cstdio>
#include <fstream>
#include <ext/stdio_filebuf.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
index 2a44bd5796b..bd8cd96a2ea 100644
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
@@ -20,6 +20,8 @@
// causes "sbumpc" to return an incorrect value.
// { dg-do run { xfail arm*-*-elf arm*-*-eabi } }
+// { dg-require-fileio "" }
+
#include <cstdio>
#include <fstream>
#include <ext/stdio_sync_filebuf.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
index f78f22bc390..8ac0dc8a742 100644
--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
@@ -20,6 +20,8 @@
// stdio_filebuf.h
+// { dg-require-fileio "" }
+
#include <ext/stdio_filebuf.h>
#include <cstdio>
#include <fstream>
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
index f7961d0289e..41f5acca5d5 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <ext/stdio_sync_filebuf.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
index d1929da64a6..a4998ee3128 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <ext/stdio_sync_filebuf.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc
index c1d53d70e31..58b28a79c01 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <ext/stdio_sync_filebuf.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc
index 42c646a0de2..3d03ade9b53 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <ext/stdio_sync_filebuf.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc
index 1318c73ee82..0717bcabc9c 100644
--- a/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc
+++ b/libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc
@@ -18,6 +18,8 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
+// { dg-require-fileio "" }
+
#include <ext/stdio_sync_filebuf.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
index 992056cf9a2..27696998f65 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,5 +36,5 @@ int main()
}
// { dg-error "instantiated from" "" { target *-*-* } 29 }
-// { dg-error "no type" "" { target *-*-* } 76 }
+// { dg-error "no type" "" { target *-*-* } 73 }
// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
index 311db92c99b..2b42e41ff93 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,4 +37,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 29 }
-// { dg-error "declaration of" "" { target *-*-* } 71 }
+// { dg-error "declaration of" "" { target *-*-* } 68 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
index b2dd0e3bc9f..7e655f88b4e 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,5 +36,5 @@ int main()
}
// { dg-error "instantiated from" "" { target *-*-* } 29 }
-// { dg-error "no type" "" { target *-*-* } 119 }
+// { dg-error "no type" "" { target *-*-* } 116 }
// { dg-excess-errors "In instantiation of" }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
index 752125ed25f..50a0b14fab5 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -37,4 +37,4 @@ int main()
}
// { dg-error "invalid use of incomplete" "" { target *-*-* } 29 }
-// { dg-error "declaration of" "" { target *-*-* } 114 }
+// { dg-error "declaration of" "" { target *-*-* } 111 }
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index e8e740492fb..ccc3fb69e31 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -26,6 +26,24 @@ proc dg-require-namedlocale { args } {
return
}
+proc dg-require-fileio { args } {
+ if { ![ check_v3_target_fileio ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
+proc dg-require-time { args } {
+ if { ![ check_v3_target_time ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc dg-require-sharedlib { args } {
if { ![ check_v3_target_sharedlib ] } {
upvar dg-do-what dg-do-what
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 9308fa562c3..bd79f4bfbc2 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -225,7 +225,7 @@ proc libstdc++_init { testfile } {
v3track PCH_CXXFLAGS 2
}
- libstdc++_maybe_build_wrapper "${objdir}/testglue.o"
+ libstdc++_maybe_build_wrapper "${objdir}/testglue.o" "-fexceptions"
}
# Callback for cleanup routines.
@@ -466,11 +466,13 @@ proc v3-build_support { } {
}
# Collect into libtestc++.a
- set arcommand "ar -rc ./libtestc++.a ${libtest_objs}"
+ set ar [transform "ar"]
+ set arcommand "$ar -rc ./libtestc++.a ${libtest_objs}"
set result [lindex [local_exec "$arcommand" "" "" 300] 0]
verbose "link result is $result"
if { $result == 0 } {
- set ranlibcommand "ranlib ./libtestc++.a"
+ set ranlib [transform "ranlib"]
+ set ranlibcommand "$ranlib ./libtestc++.a"
set result [lindex [local_exec "$ranlibcommand" "" "" 300] 0]
if { $result != 0 } {
error "could not link libtestc++.a"
@@ -493,11 +495,138 @@ proc v3-build_support { } {
}
}
+proc check_v3_target_fileio { } {
+ global et_fileio_saved
+ global et_fileio_target_name
+ global tool
+
+ if { ![info exists et_fileio_target_name] } {
+ set et_fileio_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_fileio_target_name } {
+ verbose "check_v3_target_fileio: `$et_fileio_target_name'" 2
+ set et_fileio_target_name $current_target
+ if [info exists et_fileio_saved] {
+ verbose "check_v3_target_fileio: removing cached result" 2
+ unset et_fileio_saved
+ }
+ }
+
+ if [info exists et_fileio_saved] {
+ verbose "check_v3_target_fileio: using cached result" 2
+ } else {
+ set et_fileio_saved 0
+
+ # Set up, compile, and execute a C++ test program that tries to use
+ # the file functions
+ set src fileio[pid].cc
+ set exe fileio[pid].x
+
+ set f [open $src "w"]
+ puts $f "#include <sys/types.h>"
+ puts $f "#include <sys/stat.h>"
+ puts $f "#include <fcntl.h>"
+ puts $f "#include <unistd.h>"
+ puts $f "#include <errno.h>"
+ puts $f "using namespace std;"
+ puts $f "int main ()"
+ puts $f "{"
+ puts $f " int fd = open (\".\", O_RDONLY);"
+ puts $f " if (fd == -1)"
+ puts $f " {"
+ puts $f " int err = errno;"
+ puts $f " if (err == EIO || err == ENOSYS)"
+ puts $f " return 1;"
+ puts $f " }"
+ puts $f " else"
+ puts $f " close (fd);"
+ puts $f " return 0;"
+ puts $f "}"
+ close $f
+
+ set lines [v3_target_compile $src $exe executable ""]
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, compilation succeeded.
+ set result [${tool}_load "./$exe" "" ""]
+ set status [lindex $result 0]
+ remote_file build delete $exe
+
+ verbose "check_v3_target_fileio: status is <$status>" 2
+
+ if { $status == "pass" } {
+ set et_fileio_saved 1
+ }
+ } else {
+ verbose "check_v3_target_fileio: compilation failed" 2
+ }
+ }
+ return $et_fileio_saved
+}
+
proc check_v3_target_sharedlib { } {
global v3-sharedlib
return ${v3-sharedlib}
}
+proc check_v3_target_time { } {
+ global et_time_saved
+ global et_time_target_name
+ global tool
+
+ if { ![info exists et_time_target_name] } {
+ set et_time_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_time_target_name } {
+ verbose "check_v3_target_time: `$et_time_target_name'" 2
+ set et_time_target_name $current_target
+ if [info exists et_time_saved] {
+ verbose "check_v3_target_time: removing cached result" 2
+ unset et_time_saved
+ }
+ }
+
+ if [info exists et_time_saved] {
+ verbose "check_v3_target_time: using cached result" 2
+ } else {
+ set et_time_saved 0
+
+ # Set up and compile a C++ test program that tries to use
+ # the time function
+ set src time[pid].cc
+ set exe time[pid].x
+
+ set f [open $src "w"]
+ puts $f "#include <time.h>"
+ puts $f "using namespace std;"
+ puts $f "int main ()"
+ puts $f "{"
+ puts $f " time (0);"
+ puts $f "}"
+ close $f
+
+ set lines [v3_target_compile $src $exe executable ""]
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, compilation succeeded.
+ verbose "check_v3_target_time: compilation succeeded" 2
+ remote_file build delete $exe
+ set et_time_saved 1
+ } else {
+ verbose "check_v3_target_time: compilation failed" 2
+ }
+ }
+ return $et_time_saved
+}
+
proc check_v3_target_namedlocale { } {
global et_namedlocale_saved
global et_namedlocale_target_name
diff --git a/libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc b/libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc
index 16afbe5bef2..07c5163ac75 100644
--- a/libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
// the GNU General Public License.
#include <cstdio>
+#include <cstdlib>
#include <fstream>
#include <testsuite_performance.h>
diff --git a/libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc b/libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
index b5eaddf3f70..ea4fab0b39c 100644
--- a/libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
+++ b/libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,6 +26,7 @@
// the GNU General Public License.
#include <fstream>
+#include <cstdlib>
#include <testsuite_performance.h>
// libstdc++/5001 (100,000 line input file)
diff --git a/libstdc++-v3/testsuite/thread/pthread1.cc b/libstdc++-v3/testsuite/thread/pthread1.cc
index d9ba9b16a96..fc19378ef4d 100644
--- a/libstdc++-v3/testsuite/thread/pthread1.cc
+++ b/libstdc++-v3/testsuite/thread/pthread1.cc
@@ -1,6 +1,7 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
//
-// Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -30,9 +31,8 @@
// if the STL threading support is fubar'd).
#include <list>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <cstdlib>
+#include <pthread.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/thread/pthread2.cc b/libstdc++-v3/testsuite/thread/pthread2.cc
index 9fffd284fe1..73a3da596df 100644
--- a/libstdc++-v3/testsuite/thread/pthread2.cc
+++ b/libstdc++-v3/testsuite/thread/pthread2.cc
@@ -1,7 +1,8 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5347 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,9 +25,7 @@
// { dg-options "-pthreads" { target *-*-solaris* } }
#include <fstream>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <pthread.h>
const int max_thread_count = 2;
const int max_loop_count = 1000000;
diff --git a/libstdc++-v3/testsuite/thread/pthread3.cc b/libstdc++-v3/testsuite/thread/pthread3.cc
index a0e340caf7d..740c9098b69 100644
--- a/libstdc++-v3/testsuite/thread/pthread3.cc
+++ b/libstdc++-v3/testsuite/thread/pthread3.cc
@@ -1,7 +1,8 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5347 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,9 +25,7 @@
// { dg-options "-pthreads" { target *-*-solaris* } }
#include <sstream>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <pthread.h>
const int max_thread_count = 2;
const int max_loop_count = 1000000;
diff --git a/libstdc++-v3/testsuite/thread/pthread4.cc b/libstdc++-v3/testsuite/thread/pthread4.cc
index a4b520d73e4..f910f9c40b5 100644
--- a/libstdc++-v3/testsuite/thread/pthread4.cc
+++ b/libstdc++-v3/testsuite/thread/pthread4.cc
@@ -2,7 +2,8 @@
// Adapted from http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00679.html
// which was adapted from pthread1.cc by Mike Lu <MLu@dynamicsoft.com>
//
-// Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,9 +27,7 @@
#include <string>
#include <list>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <pthread.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/thread/pthread5.cc b/libstdc++-v3/testsuite/thread/pthread5.cc
index 189c8a5c153..fd3b483301c 100644
--- a/libstdc++-v3/testsuite/thread/pthread5.cc
+++ b/libstdc++-v3/testsuite/thread/pthread5.cc
@@ -2,7 +2,8 @@
// Adpated from libstdc++/5464 submitted by jjessel@amadeus.net
// Jean-Francois JESSEL (Amadeus SAS Development)
//
-// Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,9 +28,8 @@
#include <vector>
#include <list>
#include <string>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <cstdlib>
+#include <pthread.h>
#ifdef _GLIBCXX_HAVE_UNISTD_H
#include <unistd.h> // To test for _POSIX_THREAD_PRIORITY_SCHEDULING
diff --git a/libstdc++-v3/testsuite/thread/pthread6.cc b/libstdc++-v3/testsuite/thread/pthread6.cc
index 75d49e211a8..64b7a3d5318 100644
--- a/libstdc++-v3/testsuite/thread/pthread6.cc
+++ b/libstdc++-v3/testsuite/thread/pthread6.cc
@@ -1,7 +1,8 @@
// 2002-01-23 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
// Adpated from libstdc++/5444 submitted by markus.breuer@materna.de
//
-// Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -26,9 +27,7 @@
#include <string>
#include <map>
#include <vector>
-
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
+#include <pthread.h>
const int max_thread_count = 8;
const int loops = 100000;
diff --git a/libstdc++-v3/testsuite/thread/pthread7-rope.cc b/libstdc++-v3/testsuite/thread/pthread7-rope.cc
index c09ab4564d0..323366572fa 100644
--- a/libstdc++-v3/testsuite/thread/pthread7-rope.cc
+++ b/libstdc++-v3/testsuite/thread/pthread7-rope.cc
@@ -1,6 +1,6 @@
// 2003-05-03 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org>
//
-// Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -24,11 +24,9 @@
#include <ext/rope>
#include <cstring>
+#include <pthread.h>
#include <testsuite_hooks.h>
-// Do not include <pthread.h> explicitly; if threads are properly
-// configured for the port, then it is picked up free from STL headers.
-
const int max_thread_count = 4;
const int max_loop_count = 10000;
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
index 5b17500165f..5149daa5b6d 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2006 Free Software Foundation
+// Copyright (C) 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@
#include <vector>
#include <testsuite_hooks.h>
#include <iostream>
+#include <cstdlib>
#include <pthread.h>
@@ -169,14 +170,14 @@ test01()
{
if (pthread_create(&threads[worker], &tattr,
thread_hammer, reinterpret_cast<void*>(&weak_pool[worker])))
- abort();
+ std::abort();
}
// Wait for threads to complete, then check integrity of reference.
void* status;
for (unsigned int worker = 0; worker < HAMMER_MAX_THREADS; worker++)
{
if (pthread_join(threads[worker], &status))
- abort();
+ std::abort();
}
obj_pool.clear();
diff --git a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
index 370218a1136..0333b9f7754 100644
--- a/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
+++ b/libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2006 Free Software Foundation
+// Copyright (C) 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -27,6 +27,7 @@
#include <vector>
#include <testsuite_hooks.h>
#include <iostream>
+#include <cstdlib>
#include <pthread.h>
@@ -171,14 +172,14 @@ test01()
{
if (pthread_create(&threads[worker], &tattr,
thread_hammer, reinterpret_cast<void*>(&weak_pool[worker])))
- abort();
+ std::abort();
}
// Wait for threads to complete, then check integrity of reference.
void* status;
for (unsigned int worker = 0; worker < HAMMER_MAX_THREADS; worker++)
{
if (pthread_join(threads[worker], &status))
- abort();
+ std::abort();
}
obj_pool.clear();
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc
index faddc0dcc65..02a44573abf 100644
--- a/libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc
+++ b/libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc
@@ -18,7 +18,7 @@
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
-#include <tr1/tuple>
+#include <tr1/functional>
namespace gnu
{
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc b/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc
index 45080fc40f5..d54e2aa482c 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc
@@ -1,5 +1,4 @@
-// { dg-do compile { xfail *-*-* } }
-// { dg-excess-errors "" }
+// { dg-do compile }
// 2007-02-04 Benjamin Kosnik <bkoz@redhat.com>
//
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc b/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc
index 29cced09bd2..98dfc299576 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc
@@ -1,5 +1,4 @@
-// { dg-do compile { xfail *-*-* } }
-// { dg-excess-errors "" }
+// { dg-do compile }
// 2007-02-04 Benjamin Kosnik <bkoz@redhat.com>
//
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
index 54ff4d2e65b..a599b7ec7b6 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
@@ -1,6 +1,6 @@
// 2004-09-23 Chris Jefferson <chris@bubblescope.net>
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
// Tuple
#include <tr1/tuple>
+#include <tr1/functional>
#include <testsuite_hooks.h>
using namespace std;
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc
index 74eabbf53f9..aaacb70a0f5 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2005 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ void test01()
using namespace std;
using namespace tr1;
- unordered_map<int, char, hash<int>, equal_to<int>,
+ __unordered_map<int, char, hash<int>, equal_to<int>,
allocator<pair<const int, char> >, true> m;
for (int i = 0; i < 1000; ++i)
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc
new file mode 100644
index 00000000000..139c906884d
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc
@@ -0,0 +1,131 @@
+// 2007-02-22 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 6.3.4.4 Class template unordered_map
+
+#include <tr1/unordered_map>
+#include <string>
+#include <testsuite_hooks.h>
+
+// In the occasion of libstdc++/25896
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::tr1::unordered_map<std::string, int> Map;
+ typedef Map::iterator iterator;
+ typedef Map::const_iterator const_iterator;
+ typedef Map::value_type value_type;
+
+ Map m1;
+
+ m1.insert(value_type("because to why", 1));
+ m1.insert(value_type("the stockholm syndrome", 2));
+ m1.insert(value_type("a cereous night", 3));
+ m1.insert(value_type("eeilo", 4));
+ m1.insert(value_type("protean", 5));
+ m1.insert(value_type("the way you are when", 6));
+ m1.insert(value_type("tillsammans", 7));
+ m1.insert(value_type("umbra/penumbra", 8));
+ m1.insert(value_type("belonging (no longer mix)", 9));
+ m1.insert(value_type("one line behind", 10));
+ VERIFY( m1.size() == 10 );
+
+ VERIFY( m1.erase("eeilo") == 1 );
+ VERIFY( m1.size() == 9 );
+ iterator it1 = m1.find("eeilo");
+ VERIFY( it1 == m1.end() );
+
+ VERIFY( m1.erase("tillsammans") == 1 );
+ VERIFY( m1.size() == 8 );
+ iterator it2 = m1.find("tillsammans");
+ VERIFY( it2 == m1.end() );
+
+ // Must work (see DR 526)
+ iterator it3 = m1.find("belonging (no longer mix)");
+ VERIFY( it3 != m1.end() );
+ VERIFY( m1.erase(it3->first) == 1 );
+ VERIFY( m1.size() == 7 );
+ it3 = m1.find("belonging (no longer mix)");
+ VERIFY( it3 == m1.end() );
+
+ VERIFY( !m1.erase("abra") );
+ VERIFY( m1.size() == 7 );
+
+ VERIFY( !m1.erase("eeilo") );
+ VERIFY( m1.size() == 7 );
+
+ VERIFY( m1.erase("because to why") == 1 );
+ VERIFY( m1.size() == 6 );
+ iterator it4 = m1.find("because to why");
+ VERIFY( it4 == m1.end() );
+
+ iterator it5 = m1.find("umbra/penumbra");
+ iterator it6 = m1.find("one line behind");
+ VERIFY( it5 != m1.end() );
+ VERIFY( it6 != m1.end() );
+
+ VERIFY( m1.find("the stockholm syndrome") != m1.end() );
+ VERIFY( m1.find("a cereous night") != m1.end() );
+ VERIFY( m1.find("the way you are when") != m1.end() );
+ VERIFY( m1.find("a cereous night") != m1.end() );
+
+ VERIFY( m1.erase(it5->first) == 1 );
+ VERIFY( m1.size() == 5 );
+ it5 = m1.find("umbra/penumbra");
+ VERIFY( it5 == m1.end() );
+
+ VERIFY( m1.erase(it6->first) == 1 );
+ VERIFY( m1.size() == 4 );
+ it6 = m1.find("one line behind");
+ VERIFY( it6 == m1.end() );
+
+ iterator it7 = m1.begin();
+ iterator it8 = it7;
+ ++it8;
+ iterator it9 = it8;
+ ++it9;
+
+ VERIFY( m1.erase(it8->first) == 1 );
+ VERIFY( m1.size() == 3 );
+ VERIFY( ++it7 == it9 );
+
+ iterator it10 = it9;
+ ++it10;
+ iterator it11 = it10;
+
+ VERIFY( m1.erase(it9->first) == 1 );
+ VERIFY( m1.size() == 2 );
+ VERIFY( ++it10 == m1.end() );
+
+ VERIFY( m1.erase(m1.begin()) != m1.end() );
+ VERIFY( m1.size() == 1 );
+ VERIFY( m1.begin() == it11 );
+
+ VERIFY( m1.erase(m1.begin()->first) == 1 );
+ VERIFY( m1.size() == 0 );
+ VERIFY( m1.begin() == m1.end() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc
index 41ce95db89e..8fb0b9f3b62 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc
@@ -2,7 +2,7 @@
// 2005-02-17 Matt Austern <austern@apple.com>
//
-// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,9 +29,12 @@ using namespace std;
using namespace std::tr1;
template class unordered_map<string, float>;
-template class unordered_map<string, float,
+template class unordered_map<string, int,
hash<string>, equal_to<string>,
- allocator<pair<const string, float> >, true>;
+ allocator<pair<const string, int> > >;
template class unordered_map<string, float,
hash<string>, equal_to<string>,
- allocator<char>, false>;
+ allocator<char> >;
+template class __unordered_map<string, int,
+ hash<string>, equal_to<string>,
+ allocator<pair<const string, int> >, true>;
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc
new file mode 100644
index 00000000000..f060f4be575
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc
@@ -0,0 +1,131 @@
+// 2007-02-22 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 6.3.4.6 Class template unordered_multimap
+
+#include <tr1/unordered_map>
+#include <string>
+#include <testsuite_hooks.h>
+
+// In the occasion of libstdc++/25896
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::tr1::unordered_multimap<std::string, int> Mmap;
+ typedef Mmap::iterator iterator;
+ typedef Mmap::const_iterator const_iterator;
+ typedef Mmap::value_type value_type;
+
+ Mmap mm1;
+
+ mm1.insert(value_type("because to why", 1));
+ mm1.insert(value_type("the stockholm syndrome", 2));
+ mm1.insert(value_type("a cereous night", 3));
+ mm1.insert(value_type("eeilo", 4));
+ mm1.insert(value_type("protean", 5));
+ mm1.insert(value_type("the way you are when", 6));
+ mm1.insert(value_type("tillsammans", 7));
+ mm1.insert(value_type("umbra/penumbra", 8));
+ mm1.insert(value_type("belonging (no longer mix)", 9));
+ mm1.insert(value_type("one line behind", 10));
+ VERIFY( mm1.size() == 10 );
+
+ VERIFY( mm1.erase("eeilo") == 1 );
+ VERIFY( mm1.size() == 9 );
+ iterator it1 = mm1.find("eeilo");
+ VERIFY( it1 == mm1.end() );
+
+ VERIFY( mm1.erase("tillsammans") == 1 );
+ VERIFY( mm1.size() == 8 );
+ iterator it2 = mm1.find("tillsammans");
+ VERIFY( it2 == mm1.end() );
+
+ // Must work (see DR 526)
+ iterator it3 = mm1.find("belonging (no longer mix)");
+ VERIFY( it3 != mm1.end() );
+ VERIFY( mm1.erase(it3->first) == 1 );
+ VERIFY( mm1.size() == 7 );
+ it3 = mm1.find("belonging (no longer mix)");
+ VERIFY( it3 == mm1.end() );
+
+ VERIFY( !mm1.erase("abra") );
+ VERIFY( mm1.size() == 7 );
+
+ VERIFY( !mm1.erase("eeilo") );
+ VERIFY( mm1.size() == 7 );
+
+ VERIFY( mm1.erase("because to why") == 1 );
+ VERIFY( mm1.size() == 6 );
+ iterator it4 = mm1.find("because to why");
+ VERIFY( it4 == mm1.end() );
+
+ iterator it5 = mm1.find("umbra/penumbra");
+ iterator it6 = mm1.find("one line behind");
+ VERIFY( it5 != mm1.end() );
+ VERIFY( it6 != mm1.end() );
+
+ VERIFY( mm1.find("the stockholm syndrome") != mm1.end() );
+ VERIFY( mm1.find("a cereous night") != mm1.end() );
+ VERIFY( mm1.find("the way you are when") != mm1.end() );
+ VERIFY( mm1.find("a cereous night") != mm1.end() );
+
+ VERIFY( mm1.erase(it5->first) == 1 );
+ VERIFY( mm1.size() == 5 );
+ it5 = mm1.find("umbra/penumbra");
+ VERIFY( it5 == mm1.end() );
+
+ VERIFY( mm1.erase(it6->first) == 1 );
+ VERIFY( mm1.size() == 4 );
+ it6 = mm1.find("one line behind");
+ VERIFY( it6 == mm1.end() );
+
+ iterator it7 = mm1.begin();
+ iterator it8 = it7;
+ ++it8;
+ iterator it9 = it8;
+ ++it9;
+
+ VERIFY( mm1.erase(it8->first) == 1 );
+ VERIFY( mm1.size() == 3 );
+ VERIFY( ++it7 == it9 );
+
+ iterator it10 = it9;
+ ++it10;
+ iterator it11 = it10;
+
+ VERIFY( mm1.erase(it9->first) == 1 );
+ VERIFY( mm1.size() == 2 );
+ VERIFY( ++it10 == mm1.end() );
+
+ VERIFY( mm1.erase(mm1.begin()) != mm1.end() );
+ VERIFY( mm1.size() == 1 );
+ VERIFY( mm1.begin() == it11 );
+
+ VERIFY( mm1.erase(mm1.begin()->first) == 1 );
+ VERIFY( mm1.size() == 0 );
+ VERIFY( mm1.begin() == mm1.end() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc
index d48aef831b6..5433e0efa91 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc
@@ -2,7 +2,7 @@
// 2005-02-17 Matt Austern <austern@apple.com>
//
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,9 +29,12 @@ using namespace std;
using namespace std::tr1;
template class unordered_multimap<string, float>;
-template class unordered_multimap<string, float,
+template class unordered_multimap<string, int,
hash<string>, equal_to<string>,
- allocator<pair<const string, float> >, true>;
+ allocator<pair<const string, int> > >;
template class unordered_multimap<string, float,
- hash<string>, equal_to<string>,
- allocator<char>, false>;
+ hash<string>, equal_to<string>,
+ allocator<char> >;
+template class __unordered_multimap<string, int,
+ hash<string>, equal_to<string>,
+ allocator<pair<const string, int> >, true>;
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc
new file mode 100644
index 00000000000..f98e5c2dabb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc
@@ -0,0 +1,130 @@
+// 2007-02-22 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 6.3.4.5 Class template unordered_multiset
+
+#include <tr1/unordered_set>
+#include <string>
+#include <testsuite_hooks.h>
+
+// In the occasion of libstdc++/25896
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::tr1::unordered_multiset<std::string> Mset;
+ typedef Mset::iterator iterator;
+ typedef Mset::const_iterator const_iterator;
+
+ Mset ms1;
+
+ ms1.insert("because to why");
+ ms1.insert("the stockholm syndrome");
+ ms1.insert("a cereous night");
+ ms1.insert("eeilo");
+ ms1.insert("protean");
+ ms1.insert("the way you are when");
+ ms1.insert("tillsammans");
+ ms1.insert("umbra/penumbra");
+ ms1.insert("belonging (no longer mix)");
+ ms1.insert("one line behind");
+ VERIFY( ms1.size() == 10 );
+
+ VERIFY( ms1.erase("eeilo") == 1 );
+ VERIFY( ms1.size() == 9 );
+ iterator it1 = ms1.find("eeilo");
+ VERIFY( it1 == ms1.end() );
+
+ VERIFY( ms1.erase("tillsammans") == 1 );
+ VERIFY( ms1.size() == 8 );
+ iterator it2 = ms1.find("tillsammans");
+ VERIFY( it2 == ms1.end() );
+
+ // Must work (see DR 526)
+ iterator it3 = ms1.find("belonging (no longer mix)");
+ VERIFY( it3 != ms1.end() );
+ VERIFY( ms1.erase(*it3) == 1 );
+ VERIFY( ms1.size() == 7 );
+ it3 = ms1.find("belonging (no longer mix)");
+ VERIFY( it3 == ms1.end() );
+
+ VERIFY( !ms1.erase("abra") );
+ VERIFY( ms1.size() == 7 );
+
+ VERIFY( !ms1.erase("eeilo") );
+ VERIFY( ms1.size() == 7 );
+
+ VERIFY( ms1.erase("because to why") == 1 );
+ VERIFY( ms1.size() == 6 );
+ iterator it4 = ms1.find("because to why");
+ VERIFY( it4 == ms1.end() );
+
+ iterator it5 = ms1.find("umbra/penumbra");
+ iterator it6 = ms1.find("one line behind");
+ VERIFY( it5 != ms1.end() );
+ VERIFY( it6 != ms1.end() );
+
+ VERIFY( ms1.find("the stockholm syndrome") != ms1.end() );
+ VERIFY( ms1.find("a cereous night") != ms1.end() );
+ VERIFY( ms1.find("the way you are when") != ms1.end() );
+ VERIFY( ms1.find("a cereous night") != ms1.end() );
+
+ VERIFY( ms1.erase(*it5) == 1 );
+ VERIFY( ms1.size() == 5 );
+ it5 = ms1.find("umbra/penumbra");
+ VERIFY( it5 == ms1.end() );
+
+ VERIFY( ms1.erase(*it6) == 1 );
+ VERIFY( ms1.size() == 4 );
+ it6 = ms1.find("one line behind");
+ VERIFY( it6 == ms1.end() );
+
+ iterator it7 = ms1.begin();
+ iterator it8 = it7;
+ ++it8;
+ iterator it9 = it8;
+ ++it9;
+
+ VERIFY( ms1.erase(*it8) == 1 );
+ VERIFY( ms1.size() == 3 );
+ VERIFY( ++it7 == it9 );
+
+ iterator it10 = it9;
+ ++it10;
+ iterator it11 = it10;
+
+ VERIFY( ms1.erase(*it9) == 1 );
+ VERIFY( ms1.size() == 2 );
+ VERIFY( ++it10 == ms1.end() );
+
+ VERIFY( ms1.erase(ms1.begin()) != ms1.end() );
+ VERIFY( ms1.size() == 1 );
+ VERIFY( ms1.begin() == it11 );
+
+ VERIFY( ms1.erase(*ms1.begin()) == 1 );
+ VERIFY( ms1.size() == 0 );
+ VERIFY( ms1.begin() == ms1.end() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc
index 5d1e8710b05..4389e1b805e 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc
@@ -2,7 +2,7 @@
// 2005-02-17 Matt Austern <austern@apple.com>
//
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,9 @@ using namespace std;
using namespace std::tr1;
template class unordered_multiset<int>;
+template class unordered_multiset<float, hash<float>, equal_to<float>,
+ allocator<float> >;
template class unordered_multiset<int, hash<int>, equal_to<int>,
- allocator<int>, true>;
-template class unordered_multiset<int, hash<int>, equal_to<int>,
- allocator<char>, false>;
+ allocator<char> >;
+template class __unordered_multiset<float, hash<float>, equal_to<float>,
+ allocator<float>, true>;
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc
new file mode 100644
index 00000000000..823a9b8a1da
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc
@@ -0,0 +1,130 @@
+// 2007-02-22 Paolo Carlini <pcarlini@suse.de>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 6.3.4.3 Class template unordered_set
+
+#include <tr1/unordered_set>
+#include <string>
+#include <testsuite_hooks.h>
+
+// In the occasion of libstdc++/25896
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ typedef std::tr1::unordered_set<std::string> Set;
+ typedef Set::iterator iterator;
+ typedef Set::const_iterator const_iterator;
+
+ Set s1;
+
+ s1.insert("because to why");
+ s1.insert("the stockholm syndrome");
+ s1.insert("a cereous night");
+ s1.insert("eeilo");
+ s1.insert("protean");
+ s1.insert("the way you are when");
+ s1.insert("tillsammans");
+ s1.insert("umbra/penumbra");
+ s1.insert("belonging (no longer mix)");
+ s1.insert("one line behind");
+ VERIFY( s1.size() == 10 );
+
+ VERIFY( s1.erase("eeilo") == 1 );
+ VERIFY( s1.size() == 9 );
+ iterator it1 = s1.find("eeilo");
+ VERIFY( it1 == s1.end() );
+
+ VERIFY( s1.erase("tillsammans") == 1 );
+ VERIFY( s1.size() == 8 );
+ iterator it2 = s1.find("tillsammans");
+ VERIFY( it2 == s1.end() );
+
+ // Must work (see DR 526)
+ iterator it3 = s1.find("belonging (no longer mix)");
+ VERIFY( it3 != s1.end() );
+ VERIFY( s1.erase(*it3) == 1 );
+ VERIFY( s1.size() == 7 );
+ it3 = s1.find("belonging (no longer mix)");
+ VERIFY( it3 == s1.end() );
+
+ VERIFY( !s1.erase("abra") );
+ VERIFY( s1.size() == 7 );
+
+ VERIFY( !s1.erase("eeilo") );
+ VERIFY( s1.size() == 7 );
+
+ VERIFY( s1.erase("because to why") == 1 );
+ VERIFY( s1.size() == 6 );
+ iterator it4 = s1.find("because to why");
+ VERIFY( it4 == s1.end() );
+
+ iterator it5 = s1.find("umbra/penumbra");
+ iterator it6 = s1.find("one line behind");
+ VERIFY( it5 != s1.end() );
+ VERIFY( it6 != s1.end() );
+
+ VERIFY( s1.find("the stockholm syndrome") != s1.end() );
+ VERIFY( s1.find("a cereous night") != s1.end() );
+ VERIFY( s1.find("the way you are when") != s1.end() );
+ VERIFY( s1.find("a cereous night") != s1.end() );
+
+ VERIFY( s1.erase(*it5) == 1 );
+ VERIFY( s1.size() == 5 );
+ it5 = s1.find("umbra/penumbra");
+ VERIFY( it5 == s1.end() );
+
+ VERIFY( s1.erase(*it6) == 1 );
+ VERIFY( s1.size() == 4 );
+ it6 = s1.find("one line behind");
+ VERIFY( it6 == s1.end() );
+
+ iterator it7 = s1.begin();
+ iterator it8 = it7;
+ ++it8;
+ iterator it9 = it8;
+ ++it9;
+
+ VERIFY( s1.erase(*it8) == 1 );
+ VERIFY( s1.size() == 3 );
+ VERIFY( ++it7 == it9 );
+
+ iterator it10 = it9;
+ ++it10;
+ iterator it11 = it10;
+
+ VERIFY( s1.erase(*it9) == 1 );
+ VERIFY( s1.size() == 2 );
+ VERIFY( ++it10 == s1.end() );
+
+ VERIFY( s1.erase(s1.begin()) != s1.end() );
+ VERIFY( s1.size() == 1 );
+ VERIFY( s1.begin() == it11 );
+
+ VERIFY( s1.erase(*s1.begin()) == 1 );
+ VERIFY( s1.size() == 0 );
+ VERIFY( s1.begin() == s1.end() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc
index ae3214f1bae..a006abfcbb4 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc
@@ -2,7 +2,7 @@
// 2005-02-17 Matt Austern <austern@apple.com>
//
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,7 +28,9 @@ using namespace std;
using namespace std::tr1;
template class unordered_set<int>;
+template class unordered_set<float, hash<float>, equal_to<float>,
+ allocator<float> >;
template class unordered_set<int, hash<int>, equal_to<int>,
- allocator<int>, true>;
-template class unordered_set<int, hash<int>, equal_to<int>,
- allocator<char>, false>;
+ allocator<char> >;
+template class __unordered_set<float, hash<float>, equal_to<float>,
+ allocator<float>, true>;
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc
new file mode 100644
index 00000000000..6594b286adc
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a C-style null-terminated-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re;
+ re.assign(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc
new file mode 100644
index 00000000000..d8db3933b18
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assign operator from a C-style null-terminated-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re;
+ re = cs;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc
new file mode 100644
index 00000000000..fd48a46623a
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a Pascal-style counted-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ const char cs[] = "aab";
+ test_type re;
+ re.assign(cs, sizeof(cs)-1, std::tr1::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc
new file mode 100644
index 00000000000..e96e169463c
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests range assign of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ char s[] = "a+b|c";
+ test_type re;
+ re.assign(s, s + sizeof(s));
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc
new file mode 100644
index 00000000000..57e9a6b1dfd
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc
@@ -0,0 +1,44 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string assignment of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re;
+ re.assign(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc
new file mode 100644
index 00000000000..a653fbc6f53
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc
@@ -0,0 +1,44 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assignment operator from a C++ string;
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re;
+ re = s;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc
new file mode 100644
index 00000000000..755434044fe
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a C-style null-terminated-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re;
+ re.assign(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc
new file mode 100644
index 00000000000..f61dbcf22d7
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assign operator from a C-style null-terminated-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re;
+ re = cs;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc
new file mode 100644
index 00000000000..bf3de48e94a
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests assign operation from a Pascal-style counted-string.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ const wchar_t cs[] = L"aab";
+ test_type re;
+ re.assign(cs, sizeof(cs)-1, std::tr1::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc
new file mode 100644
index 00000000000..ca48cadf880
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests range assign of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ wchar_t s[] = L"a+b|c";
+ test_type re;
+ re.assign(s, s + sizeof(s));
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc
new file mode 100644
index 00000000000..a5303e267eb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc
@@ -0,0 +1,44 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string assignment of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re;
+ re.assign(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc
new file mode 100644
index 00000000000..78ac26d8dfe
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc
@@ -0,0 +1,44 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.3] class template basic_regex assign()
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests basic_regex assignment operator from a C++ string;
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re;
+ re = s;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc
new file mode 100644
index 00000000000..a349acd8d20
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C-style null-terminated-string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc
new file mode 100644
index 00000000000..b499a282b7e
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc
@@ -0,0 +1,47 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ // default constructor
+ test_type re;
+
+ // Check for required typedefs
+ typedef test_type::value_type value_type;
+ typedef test_type::flag_type flag_type;
+ typedef test_type::locale_type locale_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc
new file mode 100644
index 00000000000..827c8bf6af7
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests Pascal-style counted-string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ const char* cs = "aab";
+ test_type re(cs, 3, std::tr1::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc
new file mode 100644
index 00000000000..53f1f4fc1c8
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests range constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ char s[] = "a+b|c";
+ test_type re(s, s + sizeof(s));
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc
new file mode 100644
index 00000000000..0924b1c2015
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<char> test_type;
+
+ std::string s("a*b");
+ test_type re(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc
new file mode 100644
index 00000000000..5e8e70347c3
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C-style null-terminated-string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re(cs);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc
new file mode 100644
index 00000000000..efdd81a6e14
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc
@@ -0,0 +1,47 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ // default constructor
+ test_type re;
+
+ // Check for required typedefs
+ typedef test_type::value_type value_type;
+ typedef test_type::flag_type flag_type;
+ typedef test_type::locale_type locale_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc
new file mode 100644
index 00000000000..f25dee605d8
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests Pascal-style counted-string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ const wchar_t* cs = L"aab";
+ test_type re(cs, 3, std::tr1::regex_constants::basic);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc
new file mode 100644
index 00000000000..eb9139a9038
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc
@@ -0,0 +1,42 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests range constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ wchar_t s[] = L"a+b|c";
+ test_type re(s, s + sizeof(s));
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc
new file mode 100644
index 00000000000..6379fecefc4
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc
@@ -0,0 +1,43 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.8.2] class template basic_regex constructor
+
+#include <string>
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests C++ string constructor of the basic_regex class.
+void test01()
+{
+ typedef std::tr1::basic_regex<wchar_t> test_type;
+
+ std::wstring s(L"a*b");
+ test_type re(s);
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc
new file mode 100644
index 00000000000..124e7acde54
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc
@@ -0,0 +1,58 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.10.1] class template match_results constructor
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the match_result class.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ typedef std::tr1::match_results<char*> test_type;
+
+ // default constructor
+ test_type m;
+
+ // Check for required typedefs
+ typedef test_type::value_type value_type;
+ typedef test_type::const_reference const_reference;
+ typedef test_type::reference reference;
+ typedef test_type::const_iterator const_iterator;
+ typedef test_type::iterator iterator;
+ typedef test_type::difference_type difference_type;
+ typedef test_type::size_type size_type;
+ typedef test_type::allocator_type allocator_type;
+ typedef test_type::char_type char_type;
+ typedef test_type::string_type string_type;
+
+ VERIFY( m.size() == 0 );
+ VERIFY( m.str() == std::basic_string<char_type>() );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc
new file mode 100644
index 00000000000..0b90859f8dc
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ std::tr1::regex re("(a|b)*abb", std::tr1::regex::awk);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc
new file mode 100644
index 00000000000..7451f3bd351
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ std::tr1::regex re("(a|b)*abb", std::tr1::regex::basic);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc
new file mode 100644
index 00000000000..8713e64240f
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ std::tr1::regex re("(a|b)*abb");
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc
new file mode 100644
index 00000000000..dd308cfd4a1
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ std::tr1::regex re("(a|b)*abb", std::tr1::regex::egrep);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_extended.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_extended.cc
new file mode 100644
index 00000000000..68e7709722d
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_extended.cc
@@ -0,0 +1,43 @@
+// { dg-do run }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::tr1::regex re("(wee|week)(knights|night)", std::tr1::regex::extended);
+
+ VERIFY( re.flags() == std::tr1::regex::extended );
+ VERIFY( re.mark_count() == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc
new file mode 100644
index 00000000000..d49e31ce8b4
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc
@@ -0,0 +1,39 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ using std::tr1::regex;
+
+ regex re("(a|b)*abb", regex::grep);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc
new file mode 100644
index 00000000000..d2568119633
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc
@@ -0,0 +1,37 @@
+// { dg-do compile }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 7.8.2 basic_regex constructors
+
+#include <tr1/regex>
+
+void
+test01()
+{
+ std::tr1::regex re;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc
new file mode 100644
index 00000000000..1efb8676517
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc
@@ -0,0 +1,49 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.7] class template regex_traits
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ typedef std::tr1::regex_traits<char> test_type;
+
+ // required default constructor
+ test_type t;
+
+ // Check for required typedefs
+ typedef test_type::char_type char_type;
+ typedef test_type::string_type string_type;
+ typedef test_type::locale_type locale_type;
+ typedef test_type::char_class_type char_class_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc
new file mode 100644
index 00000000000..14d99dd4588
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc
@@ -0,0 +1,42 @@
+// { dg-do run }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.7] class template regex_traits (5) translate_nocase
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::tr1::regex_traits<char> t;
+ VERIFY( t.translate_nocase('A') == 'a' );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc
new file mode 100644
index 00000000000..4ba65c51185
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc
@@ -0,0 +1,49 @@
+// { dg-do link }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.7] class template regex_traits
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ typedef std::tr1::regex_traits<wchar_t> test_type;
+
+ // required default constructor
+ test_type t;
+
+ // Check for required typedefs
+ typedef test_type::char_type char_type;
+ typedef test_type::string_type string_type;
+ typedef test_type::locale_type locale_type;
+ typedef test_type::char_class_type char_class_type;
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc
new file mode 100644
index 00000000000..cb6d9b8c5da
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc
@@ -0,0 +1,42 @@
+// { dg-do run }
+
+// 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com>
+//
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// tr1 [7.7] class template regex_traits (5) translate_nocase
+
+#include <tr1/regex>
+#include <testsuite_hooks.h>
+
+// Tests default constructor of the regex_traits class. There is only the
+// default constructor.
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ std::tr1::regex_traits<wchar_t> t;
+ VERIFY( t.translate_nocase(L'A') == L'a' );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+};
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc
index 24fcfa4f633..24fcfa4f633 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc
index 2d557c9212f..2d557c9212f 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc
index dff4b9d2f4c..dff4b9d2f4c 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc
index d7159739803..d7159739803 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc
diff --git a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types.cc b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc
index aa1e21dd92c..aa1e21dd92c 100644
--- a/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types.cc
+++ b/libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc
diff --git a/libstdc++-v3/testsuite/tr1/headers.cc b/libstdc++-v3/testsuite/tr1/headers.cc
index ec263405ca5..633b8fb6e01 100644
--- a/libstdc++-v3/testsuite/tr1/headers.cc
+++ b/libstdc++-v3/testsuite/tr1/headers.cc
@@ -2,7 +2,7 @@
// 2006-02-02 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2006 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
// USA.
#include <tr1/array>
+#include <tr1/ccomplex>
#include <tr1/cctype>
#include <tr1/cfenv>
#include <tr1/cfloat>
@@ -28,6 +29,7 @@
#include <tr1/climits>
#include <tr1/cmath>
#include <tr1/complex>
+#include <tr1/complex.h>
#include <tr1/cstdarg>
#include <tr1/cstdbool>
#include <tr1/cstdint>
@@ -46,6 +48,7 @@
#include <tr1/math.h>
#include <tr1/memory>
#include <tr1/random>
+#include <tr1/regex>
#include <tr1/stdarg.h>
#include <tr1/stdbool.h>
#include <tr1/stdint.h>
diff --git a/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp b/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp
index d6eb835c483..be0e8f4227c 100644
--- a/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_map.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -68,7 +68,7 @@ namespace pb_ds
{
#ifdef PB_DS_USE_TR1
#define PB_DS_BASE_C_DEC \
- std::tr1::unordered_map<Key, Data, Hash_Fn, Eq_Fn, \
+ std::tr1::__unordered_map<Key, Data, Hash_Fn, Eq_Fn, \
typename Allocator::template rebind<std::pair<const Key, Data> >::other, Cache_Hash>
#else
#define PB_DS_BASE_C_DEC \
diff --git a/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp b/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp
index 7f89392629f..c78553b73fe 100644
--- a/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp
+++ b/libstdc++-v3/testsuite/util/native_type/assoc/native_hash_set.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -68,12 +68,12 @@ namespace pb_ds
{
#ifdef PB_DS_USE_TR1
#define PB_DS_BASE_C_DEC \
- std::tr1::unordered_set<Key, Hash_Fn, Eq_Fn, \
- typename Allocator::template rebind<Key>::other>
+ std::tr1::__unordered_set<Key, Hash_Fn, Eq_Fn, \
+ typename Allocator::template rebind<Key>::other, Cache_Hash>
#else
#define PB_DS_BASE_C_DEC \
__gnu_cxx::hash_set<Key, Hash_Fn, Eq_Fn, \
- typename Allocator::template rebind<Key>::other>
+ typename Allocator::template rebind<Key>::other>
#endif
template<typename Key,
diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
index 5f64ebb7deb..019a32d2a23 100644
--- a/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
+++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -84,7 +84,7 @@ namespace pb_ds
}
if (not_found_count != 0)
- abort();
+ std::abort();
}
private:
@@ -116,7 +116,7 @@ namespace pb_ds
}
if (not_found_count != 0)
- abort();
+ std::abort();
}
private:
diff --git a/libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp b/libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp
index b1e88f719e0..fb9b2c043db 100644
--- a/libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp
+++ b/libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp
@@ -52,6 +52,7 @@
#include <common_type/assoc/string_form.hpp>
#include <ext/pb_ds/detail/type_utils.hpp>
#include <iterator>
+#include <cstdlib>
namespace pb_ds
{
@@ -84,7 +85,7 @@ namespace pb_ds
const size_t max_size = m_r_container.size();
while (it != e)
if (m_r_container.order_of_key(*(it++)) > max_size)
- abort();
+ std::abort();
}
}
@@ -113,7 +114,7 @@ namespace pb_ds
{
const_iterator f_it = m_r_container.find(*(it++));
if (static_cast<size_t>(std::distance(b, f_it)) > max_size)
- abort();
+ std::abort();
}
}
}
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc
index 0949e309657..ffd88c41d76 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -33,6 +33,7 @@
#include <sstream>
#include <fstream>
#include <iostream>
+#include <cstdlib>
using namespace std;
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi_check.cc b/libstdc++-v3/testsuite/util/testsuite_abi_check.cc
index 12e882a436f..86982b7f9cd 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi_check.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi_check.cc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2004 Free Software Foundation, Inc.
+// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -33,6 +33,7 @@
#include "testsuite_abi.h"
#include <iostream>
+#include <cstdlib>
#include <unistd.h> // for access(2)
int
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.cc b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
index b649e9ba7d7..6ea82f3d908 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.cc
@@ -2,7 +2,8 @@
// Utility subroutines for the C++ library testsuite.
//
-// Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -36,10 +37,13 @@
#include <sys/time.h>
#include <sys/resource.h>
#endif
+
#include <list>
#include <string>
#include <stdexcept>
+#include <cstddef>
#include <clocale>
+#include <cstdlib>
#include <locale>
#include <cxxabi.h>
@@ -314,11 +318,11 @@ namespace __gnu_test
}
// For use in 22_locale/time_get and time_put.
- tm
+ std::tm
test_tm(int sec, int min, int hour, int mday, int mon,
int year, int wday, int yday, int isdst)
{
- static tm tmp;
+ static std::tm tmp;
tmp.tm_sec = sec;
tmp.tm_min = min;
tmp.tm_hour = hour;
diff --git a/libstdc++-v3/testsuite/util/testsuite_hooks.h b/libstdc++-v3/testsuite/util/testsuite_hooks.h
index b6c675b12e7..8e22ec0c2b1 100644
--- a/libstdc++-v3/testsuite/util/testsuite_hooks.h
+++ b/libstdc++-v3/testsuite/util/testsuite_hooks.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// Utility subroutines for the C++ library testsuite.
//
-// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -58,8 +58,8 @@
#include <bits/c++config.h>
#include <bits/functexcept.h>
-#include <cstddef>
-#include <locale>
+#include <ctime>
+
#ifdef _GLIBCXX_HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -387,8 +387,8 @@ namespace __gnu_test
};
// For use in 22_locale/time_get and time_put.
- tm test_tm(int sec, int min, int hour, int mday, int mon,
- int year, int wday, int yday, int isdst);
+ std::tm test_tm(int sec, int min, int hour, int mday, int mon,
+ int year, int wday, int yday, int isdst);
} // namespace __gnu_test
diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog
index 6bf53507f7d..411ee8aa9f0 100644
--- a/maintainer-scripts/ChangeLog
+++ b/maintainer-scripts/ChangeLog
@@ -1,3 +1,7 @@
+2007-02-25 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * update_version_svn (IGNORE_BRANCHES): Add 4_0-branch.
+
2007-01-29 Gerald Pfeifer <gerald@pfeifer.com>
* crontab: No longer build snapshots for 4.0.x.
diff --git a/maintainer-scripts/update_version_svn b/maintainer-scripts/update_version_svn
index 69891558f50..ba47687cd4f 100755
--- a/maintainer-scripts/update_version_svn
+++ b/maintainer-scripts/update_version_svn
@@ -6,7 +6,7 @@
# in $ADD_BRANCHES.
SVNROOT=${SVNROOT:-"file:///svn/gcc"}
-IGNORE_BRANCHES='gcc-(2_95|3_0|3_1|3_2|3_3|3_4)-branch'
+IGNORE_BRANCHES='gcc-(2_95|3_0|3_1|3_2|3_3|3_4|4_0)-branch'
ADD_BRANCHES='HEAD autovect-branch'
# Run this from /tmp.
diff --git a/zlib/ChangeLog.gcj b/zlib/ChangeLog.gcj
index 44ecb402359..79d3d346643 100644
--- a/zlib/ChangeLog.gcj
+++ b/zlib/ChangeLog.gcj
@@ -1,3 +1,8 @@
+2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
+
+ * Makefile.am: Add dummy install-pdf target.
+ * Makefile.in: Regenerate
+
2007-01-16 Jack Howarth <howarth@bromo.med.uc.edu>
* Makefile.am: Add ACLOCAL_AMFLAGS to use multi.m4.
diff --git a/zlib/Makefile.am b/zlib/Makefile.am
index 90df1ebe9eb..218dce1aefe 100644
--- a/zlib/Makefile.am
+++ b/zlib/Makefile.am
@@ -59,9 +59,11 @@ AM_MAKEFLAGS = \
"RANLIB=$(RANLIB)" \
"DESTDIR=$(DESTDIR)"
-# No html, or install-html support.
-.PHONY: html install-html
+# No html support.
+# No install-html or install-pdf support in automake yet
+.PHONY: html install-html install-pdf
html:
install-html:
+install-pdf:
diff --git a/zlib/Makefile.in b/zlib/Makefile.in
index 4f105e55634..2850b0d704b 100644
--- a/zlib/Makefile.in
+++ b/zlib/Makefile.in
@@ -601,11 +601,13 @@ uninstall-am: uninstall-toolexeclibLIBRARIES
uninstall-toolexeclibLIBRARIES
-# No html, or install-html support.
-.PHONY: html install-html
+# No html support.
+# No install-html or install-pdf support in automake yet
+.PHONY: html install-html install-pdf
html:
install-html:
+install-pdf:
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: